Probleme UART Atmega8

OP #4075600
Lesenswert?
• ▲
▼
Hi,
Ich versuche über UART einen char zu übertragen, doch leider empfange 
ich nichts. Ich habe das Starterkit 
http://shop.embedded-projects.net/embedded-projects-gmbh/avr-starterkit-inkl.-usb-programmer.html?c=5. 
Der uC läuft mit dem 8Mhz Oszillator (mit timer getestet) und die Pin2 
und Pin3 sind mit dem MAX232 richtig verbunden. Da ich keinen RS232 
Anschluss habe, verwende ich einen RS232 to USB Konverter, der auch 
richtig erkannt wird.

Zu meinem Code:
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
#define FOSC 8000000UL // Clock Speed !!UL unsinged ling beachten
5
#define BAUD 9600UL
6
#define MYUBRR ((FOSC+BAUD*8)/(BAUD*16)-1)
7

8
void USART_Transmit( unsigned char data );
9
void init(void);
10
void USART_Init(unsigned int ubrr);
11

12
int main(void)
13
{
14
    init();
15
    while(1)
16
    {  
17
        _delay_ms(1000);
18
  USART_Transmit('c');
19
    }
20
}
21

22
void USART_Transmit( unsigned char data )
23
{
24
  /* Wait for empty transmit buffer */
25
  while ( !( UCSRA & (1<<UDRE)) );
26
  
27
  /* Put data into buffer, sends the data */
28
  UDR = data;
29
}
30

31
void init() {
32
  USART_Init(MYUBRR);  
33
}
34

35
void USART_Init( unsigned int ubrr)
36
{
37
  /* Set baud rate */
38
  UBRRH = MYUBRR >> 8;
39
  UBRRL = MYUBRR & 0xFF;
40
  /* Enable receiver and transmitter */
41
  UCSRB = (1<<RXEN)|(1<<TXEN);
42
  /* Set frame format: 8data, 1stop bit */
43
  UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
44
}

Könnte es am Konverter liegen? Zum Empfangen verwende ich Realterm.

Gruss Bert
Gast #4075659
Lesenswert?
• ▲
▼
Hi

>Was genau heißt 1Mhz_6CK_64MS? Läuft der uC somit
>mit 1Mhz? Habe FOSC auf 1Mhz geändert, aber empfangen tue ich immer noch
>nichts.

Ja.

>Habe FOSC auf 1Mhz geändert, aber empfangen tue ich immer noch
>nichts.

Aber 1MHz und 9600Bd ergeben einen Baudratenfehler von 7,0%. Damit ist 
keine fehlerfreie Übertragung möglich. Geh mal auf 4800Bd runter.

MfG spess
#4075836
Lesenswert?
• ▲
▼
Bert Siegfried schrieb:
> Könnte es am MAX232 liegen? Alles andere scheint in Ordnung zu sein.

Könnte kann alles sein.

RS232 hat den Vorteil, dass man mit einem Loopback Test sehr einfach 
testen kann.

Einfach die Tx Leitung mit der Rx Leitung (asugehend vom PC) 
kurzschliessen, am PC ein Terminalprogramm hochfahren und drauflos 
klimpern. Alles was über die Schnittstelle rausgeht, muss über den 
Kurzschluss auf der anderen Leitung wieder reinkommen. (Das hinter dem 
Kurzschluss hängst du natürlich ab)

Und dann gehst du halt mit dem Kurzschluss immer mehr in Richtung Mega, 
bis das 'Echo' aufhört.

Du beginnst also so
1
  PC  -> USB-RS232 -----+
2
  PC  <- USB-RS232 <----+

und hantelst dich immer weiter in RIchtung mega
1
  PC  -> USB-RS232 -----> MAX232 -----+
2
  PC  <- USB-RS232 <----- MAX232 <----+


Auch ein simple LED (mit 330Ohm Vorwiderstand) leistet gute Dienste. Mit 
einem Stein auf dem PC-Keyboard, so dass der PC dauersendet (oder der 
Mega) und einer Baudrate von 4800 sieht man an der LED wunderbar jedes 
Zeichen durch-blinken. Und dann geht man eben die Leitung ausgehend vom 
jeweiligen Sender ab und verfolgt bis wohin es noch blinkt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren