Hallo zusammen, hier tut was nicht. Ich versuche einen Wert über den ADC einzulesen. Dazu hängt einfach ein Poti am ADC0 (Pin 23). Die Funktion LED_ZEILE( ) selbst funktioniert, das habe ich separat getestet. Im angehängten Programm kommt es aber schon nicht zu leuchten der 8 LEDs, welches zu Beginn mal für zwei Sekunden leuchtet sollte. Fehlt was? Der ATmega8 läuft mit 11.0592 MHz - deshalb der 64er Teiler. Danke und Grüße Johannes
Johannes Heß schrieb: > Dazu hängt einfach ein Poti am ADC0 (Pin 23). Und die anderen beiden Pins? Welchen eingangsspannungsbereich kannst du anlegen? Hast du die eingangsspannung auch mal gemessen? > Im angehängten Programm kommt es aber schon nicht zu leuchten der 8 > LEDs, welches zu Beginn mal für zwei Sekunden leuchtet sollte. Das hat ja schon mal gar nichts mit dem ADC zu tun. Denn die LEDs sollten ja auch ganz ohne ADC leuchten, oder nicht? BTW: ich würde da bei
1 | default:
|
2 | break; |
auf jeden Fall auch was ausgeben. Denn ob dein Teiler durch 100 irgendwie sinnvoll oder ausreichend ist (bei einem ADLAR=1), kann man ohne Schaltung nicht beurteilen...
1 | ADCSRA = (1<<ADEN) | (1<<ADFR) | (1<<ADIE); // Setup des ADC |
man gibt keine Interrupts frei, wenn man keine ISR hat. Nie! Auch wenn man keinen sei() im Programm hat. Sowas verwirrt nur. Und was soll der Free Running Modus? Ach komm. Im AVR-Gcc-Tutorial gibt es wunderbare ADC Routinen. Einfach nur in der Init Funktion die von dir gewünschte Referenzspannung einstellen und gegebenenfalls den ADC-Prescaler anpassen und gut ists. An der Stelle muss man wirklich nicht das Rad jedesmal neu erfinden. AVR-GCC-Tutorial/Analoge Ein- und Ausgabe: Der interne ADC im AVR
1 | ....
|
2 | int main( void ) |
3 | {
|
4 | uint16_t adcval; |
5 | |
6 | DDRB = 0b00111111; /* output für LED-Leiste definieren */ |
7 | DDRD = 0b00001100; /* 6 Ausgaenge in PortB und 2 in PortD */ |
8 | |
9 | ADC_Init(); |
10 | |
11 | while( 1 ) { |
12 | adcval = ADC_Read(0); // Kanal 0 |
13 | LED_LEISTE( adcval / 400 ); |
14 | |
15 | _delay_ms(1000); |
16 | }
|
17 | }
|
PS: Wenn du dann sowieso durch 100 dividierst, kannst du dir den ADLAR auch sparen. Ob der µC durch 100 oder durch 400 dividieren muss, ist dann auch schon egal.
Hallo, > Johannes Heß schrieb: >> Dazu hängt einfach ein Poti am ADC0 (Pin 23). > Und die anderen beiden Pins? Welchen eingangsspannungsbereich kannst du > anlegen? Hast du die eingangsspannung auch mal gemessen? Das Poti ist ein 10k. Es liegt zwischen +5V und GND, der Mittenabgriff ist mit dem ADC0-Eingang verbunden. Das Multimeter zeigt zw. GND und Mittenabgriff Werte im erwarteten Bereich, schön variabel. >> Im angehängten Programm kommt es aber schon nicht zu leuchten der 8 >> LEDs, welches zu Beginn mal für zwei Sekunden leuchtet sollte. > Das hat ja schon mal gar nichts mit dem ADC zu tun. Denn die LEDs > sollten ja auch ganz ohne ADC leuchten, oder nicht? Richtig, die LEDs haben nichts mit dem ADC zu tun. Nur muss die Conversion einmal passiert sein, damit das Programm bis zum EInschalten der LEDs kommt. Das scheint nicht der Fall zu sein. > BTW: ich würde da bei >
1 | > default: |
2 | > break; |
3 | >
|
> auf jeden Fall auch was ausgeben. Denn ob dein Teiler durch 100 > irgendwie sinnvoll oder ausreichend ist (bei einem ADLAR=1), kann man > ohne Schaltung nicht beurteilen... Das ADLAR = 1 habe ich in verschiedenen Beispielen immer wieder gefunden. Mir ist nicht ganz klar, wofür es gut sein soll. Ist es nicht egal, ob die Werte im ADCW links- oder rechtsbündig stehen? Grüße Johannes
Johannes Heß schrieb: > Das ADLAR = 1 habe ich in verschiedenen Beispielen immer wieder > gefunden. Mir ist nicht ganz klar, wofür es gut sein soll. Ist es nicht > egal, ob die Werte im ADCW links- oder rechtsbündig stehen? ADLAR verwendest du, wenn dir eine Auflösung im Wertebereich 0 bis 255 vom ADC reicht und du 0 bis 1023 nicht brauchst. Dann muss man nur das Highbyte vom ADC auslesen und hat seinen Wert. Das spart dann ein paar Takte bei der ganzen ADC Konversion. Solange du nicht jeden Takt brauchst, bringt dir das herzlich wenig. Tutorial lesen! AVR-GCC-Tutorial AVR-Tutorial Deswegen haben wir sie gemacht, damit man dort als Neuling Dinge nachlesen kann.
Vielen Dank, es funktioniert. > Tutorial lesen! > AVR-GCC-Tutorial > AVR-Tutorial > Deswegen haben wir sie gemacht, damit man dort als Neuling Dinge > nachlesen kann. Der Hinweis auf diverse Tutorials ist ganz nett. Die sind auch echt gut und ich habe sie sogar bereits gelesen. Allerdings sind sie nicht vollständig selbsterklärend und für jemanden wie mich, der sich vollständig autodidaktisch in die Controllermaterie einarbeitet, bleiben dann eben doch immer noch Fragen offen. Ich finde es etwas schade, dass im Forum sehr oft den Fragestellern das Gefühl vermittelt wird, sie seien zu unfähig oder unwillig zu lesen. Dabei will ich Ihnen das persönlich gar nicht unterstellen. Schöne Grüße Johannes
Johannes Heß schrieb: > Der Hinweis auf diverse Tutorials ist ganz nett. Die sind auch echt gut > und ich habe sie sogar bereits gelesen. Allerdings sind sie nicht > vollständig selbsterklärend und für jemanden wie mich, der sich > vollständig autodidaktisch in die Controllermaterie einarbeitet, bleiben > dann eben doch immer noch Fragen offen. Gut, dazu gibt es ja dann das Forum. > Ich finde es etwas schade, dass im Forum sehr oft den Fragestellern das > Gefühl vermittelt wird, sie seien zu unfähig oder unwillig zu lesen. Das hast du in den falschen Hals gekriegt. Wir finden es nämlich auch schade, wenn wir dauernd Äusserungen lesen, die besagen "man hätte irgendwo gehört" oder "man hätte in anderen Programmen das auch immer so gesehen", wenn wir hier im Tutorial Seiten haben, in denen die Dinge angesprochen werden. OK, ich nehme zur Kentniss und will das auch gar nicht abstreiten, dass da manchmal etwas fehlt, aber frustrierend ist es schon, wenn man Programme sieht, die wieder mal anscheinend recht unmotiviert irgendwelche Konfigurationsbits setzen und es dann recht klar wird, dass die nur deswegen gesetzt werden, weil man das auf anderen Web-Seiten so gesehen hätte.
Johannes Heß schrieb: > Allerdings sind sie nicht > vollständig selbsterklärend brauchen sie auch nicht unbedingt ... > und für jemanden wie mich, der sich > vollständig autodidaktisch in die Controllermaterie einarbeitet, bleiben > dann eben doch immer noch Fragen offen. ... denn dazu gibt es noch die Datenblätter; da stehen viele Details drin. Gruß Dietrich
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.