UART TXD Atmega8

Gast #4827790
Lesenswert?

Hallo,
ich bin noch nicht lange beim Thema MC. Nun wollte ich mich mit dem UART 
beschäftigen und komme nicht weiter. Ich habe auch gerade noch keinen 
MAX232 zur Hand und kann daher keine Daten zum PC senden. Deshalb habe 
ich erstmal eine LED an TXD angeschlossen, aber die gibt kein Signal von 
sich. Auch an PD7 ist eine LED angeschlossen (zur Kontrolle).Hier mein 
Quelltext:

#include <avr/io.h>
#define F_CPU 16000000
#include<util/delay.h>
#define BAUD 31250
#include<util/setbaud.h>

void uart_init(void)
{

  UBRRH = UBRRH_VALUE;
  UBRRL = UBRRL_VALUE;
 UCSRB |= (1<<TXEN);
 UCSRC  = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);

}

int main(void)
{  DDRD = 0b11111011;
   while(1)
   {  while(!(UCSRA & (1<<UDRE)))
            {
      }
          UDR = 0b11110000;
        PORTD |=  (1<<PD7);
              _delay_ms(1000);
                          PORTD &= ~(1<<PD7);
                             _delay_ms(1000);
   }
}

Was mache ich da verkehrt? Warum gibt die LED Kein Signal von sich ?
Ich würde mich freuen wenn mir Jemand auf die Sprünge helfen könnte.
Danke schonmal.
#4829167
Lesenswert?

Hallo,
danke erstmal für eure Antworten.
Das mit der Funktion habe ich verstanden.
Bevor ich gestern die Funktion (von der ich nicht einmal wusste was sie 
ist) benutzt habe, hatte ich die Register vom UART in main initialisiert 
und hatte das selbe Problem wie jetzt: die an TXD angeschlossene LED 
leuchtet ständig (also ununterbrochenes high Potenzial).
Warum wird nicht im 2-Sekundentakt ein Byte ausgegeben?
1
#include <avr/io.h>
2
#define F_CPU 16000000
3
#include<util/delay.h>
4
#define BAUD 31250
5
#include<util/setbaud.h>
6

7
void uart_init()
8
{
9

10
  UBRRH = UBRRH_VALUE;
11
  UBRRL = UBRRL_VALUE;
12
 UCSRB |= (1<<TXEN);
13
 UCSRC  = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
14

15
}
16

17
int main(void)
18
{  DDRD = 0b11111111;
19
   uart_init();
20
   while(1)
21
   {  while(!(UCSRA & (1<<UDRE)))
22
            {
23
            }
24
           UDR = 0b11110000;
25
        PORTD |=  (1<<PD7);
26
        _delay_ms(1000);
27
              PORTD &= ~(1<<PD7); 
28
              _delay_ms(1000);
29
   }
30
}

Ich hoffe ich nerve euch nicht zu sehr.
Danke

--

C-Quelltext in [ c ] [ /c ] -Tags einschließen, wie es auch oberhalb des 
Texteingabefeldes unter "Formatierung" steht.

-rufus
#4829198
Lesenswert?

Falk H. schrieb:
> Wie mache ich das mit dem Formatieren ?
> 9600 Baud hatte ich gestern auch schon. War das selbe Problem. Müsste
> zwischen den Bytes nicht LOW Pegel sein?
> Datenblatt sehe ich mir gleich nochmal an.
>
> Danke

Zum Formatieren die c-code tags wie im Antwortform angegeben benutzen
und dann die geschwungenen Klammern nett ausrichten etc.

9600 ist wahrscheinlich auch noch zu schnell am besten mal was gaaanz
langsames (vllt. 300) zum testen nehmen und als zu sendendes Byte 
0b01010101.
#4829229
Lesenswert?

Was hießt " wie im Antwortform angegeben "
Und danke erstmal. Ich habe 300 Baud eingegeben und dann sah ich die 
Unterbrechung im High-Signal. Ich habe jetzt die LED umgedreht und gegen 
vcc (statt gnd) geschaltet und nun sehe ich den Impuls sogar bei 31250 
(weil ich mit Midi experimentieren will).
Also ist zwischen den Bytes High Pegel auf TXD ?!
Soweit war ich noch nicht.

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