Hi all,
da ich mich ab morgen für drei Wochen (roboterfrei) nach Florida verkrümele, will ich vorher noch das Rätsel um den Fehler im Text auflösen:
Der Fehler liegt hier
…misst man die Spannung über dem Spannungsteiler R23 und R25-30…
Natürlich besteht der Spannungsteiler, an dem die Spannung für die Schalter gemessen wird, aus R24 und R25-30 (je nachdem, welche Schalter gedrückt sind)! Das ist ein gewaltiger Unterschied, da R24 nur 1KOhm groß ist, R23 aber 1MOhm. Genau genommen besteht der Spannungsteiler eigentlich sogar aus einer Parallelschaltung von R23 und R24 zu R25-30. Aber da der Unterschied in den Werten so groß ist, fällt R23 kaum ins Gewicht. Wer das nicht glaubt, sollte es nachrechnen der Wert, der herauskommen muss ist 999,000999000999000999000999001 Ohm.
Damit R24 nun ins Geschehen eingreifen kann, muss PIN5 (PD3) als Output geschaltet werden – also Betriebsspannung führen. Diese wir in der Funktion PollSwitch() erledigt:
Code:
…
DDRD |= SWITCHES; // Switches as Output
SWITCH_ON; // Output HIGH for measurement
…
Und die Definition von SWITCHES und SWITCH_ON findet man in der asuro.h:
Code:
…
#define SWITCHES (1 << PD3)
#define SWITCH_ON PORTD |= SWITCHES
…
Und nun muss dem AD-Wandler nur noch gesagt werden, womit er die gemessene Spannung vergleichen soll. In diesem Fall soll er sie mit der Betriebsspannung vergleichen und das geschieht hier:
Code:
…
ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor
…
Mit dem Setzen von REFS0 wird die (über den Kondensator C6 geglättete) Betriebsspannung als Referenz eingestellt und mit SWITCH Pin27 (PC4) als Eingang für den AD-Wandler gewählt.
Jetzt wird die Spannung gemessen und umgerechnet.
Und wozu ist R23 dann überhaupt da? Das ist die Frage für den nächsten Teil in dieser Reihe, die aber erst in 3 Wochen folgen wird.
Bis dahin viel Erfolg beim Testen…
_HP_
Lesezeichen