Hej! Hab mich die Tage hingesetzt und versucht meine alte Gameboy-Kamera auszulesen, aber es klappt nicht und wird mit der Zeit immer frustrierender . 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:
Code:
// 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
Code:
// 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:
Code:
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.