happyspider
06.04.2006, 14:46
Hallo,
ich benutze das Board von Pollin und versuche dort einen Atmel16 als ADC zu verwenden.
Hier ist mein 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
ich benutze das Board von Pollin und versuche dort einen Atmel16 als ADC zu verwenden.
Hier ist mein 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