- LiFePO4 Speicher Test         
Ergebnis 1 bis 3 von 3

Thema: Probleme mit Analog Kanal 8-16 bei Atmega 2560

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65

    Probleme mit Analog Kanal 8-16 bei Atmega 2560

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich irgendwie erhalte ich von meinem Atmega 2560 nicht die Analogen Werte, die er eigentlich messen sollte.
    Hatte ursprünglich das Programm auf einen ATMEGA 1684P laufen. Habe jetzt entsprechend etwas angepasst, vermute aber das ich was vergssen habe, was ich nicht selber sehe.

    Habe für den ADC folgenden Quelltext:
    Code:
    #define wandlungen 3
    void adcstart(void);
    void adcstop(void);
    uint16_t ReadAnalog(uint8_t kanal);
    
    
    
    void adcstart(void) {
       ADCSRA |= ((1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2) | (1<<ADEN));//ADPS0-2(Vorteiler 128), ADEN (Enable)
    
       ADMUX = 0;
       ADMUX |= (1<<REFS1) | (1<<REFS0);
       
       ADCSRA |= (1<<ADSC);      // eine ADC-Wandlung als Dummy zum warmlaufen
       while ( ADCSRA & (1<<ADSC) ) 
       {
       ;                    // auf Abschluss der Konvertierung warten
       }
    }
    
    
    void adcstop(void) {
    	ADCSRA &= ~(1<<ADEN);
    }
    
    
    uint16_t ReadAnalog(uint8_t kanal) {
       uint8_t i = 0;
       uint16_t ergebnis = 0;
    
       ADMUX = kanal;                  // Kanal waehlen
       ADMUX |= (1<<REFS1) | (1<<REFS0);   // interne Referenzspannung nutzen
    
       while (i!=wandlungen) {		//Mehrere wandlungen und durchschnittswert ermitteln
       	ADCSRA |= (1<<ADSC);         // eine Wandlung "single conversion"
       	while ( ADCSRA & (1<<ADSC) ) {
       	;                  // auf Abschluss der Konvertierung warten
    	}
    	i++;
    	ergebnis += ADC;
       }
       ergebnis = ergebnis/wandlungen;	//Durchschnittswert bilden
    
       return ergebnis;
    
    }

    Aufrufen führe ich dann wie folgt durch:
    Code:
    Variable = ReadAnalog("KANAL-NR");

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Hallo,
    erste Anlaufstelle ist immer das Datenblatt http://pdf.datasheetcatalog.com/data.../3055029_1.pdf
    Im Kapitel Analog to Digital Converter - ab Seite 274ff - schauen wir uns die Registerdefinition von ADMUX und ADCSRB an, auf Seite 287f.
    Genaugenommen sollte die Table 126 alle deine Fragen beantworten
    Wie die Bits für ADC-Kanal 8...15 eingestellt werden müssen (Single Ended) steht auf Seite 289.
    Du musst also für diese Kanäle noch im ADCSRB das MUX5-Bit setzen ; und von "kanal" 8 abziehen, bevor auf ADMUX geschrieben wird.
    Na dann noch gutes Gelingen beim Programmieren
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65
    Es war zwar nicht ganz einfach (als halber Anfänger), aber konnte mir die Lösung iwie zusammen suchen aus den entsprechenden Seiten und anhand eines ähnlichen Beispiel.

Ähnliche Themen

  1. SPI bei Atmega 2560 will nicht
    Von Kampfwurst_Hugo im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 06.10.2011, 18:30
  2. ATMega 2560 - PWM Frage
    Von Fallback im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 01.09.2011, 09:39
  3. ATmega 2560 Bord
    Von rolber im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 5
    Letzter Beitrag: 06.06.2010, 10:24
  4. ATMEGA 2560 löten?
    Von kaktus im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 21.10.2008, 18:50
  5. ATMega 2560
    Von Killer im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 18.08.2007, 12:58

Berechtigungen

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

LiFePO4 Speicher Test