www.mikrocontroller.net

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


Autor: Veit K. (veitchen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kay I. (imperator)
Datum:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Veit K. (veitchen)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Veit K. (veitchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super sinnvoll danke

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Veit K. (veitchen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Veit K. (veitchen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo, bin wohl zusehr über das codebeispielt im datenblatt gestolpert.

werds jetzt gleich mal testen, hoffe die baudrateneinstellung stimmt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.