UART auf ATMega328p sendet nicht

OP #6415059
Lesenswert?
• ▲
▼
Hallo zusammen,

Ich versuche auf dem ATMega328p über UART zu senden.
Der TX Pin geht zwar nach aktivieren und setzen der Baud Rate auf 5V 
aber leider wird nichts gesendet. Der TX Pin bleibt dauerhaft auf 5V 
(Oszilloskop).
Der interne Oszillator (auf 8Mhz gefused) wird benutzt.

Der benutzte Quellcode ist:
1
#include <avr/io.h>
2

3
#define UBRR_9600 51 //value for UBRR for baud rate 9600 with 8Mhz
4

5
void uart_init(uint16_t ubrr)
6
{
7
  UCSR0B |=  (1 << TXEN0) | (1 << RXEN0);
8
    // set baudrate in UBRR
9
    UBRR0L = (uint8_t)(ubrr & 0xFF);
10
    UBRR0H = (uint8_t)(ubrr >> 8);
11
}
12

13

14
void uart_putc(unsigned char data)
15
{
16
  // wait for transmit buffer to be empty
17
    while(!(UCSR0A & (1 >> UDRE0)));
18
    // load data into transmit register
19
    UDR0 = data;
20
}
21

22

23
int main () 
24
{
25
  uart_init(UBRR_9600);
26
  while(1)
27
  {
28
    uart_putc('c');
29
  }
30
}

Hat jemand eine Idee warum der TX Pin einfach auf 5V bleibt?

Viele Grüße
OP #6415107
Lesenswert?
• ▲
▼
Carl D. schrieb:
> (1 >> UDRE0)
>
> hat welchen Wert?

Das Bit ist dauerhaft gesetzt.

Überprüft mit:
1
void uart_putc(unsigned char data)
2
{
3
  // wait for transmit buffer to be empty
4
  if (UCSR0A & (1 << UDRE0))
5
  {
6
    PORTC |= (1 << PC0);
7
  }
8
  else
9
  {
10
    PORTC &=~(1 << PC0);
11
  }
12
  while(!(UCSR0A & (1 >> UDRE0)));
13
  // load data into transmit register
14
  UDR0 = data;
15
}
#6415116
Lesenswert?
• ▲
▼
Lukas B. schrieb:
> Matthias S. schrieb:
>> Schon mal wichtig :-P
>> Im Moment noch nicht interessant, aber wenn UCSZ02 - UCSZ00 im UCSR0C
>> Register alle 0 sind, dann sendest du im 5-Bit Format.
>
> Danke, das behalte ich im Hinterkopf.
> Allerdings sollte wie bereits angemerkt, auch so schon etwas auf dem
> Oszilloskop zu sehen sein.
>
> Viele Grüße

Das wird es auch wenn du nicht darauf wartest, ob
 (irgendwas & (1 >> 5))
Jemals ungleich 0 wird.

Hint: >> Shift nach rechts

PS: meinen Vorwurf nehme ich zurück.
Typisch ist "User vor Jahren angelegt mit ganz wenigen Posts -> Troll".
OP #6415125
Lesenswert?
• ▲
▼
Carl D. schrieb:
> Lukas B. schrieb:
>> Matthias S. schrieb:
>>> Schon mal wichtig :-P
>>> Im Moment noch nicht interessant, aber wenn UCSZ02 - UCSZ00 im UCSR0C
>>> Register alle 0 sind, dann sendest du im 5-Bit Format.
>>
>> Danke, das behalte ich im Hinterkopf.
>> Allerdings sollte wie bereits angemerkt, auch so schon etwas auf dem
>> Oszilloskop zu sehen sein.
>>
>> Viele Grüße
>
> Das wird es auch wenn du nicht darauf wartest, ob
>  (irgendwas & (1 >> 5))
> Jemals ungleich 0 wird.
>
> Hint: >> Shift nach rechts
>
> PS: meinen Vorwurf nehme ich zurück.
> Typisch ist "User vor Jahren angelegt mit ganz wenigen Posts -> Troll".

Ah natürlich. Jetzt funktioniert es. Schon ein bisschen peinlich.
Vielen Dank!

Antwort schreiben

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.

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.