PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ist mein ADC defekt?



havana
16.06.2012, 16:47
Hej! Hab mich die Tage hingesetzt und versucht meine alte Gameboy-Kamera auszulesen, aber es klappt nicht und wird mit der Zeit immer frustrierender :strom. Ich bekomme als Bild einen Weiß nach Schwarz Verlauf nach der ersten Auslesung, darauf folgende Auslegungen liefern nahe komplett schwarze Bilder zurück. Ich habe probeweise den AD-Wandler mit der Masse verbunden bekomme aber nicht 0 zurück. Ich denke, da stimmt irgendwas nicht. Kann man den AD-Wandler durch falsche Konfiguration kaputt machen (z.B. als Referenzspannung 2,56 V wählen, aber bis zu 5 V anschließen)? Habe nämlich irwann nach bester Try-And-Error Manier alle möglichen Spannungsreferezen durchprobiert. Anbei mein Code um den Wandler auszulesen und die Daten über RS232 an den PC zu schicken:

Ausschnitt aus main.c:

// Init UART
uart_init();

// Init AD converter (prescaler 64, AVCC, channel 0)
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
ADMUX = (1 << REFS0) | (1 << MUX0);

// Dummy read
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC));

while (1) {
// Read
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC));
uart_writec(ADCL);
uart_writec(ADCH);

// Wait 1 second
_delay_ms(2000);
}

Ausschnitt aus uart/uart.h

// Write function
static inline uint8_t uart_writec(uint8_t c) {
/* Wait until transmit buffer (UDR) is empty */
while (!(UCSRA & (1 << UDRE)));

/* Write output */
UDR = c;
return 1;
}

Ausschnitt aus uart.c:

void uart_init(void) {
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * UART_BAUDRATE) - 1);

UBRRH = (uint8_t) (ubrr >> 8);
UBRRL = (uint8_t) (ubrr);

/* Enable receiver and transmitter */
UCSRB = (1 << RXEN) | (1 << TXEN);

/* 8N1, no parity */
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);

/* Do initial flush */
uart_flush();
}

Passt das soweit? Oder habe ich tatsächlich falsch programmiert? Als Ergebnis bekomme ich hier beispielsweise 635d, wenn ich den AD-Eingang mit der Masse verbinde, oder 357d wenn ich den Eingang mit 5V verbinde. Die Ergebnisse schwanken aber +/- 20d.

havana
16.06.2012, 17:07
Ahso, noch als Info: Ich verwende das RN-Control 1.4.

Hubert.G
16.06.2012, 17:36
Du hast geschrieben Channel 0 verwendest im Code aber Channel 1.