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")
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.
> 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.