Forum: Mikrocontroller und Digitale Elektronik zwei ADC zeigen dasselbe an


von Anonym L. (helferlein)


Angehängte Dateien:

Lesenswert?

Hallo zusammen
Ich habe ein Programm zur Steuerung eines Sonnenfolgers geschrieben. 
Dazu brauche ich adcs zum Strom messen. (ADC0 und 1) Ich benutze einen 
Atmega 328p. Die anderen beiden ADC funktionieren. Wenn ich die ADCwerte 
von ADC0 oder 1 ausgebe, zeigen beide immer dasselbe an. Ich habe es 
schon mit Kondensatoren an den AREF/AVCC Pins versucht.
Bei einer zweiten schaltung auf dem Steckbrett hatte ich dasselbe 
Problem. Damit ist die Hardware wohl weitgehend auszuschliessen.
Ich habe auch schon versucht die beiden ADCs in den Unterprogrammen zu 
tauschen.
Die ADC zum Strom messen heissen stromadc, das Unterprogramm adc ist für 
die Sonnensensoren und funktioniert einwandfrei.
Bei den Stromadc benutze ich die unteren acht bit, bei den anderen die 
oberen.

Das ADC unterprogramm ist auf Zeile 317. Das misst den Strom. Zur 
strommessung verwende ich zxct1107.
Die ADC werden auf Zeile 107 initialisiert.

Den Watchdog habe ich zwecks eingrenzung des Problems ausgeschaltet.

Ich habe auch schon versucht das ganze Programm bis auf die ADC funktion 
zu löschen, jedoch ohne Erfolg.

Wenn jemand mehr Informationen braucht, bitte einfach fragen.

Vielen Dank für eure Hilfe

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jonathan L. schrieb:
> Bei den Stromadc benutze ich die unteren acht bit, bei den anderen die
> oberen.

Das ist ein Missverständnis, vermute ich mal. Wenn du ADLAR nicht setzt, 
sind die 10 Bit des ADC so verteilt, das die oberen beiden Bits in ADCH 
und die unteren 8 Bit in ADCL zu finden sind. Das Ergebnis ist aber 
immer noch 10 Bit breit.
Bei gesetztem ADLAR sind die oberen 8 Bit in ADCH zu finden und die 
unteren 2 Bit in ADCL.
Leider finde ich dein Programm schrecklich unübersichtlich und habe 
echte Probleme, da durchzufinden. Ein paar einleitende Erklärungen sind 
sicher nicht fehl am Platz.
Ob es sinnvoll ist, den Sonnenstand zu messen statt ihn zu berechnen, 
will ich jetzt mal nicht diskutieren. Die Profis jedenfalls messen 
nicht, denn bei trübem Himmel laufen die Servos sonst recht wild.

von Jonas B. (jibi)


Lesenswert?

Moin,

mach mal folgendes: Projekt anlegen mit nur dem nötigsten Code um den 
ADC auszulesen. Dann simplen Aufbau mit Poti und testen. Wenn das nicht 
geht, meldest du dich nochmal mit einem Bild vom Aufbau. Bei deinem 
aktuellen Code (keine Tastenentprellung etc...) kann man nur raten.

Gruß J

von Anonym L. (helferlein)


Angehängte Dateien:

Lesenswert?

Das habe ich bereits versucht. Hier ist noch das Programm mit nur dem 
Nötigsten code. Hier auch noch ein Bild von meinem Aufbau.

Vielen Dank für die schnellen Antworten

von Georg G. (df2au)


Lesenswert?

Du hast ADLAR nicht verstanden. Mit oder ohne dieses Bit, das Ergebnis 
ist 10 Bit und nur einmal linksbündig und einmal rechtsbündig geschoben. 
Wenn dir 8 Bit Genauigkeit ausreichen, schieb immer linksbündig, lies 
ADC und werte nur das obere Byte aus. Wenn du die vollen 10 Bit 
brauchst, musst du rechtsbündig schieben und ADC als (u)int16_t lesen.

von M. K. (sylaina)


Lesenswert?

Georg G. schrieb:
> Wenn dir 8 Bit Genauigkeit ausreichen, schieb immer linksbündig, lies
> ADC und werte nur das obere Byte aus.

Das obere Byte heißt ADCH, nur als Tipp, kann man direkt als uint8_t 
auslesen ;)

von Karl M. (Gast)


Lesenswert?

Hallo,

Einen Schaltplan habe ich nicht gesehen und das Bild ist unbrauchbar 
dafür. Ich kann nicht mal den Atmel µC erkennen...

Sind alle analogen Pins AGnd und ACcc, wie von Atmel in ihren 
Application Notes vorgegeben, verschaltet ?

Du hast möglicherweise zwei Fehler im Setup.

Die Programmierung ist schlecht. Entweder Du beherrscht die 
Bitmanipulation, dann sollte man es auch richtig machen oder du setzt 
das/ die Register, z.B. ADMUX, in einem rutsch direkt.

Deine ADC Routinen halten sich nicht an das Datenblatt, ich gehen mal 
von einem ATmega328P aus.
1
ADMUX|=((1<<REFS0)|(1<<REFS1));//interne 1.1V
/Internal 1.1V Voltage Reference with external capacitor at AREF pin/
Ist das so beschaltet ?
Und das Setzen dieser Bits benötigt immer eine Wartezeit.
Siehe /11.7 Internal Voltage Reference/

Deine Spannungsquellen sind evtl. zu hochohmig.
Dein Brotbrett hat einen Kurzschluss oder keinen Kontakt.

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
Noch kein Account? Hier anmelden.