12.11.2012 Aufrufe

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

Programmierung der AVR-Microcontroller mit C - UlrichRadig.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!