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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren