gib mach das ganze casting dazu, auch wenn's bescheuert aussieht.Code:uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*BAUDRATE) - 1);
N'abend,
also weil ich es noch nie brauchte habe mich noch nie mit UART beschäftigt, da es aber jetzt mal dran ist, bin ich seit zwei Tagen
am Probieren und es klappt irgendwie nicht.
Ich hab das Beispiel von RN-Wissen genommen.
Leider kommen nur Zeichen an.
Ich habe TX/RX mal kurzgeschlossen und wenn ich über ein terminal was raus gebe kommt auch das richtige an.
Hab ich was übersehen?
Benutze den Rn-Control(Atmega32)
Code:#include<avr/io.h> #defineF_CPU16000000L #defineUSART_BAUD_RATE9600 #defineUSART_BAUD_SELECT(F_CPU/(USART_BAUD_RATE*16L)-1) //----------------------------------------------------- void_writeString(constchar*string) { while(*string) { while(!(UCSRA&(1<<UDRE))) {} UDR=*string++; } } //----------------------------------------------------- voidmain() { UCSRB=(1<<TXEN); UCSRC=(1<<URSEL)|(1<<UPM1)|(1<<UCSZ1)|(1<<UCSZ0); // UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); UBRRL=(unsignedchar)USART_BAUD_SELECT; _writeString ("Hallo, Welt!\n"); // Endlossschleife nach Verlassen von main }
Ich kam, sah und alles funktionierte **** doch dann klingelte mein Wecker!!!
gib mach das ganze casting dazu, auch wenn's bescheuert aussieht.Code:uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*BAUDRATE) - 1);
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ne hat leider auch nicht geklappt, es kommt jedes Zeichen an, nur nicht das was ankommen soll... So ein kurzer Code, was kann man denn da übersehen haben.
hab den auf extern 16.000 64 ms gestellt, und noch die Optimierung auf das unterste.
Gruß David
Ich kam, sah und alles funktionierte **** doch dann klingelte mein Wecker!!!
Du setzt UPM1 (Parity even enabled)
Weiss das Terminal auch was davon ?
Probier mal ohne
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ja hatte schon einmal mit und einmal ohne ausprobiert...
Ich kam, sah und alles funktionierte **** doch dann klingelte mein Wecker!!!
Hartnäckig.
Also stelle das Terminal auf 8-Bit 1 Stop no parity, no handshake, 9600 Baud
Das UPM1 lass also aus.
Setze mal UBRR Wert "zu Fuß" (9600 bei 16 MHZ) #define USART_BAUD_SELECT 0x67
Check nochmal die Fuses wegen der Clock=16 MHZ
Statt "Hallo, Weilt" schicke "AAAAAAAA" ( 8 mal "A")
sag dann, welche Art Schmierzeichen zu kriegst und ob es 8 sind oder mehr oder weniger
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Also es kommt Dezimal="01011111" und als zeichen 8 mal = "_"
Hoffe man kann damit was anfangen
Ich kam, sah und alles funktionierte **** doch dann klingelte mein Wecker!!!
Hallo,
sowas hatte ich auch schon mal. Benutzt du einen Quarz? Ohne habe ich nie eine stabile UART-Kommunikation hinbekommen. Das Ergebnis so so ähnlich aus wie bei dir.
Es könnte auch an deiner Verkabelung liegen. A = 65dez = 01000001bin. Bei dir scheints genau invertiert anzukommen. (Ich habe jetzt nicht genau die Start-/Stop-Bits im Kopf, sieht aber tatsächlich komplett invertiert sein)
Viele Grüße
Andreas
also ich benutze es im Moment zur Probe Rn-control. (16MHz) Verkabelung kann man nicht ändern, weil ein port ist ja zum senden ein zu empfangen, senden tut der Mic ja, der dritte ist ja masse, also sollte die Verkabelung falsch sein, würde er ja nichts senden. Wie ich das inventwierte weg bekomme, weis ich aber nicht, der Code ist ja so wie er bei RN-Wissen steht.
Das einzige was ich mir vorstellen kann, wäre das RX/TX an Port C ist, weil die led gehen auch bei "00" an und bei "ff" aus.
Gruß David
Ich kam, sah und alles funktionierte **** doch dann klingelte mein Wecker!!!
Ich kenne das RN-Control leider nicht. Mit dem Pinning hast du recht. Die Verbindungen selbst hast du richtig gemacht.
Aber ein Inverter ist ja schnell gebaut und getestet. Zwei Widerstände und ein NPN-Transistor und fertig.
z.B. über 1kOhm des Ausgangs des RN-Controls an die Basis des Transistor (z.B. BC547). Emitter auf Masse, Collector an den Eingang deines PC und an einen Pull-Up-Widerstand. (kann auch 1kOhm sein)
Lesezeichen