- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 5 von 5

Thema: Analog Eingänge mit AVR-GCC Programmmieren

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.03.2004
    Ort
    Bergkamen
    Beiträge
    31

    Analog Eingänge mit AVR-GCC Programmmieren

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo zusammen,
    ich hab ein problem mit der Programmierung der Analog Eingange.
    Meine Hardware:
    - µC: ATMega8-16PI
    - Taktfrequenz: 3,6864MHz
    _ an Pin PC0 ein 25K Poti (Verbunden mit Masse und Ub+=5V)
    - Pin PC6 mit Reset
    - Pin PB6 und PB7 mit Quarz
    - Pin PD0 mit TxD (Max232)
    - Pin PD1 mit RxD
    - Compiler AVR-GCC


    Das Folgende Programm soll die Analoge Spannung von PC0 Messen (10Bit auflösung)
    und die Daten in die Variablen c1 und c2 speichern, welche dann über das UART
    gesendet werden.

    Code:
    #include <avr/io.h>
    #include <avr/iom8.h>
    
    #include "TypeDef.h"
    #include "UARTInit.h"
    #include "UARTTransmit.h"
    
    
    #define fOSC            3686400      // 3686Khz 
    #define UART_BAUD_RATE      9600      // 9600 baud 
    
    
    int main(void)
    {
    	int x = 0;
    	char c1, c2;
    
    	// USART initiieren
    	USART_INIT(fOSC, UART_BAUD_RATE);
    
    	ADCSRA = _BV(ADEN) | _BV(ADPS2);
    	
    	for (;;) 
    	{  
        // Select pin ADC0 using MUX
        ADMUX = 0;
        
        //Start conversion
        ADCSR |= _BV(ADSC);
    		ADCSR |= _BV(ADEN); // enable ADC
    
        
        // wait until converstion completed
        while (ADCSR & _BV(ADSC) ) 
    		{
    			asm volatile ("nop");
    		}
         
    		c1 = ADCL;
    		c2 = ADCH;
        
    		// disable the ADC
        ADCSR &= ~_BV(ADEN);
    		
    		// Übertrage Low Byte über UART
    		USART_Transmit(c1);
    		// Übertrage High Byte über UART
    		USART_Transmit(c2);		
        
    		// Pause
    		for(x=0; x<0xFFFF; x++){}
      }
    	
    	return 0;
    }
    Jetzt zu meinem Problem die Daten von c1 und c2 bleiben Konstant egal vieviel man am Poti dreht.
    Weiss nicht ob es wichtig ist aber c1=03h und c2=FFh
    Kann mir jemand ein Tip geben woran das liegt?

  2. #2
    Gast
    Hallo

    Hast du denn auch AVCC, AREF und AGND beschaltet ???

    MFG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.03.2004
    Ort
    Bergkamen
    Beiträge
    31
    Nein sind nicht beschaltet.
    In diesem Beispiel geht es mir auch noch nicht um genaue Präzision.
    Deshalb müssen diese doch auch nicht beschaltet werden, oder?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Doch natürlich. Die sollten sogar immer beschaltet werden, egal ob man die ADWandler nutzt oder nicht!
    Wenn du die nicht angeschloßen hast kann da auch gar nix funktionieren!
    ( siehe http://www.kreatives-chaos.com/index.php?seite=avrgrund )

    Das " #include <avr/iom8.h> " brauchst du übrigens gar nicht!

    MfG Kjion

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    01.03.2004
    Ort
    Bergkamen
    Beiträge
    31
    Danke euch,
    hat an der Fehlenden Beschaltung gelegen jetzt funktionierts.

Berechtigungen

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

Labornetzteil AliExpress