Hallo erstmal!
Ich versuche gerade Befehle(Koordinatenositionen) von meinem PC zu einem
Motortreiber über meinem Mikrocontroller (der ATmega644p, der 2
USART-Port besitzt (USART0 und USART1) zu senden.
Das Protokoll soll folgendermaßen aussehen:
- Der PC schickt zunächst die Befehle über USART0 nacheinander an dem
Mikrocontroller. Jeder Befehl sieht so aus: \nx,y\r.
mit \n: Beginn des Befehls
x: Position auf der x-Achse
,: Trennung zwischen x und y
y: Position auf der y-Achse
\r: Ende des Befehls
- Der Mikrocontroller leitet die empfangenen Daten an dem Motortreiber
nacheinander über USART1 weiter. Dabei muss der Mikrocontroller auf ein
Feedback des Motortreibers für jede weitergeleiteten Data warten bevor
er der nächste Befehl schickt.
Dh, zwischen zwei Befehlen, muss der Motortreiber ein Feedback zum
Mikrocontroller liefert, um bescheid zu sagen, ob der empfangene Befehl
als gültiger oder ungültiger Befehl betrachten muss.
Beispiel: gesendetes Befehl --------------------------------> "#2A\r"
Feedback Motortreiber(Wenn Befehl gültig ist) ----> "2A\r"
Feedback Motortreiber(Wenn Befehl ungültig ist) --> "2A?\r"
Der Motortreiber ist ansprechbar, wenn die Befehle folgendermaße
aussehen:
"Beginn des Befehls, Nummer des Motortreibers, Befehl zu ausführen, Ende
des Befehls "
Beispiel mit: "#3p2\r"
#: beginn des Befehls
3: Nummer des Motortreibers
p2: Arbeitsmodus
\r: Ende des Befehls
Irgendwie funktioniert das nicht so recht und ich komme einfach nicht
weiter. Ich vermute dass es an dem Zusammenspiel zwischen USART0 und
USART1 liegt.
Es gibt wahrscheinlich Konflikt zwischen ISR(USART0_RX_vect) und
ISR(USART1_RX_vect).
Vielleicht kann mir jemand hier helfen.
Ich wäre sehr dankbar
Im Anhang liegt mein Code.
Ich versuche gerade Befehle(Koordinatenositionen) von meinem PC zu einem
Motortreiber über meinem Mikrocontroller (der ATmega644p, der 2
USART-Port besitzt (USART0 und USART1) zu senden.
Das Protokoll soll folgendermaßen aussehen:
- Der PC schickt zunächst die Befehle über USART0 nacheinander an dem
Mikrocontroller. Jeder Befehl sieht so aus: \nx,y\r.
mit \n: Beginn des Befehls
x: Position auf der x-Achse
,: Trennung zwischen x und y
y: Position auf der y-Achse
\r: Ende des Befehls
- Der Mikrocontroller leitet die empfangenen Daten an dem Motortreiber
nacheinander über USART1 weiter. Dabei muss der Mikrocontroller auf ein
Feedback des Motortreibers für jede weitergeleiteten Data warten bevor
er der nächste Befehl schickt.
Dh, zwischen zwei Befehlen, muss der Motortreiber ein Feedback zum
Mikrocontroller liefert, um bescheid zu sagen, ob der empfangene Befehl
als gültiger oder ungültiger Befehl betrachten muss.
Beispiel: gesendetes Befehl --------------------------------> "#2A\r"
Feedback Motortreiber(Wenn Befehl gültig ist) ----> "2A\r"
Feedback Motortreiber(Wenn Befehl ungültig ist) --> "2A?\r"
Der Motortreiber ist ansprechbar, wenn die Befehle folgendermaße
aussehen:
"Beginn des Befehls, Nummer des Motortreibers, Befehl zu ausführen, Ende
des Befehls "
Beispiel mit: "#3p2\r"
#: beginn des Befehls
3: Nummer des Motortreibers
p2: Arbeitsmodus
\r: Ende des Befehls
Irgendwie funktioniert das nicht so recht und ich komme einfach nicht
weiter. Ich vermute dass es an dem Zusammenspiel zwischen USART0 und
USART1 liegt.
Es gibt wahrscheinlich Konflikt zwischen ISR(USART0_RX_vect) und
ISR(USART1_RX_vect).
Vielleicht kann mir jemand hier helfen.
Ich wäre sehr dankbar
Im Anhang liegt mein Code.