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
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.
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
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
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.
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.