-         

Ergebnis 1 bis 3 von 3

Thema: Ist mein ADC defekt?

  1. #1

    Ist mein ADC defekt?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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.

  2. #2
    Ahso, noch als Info: Ich verwende das RN-Control 1.4.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Du hast geschrieben Channel 0 verwendest im Code aber Channel 1.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Ähnliche Themen

  1. RP6 TWI Defekt
    Von Magelan1979 im Forum Robby RP6
    Antworten: 9
    Letzter Beitrag: 22.06.2010, 19:38
  2. LCD defekt?
    Von Ineedhelp im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 21.07.2008, 16:01
  3. AVR-ISP defekt?
    Von der_andi im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 04.02.2008, 11:40
  4. LPT defekt?
    Von ToniThiele im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 23.05.2007, 19:08
  5. LCD defekt?
    Von SeveQ im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 06.03.2006, 20:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •