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); } } }







Zitieren
Lesezeichen