Hi!
Kann mir vielleicht jemand helfen, ich versuche ein Programm zum Laufen
zu bringen, aber es klappt irgendwie nicht.
Ich habe ein Musterprogramm mit AD Wandler gefunden, dieses Programm ist
wie analoges Voltmeter, wenn am Port C am Pin 0 Spanung fließt, dann
sollten 3 LEDs am Port B an PINs 0, 1 und 2 leucht. Zuerst grüne LED und
wenn man die Spanung mit Poti regelt, dann sollten weitere LEDs
aufleuchten.
Ich benutze das MyAVRboard MKII. Alles richtig angeschlossen. Das ganze
läuft mit internem Quarz, ich habe nichts an Fuses usw. geändert.
Und hier das Programm:
1 | #define F_CPU 1000000
|
2 | #include <avr/io.h>
|
3 |
|
4 | int main()
|
5 | {
|
6 | int sample,i,value; // Variablen definitionn
|
7 | DDRB=0xFF; // PORTB als Ausgabeport
|
8 | ADMUX=0x00; // ADC Ref auf Avcc, PC0 gewählt, normale Formatierung
|
9 | ADCSRA=0x80; // ADC eingeschaltet, kein Prescale
|
10 | // Endlosschleife zur kontinuierlichen Auswertung der Eingangsspannung (am ADC)
|
11 | while(1)
|
12 | {
|
13 | sample=0; // setzt den Samplewert auf 0
|
14 | // Schleife zum Sammeln von 32 Meßwerten
|
15 | for(i=0;i<32;i++)
|
16 | {
|
17 | ADCSRA=0b01000000; // single conversion mode ein
|
18 | while(ADCSRA & (1<<ADSC)); //warten bis konvertierung abgeschlosen
|
19 | sample+=ADCW; // aufsummierung der samplewerte
|
20 | }
|
21 | value=sample/32; // Aritmethisches Mittel der Samplewerte
|
22 |
|
23 |
|
24 |
|
25 | // Auswertung der Meßdaten
|
26 | if (value<300) // erste Grenze
|
27 | PORTB=0x04; // schaltet grüne LED ein
|
28 | else if (value>=300 && value<600) // zweite Grenze
|
29 | PORTB=0x02; // schaltet gelbe LED ein
|
30 | else
|
31 | {
|
32 | PORTB=0x01; // schaltet rote LED ein
|
33 |
|
34 |
|
35 | }
|
36 | }
|
37 | }
|
Bei mir leuchtet immer die erste grüne LED, egal ob ich jetzt Poti drehe
oder nicht, ich kann am PC0 Spanung messen, also die kommt an. Es wäre
sehr nett, wenn mir jemand erklährt, was mache ich falsch bzw. wie
funktioniert es nicht.
Gruss, venart