Forum: Mikrocontroller und Digitale Elektronik Probleme UART Atmega8


von Bert S. (kautschuck)


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

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?


von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Ok, habe die Fuses mal ausgelesen und es scheint der interne Oszillator 
verwendet zu werden. 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.

von spess53 (Gast)


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

von Bert S. (kautschuck)


Lesenswert?

Leider empfange ich auch bei 4800bd rein gar nichts. Bei falscher 
Baudrate sollte ich doch zumindest etwas fehlerhaftes empfangen?

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

Was wird eigentlich übertragen, d.h. was steht in 'data'? Null?

von Bert S. (kautschuck)


Lesenswert?

In data wird ein 'c' übertragen

von Bert S. (kautschuck)


Lesenswert?

Könnte es am MAX232 liegen? Alles andere scheint in Ordnung zu sein.

von Karl H. (kbuchegg)


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.

: Bearbeitet durch User
von holger (Gast)


Lesenswert?

>Bei falscher
>Baudrate sollte ich doch zumindest etwas fehlerhaftes empfangen?

Ja richtig, solltest du.
Vieleicht musst du noch Rx-Tx hinter dem MAX232 kreuzen.

von Bert S. (kautschuck)


Lesenswert?

Danke euch, werde es mal testen

von Bert S. (kautschuck)


Lesenswert?

Ok, das  Echo funktioniert bis zu den Pins des Z80, dann kann es ja nur 
noch an meinem Programm liegen, eigentlich. RX und TX habe ich auch 
richtig
verkabelt, RX-R1OUT, TX-T2IN.

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
Noch kein Account? Hier anmelden.