Noch ne Frage: welche Plaltine (Schaltung?) benutzt Du und welchen ADC-Pinn genau? Atmega328p als SMD? Der hat ja ADC6 und ADC7 verfügbar die beim PDIP NICHT zur Verfügung stehen.
Wie wärs, wenn Du jetzt als externes Signal für den ADC-Pinn einen Spannunsteiler baust - so etwa 50 % Vcc, danach nochn Test mit rund 30% Vcc und Dir danach den ADC-Wert ausgeben lässt. Das sollte sinnvolle Ergebnisse bringen - wenn "alles" korrekt läuft... ich habe jetzt mal einen externen widerstand angeschlossen und jetzt sehe ich auch die 1023 ..
Anm.: ich hatte schon Controller so krank bekommen, dass die liefen - aber nicht mehr zu flashen waren, dass man sie flashen konnte, aber EINZELNE Pinne tatens nicht bzw. nicht korrekt usw usf. Die Tests könnten so einen Fehler eingrenzen oder aufdecken.
Weiter mit nem Test von eben.
Ich benutzte hier als IDE AVR Studio 4.18 Build 700. Aktuell ein Test mit (m)einer Servotester-Software, in C, für nanoclone 328p/20 MHz (!!) mit Poti 10K auf ADC7 zum Variieren der Servoposition. Initialisierung - in C!Und dabei war es beim Test von eben unerheblich, ob ich den Pinn bei Programmbeginn auf 1/1 (DDRC7 = 1 / PORTC7 = 1 <=> Ausgang mit Pullup) oder 0/0 (DDRC7 = 0/ PORTC7 = 0 <=> Eingang ohne Pullup) oder 0/1 (DDRC7 = 0/ PORTC1 = 0 <=> Eingang mit Pullup) stellle - das LCD zeigt stets die richtigen ADC-Werte an und der Servo läuft unabhängig von der Pininitialisierung immer sinngemäss richtig.Code:// ============================================================================= = // === Initialisierung fuer ADC/mega328/ADC7 MIT Interrupt free running // === ADC7/PC7 auf 10 Bit, fertige Wandlung ###>>> löst Interrupt aus // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ADC0_i10free (void) // Init m328/ADC7, 10 Bit, free runn. Interrupt { // Kanal 0 <=> Temperatur RN VNRN-VN2 // - - - - - - - - - - - - - - - Datenblatt 8271C-AVR-08/10 ADMUX |= (1<<MUX2)|(1<<MUX1)|(1<<MUX0); // 264 ADMUX |= (1<<REFS0); // Referenzspannung ist AVcc S 263 // ADCSRA |= (1<<ADEN); // ADC Enable 264 ADCSRA |= (1<<ADSC); // starte gleich die erste Wandlung 264 ADCSRA |= (1<<ADIE); // ADC Interrupt Enable 265 ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // Prescal clock/128 265 ADCSRA |= (1<<ADATE); // Auto Triggering Enable 265 // es wird bei clock 20 Mhz mit ca. 80 µs getriggert // genauer: ca 12 Zyklen in 1 ms <=> 1200 Hz In_adc = 0; // Durchlaufzähler ADC zum Kanalumschalten } // Ende von void ADC_in_10free(void) // ============================================================================= =
......Bild hier
Lesezeichen