-
        

Ergebnis 1 bis 6 von 6

Thema: Problem mit ATmega128 ADC

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.05.2006
    Ort
    Graz-Seiersberg
    Alter
    30
    Beiträge
    11

    Problem mit ATmega128 ADC

    Anzeige

    Hallo
    Ich hab ein Problem mit dem ADC vom ATmega128.

    Bei ADC Kanal 0 und 1 passen die ADC Werte (auf beiden hängen Potis)

    Bei Kanal 2 und 3 passen sie nicht:

    Auf 2 hängt ein NTC und auf 3 ein LDR. Beide mit Spannungsteiler. Die Eingangsspannungen dieser Kanäle sind auch messbar (0 - 3V).
    Jedoch kommt ein völlig falscher Wert raus und der ändert sich auch nicht (wenn man den LDR verdunkelt oder ins Licht hält). Der Controller hängt sich auch nicht auf.

    Mit JTAG und M103 Fuses hab ich's auch schon probiert, jedoch kein Erfolg.

    Kann mir irgendwer helfen?

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Wenn du den Code hereinstellst wird dir der eine oder andere helfen können.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.05.2006
    Ort
    Graz-Seiersberg
    Alter
    30
    Beiträge
    11
    Hier mein Code

    Code:
    #include <mega128.h>
    
    // LCD functions
    #asm
       .equ __lcd_port=0x1B ;PORTA
    #endasm
    #include <lcd.h>
    
    #define ADC_VREF_TYPE 0x20
    
                      
    void lcd(unsigned char uclcd);
    unsigned char read_adc(unsigned char adc_input);
    
    unsigned char ucLDR;
    
    void main(void)
    {   
     
    PORTF=0x00;
    DDRF=0x00;
    
    // ADC init
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=0x87;
    
    // LCD init
    lcd_init(24);
    
            while (1)
                  {
                    ucLDR=read_adc(3);
                    
                    lcd(ucLDR);
    
            
                  };
    }
    
    void lcd(unsigned char uclcd)
    {
            unsigned char ucHundert,ucZehn,ucEiner;
            
            ucHundert=uclcd/100;
            ucZehn=((uclcd-(ucHundert*100))/10);       
            ucEiner=(uclcd-(ucHundert*100)-(ucZehn*10));
            
            
            ucHundert+=0x30;
            ucZehn+=0x30;
            ucEiner+=0x30;
            
            lcd_gotoxy(1,1);
            lcd_putchar(ucHundert);
            lcd_putchar(ucZehn);
            lcd_putchar(ucEiner);
    
    }    
    
    unsigned char read_adc(unsigned char adc_input)
    {
            ADMUX=adc_input|ADC_VREF_TYPE;
            // Start the AD conversion
            ADCSRA|=0x40;
            // Wait for the AD conversion to complete
            while ((ADCSRA & 0x10)==0);
            ADCSRA|=0x10;
            return ADCH;
    }
    [/code]

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Etwas sehr wenig Kommentar zu den Zeilen. So etwas "ADCSRA=0x87" ist auch nicht sehr aussagekräftig, man braucht immer das Datenblatt dazu. Änderst du nur hier "ucLDR=read_adc(3);" den ADC-Eingang
    So kann ich nichts erkennen. AREF ist richtig?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.05.2006
    Ort
    Graz-Seiersberg
    Alter
    30
    Beiträge
    11
    Ich glaub, dass der Controller tot ist. Weil jetz rührt sich beim ADC gar nichts mehr. Auch das, was früher funktioniert hat, geht nicht mehr.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Da müsstest du ihn aber totgestromt haben. Du wirst doch nicht mehr als VCC für die ADC-Eingänge verwendet haben.

Berechtigungen

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