Hallo,
ich benutze das Board von Pollin und versuche dort einen Atmel16 als ADC zu verwenden.
Hier ist mein Code:
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.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); } }
Habt Ihr eine Idee?
Danke
Mathias







Zitieren

Lesezeichen