Hallo zusammen,
ich möchte mit einem ATMEGA32 zeichen über die serielle Schnittstelle an
den Rechner senden. Habe hierfür ein kleines Tesprogramm geschrieben
welches auf Tastendruck von 0 bis 9 zählt und jeweils die Zahl auf einem
Display und der Seriellen Schnittstelle ausgibt. Die Anzeige auf dem
Display funktioniert einwandfrei, jedoch die Übertragung zum PC nicht.
Habe ich da eventuell noch einen Fehler drin?
#include <avr/io.h>
#include <avr/delay.h>
#include <LCD4b.c>
#include <serial.c>
int main (void)
{
DDRB = 0b11111111; //Pins 0-7 als Ausgänge
DDRC = 0b00000000; //Pins 0-7 als Eingänge
PORTC = 0xff;
_delay_ms(100);
_delay_ms(100);
lcd_init();
lcd_clear();
serial_init();
int tastenzaehler=0x30;
while (1)
{
if ( !(PINC & (1<<PINC0)) ) // Taste ?
{
_delay_ms(50);
lcd_out(&tastenzaehler); // Zahl ausgeben
tastenzaehler +=1;
if(tastenzaehler == 0x3a) // ei 9 wieder auf 0 setzen
{
tastenzaehler=0x30;
}
serial_send_char(tastenzaehler); // Zahl senden
}
}
}
//***********************************
// ***** serial.c *************
#include <avr/io.h>
#include <avr/delay.h>
int serial_init()
{
UCSRB |= ( 1 << TXEN ); // UART TX einschalten
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); // Asynchron 8N1
UBRRH = 0; // Highbyte ist 0
UBRRL = 103; // Lowbyte ist 103 (
9600 Baud bei 16 Mhz ) // Lowbyte ist 51 (
dezimal )
return 0;
}
int serial_send_char(unsigned char serial_char)
{
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich
*/
{
}
UDR = serial_char; /* schreibt Zeichen auf
die Schnittstelle */
return 0;
}