-
        

Ergebnis 1 bis 5 von 5

Thema: ADC mit Atmel16

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2006
    Beiträge
    5

    ADC mit Atmel16

    Anzeige

    Hallo,

    ich benutze das Board von Pollin und versuche dort einen Atmel16 als ADC zu verwenden.

    Hier ist mein Code:

    Code:
     #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <inttypes.h>
    #include <stdlib.h>
    
    #define BAUD 9600
    #define F_CPU 8000000UL     
    
     #define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
     #define UART_BAUD_RATE 9600
    
    int Measure (void) 
    {
      int measuredVal = 0;
      
      ADCSRA = _BV(ADEN) | _BV(ADPS2);
      
        // Select pin ADC0 using MUX
       ADMUX   =   0;   
        
        //Start conversion
        ADCSRA |= _BV(ADSC);
        
        // wait until converstion completed
        while (ADCSRA & _BV(ADSC) ) {}
        
        // get converted value
        measuredVal  = ADCW;  
        
    
    return measuredVal;
    
    
    }
    
    int uart_putch1(unsigned char c)
    {
        while (!(UCSRA & (1<<UDRE))); 
        UDR = c;                     
        return 0;
    }
    
    void uart_putst1 (char *s)
    {
        while (*s)
        {   
            uart_putch1(*s);
            s++;
        }
    }
    
    int main(void)
    {
    	UCSRB |= (1<<TXEN);			// UART TX einschalten
    	UCSRC |= (1<<URSEL)|(3<<UCSZ0);	// Asynchron 8N1
    	
    	UBRRH = (uint8_t)(UART_UBRR_CALC(UART_BAUD_RATE,F_CPU)>>8);
    	UBRRL = (uint8_t)UART_UBRR_CALC(UART_BAUD_RATE,F_CPU);
      
    	for(;;)
    	{
    		int valMeasured = Measure();
    		char message[50];
    		
    		int i = valMeasured;
    		sprintf (message, "value: %i", i);
    		uart_putst1(message);
    	}
    
    	
    }
    Ich bekomme immer 279,280,281 als wert ausgegeben, egal wie ich mein Poti einstelle. Der Schaltplan liegt bei. Ich habe dort PA5 an den Mittelkontakt des Poti gelegt und kann an Pin38 auch 1-4v messen.
    Habt Ihr eine Idee?

    Danke
    Mathias
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken adc_1.jpg  

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Da ist mindestens ein Fehler in deiner Ausgabe.

    Ein int wird niemals nicht einen Wert von 279,280,281 haben.
    Der Wertebereich von int ist [-32768, 32767] = [-2^15, 2^15 -1]
    Disclaimer: none. Sue me.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2006
    Beiträge
    5
    Tut mir leid: Meinte natürlich manchmal 279, dann wieder 280 und manchmal auch 281

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Und MUX=0 passt zu PA5?
    Sollte es nicht MUX=5 sein?
    Disclaimer: none. Sue me.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    04.03.2006
    Beiträge
    5
    Du hast Recht: Ich habe da was durcheinander bekommen. Das Board sieht 2 IC vor und ich habe natürlich den falschen genommen. Hab mich schon die ganze Zeit gefragt wie ich an Pin 43 kommen soll bei einem Atmel16.
    Jetzt liegt PA0 (PIN40) richtig am Poti, ich benutze ADMUX = 0; ...und es misst!
    Danke !
    Mathias

Berechtigungen

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