usart konfiguration atmega8515 9600 N 1 GCC

OP #1331794
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
Gast
>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?
OP
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?
Gast
>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 ;)
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
OP
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
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.