Forum: Mikrocontroller und Digitale Elektronik UART auf ATMega328p sendet nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Lukas B. (lukas_be)


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

von Carl D. (jcw2)


Bewertung
1 lesenswert
nicht lesenswert
(1 >> UDRE0)

hat welchen Wert?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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

von Carl D. (jcw2)


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

Aber auch 5-Bit würden mit einem Startbit beginnen. ;-)

von Veit D. (devil-elec)


Bewertung
0 lesenswert
nicht lesenswert

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Bewertung
0 lesenswert
nicht lesenswert
Carl D. schrieb:
> Aber auch 5-Bit würden mit einem Startbit beginnen. ;-)

Da hast du recht. Ich wollte nur der nächsten Frage vorbeugen :-)
Sicher ist dein Tip der wichtige Schritt, wie ich neidlos anerkenne.

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Hoffen wir mal, daß 3 Posts in 6 Jahren nichts besonderes bedeuten.

von Lukas B. (lukas_be)


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

von Lukas B. (lukas_be)


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

von Carl D. (jcw2)


Bewertung
1 lesenswert
nicht 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".

: Bearbeitet durch User
von jo mei (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Lukas B. schrieb:
> while(!(UCSR0A & (1 >> UDRE0)));
----------------------^^-------------

Ja, das Shift Right ist hier generell falsch.

von Lukas B. (lukas_be)


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

: Bearbeitet durch User
von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Lukas B. schrieb:
>
> Ah natürlich. Jetzt funktioniert es. Schon ein bisschen peinlich.
> Vielen Dank!

Das gibt es auch 35Jahren noch, daß man Tomaten auf den Augen hat, wie 
ich ab und an feststellen muß. ;-)

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]
  • [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.

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