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...
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
intmain(void)
3
{
4
uint16_tadcval;
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-TutorialAVR-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