- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 5 von 5

Thema: Atmega16: Verwendung des ADC - Fehler bei Initialisierung?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.09.2005
    Beiträge
    114

    Atmega16: Verwendung des ADC - Fehler bei Initialisierung?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    leider habe ich wohl ein Problem mit dem ADCs.

    Folgende Aufgabe habe ich:

    An die Differenzeingänge ADC0 und ADC1 des ADC kann über ein Kabel eine
    kleine Platine mit einem Mikrofon angeschlossen werden. [...]
    C-Programm schreiben, [...] ADC mit 200-facher Verstärkung einstellen
    und ständig die Amplitude des mit dem ADC eingelesenen Mikrofonsignals verarbeiten [...]
    Zunächst mein Quelltext:
    Code:
    #define LCD_PORT PORTC                  /* LCD connected to PORTC */
    #define F_CPU 3686400UL
    
    #include <avr/io.h>
    #include "display.inc"
    #include <util/delay.h>
    #include <avr/interrupt.h>
    
    uint16_t ReadADC()
    {
       ADMUX=(1<<MUX3)|(1<<MUX1)|(1<<MUX0);
    
       //Start Single conversion
       ADCSRA|=(1<<ADSC);
    
       //Wait for conversion to complete
       while(!(ADCSRA & (1<<ADIF)));
    
       ADCSRA|=(1<<ADIF);
    
       return(ADC);
    }
    
    int main(void){
        DDRC = 0xff;        // LCD
        
        //char x = 4;
        
        lcd_init();
        uint16_t adc_result;
        
        ADMUX=(1<<REFS0);                         // For Aref=AVcc;
        ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS0);
        
        while(1){
    
            adc_result=ReadADC();
            adc_result=(adc_result*4);        // *4, da ich bei ad_result=max=1024 4950mV erhalte
            lcd_setcursor(0,0);
            lcd_putdez_uint(adc_result);
            _delay_ms(250);
            
        }
        
        
    }
    Mein Problem nun:
    Die Ausgabe auf dem Display schwankt ständig zwischen 0 und 4000.
    Dabei ist es ganz egal ob ich das besagte Mikrofon überhaupt angeschlossen habe oder nicht.
    Es kommt mir so vor, als werden die Pins garnicht "verarbeitet".

    Kann mir jemand bitte sagen, ob ich einen Fehler bei der Initialisierung oder ähnliches habe?

    Danke
    Kesandal

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Was ich so auf die Schnelle sehe:

    ADMUX=(1<<MUX3)|(1<<MUX1)|(1<<MUX0); Damit überschreibst du dir ADMUX=(1<<REFS0); und hast keine Referenzspannung mehr.
    Solange du den Kanal nicht änderst musst du ihn nicht neu einstellen, also auch ins main legen.

    Wenn du ein Mikro kontinuierlich abfragen willst, wäre da nicht der Free-Running-Mode und ISR besser?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.09.2005
    Beiträge
    114
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Was ich so auf die Schnelle sehe:

    ADMUX=(1<<MUX3)|(1<<MUX1)|(1<<MUX0); Damit überschreibst du dir ADMUX=(1<<REFS0); und hast keine Referenzspannung mehr.
    Solange du den Kanal nicht änderst musst du ihn nicht neu einstellen, also auch ins main legen.

    Wenn du ein Mikro kontinuierlich abfragen willst, wäre da nicht der Free-Running-Mode und ISR besser?
    Danke für Deine Antwort und den Tip mit dem Free-Running-Mode / ISR.
    Werde es nachher so umsetzen.

    Das ADMUX habe ich nun in die Main genommen.

    Code:
    ADMUX=(1<<MUX3)|(1<<MUX1)|(1<<MUX0)|(1<<REFS0);
    


    Dennoch schwankt die Anzeige nach wie vor.
    Egal ob das Micro angeschlossen ist nicht.

    Ich denke im abgeklemmten Zustand müsste doch die Anzeige "stabil" sein oder nicht?

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Kesandal Beitrag anzeigen
    Ich denke im abgeklemmten Zustand müsste doch die Anzeige "stabil" sein oder nicht?
    Kommt darauf an, was du statt dessen angeklemmt hast. Ein offener Eingang ist alles andere als stabil.
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ein 100n Kondensator an AREF ist vorhanden?
    Den Eingang mal kurzschließen ist besser, oder eine definierte Spannung anlegen zwischen 0V und 5V.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Ähnliche Themen

  1. Initialisierung LCD
    Von cas im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 02.05.2011, 18:22
  2. LCD Initialisierung
    Von Einfachkrank im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 27.04.2008, 13:23
  3. LCD Initialisierung
    Von eis im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 25.11.2007, 18:07
  4. ATMEGA16 IIC Fehler beim Compilen
    Von Eric79 im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 14.06.2005, 20:03
  5. LCD initialisierung
    Von Eric79 im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 09.06.2005, 16:04

Berechtigungen

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

12V Akku bauen