Forum: Mikrocontroller und Digitale Elektronik Atmega8 UART TX Fehlersuche


von Sebastian (sepp1985)


Lesenswert?

Hi,

ich habe zur Zeit nen Prob. mit dem UART von meinem Board.
Es werden keine korrekten Signale geschickt bzw. nicht richtig 
Empfangen. Habe das Standart Terminal Programm von Win Xp genutzt.
Wenn ich Dezimal 255 schicke kommen 8 high bits an, aber sobald ich was 
anderes schicke kommen diese nicht richtig an.

BSP.:
TX am Board:
X=88
X=01011000

RX am PC:
248
11111000

Habe zu Erst vermutet das es an der Baudrate liegt, ABER
habe dann den Codewizzard CVAVR benutzt und da wird es wie bei mir 
Init..

Es ist ein Atmega8 16PU mit einem 4mhz Quarz verbaut(Übungsboard von der 
Schule).

Vielleicht findet einer von euch den Fehler. Habe den Überflüssigen Code 
rausgelassen(Display Init, EXT_Int).


#include <mega8.h>
#include <delay.h>
#include <stdlib.h>

void transmitUART(unsigned char send);
void uartInit(unsigned int baud);

void main (void)
{
uartInit(25);

#asm("sei");
do
{
transmitUART('X');
PORTC.2=!PORTC.2;
delay_ms(100);
}
while(1);
}
void uartInit(unsigned int baud)
{
UCSRB=0x18; //0b00011000;
UCSRC=0xA6; //0b10100110;
UCSRC&=0xEF; //0b01111111;
UBRRH=(baud>>8);
UBRRL=baud & 0xFF; //0b11111111
UCSRC|=0x80;
}

void transmitUART(unsigned char send)
{
        while(!UCSRA & (1<<5));
        UDR=send;
        while(!UCSRA & (1<<6));
}

von Sebastian (sepp1985)


Angehängte Dateien:

Lesenswert?

Sorry konnte Schaltplan nicht nachträglich einfügen.
Deswegen hier nochmal der Schaltplan im Anhang

von Thomas E. (thomase)


Lesenswert?

Sebastian R. schrieb:
> Wenn ich Dezimal 255 schicke kommen 8 high bits an, aber sobald ich was
> anderes schicke kommen diese nicht richtig an.

Das sieht nach falscher Geschwindigkeit aus.

Steht der Controller auf "externer Quarz"? Oder läuft er mit dem 
internen Oszillator?

mfg.

von Sebastian (sepp1985)


Lesenswert?

Wo stelle ich das denn ein? Bin mich gerade am durchlesen.
Darauf war ich auch schon am rum Rätseln. Habe schon auf paar Seiten 
gelesen das man einen Externen verwenden soll. Kannst du mir eventuell 
sagen, wo ich das Einstellen muss?

Sind das die Fuse Bits???

Hab im Datenblatt was drüber gefunden.
CKSEL1-3 müssen 1
CKSEL0 muss 0
SUT1-0 müssen 00

habe ich da recht?

Muss ich irgend Etwas bei den Fuse Bits beachten?

von Jolli (Gast)


Lesenswert?

Sebastian R. schrieb:
> Es ist ein Atmega8 16PU mit einem 4mhz Quarz verbaut(Übungsboard von der
> Schule).

Wie willst Du denn bei 4 milliHertz eine vernünftige Baudrate 
einstellen?

von Sebastian (sepp1985)


Lesenswert?

jaja ich weiß 4MHz, sry meinte natürlich Mega nicht milli hertz.

von Sebastian (sepp1985)


Lesenswert?

Habe mich jetzt mal eingearbeitet. Standart mässig steht der Codevision 
Compiler schon richtig. Aber trotzdem geht das nicht mit der 
Übertragung. Hat jemand noch nen Tipp woran es liegen kann?

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.