Forum: Mikrocontroller und Digitale Elektronik usart konfiguration atmega8515 9600 N 1 GCC


von Veit K. (veitchen)


Lesenswert?

hallo leute,

hab zwei mikrocontrollertypen, auf einem gehts und auf dem anderen 
nicht.
serielle kommunikation mit 9600 baud, 1 stopbit über bluetooth module.

es funktioniert beim atusb1287 prima, mit dem atmega8515 nicht und es 
liegt sehr sicher an der konfiguration vom uart. laufen tut er mit einem 
11,0592mhz quarz

ich habs so gemacht:

UCSRB |= (1<<RXEN) | (1<<TXEN);
UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
UBBRL = 71;  //9600 baud bei 11,0592 mhz


der interrupt:
ISR(USART_RX__vect){
cli();
receive= UDR;
flag = 0x02;
sei();
}

die flag variable hab ich nur zum debuggen rein, die müsste ja 
wenigstens auf 0x02 springen ...


sieht jemand einen fehler? takt usw. passt alles (lasse led im 
sekundtakt per timer1 blinken)

danke schonmal

von Kay I. (imperator)


Lesenswert?

Hast Du UBBRH initialisiert?
Kommt er überhaupt in den Rx - Interrupt?
Hast es mal mit Pollen / Echo probiert?

von holger (Gast)


Lesenswert?

>UCSRB |= (1<<RXEN) | (1<<TXEN);
>die flag variable hab ich nur zum debuggen rein, die müsste ja
>wenigstens auf 0x02 springen ...

Nö, wie denn auch wenn der Int nicht aktiviert ist?

von Veit K. (veitchen)


Lesenswert?

komischerweise kam bei UBRRH eine fehlermeldung ... jetzt hab ichs grad 
nochmal eingegeben und jetzt compiliert er es, sollte aber eh auf 0




>UCSRB |= (1<<RXEN) | (1<<TXEN);
>die flag variable hab ich nur zum debuggen rein, die müsste ja
>wenigstens auf 0x02 springen ...

>>Nö, wie denn auch wenn der Int nicht aktiviert ist?

danke für deine antwort, kannst du mir auch eine lösung sagen?

von holger (Gast)


Lesenswert?

>danke für deine antwort, kannst du mir auch eine lösung sagen?

Tut mir leid, Ich bin hier nur für Tips zuständig.
Der mit der Lösung schläft schon ;)

von Veit K. (veitchen)


Lesenswert?

super sinnvoll danke

von Michael U. (amiga)


Lesenswert?

Hallo,

Veit K. schrieb:
>>UCSRB |= (1<<RXEN) | (1<<TXEN);
>>die flag variable hab ich nur zum debuggen rein, die müsste ja
>>wenigstens auf 0x02 springen ...
>
>>>Nö, wie denn auch wenn der Int nicht aktiviert ist?
>
> danke für deine antwort, kannst du mir auch eine lösung sagen?

da holger gerade nicht will, sage ich Dir die Lösung:

Einfach den passenden Interrupt für USART_RX__vect freigeben...

Gruß aus Berlin
Michael

von Veit K. (veitchen)


Lesenswert?

UCSRB |= (1<<UDRIE);

^^wäre wohl die antwort gewesen die ich gesucht habe.
@michael: danke für den hinweis.

@rest: ist mir schon klar ich habs übersehen und ich habs im datenblatt 
und in codebeispielen nicht gefunden. aber wenn ihr euch schon die mühe 
macht was zu schreiben dann wäre eine antwort wie "es gibt noch ein 
interrupt enable flag schau ins datenblatt" hilfreich gewesen, ich 
verlange ja nicht das es jemand für mich raussucht .. ich dachte mit tx 
und rx enable wäre der interrupt mit dabei

von Michael U. (amiga)


Lesenswert?

Hallo,

wenn eine Komponente nicht macht, was man erwartet, JEDES Bit der 
Controlregister auf seine Bedeutung abklopfen.
Dann stolpert man spätestens nach ein paar Minuten darüber.

Den Hinweis, welche Registerinitialisierung klemmt, hat ja holger schon
am 12.07.2009 23:08 geliefert.

Ein Blick ins Datenblatt zur Registerbeschreibung von UCSRB hätte das 
Rätsel also schon lösen können...

Gruß aus Berlin
Michael

von Veit K. (veitchen)


Lesenswert?

jo, bin wohl zusehr über das codebeispielt im datenblatt gestolpert.

werds jetzt gleich mal testen, hoffe die baudrateneinstellung stimmt.

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.