Hallo, ich hab hier mal ein kleines Programm zur Schwellwertüberwachung:
1 | #include <avr/io.h>
|
2 |
|
3 | void main(void)
|
4 | {
|
5 | DDRD=0xFF; //PORTD als Ausgang definieren
|
6 | unsigned int wert1;
|
7 |
|
8 |
|
9 |
|
10 | while(1)
|
11 | {
|
12 | ADCSRA = 0b10000100; //ADC Aktivieren und Teilungsfaktor 16
|
13 |
|
14 | ADMUX = 0b11000001;
|
15 | ADCSRA |= (1<<ADSC); //interne referenz und ADC1
|
16 | while(ADCSRA & (1<<ADSC)); //Warten auf das Ende der Wandlung
|
17 | {
|
18 | wert1 = ADCW; //Ergebnis in die Variable Wert schreiben
|
19 | }
|
20 |
|
21 | if (wert1 == 0x00) //wenn Wert gleich 0 ist dann ist PD5 aktiv
|
22 | { //sonst ist PD7 aktiv
|
23 | PORTD |= (1<<PD5);
|
24 | }
|
25 | else
|
26 | {
|
27 | PORTD |= (1<<PD7);
|
28 | }
|
29 |
|
30 |
|
31 | }
|
32 |
|
33 | }
|
Das Problem ist das wenn sich die Spannung verändert, dann tut sich an
der LED gar nichts.
Wenn ich zum Beispiel am Anfang ADC1 auf GND habe ist PD5 aktiv, wenn
ich dann aber auf z.B. 5V hänge passiert gar nichts, bzw es sind beide
aktiv.
Was habe ich falsch gemacht?!
Mit freundlichen Grüßen,
Poschi