Mr Bean
07.10.2007, 14:27
Hallo
Ich weiß dass mein Problem hier schon öfters aufgetaucht ist, ich hab mir die betreffenden Beiträge auch schon durchgelesen. Bin aber leider immernoch nicht zu einer funktionierenden Schaltung gekommen. Ich willl grad einfach das Zeichen x über die serielle Schnittstelle an meinen PC schicken und dort mit Hilfe des Hyperterminals anzeigen. Einen Max232 hab ich in meiner Schaltung drin, der scheint auch zu funktionieren. Denn wenn ich den Reset drücke werden vereinzelt Zeichen an den PC gesendent, leider nur nicht das gewollte und auch nicht konstant. D.h. wenn ich keinen Reset drücke wird gar nichts gesendet. Das Terminal hab ich auf 8Bit, 1Stoppbit, 9600Baud und keine Flusssteuerung eingestellt. vielleicht ist da auch etwas falsch. Hier mal der Code:
#include <avr/io.h>
//#include <uart.h>
//#include <avr/delay.h>
#define F_CPU 12000000L
#define BAUD 9600L
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) //clever runde
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) //reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) //Fehler in Promille
#if ((BAUD_ERROR>10)||(BAUD_ERROR<-10))
#error Systematischer Fehler in der Baudrate größer 1% und damit zu hoch!
#endif
int main(void)
{
UCSRB = (1<<TXEN); //UART TX einschalten
UCSRC = (1<<URSEL)|(3<<UCSZ0); //Asynchron 8N1
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
while (!(UCSRA & (1<<UDRE))) //warten bis Senden möglich
{
}
UDR = 'x'; //schreibt das Zeichen x auf die Schnittstelle
return 0;
}
Prozessor ist ein AtMega8. Der Code ist von mikrocontroller.net. Aber leicht abgewandelt. Wäre schön wenn ihr mal drüber schaun könntet. Vielleicht findet ihr ja gleich einen gravierenden Fehler...
Vielen Dank im Voraus!!
Grüße!!
Bean
Ich weiß dass mein Problem hier schon öfters aufgetaucht ist, ich hab mir die betreffenden Beiträge auch schon durchgelesen. Bin aber leider immernoch nicht zu einer funktionierenden Schaltung gekommen. Ich willl grad einfach das Zeichen x über die serielle Schnittstelle an meinen PC schicken und dort mit Hilfe des Hyperterminals anzeigen. Einen Max232 hab ich in meiner Schaltung drin, der scheint auch zu funktionieren. Denn wenn ich den Reset drücke werden vereinzelt Zeichen an den PC gesendent, leider nur nicht das gewollte und auch nicht konstant. D.h. wenn ich keinen Reset drücke wird gar nichts gesendet. Das Terminal hab ich auf 8Bit, 1Stoppbit, 9600Baud und keine Flusssteuerung eingestellt. vielleicht ist da auch etwas falsch. Hier mal der Code:
#include <avr/io.h>
//#include <uart.h>
//#include <avr/delay.h>
#define F_CPU 12000000L
#define BAUD 9600L
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) //clever runde
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) //reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) //Fehler in Promille
#if ((BAUD_ERROR>10)||(BAUD_ERROR<-10))
#error Systematischer Fehler in der Baudrate größer 1% und damit zu hoch!
#endif
int main(void)
{
UCSRB = (1<<TXEN); //UART TX einschalten
UCSRC = (1<<URSEL)|(3<<UCSZ0); //Asynchron 8N1
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UBRRH = UBRR_VAL >> 8;
UBRRL = UBRR_VAL & 0xFF;
while (!(UCSRA & (1<<UDRE))) //warten bis Senden möglich
{
}
UDR = 'x'; //schreibt das Zeichen x auf die Schnittstelle
return 0;
}
Prozessor ist ein AtMega8. Der Code ist von mikrocontroller.net. Aber leicht abgewandelt. Wäre schön wenn ihr mal drüber schaun könntet. Vielleicht findet ihr ja gleich einen gravierenden Fehler...
Vielen Dank im Voraus!!
Grüße!!
Bean