PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Spannungsmessung mit Mega 8



Kornhaas.net
10.12.2005, 18:55
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.


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

}
}
}

Marco78
10.12.2005, 19:14
Wie hast du die zu messende Spannungsquelle denn angeschlossen?
Masse an Masse und + am ADC?
Wenn ja, ist das falsch.

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=14431&highlight=adc

Kornhaas.net
11.12.2005, 15:24
Danke mal anschauen

Kornhaas.net
11.12.2005, 15:25
Danke erst mal für den Hinweis. Nur das mit dem Anschluss war mir schon klar das ich das nicht so machen darf.

mir stellt sich halt nur mehr im moment die frage passt mein programm so, oder ist mein atmel defekt, da ich im moment nur leerzeichen als ausgabe bekomme.

Gruß

Holger