Freitag, 26. Juni 2009

PIC Microcontroller Teil 2

PIC vs AVR

Die Konkurrenz schläft nicht. Die Firma Atmel hat mit seiner AVR Microcontroller Serie eine Alternative zu den PIC Microcontrollern geschaffen, die in vielen Anwendungsbereichen besser geeignet sind. AVR Controller sind bei ihrem Design direkt auf die Bedürfnisse von C-Compilern optimiert worden. Der Befehlsatz aller AVR Controller ist bis auf wenige Ausnahmen für die ganze AVR-Famile gleich. Bei PIC-Controllern muss man für Low-End, Mid-Range und High-End Controller jeweils Anpassungen vornehmen bzw. sogar die Handhabung komplett ändern. Die AVR Entwicklungstools sind besser und billiger als die die MicroChip für den PIC zu Verfügung stellt.

Als Anfänger, der sich in den Themenbereich Microcontroller einarbeiten will, steht man hier oft vor dem Scheideweg: Soll ich PIC oder AVR nehmen? Meine Antwort ist AVR, weil man hier mit weniger Aufwand zu ersten Erfolgserlebnissen kommt. Wenn man hingegen an einen bestimmten Controller-Hersteller gebunden ist, geht den Weg den man gehen muss.

PIC Entwicklungs-Werkzeuge

Ohne Entwicklungswerkzeuge kommt man auch bei so einem einfach gestrickten Microcontroller wie den PIC nur wenig weiter. Was braucht man also an Werkzeug um mit einem PIC Controller eine Aufgabe zu erfüllen, z.B. zwei LEDs im Sekundentakt blinken zu lassen?
  • Man sollte wissen, wie man einen PIC programmiert. D.h. dass man sich die Programmier-Sprache aneignet in der man auf dem PIC ein Programm schreibt. Die erste Wahl sollte hier Assembler/Maschinensprache sein. An dieser Stelle sollte man sich die Assembler-Literatur zum PIC von Mircochip laden und lesen. Einfaches Leser reicht für den Anfang, man braucht die Befehle nicht auswendig zu können, man sollte sich nur einen groben Überblick verschaffen, was mit dem PIC möglich ist.

  • Um ein Maschinenprogramm für einen PIC schreiben zu können, sollte man sich nun die MPLAB-IDE von Microchip herunterladen und installieren. Diese ist kostenlos und enthält eine Entwicklungsumgebung mit Editor, Assembler und Simulator. Man sollte sich nun mit der Handhabung der IDE vertraut machen und das PIC-Programm schreiben und mit dem Simulator testen.

  • Wenn man sich noch nicht für einen bestimmten PIC-Controller entschieden hat, sollte man dies nun tun. Ich empfehle einen Mid-Range Controller mit Flash-Memory der eine interne Takterzeugung hat. Hierdurch entfällt ein weiteres Bauteil der Testschaltung, der Quarz und somit auch eine weitere mögliche Fehlerquelle im Schaltungsaufbau. An diesem Punkt stellt ich nun auch die Frage: Wie bekomme ich mein PIC-Programm in den PIC-Controller hinein. Zu dieser Frage gibt es mit Sicherheit viele Antworten und Vorschläge. Ich rate von dem Selbstbau eine PIC-Programmiergerätes ab, selbst wenn die Material-Kosten nur gering erscheinen. MicroChip bietet den ICP-2 Programmer/Debugger mit USB-Schnittstelle für etwa 200 Euro an. Mit diesem Gerät kann man fast alle PIC-Controller flashen und sogar Debuggen. Die Investition von 200 Euro mag den meisten als zu hoher Preis für Hobby erscheinen. Wenn man sich etwas im Internet umschaut (eBay) findet man schnell nachbauten dieses Gerätes für weniger als 60 Euro. Dieses Geld sollte man investieren, es lohnt sich.

  • Nachdem man sich ein Programmiergerät beschafft hat und nun in der Lage ist, den PIC Controller zu programmieren (und auch zu debuggen), kann man nun sein erstes Programm in den PIC laden und ausprobieren. Die Testschaltung sollte man an Anfang so einfach wie möglich aufbauen. Evtl. lohnt sich auch der Kauf eines PIC-Entwicklungskits, dann hat man zumindest die Gewissheit, dass man keinen Fehler beim Aufbau der Schaltung gemacht hat.
Hat man diese Hürden erst einmal genommen, sind die nächsten Schritt weniger schwer. Durch das Schreiben von weiteren Programmen lernt man die PIC Controller immer besser kennen, und die Anwendungen und Aufgaben werden anspruchsvoller und interessanter.
Im nächsten Teil beschreibe ich wie und wo man sich die Dokumentation zum PIC Controller besorgt und wie die Maschinenbefehle der Mid-Range PIC-Controller aufgebaut sind.

PIC Microcontroller Teil 1

Da ich nach dem Lesen der PIC-Microcontroller Literatur jetzt etwas schlauer bin möchte ich hier nun meine Erkenntnisse zusammenfassen. Dieser Text soll alle denen, die sich ebenfalls mit PIC-Controllern beschäftigen einen schnellen überblick liefern, was Sie mit diesen Controllern anfangen können.

Ein Mirocontroller enthält einen kleinen Computer in einem IC. Sein Einsatzgebiet ist in elektronischen Schaltungen, wo er eine Aufgabe erledigen soll, die mit herkömmlichen ICs nur sehr Aufwendig und sehr unflexiebel zu realisieren wäre. Ein Beispiel wäre ein Sensorgesteuerte Ampelsteuerung, eine Waschmaschinensteuerung oder ein Schnittstellen-Konverter. Diese Aufgaben kann ein Microcontroller in einem IC erledigen und es besteht die Möglichkeit evtl. Ablaufänderungen nachträglich durch eine Änderung der Software vorzunehmen.

Damit ein Microcontroller funktionieren kann, benötigte er:
  • einen Programmspeicher (ROM) der das Programm enthält,
  • einen Datenspeicher (RAM) in dem er Variablen ablegen kann,
  • eine Verarbeitungseinheit (CPU) die ein Programm ausführen kann und Daten verarbeiten kann,
  • einen Taktgenerator (Timer/Clock) der die CPU antreibt und mit dem man Zählen bzw. die Zeit messen kann,
  • Schnittstellen (I/O) über die man Signale einlesen und ausgeben kann.
Abhängig von gewählten Controller-Typ enthält ein Microcontroller meist noch verschiedenen serielle Schnittstellen, Analog/Digitalwandler, einen Watchdog-Timer und eine Reset-Logik.

PIC Micro-Controller
Diese Controller arbeiten nach dem RISC Prinzip, das heist, dass sie über nur wenige einfache Maschinenbefehle verfügen, diese Befehle aber in einem Maschinen-Zyklus ausführen können. Das Gegenteil wäre das CISC Prinzip, wo wesentlich mehr und vor allem komplexere Maschinen-Befehle gibt, die mehr Maschinen-Zyklen benötigen um ihre Aufgabe zu erfüllen.

Es mag Anwendungen geben, wo es von großem Vorteil sein kann, dass ein Maschinenbefehl nur ein Maschinenzyklus benötigt. Entscheidend für die Wahl des RISC-Prinzips beim PIC war wohl aber, dass die Komplexität des Controllers, und damit die Anzahl der benötigten Transistoren, deutlich reduziert werden konnte, was sich auf den Preis des ICs auswirkt. Kleiner Chip bedeutet mehr Prozessoren pro Wafer und somit geringere Herstellungskosten.

Um eine Verarbeitung von einem Maschinenbefehl pro Maschinenzyklus zu erreichen wurde außerdem beim Design des Controllers auf die Harward-Architektur zurückgegriffen. Im Gegensatz zur Von-Neumann-Architektur sind hierbei der Programm-Speicher und der Datenspeicher physikalisch voneinander getrennt. Durch die Trennung ist ein gleichzeitiger
Zugriff auf beide Speicher möglich, der Aufbau der CPU ist einfacher, benötigt weniger Transistoren und ist schneller.

Dieses Chip-Design hat jedoch auch Nachteile. Dadurch dass ein RISC-Befehlssatz weniger Funktionalität enthält wie ein CISC-Befehlssatz werden die RISC-Programme länger als CISC-Programm um die gleiche Funktion zu erfüllen. Die Harward-Architektur erlaubt es nicht Daten im Programmspeicher (Konstanten) anzusprechen. Darum müssen Konstanten in den Datenspeicher kopiert werden um auf diese zuzugreifen. Beide Nachteile fallen aber beim PIC-Controller meist wenig ins Gewicht, weil die Anwendungsprogramme meist einfach aufgebaut sind und die Größe des ROMs in den wenigsten Fällen ausgeschöpft wird.

Der innere Aufbau des ROMs eines PIC-Controllers ist weder 8- noch 16-Bit breit. Eine Zelle eines Low-End PIC-Controllers ist 12 Bit-Breit, die eines Mid-Range PIC-Controllers 14 Bit-Breit. Diese merkwürdige Anzahl hat drei Gründe:
  • Da in der Harward-Architektur keine Daten im ROM abgelegt werden können, ist es nicht erforderlich den Speicher zu vielfachen von 8 Bit zu organisieren.
  • Jede Zelle enthält genau einen Maschinen-Befehl für den PIC-Controller. Da der Low-End Controller weniger Befehle und einen sehr kleineren Adressierbaren Speicher hat, kommt man mit 12 Bit pro Befehl gut aus. Die Mid-Range Controller haben 2 Bit mehr da Sie mehr Befehle und mehr Speicher haben.
  • Der Programmspeicher ist auf dem Chip integriert und nicht extern erweiterbar. Es werden nur soviel Bits genutzt wie sinnvoll ist, was wieder Transistoren auf dem Chip spart.
Leider habe die Ingenieure es beim Transistor-Sparen etwas übertrieben. Um bei Mid-Range PICs auf alle I/O-Register, den RAM und den Programmspeicher zugreifen zu können, mussten die Speicher in Bank (RAM/Register) und Pages (ROM) zulegt werden. D.h. die Maschinenbefehle können nicht auf den gesamten Speicher zugreifen, weil man an ein paar Bits gespart hat. Dies erschwert und verkompliziert die Programmierung.

Book Review: Programming and customizing the PIC Microcontroller

Ich beschäftige mich momentan sowohl beruflich als auch privat mit den Microchip PIC Microcontrollern und habe mir das Buch "Programming and Customizing the PIC Microcontroller 3rd Edition" von Myke Predko als Lehrmittel herangezogen. Auf über 1000 Seiten wird dem Leser ein guter Überblick über alle Thema gegeben, die er beim Umgang mit diesem Microcontroller benötigt. Das Buch geht auf die Low-End- , Mid-Range- und PIC18- Familie dieser Controller ein, wobei der Haupt-Fokus auf den Mid-Range-Controllern liegt. Nachdem ich nun das Buch durchgearbeitet habe, kann ich zusammenfassend feststellen:

Positiv:
  • Es wird der innere Aufbau und die Funktion der wichtigsten PIC Controller angesprochen und erläutert.
  • Anwendungsbeispiele aus dem praktischen Einsatz von PIC-Controllern werden beschrieben und detailliert erläutert.
  • Die wichtigsten Entwicklungswerkzeuge und Programmiersprachen angesprochen.
  • Das Buch enthält Tabelle und Checklisten die für die tägliche Arbeit von nutzen sind.

Negativ:
  • Der Autor bringt keinen "roten Faden" in dieses Werk, an dem sich ein Anfänger orientieren kann.
  • Eine Flut von Informationen wird über den Leser ausgeschüttet, der (noch) nicht in der Lage ist diese zu filtern. Der Leser droht in der Flut der Information den Überblick zu verlieren.
  • In verschiedenen Kapiteln driftet der Autor in den Erzählstil ab und spricht Themen an, die mit dem unmittelbaren Thema nichts zu tun haben.

Fazit:
Es gibt mit Sicherheit bessere Lehrbücher über PIC-Controller als dieses. Dieses eignet sich mehr als Lesebuch oder Nachschlagewerk. Für ein Lehrbuch fehlt der "Rote Faden" bzw. eine Lehrplan oder Checkliste die den Lehrenden exakt darlegt was er unbedingt wissen muss, und was er im Anwendungstall besser nachschlagen sollte.

Donnerstag, 4. Juni 2009

Forth auf dem C64

Das Retro-Computing Magazin für Commodore Maschinen "Commodore Free" bringt in der aktuellen März Ausgabe ein Interview mit der Silicon Valley FIG (SVFIG) und ein Forth Einsteiger Tutorial.
Johan Kotlinski und Mats Andren haben "Durex Forth", ein neues 6502 Forth für den Commodore C64 vorgestellt. Durex Forth ist nach eigenen Angaben ein "Half-minimalist C64 Forth inspired by colorForth, JONESFORTH and Blazin' Forth. Direct threaded for simplicity. Project includes a vi clone written in Forth." Durex Forth ist Open Source (MIT Lizenz) und wird auf Google Code gehostet.