Hallo zusammen,
Bei mir liefern die A/D Werte für die beiden LDRs nur Werte
zwischen 0x000 (Taschenlampe) und 0x1a0 (abgedeckt).
Ich habe mal so einen Widerstand nackt vermessen und er hat zwischen
200Ohm (Taschenlampe) und >200kOhm (dunkel). Demnach sind die
Vorwiderstände R21 und R22 zu groß dimensioniert.
Ich habe mal 39kOhm parallel geschaltet und erreiche damit
A/D Werte zwischen <0x010 (hell) und 0x360 (dunkel).
Je nach Umgebungshelligkeit wäre hier vielleicht eine Jumper-bare
Lösung geschickt.
Gibt es hierzu schon Ideen?
Grüße,
Dominik
LDR Dynamik
Moderator: Moderatoren Team
Hi Dominik,
Derzeit werden die A/D Wandler mit einer internen Referenzspannung von 5V betrieben. D.h die Eingangspegel an den A/D Pins können ebenfalls im Bereich 0..5V schwanken, was dem Wertebereich 0..1023 entspricht.
Die Funktion adc_read sieht derzeit so aus:
[syntax="c"]int adc_read(uint8 channel){
int result = 0x00;
// interne Refernzspannung AVCC, rechts Ausrichtung
ADMUX= _BV(REFS0) ;//| _BV(REFS1); //|(0<<ADLAR);
[/syntax]
Man kann die interen Referenzspannung auch auf 2,56V schalten.
Damit erhöht sich die Auflösung der A/D Wandler, da jetzt der Wertebereich von 0..1023 einer Eingansspannung von 0..2,56V entspricht.
Die Funktion adc_read entsprechend geändert:
[syntax="c"]int adc_read(uint8 channel){
int result = 0x00;
// interne Refernzspannung AVCC/2, rechts Ausrichtung
ADMUX= _BV(REFS0) | _BV(REFS1); //|(0<<ADLAR);
[/syntax]
Die Änderung der Widerstandswerte ist dann hinfällig.
Allerdings gilt diese Änderung für alle A/D Wandler. Dementsprechend müssen alle Sensor Grenzwerte entsprechend angepaßt werden.
Liegt die Eingangsspannung an einem A/D Port über 2,56V, wird der Wert geklippt.
Gruß marvin
Derzeit werden die A/D Wandler mit einer internen Referenzspannung von 5V betrieben. D.h die Eingangspegel an den A/D Pins können ebenfalls im Bereich 0..5V schwanken, was dem Wertebereich 0..1023 entspricht.
Die Funktion adc_read sieht derzeit so aus:
[syntax="c"]int adc_read(uint8 channel){
int result = 0x00;
// interne Refernzspannung AVCC, rechts Ausrichtung
ADMUX= _BV(REFS0) ;//| _BV(REFS1); //|(0<<ADLAR);
[/syntax]
Man kann die interen Referenzspannung auch auf 2,56V schalten.
Damit erhöht sich die Auflösung der A/D Wandler, da jetzt der Wertebereich von 0..1023 einer Eingansspannung von 0..2,56V entspricht.
Die Funktion adc_read entsprechend geändert:
[syntax="c"]int adc_read(uint8 channel){
int result = 0x00;
// interne Refernzspannung AVCC/2, rechts Ausrichtung
ADMUX= _BV(REFS0) | _BV(REFS1); //|(0<<ADLAR);
[/syntax]
Die Änderung der Widerstandswerte ist dann hinfällig.
Allerdings gilt diese Änderung für alle A/D Wandler. Dementsprechend müssen alle Sensor Grenzwerte entsprechend angepaßt werden.
Liegt die Eingangsspannung an einem A/D Port über 2,56V, wird der Wert geklippt.
Gruß marvin
Danke Marvin für die Hinweise auf die Einstellbare Ref-Spannung.
Ich habe trotzdem meine Widerstände R21 und R22 durch 39k ausgetauscht.
Jetzt habe ich bei dunklem Zimmer (nur TFTs leuchten) A/D-Werte von 0x3d_.
Ich nehme an, dass der Bot in dunkleren Gegenden nicht betrieben wird.
BZW dass er den unterschied zwischen "Dunkel" und "Mensch sieht nichts mehr" nicht
erkennen können muss
Demnach habe ich jetzt 10Bit Auflösung für die häufigsten Helligkeiten.
("TFT-Beleuchtung" bis "direkte Taschenlampe").
Grüße,
Dominik
Ich habe trotzdem meine Widerstände R21 und R22 durch 39k ausgetauscht.
Jetzt habe ich bei dunklem Zimmer (nur TFTs leuchten) A/D-Werte von 0x3d_.
Ich nehme an, dass der Bot in dunkleren Gegenden nicht betrieben wird.
BZW dass er den unterschied zwischen "Dunkel" und "Mensch sieht nichts mehr" nicht
erkennen können muss

Demnach habe ich jetzt 10Bit Auflösung für die häufigsten Helligkeiten.
("TFT-Beleuchtung" bis "direkte Taschenlampe").
Grüße,
Dominik