Hallo Leute
ich hab vor mit einem MEGA8 die Spannung einer 1.5Volt Baterie zu messen, den gemessenen Wert über UART auszugeben und am PC auszuwerten.
Also den internen ADC-Wandler vom MEGA 8 zu verwenden.
Nur mein Programm werte mir nichts aus. Vielleicht könnt ihr mir bei der Suche nach dem Fehler helfen. Ich will den PC0 als AD-Wandler eingang verwenden.
Code:
#include <avr/io.h>
#define F_CPU 8000000 /* Oszillator-Frequenz in Hz */
#define UART_BAUD_RATE 19200
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1)
void USART_Init(void)
{
UCSRB |= (1<<RXEN) | (1<<TXEN);
UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); //Asynchron 8N1
}
void UART_writeChar(char c) // Ein Zeichen
{
while (!(UCSRA & (1<<UDRE))) {} // warte, bis UDR bereit
UDR = c; // Sende Zeichen
return 0;
}
void UART_writeString(unsigned char *string) // mehrere Zeichen
{
while ( *string) // so lange *s != NULL
UART_writeChar(*string++);
return 0;
}
unsigned char UART_getChar(void)
{
while (!(UCSRA & (1<<RXC))); // warten bis Zeichen verfuegbar
return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben
}
int main(void)
{
int result;
USART_Init();
//ADMUX = (1<<MUX0);
ADCSRA = (1<<ADEN)|(1<<ADPS2);
while (1)
{
/* Wandlung starten */
ADCSRA |= (1<<ADSC);
/* Warten bis die AD-Wandlung abgeschloßen ist */
while ( !(ADCSRA & (1<<ADIF)) )
{
/* AD-Wert auslesen */
result = ADC;
UART_writeChar(result);
}
}
}
Lesezeichen