../../icons/Logo.png

Praktische Elektronik


Home

Projekte

LogicProbe mit PIC

Weitere Infos zur LogicProbe

Inhalt


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.

1.
Der Komparator kann an einen internen Referenzspannungsgenerator gelegt werden.
2.
Der Timer1 kann laut Spezifikation Taktperioden unter 60ns > 16,7MHz verarbeiten.
3.
Die Eingänge sind CMOS und damit leicht gegen Überspannungen zu schützen.
4.
Die Ausgänge können bei LOW-Pegel bis zu 8 mA und damit LEDs treiben.

Ziel

  • Einfache Hardware
  • Kleiner Aufbau in der Größe eines Tastkopfs für ein Oszilloskop
  • Verträgt Spannungen bis 24V

Versuche

Versuchsaufbau_s.jpg
Bild 1: Versuchsaufbau auf Steckbrett

Aufbau von links:

PIC mit R, C und LEDs, Spannungsregler LM2936, Taster der LogicProbe, Taster für LOW und HIGH, Poti für Test der Eingangsspannung, Glitch-Generator, Taktgenerator mit 555, Quarzgenerator

Ausrüstung und Geräte

Hardware

  • PIC-Prommer Eigenbau mit Schwenkhebel-Fassung (besser als das fummelige Testboard, das dem PICkit 3 beiliegt).
  • Regelbares Netzgerät mit Strombegrenzung
  • Logikanalysator
  • Digital-Voltmeter
  • Steckbrett

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 Eingangs-Pegel 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:

Multiplex_Input_with_Internal_Reference.png
Bild 2: Multiplexed Input with Internal Reference
LogicProbePIC_Eingang.png
Bild 3: Schaltungsausschnitt zur Messung der Eingangsspannung und von Impulsen am Eingang

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.

Comparator_without_Output.png
Bild 4: Comparator without Output


LogicProbePIC_Spannung.png
Bild 5: Schaltungsausschnitt zur Messung der Versorgungsspannung

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 H-CMOS-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