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.
.. ich habe jetzt mal einen externen widerstand angeschlossen und jetzt sehe ich auch die 1023 ..
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.
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!
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)
// ============================================================================= =
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.
......Bild hier
Lesezeichen