Weitere Infos zur LogicProbe mit PIC
Die Idee zur LogicProbe kam, als ein alter Logikstift seinen Geist aufgegeben hatte. Außerdem stand an, sich in die Programmierung von PICs einzuarbeiten. Ein PIC12F629 war gerade zur Hand. Ein PIC12F675 wäre etwas einfacher gewesen, weil ein A/D-Wandler enthalten ist.
- Datenblatt PIC12F629/PIC12F675 https://ww1.microchip.com/downloads/en/DeviceDoc/41190G.pdf
Ziel
- Einfache Hardware
- Kleiner Aufbau in der Größe eines Tastkopfs für ein Oszilloskop
- Verträgt Spannungen bis 24V
Ausrüstung und Geräte
Hardware
- PICkit 3 Debug Express von MICROCHIP http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=dv164131
- PIC-Prommer Eigenbau mit Schwenkhebel-Fassung (besser als das fummelige Testboard, das dem PICkit 3 beiliegt).
- Regelbares Netzgerät mit Strombegrenzung
- Logikanalysator
- Digital-Voltmeter
- Steckboard
Software
MPLAB X IDE v2.20 für Linux http://www.microchip.com/pagehandler/en-us/family/mplabx/
Die MPLAB X IDE ist die übliche Schicki-Mikki Umgebung. Die Funktionalitäten sind allerdings hervorragend.
- Schicker Editor (ein vi wäre schneller)
- Guter Assembler
- PICkit 3 kann unmittelbar zum Programmieren angesprochen werden (ein Klick).
Die Versorgungsspannung wird normalerweise dem Prommer nicht bereitgestellt.
Versorgungsspannung vom PICkit 3 bereitstellen:
- Im linken Feld auf das Projekt mit rechter Maustaste -> Set Configuration -> Customize
- Neuer Dialog. Dort im linken Feld PICkit 3 auswählen.
- Im rechten Feld oben anstelle Memories to Program die Kategorie Power aus wählen.
- Bei Power target circuit from PICkit3 rechts ein Häkchen setzen.
- Der Voltage Level sollte 5.0 sein.
- -> OK und gut is.
- Integrierter Simulator ist sehr hilfreich, aber nicht simpel, weil die Eingänge simuliert werden müssen.
Aktivieren über
- Im linken Feld auf das Projekt mit rechter Maustaste -> Set Configuration -> Customize
- Neuer Dialog. Dort im rechen Feld links unten "Simulator" wählen
- OK
- Starten über Run -> Run Main Project
Zum Design der LogicProbe
Aus dem PIC12F629 der LogicProbe werden der Komparator und der 16-Bit-Timer zur Messung verwendet. Der Timer1 dient zur Erkennung von Impulsen. Er ist für 16 MHz geeignet. Der Komparator dient zur Messung des Logikpegels.
Der Eingangspegel und der Zustand des Timers wird periodisch alle 1024µs gemessen und die LEDs entsprechend geschaltet. Die Periode von 1024µs wird über den Timer0 des PIC gesteuert.
Damit die Helligkeit der LEDs nicht zu sehr von der Versorgungsspannung abhängt, wird der Strom durch die LEDs durch eine Pulsbreiten-Steuerung eingestellt.
Details
- Näheres kann dem Programm der LogicProbe entnommen werden.
Erkennung von Impulsen
Der Timer1 dient zur Erkennung von Impulsen. Er wir unmittelbar über den Eingang GP5/T1CHl angeschlossen. Zählt der Timer1 weiter, lagen Impulse an. Der Eingang ist ein Schmitt-Trigger. Impulse werden damit korrekt erkannt.
Zum Schutz ist der Eingang über einen über einen 100 kOhm Widerstand angeschlossen. Er wird mit einem kleinen Kondensator überbrückt wird (R1, C1).
Messung der Eingangsspannung
Die Eingangsspannung wird über den Eingang des GP1/CIN- Komparators gemessen.
Der Komparator wird im Modus "Multiplexed Input with Internal Reference" betrieben:


Der Eingang des Komparators wird über das RC-Glied R4, C2 betrieben mit einer Zeitkonstante von 1 ms. Damit werden eingehende schnelle Impulse gemittelt. Die Spannung sagt etwas über das Tastverhältnis aus.
Es werden vier Pegel gemessen.
Pegel Ux | CMOS: Ux bei 5V | CMOS: Ux / Udd | TTL: Ux | TTL: Ux / Udd | Universal Ux / Udd | Universal: Ux bei 3V | Beschreibung |
Uhigh | 3,5V | 0,72 | 2,0V | 0,41 | 0,54 | 1,6 | Minimale Spannung für High |
Ulow | 1,5V | 0,32 | 0,8V | 0,17 | 0,16 | 0,63 | Maximale Spannung für High |
Uupper | 0,56 | 0,31 | Spannung für Tastverhältnis High / Low ~ 3 / 1 | ||||
Ulower | 0,44 | 0,25 | Spannung für Tastverhältnis High / Low ~ 1 / 3 |
Die Pegel werden einfach durch die interne Referenz vorgegeben und über den Komparator ermittelt, ob die Eingangsspannung darüber oder darunter liegt. Die interne Referenz ist jedoch nicht absolut, sondern wird von der Versorgungsspannung abgeleitet. Das ist für CMOS ideal. Bei TTL muss dagegen die Versorgungsspannung überprüft werden.
Messung des Tastverhältnis
Die Pegel Uupper und Ulower sind die gemittelten Spannungen, wenn Impulse anliegen und ein Mass für das Tastverhältnis. Wenn die Spannung bei Impulsen zwischen Ulower und Uupper liegt, wird ein Tastverhältnis von 1:1 angenommen. Ist die Spannung kleiner als Ulow, liegen nur relativ kurze HIGH-Impulse an. Ist sie über Uhigh, liegen relativ kurze LOW-Impulse an.
Messung der Versorgungsspannung für TTL
Damit entschieden werden kann, ob die Versorgungsspannung für TTL geeignet ist, muss die Versorgungsspannung relativ genau gemessen werden. Dafür reicht der interne Referenzspannungsgenerator nicht aus (1/32 ~ 3%). Deshalb wird die Spannung über die Ladezeit eines Kondensators gemessen. Bei einem 8-Bit wird damit etwa 0,5% erreicht.
Die Messung der Versorgungsspannung Udd erfolgt durch den Vergleich mit der Spannung Uled an einer LED. An den Eingang wird über einen Vorwiderstand die Versorgungsspannung gelegt. Damit steigt die Spannung am RC-Glied langsam an. Die Zeit, bis die Spannung von Udd - Uled erreicht wird, ist ein Maß für die Eingangsspannung.
Der Komparator wird im Modus "Comparator without Output" betrieben.


Der Widerstand R10 erzeugt einen kleinen Strom durch die grüne LED L3. Da der Ausgang GP0 normalerweise einen Pegel von Udd oder 0V erzeugt, hat R10 keinen Einfluss. Ist GP0 allerdings im Tristate, liegt an GP0/CIN+ die Spannung Udd - Uled an mit Uled ~ 1,8V. Uled ist sozusagen die Referenzspannung.
Am Eingang GP1/CIN- liegen über den Spannungsteiler R1, R3 ~ 0,5 Udd an. Wird GP5 als Ausgang betrieben und auf HIGH, d.h. Udd gelegt, steigt die Spannung am Eingang CIN- über das RC-Glied R4, C2 an. Die Zeit bis der Eingang CIN- den Wert von CIN+ also Udd - Uled erreicht, ist ein Mass für die anliegende Versorgungsspannung. Diese Zeit wird durch eine Schleife, in der der Ausgang des Komparators beobachtet wird, gemessen. Die Zeit liegt in der Größenordnung von 3ms. Bei einer Zeit pro Schleifendurchlauf von 20µs sind also etwa 150 Messungen zu erwarten. Das kann man gut mit acht Bit realisieren. Wobei die Messgenauigkeit völlig ausreichend ist.
Da die Spannung an der LED und vor allem der Kondensator C2 hohe Toleranzen aufweisen, ist eine Eichung nötig. Bei bekannter Spannung wird die Zeit gemessen und im EEPROM des PIC abgelegt. Bei späteren Messungen kann man dann darauf zugreifen.
Messung der Versorgungsspannung und Regelung der Helligkeit der LEDs
Die Helligkeit einer LED hängt vom mittleren Strom durch die LED ab. Die Schaltung legt einfach die Versorgungsspannung über einen Vorwiderstand an die LEDs. Eine von der Versorgungsspannung unabhängige Helligkeit wird erreicht, indem die LEDs mit Impulsen getrieben werden, deren Tastverhältnis den Effekt der Versorgungsspannung ausgleicht. Die Versorgungsspannung wird über das Referenzmodul des PIC mit der Spannung einer LED verglichen. An GP0/CIN+ liegen wie bei der Messung der Versorgungsspannung für TTL Udd - Uled an. CIN- bekommt die Spannung vom Referenzmodul des PIC. Die gemessene Spannung wird über einen einfachen Algorithmus in eine Zeit für die Pulsbreitensteuerung umgerechnet.
Stromversorgung
Der Spannungsregler LM 2936 Z5,0 ist ein LDO-Spannungsregler, der hervorragend für Anwendungen mit frei anschließbarer Stromversorgung geeignet ist. Der Regler ist gegen Verpolung geschützt und kann bei einer Versorgungsspannung bis zu 30V betrieben werden. Selbstverständlich schützt er sich selbst gegen Überlastung.
Bei der LogicProbe und maximal 10 mA Strom fallen um 0,15 V am Regler ab. Der Regler wird fast immer mit einer Ausgangsspannung betrieben, die unterhalb seiner spezifizierten Ausgangsspannung von 5V liegt. Er dient eigentlich nur als Überspannungs- und Verpolungsschutz.
Stützung der Versorgungsspannung
Der LM2936 braucht einen Kondensator von 10µF am Ausgang, um Schwingungen zu verhindern. Den mag der PIC jedoch gar nicht. Wenn alle LEDs aus sind, ist die Schaltung relativ hochohmig und der PIC arbeitet noch unter 2V. Die Zeit bis der PIC ausschaltet, kann schon einige Sekunden betragen. Kurzes Ein- und Ausschalten der Versorgungsspannung kann dann die LogicProbe gehörig durcheinander bringen. Bei zu kleiner Versorgungsspannung ( < 2V ) ist die LogicProbe allemal nicht mehr sicher zu betreiben. Daher entlädt der Widerstand R6 die Stützkondensatoren. Bei zu kleiner Versorgungsspannung werden alle LEDs einschaltet und in einen Fehlerzustand gegangen. Dann muss die LogicProbe kurz von der Versorgungsspannung genommen werden. Sie sollte über 2,5V betragen.
Ergebnisse
- Zur Überprüfung der Eingangspegel wurden Spannungen über ein Potentiometer am Eingang vorgegeben. Sie werden gut eingehalten.
- Ein 20 MHz Quarzgenerator als Taktgeber wird mit Tastverhältnis 1:1 angezeigt.
- Andere Tastverhältnisse werden klar erkannt.
- Sehr kurze Einzel-Impulse von unter 10ns ( eine HCMOS-Gatter-Laufzeit ) werden angezeigt.
- Unterschreitung der TTL-Versorgungsspannung wird gut erkannt.
- Wird die LogicProbe mit 3V im Universal-Modus betrieben, dann die Pegel und Impulse von einem Timer ICL555 bei einer Versorgungsspannung von 1.8V bis 15V korrekt angezeigt.
- Wird die LogicProbe mit 5V im Universal-Modus betrieben, werden Pegel und Impulse von einem Timer ICL555 bei einer Versorgungsspannung von 3,3V bis 15V korrekt angezeigt.
Familie | Uv / V | Ulow / V | Uhigh / V | Ucnt / V |
TTL | 5,0 | 0,81 | 2,10 | 2,88 |
CMOS | 5,0 | 1,36 | 3,33 | 2,88 |
CMOS | 3,3 | 0,89 | 2,16 | 1,44 |
Universal | 3,0 | 0,65 | 1,60 | 1,60 |