Was
ist denn überhaupt ein PIC
Warum sollte man
PIC-Processoren benutzen?
Was sind besondere Stärken der
PIC-Prozessoren?
Was sind Schwächen der
PIC-Prozessoren?
Welcher PIC-Prozessor ist der
richtige?
Was braucht ein PIC zum
arbeiten an Peripherie?
Wo gibt es PIC-Prozessoren und
Keramikresonatoren?
Sind PIC-Prozessoren
empfindliche Bauelemente?
Wie schreibt man Programme für PICs?
Was leistet die kostenlose
Entwicklungsumgebung MPLAB?
Gibt es Programmiersprachen
für PICs?
Wie kommen denn nun die
fertigen Programme in den PIC?
Welche Probleme kann man
mit einem PIC lösen?
weiter: Ja. Ich will mein Glück mit PICs versuchen!
1 - Eine Software-Entwicklungsumgebung, zum Erstellen der
Programme (mit Assembler oder C-Compiler).
2 - Ein Programmiergerät, um die geschriebenen Programme in den
Prozessor zu übertragen.
3 - Die Microcontroller selbst.
4 - Unterstützung im WWW.
Beim PIC-Hersteller Microchip gibt es die Entwicklungsumgebung (MPLAB) inclusive Assembler kostenlos zum Download. (Für die
leistungsstärkeren PIC-Familien gibt es dort sogar C-Compiler. )
Bauanleitungen für preiswerte Programmiergeräte (5,- ..20,- €)
sind inklusive Software im WWW kostenlos verfügbar. Z.B. auf meiner Homepage .
Die für Hobbybastler geeignetsten
PIC-Prozessoren kosten pro Stück 2,-€ bis 10,-€.
Wer mal in eine WWW-Suchmaschine PIC eintippt, wird schnell
fündig. PICs sind sehr verbreitet, was sie nicht zuletzt ihrem
früheren Einsatz auf Sat-Decoder-Piraten-Karten zu verdanken
haben.
Man investiert also weit unter 50,-€ für den Einstieg, und auch
die Folgekosten halten sich in Grenzen.
Aus meiner Sicht ist die Interruptverwaltung der einfachen PIC-Familien (PIC10F/PIC12F/PIC16F) eine Schwäche. Mit Z-80-Prozessoren aufgewachsen, bin ich es gewohnt, jeder Interruptquelle einen eigenen Interruptvektor zuzuordnen. Die PIC-Prozessoren unterstützen zwar viele Interruptquellen, haben aber nur einen Interruptvector. Das ist umständlich, wenn man in einem Programm mit mehreren Interruptquellen arbeitet. Die einzige Interruptbehandlungsroutine muss erst in Statusregistern nachschauen, welche Quelle den Interrupt ausgelöst hat, um dann die richtigen Programmschritte auszuführen.
Umfangreiche Berechnungen sind auch nicht gerade eine Lieblingsdisziplin der kleinen PICs. Sie rechnen nur mit 8-Bit-Zahlen, und beherrschen nur Addition und Subtraktion. Es lassen sich zwar mit Softwareroutinen auch große Fließkommaberechnungen anstellen, aber das ist umständlich, langsam und macht keinen Spaß. Außerdem verbraucht z.B. eine 64-Bit Rechenroutine viele der knappen Register des PIC.
Um nicht ungerecht zu sein: es gibt PIC-Prozessoren der PIC18Fxxx-Serie, die nicht nur schneller
getaktet werden können, sondern vor allem auch die Multiplikation
in Hardware beherrschen. Auch die Interruptverwaltung ist bei den
PIC18F... besser.
Auch die "großen" PIC24Fxxx, PIC24Hxxx, dsPIC30Fxxx und dsPIC33Fxxx spielen in einer ganz anderen Liga, sie sind aber noch nicht das typische Spielzeug der Hobbybastler. Diese Controller verarbeiten Daten in 16-Bit-Breite und die dsPICs haben eine zusätzliche Recheneinheit für digitale Signalverarbeitung.
Flash !! Ich beschäftige mich ausschließlich mit flashbaren PICs, also mit PICs der Serien PIC16F.../PIC12F.../PIC18F.../PIC10F.../PIC24.../dsPIC30F.../dsPIC33F... Gehäuse Familien
|
Gehäuse \ Familie | PIC16F... | PIC18F... |
8 Pins | PIC12F675 | - |
18 Pins | PIC16F628A
PIC16F819 PIC16F84 (veraltet) |
PIC18F1320 |
28 Pins | PIC16F886 PIC16F876A |
PIC18F252
PIC18F2550 (USB) |
40 Pins | PIC16F887 PIC16F877A |
PIC18F4550 |
Eine umfassendere Auflistung interessanter Typen befindet sich hier .
Im Web und in der Literatur stößt man immer wieder auf den PIC16F84. Das war der erste echte Flash-PIC, und er wurde deshalb mit Begeisterung aufgenommen. Heute ist er veraltet und wird bei den Händlern zu Apothekenpreisen angeboten. Wer mit PICs heute anfängt, sollte einen preiswerteren, leistungsstärkeren Nachfolgetyp wie den PIC16F628A verwenden. Viele PIC16F84-Anwendungen lassen sich mit geringem Aufwand an modernere PICs anpassen.
Nun noch mal einige PICs im Detail:
PIC 16F84 (A)
Der 16F84 ist mit 18-pins (DIL-Gehäuse) recht klein. Er verfügt
über
Der 16F84 eignet sich für alle einfachen Anwendungen, bei denen
keine analogen Werte gemessen werden müssen. Er kann Impulse
ausmessen und erzeugen, kleine Tastaturen
abfragen, LCD-Displays
ansteuern, und auch wenn er keine Hardware für die serielle
Kommunikation besitzt, so kann man doch eine serielle
Schnittstelle durch ein wenig Software realisieren. (siehe hier )
Der PIC18F84 war der erste PIC mit richtigem
Flash-Programmspeicher, womit er der ideale Bastler-PIC wurde.
Dementsprechend wuchs seine Polularität. Im Web finden sich viele
Anwendungen für den 16F84, der aber nun im PIC16F628
und im PIC16F818/819 seine Meister
und würdige Nachfolger gefunden hat. Die neueren Typen sind nicht
nur leistungsstärker, sondern oft auch billiger. Wer eine
Schaltung mit dem 16F84(A) einfach nachbauen will, ohne sich mit
den Internas von Hard- und Software zu beschäftigen, der kann
diesen Typ verwenden. Wer sich aber mit PICs intensiver
beschäftigen möchte, sollte um diesen Großvater lieber einen Bogen
machen.
PIC 16F87x (A) / PIC16F88x
Seit 2000 gibt es „größere“ flashbare PICs, die 16F87x-Familie.
Mein Standardtyp ist der 16F876. Er verfügt über:
Der 16F876 ist mit 28 Pins schon etwas größer als der 16F84. Sein
großer Vorteil sind die analogen
Eingänge zum Messen von Spannungen. Ansonsten hat er von
allem etwas mehr als sein kleiner Bruder: mehr Ein/Ausgänge, mehr
Timer mehr Speicher und mehr Geschwindigkeit.
Die integrierte serielle Schnittstelle vereinfacht die
Realisierung einer RS-232-Verbindung
z.B. zu einem PC (verlangt aber einen zusätzlichen invertierenden
Treiberbaustein).
Der größere PIC16F877 hat einen zusätzlichen 8-Bit-Port, und ist
mit seinen 40 Pins eigentlich schon etwas groß.
Als leicht verbesserte Versionen der PIC16F87x brachte Microchip
die PIC16F87xA auf den Markt. Für den Anwender macht es kaum einen
unterschied, ob er den 16F87x oder den 16F87xA verwendet.
Als nächste Version erschien die 16F88x-Familie, die als Ablösung
der 16F87x(A) zu betrachten ist. Sie sind recht kompatiebel zu den
Vorgängern, weisen aber eine Reihe kleiner Verbesserungen auf. Als
Trumpf bringen sie einen nanoWatt-Oszillatorschaltung mit. Die
ermögliche bei vielen Anwendungen den Verzicht auf externe
Taktquellen und hilft Strom zu sparen.
Eine etwas abgespeckte Version der PIC16F87x-Familie ist die PIC16F7x-Familie. Ihr fehlt ein EEPROM , mit dem man Daten
dauerhaft speichern kann. Außerdem haben sie sich als etwas
problematisch beim Brennen des
Flash-Speichers erwiesen. Ich empfehle lieber die richtigen
PIC16F87x oder PIC16F88x zu verwenden.
PIC 16F62x
Seit 2001 gibt es die 16F62x-Familie (16F627 und 16F628). Diese
PICs können die 16F84 verdrängen, denn sie haben die gleiche Größe
(18-Pin-Gehäuse) bei einer deutlich verbesserten Ausstattung:
PIC 12F6xx
Seit 2002 gibt es die 12F6xx-Familie (12F629 und 12F675). Diese
PICs sind spottbillig (2 ... 4 €) und haben nur 8 Pins. Sie eignen
sich gut für kleine Steueraufgaben, der 12F675 besitzt sogar einen
ADC:
Das ist ein Vertreter der leistungsfähigeren 16-Bit-Kern-PICs.
Diese kennen zusätzliche Befehle und eignen sich generell für eine
Programmierung in der Sprache C, was den Entwurf von umfangreicher
Software doch etwas einfacher macht.
Für Leute mit kleinen Fingern
oder mit wenig Platz auf der Platine gibt es die PICs
natürlich auch als SMD. Auf nebenstehendem Bild sind von
oben nach unten zu sehen:
Die SMD-Typen haben allerdings zwei Nachteile
|
Eigentlich nur eine Betriebsspannung von ca.
5 V und einen Takt. Viele
moderne PICs können den Takt auch intern erzeugen.
Die Betriebsspannung ist je nach Typ in Toleranzen variierbar. Der Bereich von 4 V bis 5,5 V ist unkritisch. Bei einigen Typen kann man die Spannung bis auf 2 V absenken, ohne den sicheren Arbeitsbereich zu verlassen. Die Stromaufnahme des Prozessorkerns ist vom Takt abhängig, überschreitet aber beim maximalen Takt nie 15 mA. Dazu kommt noch der Strom, den der PIC aufwenden muss, um über digitale Ausgänge andere Bauteile anzusteuern. Wenn man z.B. mit dem PIC 8-Leuchtdioden ansteuert, werden dafür natürlich auch einige 10 mA zusätzlich benötigt. Die Ausgangspins eines PIC können übrigens bis zu 20 mA liefern, weswegen zusätzliche Treiber oft nicht nötig sind. Nebenstehendes Bild zeigt eine typische Grundbeschaltung für einen PIC16F84. Die mit 'Port A' und 'Port B' beschrifteten Boxen sind lediglich Steckverbinder zu den zu steuernden oder zu überwachenden Schaltungen. Der 5V-Steckverbinder liefert die Betriebsspannung, und der blaue 'CST...' ist ein Keramischer Schwinger, der den Takt für den PIC bereitstellt. Eigentlich ganz einfach. |
Als Taktquellen haben sich keramische Schwinger mit
integrierten Kondensatoren (Keramikresonator) bestens
bewährt. Die kosten nur 1,- €, sind kleiner als ein Quarz
und werden ohne zusätzliche Bauelemente einfach an den PIC
angeschlossen. Ihr Frequenzfehler liegt bei 0,5 %.
Wer es penibel genau mag, der nimmt einen Quarzoszillator oder einen Quarz. Der Quarz benötigt aber noch zusätzlich 2 Kondensatoren und evtl. einen Widerstand. Keramikresonatoren für mehr als 12 MHz sind schwer zu finden. Wer die 20 MHz der schnellen PICs nutzen will, wird deshalb eher Quarze und Quarzoszillatoren verwenden. Das nebenstehende Bild zeigt von links nach rechts:
|
Andere Anbieter sind z.B. Farnell, Memec oder Elpro .
Wer eine schnelle Lieferung zu recht günstigen Preisen möchte, sollte bevorzugt bei Reichelt bestellen.
Auch bei Keramikresonatoren über 10 MHz sollte man mal bei Reichelt oder RS und nicht bei Conrad nachschauen. Wer nur 4-MHz- oder 8-MHz-Keramikresonatoren braucht, findet diese im Conrad-Katalog bei den Quarzoszillatoren und bei den Keramikresonatoren unter der Bezeichnung "Schwinger mit integrierten Kondensatoren". (Conrad Bestellnummern: 4MHz: 50 31 69-xx; 8MHz: 50 39 67-xx
Bei Pollin gibt es für ein Butterbrot 20-MHz-Quarzoszillatoren. Die sind besonders deswegen interessant, da 20 MHz-Keramikresonatoren kaum erhältlich sind.
Ich habe bisher nur zwei Mal einen PIC zerstört, und ich kenne jemanden der an einem PIC eine Ausgangsleitung getötet hat. Kurz und gut, die Dinger sind sehr robust. Trotzdem sollte man natürlich die üblichen Regeln für den Umgang mit Halbleitern beachten. Denn garantiert wird nur die Funktion im zuglassenen Arbeitsbereich und bei korrekter Handhabung. Viele Leute glauben immer noch, dass man MOS-Schaltkreise (wie z.B. PICs) schon durch bloßes Berühren der Pins zerstören kann. Theoretisch stimmt das zwar, doch kommt es in der Bastlerpraxis kaum vor. Alle Pins sind durch Schutzdioden gegen Überspannung (also auch statische Ladungen) geschützt. Ich persönlich behandle inzwischen PICs nicht anders als nicht-MOS-Schaltkreise, und ich hatte trotzdem noch nie Probleme durch elektrostatische Ladungen. Da man einen PIC, bis alles funktioniert, häufig aus seiner Fassung nimmt und wieder hineinsteckt, besteht die größte Gefahr für den PIC darin, dass man seine Pins verbiegt und danach wieder ausrichten muss. Das geht höchsten 3 mal gut, danach bricht der Pin einfach ab . Deshalb benutze ich stets ein IC-Ausziehwerkzeug (Bild rechts), um ihn aus der Fassung zu entfernen, auch wenn das etwas dekadent anmuten mag. Ebenfalls durch das häufige Ein- und Ausstecken und die damit verbundene Routine besteht ständig die Gefahr, den Schaltkreis versehentlich falsch herum in den Sockel zu stecken. Das quittiert der PIC dann mit starker Erwärmung die innerhalb einiger Sekunden zum Tode führt. (Auf diese Art und Weise habe ich zwei PICs verloren.) Ich kennzeichne deshalb auf den Leiterplatten die Position von Pin 1 zusätzlich mit einer auffälligen, schwarzen Markierung. Auch markiere ich gern Pin1 der PICs mit einem Tropfen Tip-Ex auf dem Chip, auch wenn das unprofessionell aussieht. Manuel Krüger gab mir den Tip, in der Entwicklungsphase, wenn ein PIC oft gebrannt wird, den PIC nicht einzeln zu benutzen, sondern ihn in einen Präzisionssockel zu stecken, und dieses Doppelpack dann wechselseitig in den Brenner bzw. in die Testschaltung zu stecken. Falls dann was verbiegt, ist nur der Sockel Schrott. |
Nachtrag:
Ich habe versehentlich einen dritten PIC getötet. Durch einen
Fehler in der Programmiergerätesoftware habe ich ihn
wiederholt mit einer Programmierspannung von über 25V "versorgt".
Maximal zulässig waren nur 13,5V. Ich nehme ihm nicht übel, dass
er das nicht vertragen hat.
Nachtrag 2:
Nach weit über 10 Jahren habe ich nun das erste Mal einen PIC in
meiner Sammlung, der Fehler im Flash-Speicher aufweist. Einige
wenige Bits des Programmspeichers lassen sich nicht brennen. Da
der Chip eigentlich nagelneu ist, ist es wohl ein
Fertigungsfehler, der bei der Endkontrolle durchgeschlüpft ist. In
diesem Zusammenhang will ich noch mal darauf hinweisen, dass bei
mir noch kein einziger PIC - egal wie oft ich ihn programmiert
habe - Ermüdungserscheinungen in den Speicherzellen gezeigt hatte.
Das Resultat ist dann ein *.HEX-File, das den fertigen Code enthält. Besitzer eines von Microchip vertriebenen Programmiergeräts (PICstart, PICkit2, ICD2) können dieses aus der Entwicklungsumgebung MPLAB heraus direkt ansteuern und das *.HEX-File in den PIC übertragen.
Besitzer anderer Programmiergeräte 'brennen' das HEX-File mit der zum Programmiergerät gehörenden Software in den PIC.
Am interessantesten sind C-Compiler:
Unter dem Namen JAL gibt es eine Art 'Hochsprache' für PICs die etwas an Pascal erinnert.
Von Microchip selbst gibt es 'Maestro', mit dem sich Programme aus 'Bausteinen' zusammenbasteln lassen.
Ich programmiere PICs fast ausschließlich in Assembler und nur wenig in C. Stellt mir bitte keine Fragen bei Problemen mit anderen Programmiersprachen.
Alle höheren Programmiersprachen ist ein Problem gemeinsam: im
Vergleich mit Assembler produzieren sie einen extrem uneffizienten
Code. Schon kurze Pascal-Programme füllen den kleinen
Programmspeicher eines PIC16Fxxx. Deshalb ist der Einsatz von
Hochsprachen meiner Meinung nach nur bei PIC18Fxxx
und größeren PICs angebracht.
Von den Problemen der Hardware-Initialisierung kann man sich mit
Hochspachen auch nicht restlos freikaufen, aber in C programmiert
man viel schneller als in Assembler.
Für ca. 50,- € gibt es von Microchip das PICkit1. Das ist eine kombinierte Brenn- und Experimentier-Platine für 8- und 14-beinige Flash-PICs.
Sehr gut gefallen mir die neuen minimalistuischen Brenner BFMP
, PICkit-2 und
PICkit-3 von Microchip mit USB-Anschluss. Da ist man mit
(deutlich) unter 50 Euro dabei, und kann die Brenner direkt aus
der MPLAB-Entwicklungsumgebung heraus ansteuern. Das PICkit-3
eignet sich sogar als Debugger.
Beispiel für ein kleines Problem
Auf einer Modelleisenbahnanlage sollen die 8
Laternen einer Straßenbeleuchtung vorbildgerecht eingeschaltet
werden. Dazu müssen sie beim Einschalten unabhängig voneinander
unregelmäßig flackern, bis sie schließlich alle gleichmäßig und
hell leuchten.
In konventioneller Bauweise ist der Aufwand erheblich. Benutzt man
aber einen PIC, so verbindet man einfach 8-Pins mit den Lampen
(falls die Leistung der Lampen zu hoch ist benötigt man noch
jeweils einen Treibertransistor), schließt einen Keramikschwinger
an und lädt den PIC mit einem Programm, das das gewünschte
Einschaltverhalten simuliert.
Beispiel für ein mittleres Problem
Ein selbstgebautes elektronisches Gerät
soll über eine serielle Schnittstelle vom PC aus gesteuert
werden.
Man baut in das Gerät einen PIC ein, der die serielle
Schnittstelle enthält und mit seinen digitalen/analogen Leitungen
mit den Steuerfunktionen des Geräts verbunden ist. Der PIC
kommuniziert mit dem PC und steuert dementsprechend das Gerät.
Beispiel für ein originelles Problem
Man hätte gern wieder eine Armbanduhr mit
integriertem wissenschaftlichen Taschenrechner.
Seit 1985 gibt es keine Armbanduhr mit echtem wissenschaftlichem
Taschenrechner mehr, sondern nur noch Rechenkrüppel für die 4
Grundrechenarten. Ein echter Nerd baut sich sowas selbst. (www.calcwatch.com)
Beispiel für ein großes Problem
Ein ferngesteuertes Modellflugzeug soll mit
einem Autopiloten versehen werden, der zusätzlich zur
Funkfernsteuerung das Flugverhalten nach Sensordaten
stabilisiert.
Ein PIC wird in die Leitungen zwischen Fernsteuerempfänger und
Rudermaschinen des Flugzeugs geschaltet. Über weitere Anschlüsse
wird er mit Sensoren für den Luftdruck, die Geschwindigkeit und
die Beschleunigungskräfte versehen. Er misst die Länge der vom
Boden gesendeten Fernsteuerimpulse und verändert sie nach
ausgefeilten Regelgesetzen in Abhängigkeit von den Sensordaten.
Die veränderten Impulse steuern die Rudermaschinen des Flugzeugs
und damit das Flugzeug selbst.
All diese Beispiele sind keine Ausgeburt der Phantasie, sondern real existierende Anwendungen für PICs.
weiter: Ja. Ich will mein Glück mit PICs versuchen!
Autor: sprut
erstellt: 2000
letzte Änderung: 30.12.2018