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.
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
:
Bearbeitet durch User
Hi, kannst Du mal bitte dein Coding C-mäßig formatieren. Und nimm bitte eine niedrigere Baudrate vielleicht siehst Du dann das kurze flackern. Im Datenblatt ist eine simple Initialisierungs- und Senderoutine angegeben, versuche es mal damit.
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
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.
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.
Falk H. schrieb: > Also ist zwischen den Bytes High Pegel auf TXD ?! Ruhesignal ist am µC immer high Invertiert wird im MAX
Falk H. schrieb: > Also ist zwischen den Bytes High Pegel auf TXD ?! So ist das seit Urzeiten bei allen UARTs (einige MCs können die UART-Pegel invertieren, der AVR nicht).
Super , danke , das das bei Midi so ist wusste ich und dachte dafür muss ich invertieren... Das hat mir sehr geholfen . Ich wünsche dir noch einen schönen Abend.
Falk H. schrieb: > Was hießt " wie im Antwortform angegeben " Ich hab' das jetzt mal für Dich gemacht. Dein Quelltext ist allerdings trotzdem grauenerregend formatiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.