Gast
#2678749
Hallo, ich bin jetzt seit knapp drei Tagen beschäftigt, den ADC in einem ATMega32 zum Laufen zu bekommen. Beziehungsweise, er funktioniert, aber eben nicht so, wie er soll. Das Problem ist, dass ich immer 1016 zurückgeliefert bekomme. Ziel ist es die Spannung einer 9V Block-Batterie zu ermitteln. Ich habe PC2 des AVRs (Kanal 3 ADC) an einen Spannungsteiler anliegen, der die aktuell noch 7V der Blockbatterie auf 2,5V reduziert. Zwischen PC2 und Spannungsteiler ist noch eine einfache Siliziumdiode geschaltet. Daraus folgt rechnerisch, dass an PC2 etwa 1,8V anliegen müssten, gemessen sind es dann 1,67V. Deshalb müsste der ADC einen Wert von 342 zurückliefern, tut er aber nicht, stattdessen gibt er ganz stabil 1016 aus. Ich habe den Wert mit einem Multimeter nachgemessen, das erstaunliche Ergebnis: Am PIN liegen bei Betrieb 4,8V an. Genauso, wie an allen anderen Pins von PORTC. Ich habe daraufhin mein Programm überprüft, ob ich vielleicht irgendwo PortC auf High gesetzt habe, ist aber nicht so. Später habe ich in meinem Hauptprogramm in der while-Schleife DDRC auf Eingang und PORTC auf Low gesetzt. Trotzdem liegen an den PORTC Pins weiterhin 4,8V an. Dass heißt, dass mein ADC ja funktioniert, aber irrtümlicherweise immer 4,8V anliegt. Ich habe auf meiner Platine auch nach Überbrückungen gesucht, die für den hohen Pegel verantwortlich sein könnten, aber alles ist ok. Das JTAG Fuse bit habe auch schon auf 1 gesetzt, also gelöscht. Ändert aber nichts. Woran kann es noch liegen? So langsam gehen mir echt die Ideen aus. Hier noch einmal mein ADC-Programmcode:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Die Funktion ADC_init wird im Hauptprogramm einmal aufgerufen und dann immer wieder die Funktion ADC_start. Mein ATMega32 läuft auf 8Mhz, deshalb der ADC Prescaler von 64, um innerhalb der 50-200kHz zu bleiben. Ich hoffe euch fällt noch etwas ein. Ist der Controller vielleicht kaputt? Viele Grüße Jan