Hallo,
folgendes Problem:
Ich will mit meinem Mega8 irgendwas an die RS232 Schnittstelle vom Comp
senden.
Ich wollte einen Quarz nutzen - hab die Fusebits auch so eingestellt.
Leider blieb die Kommunikation tot.
Heute hab ich herausgefunden, dass ich zumindest Murx empfange, wenn ich
den Empfänger auf 300 Baud stelle.
Nach einer weile Rumprobieren, habe ich es mit dem Internen Takt von 8
Mhz versucht.
Stelle ich nun den Empfänger wieder auf 300 Baud, empfängt er die
richtigen Daten!
Wie kann das sein?!
Hier mein Code:
1 | int main(void)
|
2 | {
|
3 |
|
4 | // USART initialisieren
|
5 | USART_Init(MYUBRR);
|
6 |
|
7 | while (1)
|
8 | {
|
9 | USART_String("Hallo!");
|
10 | }
|
11 |
|
12 |
|
13 |
|
14 | return 0;
|
15 |
|
16 | void USART_Init( unsigned int ubrr)
|
17 | {
|
18 | /*Set baud rate */
|
19 | UBRRH = (unsigned char)(ubrr>>8);
|
20 | UBRRL = (unsigned char)ubrr;
|
21 | /*Enable receiver and transmitter */
|
22 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
|
23 | /* Set frame format: 8data, 1stop bit, no parity */
|
24 | UCSRC = (3<<UCSZ0);
|
25 |
|
26 | }
|
27 |
|
28 |
|
29 | void USART_Transmit( unsigned char data )
|
30 | {
|
31 | /* Wait for empty transmit buffer */
|
32 | while ( !( UCSRA & (1<<UDRE)) )
|
33 | ;
|
34 | /* Put data into buffer, sends the data */
|
35 | UDR = data;
|
36 |
|
37 | }
|
38 |
|
39 | void USART_String (char *s)
|
40 | {
|
41 | while (*s)
|
42 | { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
|
43 | USART_Transmit(*s);
|
44 | s++;
|
45 | }
|
46 | }
|
47 | }
|
Ich nutze das MKII von AVR mit AVR-Studio. Ich habe so ein bischen das
Gefühl, dass da ein Prescaler drinn ist, aber man kommt an die Fusebits
nicht direkt drann - man kann nur aus nem Drop-Down Menu auswählen. Gibt
es eine Software die über das MKII direkt an die Fusebits kommt?
Oder an was könnte es sonst noch liegen?
Gruß
Chris