Hallo Leute, was genau sendet der arduino seriell aus wenn ich den befehl benutze: serial.write("<A>"); serial.print("<A>"); das sind ja nun ascii zeichen aber kommt nach jedem von mir bestimmten zeichen noch ein weiteres zeichen sowas wie carriage return oder new line oder sowas ? ich versuche grade meinen Arduino mit meinem Assembler AVR kommunizieren zu lassen und da ist mir aufgefallen dass nach < erstmal noch ein anderes Zeichen reinkommt statt des A. aber was für eins ? Gruß Stefan
Stefan S. schrieb: > zu lassen und da ist mir aufgefallen dass nach < erstmal noch ein > anderes Zeichen reinkommt statt des A. aber was für eins ? Da darf keins kommen. Irgendwas ist bei Dir faul.
> was genau sendet der arduino seriell aus wenn ich den befehl benutze: > > serial.write("<A>"); > serial.print("<A>"); Bei beiden ist erstmal kein Unterschied. Es wird ein '<' gesendet, dann ein 'A' und dann ein '>'. Was willst Du denn wirklich schicken? Vielleicht nur ein 'A' gefolgt von CR und LF? Dann: serial.println ("A"); > das sind ja nun ascii zeichen aber kommt nach jedem von mir bestimmten > zeichen noch ein weiteres zeichen sowas wie carriage return oder new > line oder sowas ? serial.println ("Hello World") hängt automatisch ein CR und ein LF an. Alternativ kannst Du schreiben: serial.print ("Hello World\r\n")
:
Bearbeitet durch Moderator
Google kaputt gemacht? Wenn nicht: https://www.arduino.cc/en/Serial/write https://www.arduino.cc/en/Serial/print Im Übrigen sollte .print nicht so benutzt werden. PS: Willst Du einen Zeilenvorschub ausgeben, so musst Du das dem System schon sagen bzw. ihn in den String einbauen oder abhängen.
würde ich auch sagen nur speichere ich jedes byte ab sobald das < kommt. in meiner hauptroutine wird dann geschaut ob die übertragung fertig ist und dann wird ausgewertet, nun ist es so dass das Erste byte ein < ist danach kommt irgendwas anderes und erst dann kommt das A... USART_RXC: in temp, UDR ; Daten empfangen gucken ob start cpi temp, 60 ; < Startzeichen gesendet ? breq USART_START ; ja dann speichern für nächstes zeichen lds temp, RXStart cpi temp, 1 breq USART_Zeichen_1 cpi temp, 2 breq USART_Zeichen_2 cpi temp, 3 breq USART_Zeichen_3 USART_START: sts ASCII, temp ldi temp, 1 sts RXStart, temp ; Startzeichen reti USART_END: clr temp sts RXStart, temp ;RXStart auf 0 stellen weil übertragung beendet wurde und damit der kram beim nächsten mal von vorne losgeht ldi temp, 1 sts RXEnd, temp ; RXEnd auf 1 stellen... String wurde empfangen und hauptroutine darf das jetzt von ascii nach bin umrechnen reti USART_Zeichen_1: in temp, UDR sts ASCII1, temp ldi temp, 2 sts RXStart, temp reti USART_Zeichen_2: in temp, UDR sts ASCII2, temp cpi temp, 62 ; > Endzeichen wurde gesendet ? dann merker setzen für die ASCII 2 Bin Umrechnung breq USART_END ldi temp, 3 sts RXStart, temp reti USART_Zeichen_3: in temp, UDR sts ASCII3, temp cpi temp, 62 ; > Endzeichen wurde gesendet ? dann merker setzen für die ASCII 2 Bin Umrechnung breq USART_END ldi temp, 4 sts RXStart, temp ... das geht das so weiter bis zu 13 Zeichen...
was ich schicken will ist <A> mehr nicht... das < kommt an dann kommt irgendwas anderes dann das A. Ob zwischen A und > dann wieder irgendwas kommt kann ich noch nicht sagen also so im speicher steht dann folgendes : ASCII: < ASCII1: irgendwas ASCII2: A
Stefan S. schrieb: > also so im speicher steht dann folgendes : > > ASCII: < > ASCII1: irgendwas > ASCII2: A Stefan S. schrieb: > ich versuche grade meinen Arduino mit meinem Assembler AVR kommunizieren > zu lassen Dafür kann es mehrere Gründe geben: 1. Deine Empfangsroutine in Assembler auf dem AVR hat einen Bug. 2. Die verwendete Baudrate (welche?!?) stimmt nicht genau genug überein. 3. Datenbreite oder Parity stimmen nicht überein. Jedenfalls können wir das nicht aus einer Zeile Code herauslesen. Die Glaskugel habe ich verliehen. Um 1. auszuschließen, könnte man mit einem USB-UART-Adapter am PC mitlesen. Für 2. und 3. braucht man mehr Informationen.
:
Bearbeitet durch Moderator
> 1. Deine Empfangsroutine in Assembler auf dem AVR hat einen Bug. > 2. Die verwendete Baudrate (welche?!?) stimmt nicht genau genug überein. > 3. Datenbreite oder Parity stimmen nicht überein. Wenn da tatsächlich '<' und 'A' ankommt, so sollte man doch 2. und 3. ausschließen können, dann bleibt nur noch 1.
baudrate is beim avr 9600 UBRR= 103 bei 16MHz kein doublespeed... und im arduino Serial.Begin(9600) hier meine UART einstellungen: ldi temp, (1<<UDRE) | (0<<U2X) ; schreiben in Transmit-Buffer erlauben, kein double speed out UCSRA, temp ldi temp, (1<<RXCIE) | (1<<RXEN) | (0<<TXEN) | (0<<UCSZ2) ; RX Complete interrupt einschalten | Receiver einschalten | Transmitter ausschalten | kein 9-Bit-Modus out UCSRB, temp ldi temp, (1<<URSEL) | (0<<UMSEL) | (0<<UPM0) | (0<<USBS) | (3<<UCSZ0) ; in UCSRC schreiben | Asynchron | keine Parity | 8 Datenbits | 1 Stopbit out UCSRC, temp ldi temp, 0 ;----------\ out UBRRH, temp ; \ UBBR auf 103 ldi temp, 103 ; out UBRRL, temp ;----------/
Hallo, da sowohl das Senden wie auch der Empfang buggy sein können (manchmal beides), prüft man in so einem Fall erst mal nach, was real auf der Leitung gesendet wird - tritt da das unerwünschte Zeichen auf, so ist das Senden kaputt, ist die Zeichenfolge auf der Verbindungsleitung korrekt, so stimmt mit dem Empfang was nicht. Georg
hallo leute ich hab and port b jetzt 8 leds und kann dort sehen was in den einzelnen registern steht die ich vom arduino gesendet bekomme. Arduino sendet: Serial.print("<0B254>"); das kkommt auch so über den seriellen monitor raus.. gespeichert im assembler AVR wird: <<0B254> also das wundert mich jetzt schon weil die software sieht ok xD ?!
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.