Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Wenn wir nun <strong>de</strong>n Pin <strong>de</strong>s <strong>AVR</strong> als Ausgang schalten und auf Logisch 1 (HIGH) legen, dann liegt<br />
an bei<strong>de</strong>n Platten <strong>de</strong>s Kon<strong>de</strong>nsators Vcc an und dieser wird entla<strong>de</strong>n (Klingt komisch, <strong>mit</strong> Vcc<br />
entla<strong>de</strong>n, ist aber so).<br />
Nach<strong>de</strong>m nun <strong><strong>de</strong>r</strong> Kon<strong>de</strong>nsator genügend entla<strong>de</strong>n ist schalten wir einfach <strong>de</strong>n Pin als Eingang<br />
wodurch dieser hochohmig wird. Der Kon<strong>de</strong>nsator lädt sich jetzt über das Poti auf, dabei steigt <strong><strong>de</strong>r</strong><br />
Spannungsabfall über <strong>de</strong>m Kon<strong>de</strong>nsator und <strong><strong>de</strong>r</strong>jenige über <strong>de</strong>m Poti sinkt. Fällt nun <strong><strong>de</strong>r</strong><br />
Spannungsabfall über <strong>de</strong>m Poti unter die Thresholdspannung <strong>de</strong>s Eingangspins (2/5 Vcc, also ca.<br />
2V), dann schaltet <strong><strong>de</strong>r</strong> Eingang von HIGH auf LOW um. Wenn wir nun messen (zählen), wie lange<br />
es dauert, bis <strong><strong>de</strong>r</strong> Kon<strong>de</strong>nsator so weit gela<strong>de</strong>n ist, dann haben wir einen ungefähren Wert <strong><strong>de</strong>r</strong><br />
Potentiometerstellung.<br />
Der 220 Ohm Wi<strong><strong>de</strong>r</strong>stand dient <strong>de</strong>m Schutz <strong>de</strong>s Controllers. Wenn nämlich sonst die<br />
Potentiometerstellung auf Maximum steht (0 Ohm), dann wür<strong>de</strong> in <strong>de</strong>n Eingang <strong>de</strong>s Controllers ein<br />
viel zu hoher Strom fliessen und <strong><strong>de</strong>r</strong> <strong>AVR</strong> wür<strong>de</strong> in Rauch aufgehen.<br />
Dies ist meines Wissens die einzige Schaltung zur Erfassung von Analogwerten, welche <strong>mit</strong> nur<br />
einem einzigen Pin auskommt.<br />
Mit einem weiteren Eingangspin und ein wenig Software können wir auch eine Kalibrierung<br />
realisieren, um <strong>de</strong>n Messwert in einen vernünftigen Bereich (z.B: 0...100 % o<strong><strong>de</strong>r</strong> so) umzurechnen.<br />
Wer Lust hat, sich selber mal an ein solches Programm heranzuwagen, <strong><strong>de</strong>r</strong> sollte das jetzt tun. Für<br />
diejenigen, die es gern schnell mögen, hier das Beispielprogramm, welches <strong>de</strong>n UART-Printf aus<br />
<strong>de</strong>n vorangegangenen Kapiteln benötigt, inl. Makefile:<br />
Poti.c Hauptprogramm.<br />
Pot.c Separate Routine zur Er<strong>mit</strong>tlung <strong>de</strong>s Messwertes.<br />
Pot.h Zugehörige Hea<strong><strong>de</strong>r</strong>datei.<br />
UartPrintF.c Für die Debugausgabe auf <strong>de</strong>n UART.<br />
UartPrintF.h Zugehörige Hea<strong><strong>de</strong>r</strong>datei.<br />
Makefile Makefile.<br />
Nach<strong>de</strong>m das Programm auf <strong>de</strong>n <strong>AVR</strong> gela<strong>de</strong>n wur<strong>de</strong> muss dieser kalibriert wer<strong>de</strong>n. Dazu wird <strong><strong>de</strong>r</strong><br />
Kalibrierungsschalter geschlossen und das Poti einige Male zwischen minimaler und maximaler<br />
Stellung hin und her gedreht. Dabei wer<strong>de</strong>n die jeweiligen Maximalwerte bestimmt. Wenn <strong><strong>de</strong>r</strong><br />
Kalibrierschalter wie<strong><strong>de</strong>r</strong> geöffnet wird wer<strong>de</strong>n die Kalibrierungsdaten in's EEPROM <strong>de</strong>s <strong>AVR</strong><br />
geschrieben, da<strong>mit</strong> die Prozedur nicht nach je<strong>de</strong>m Reset wie<strong><strong>de</strong>r</strong>holt wer<strong>de</strong>n muss.<br />
Auf Pin 4 habe ich noch ein Triggersignal gelegt, welches auf HIGH geht wenn die Messung<br />
beginnt und auf LOW, wenn <strong><strong>de</strong>r</strong> Messvorgang been<strong>de</strong>t wird. Mit Hilfe dieses Signals kann <strong><strong>de</strong>r</strong><br />
Vorgang wun<strong><strong>de</strong>r</strong>schön auf einem Oszillographen dargestellt wer<strong>de</strong>n.