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; }
Hat sich erledigt, hatte die Fuse bits falsch eingestellt. Sie standen auf internen Takt. SORRY
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.