PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART - Buffer Problem?



spelli2001
05.05.2012, 09:12
Hallo,

ich habe hier einen Joystick, bei dem das 10K Poti über ADC ausgewertet wird:

http://www.sparkfun.com/products/9032

Diese Werte werden von einem Atmega16 ausgewertet und per UART an einen Atmega8 übertragen (bspw. per print "A").

Auf der Empfangsseite des Atmega8 verwende ich folgendes (cmd = Byte):


If Ischarwaiting() = 1 Then
Cmd = Inkey()
End If

Select Case Cmd

tu irgendwas

End Select



Mein Problem ist nun folgendes:

Ich bewege den Joystick für 1 Sekunde in eine Position und dabei werden natürlich jede Menge Bytes übertragen, in diesem Fall viele "A".

Das hat natürlich zur Folge, dass mit dem o. g. Code natürlich auch viele diese Bytes eingelsen und umgesetzt werden; also wenn 1x "A" Motor für 100 ms ON bedeutet, hört der natürlich nicht mehr auf...

Ich hoffe ich konnte die Problematik darstellen.

Vielen Dank für eure Hilfe,

Christoph

Kampi
05.05.2012, 13:03
Hi,

was würde den dagegen sprechen wenn du eine 0 o.ä. sendest solange der Joystick in Ruheposition ist und dann machst du eine while()-Schleife.
Solange ein A gesendet wird soll der Motor anbleiben. Dann hört er sofort auf sobald kein A mehr gesendet wird.
Oder du sagst das nach dem ersten Senden des Buchstaben ein Flag gesetzt wird, welches erst wieder gelöscht wird wenn der Joystick eine andere Position eingenommen hat. Und damit überhaupt gesendet werden kann muss das Flag auf 0 sein. In etwa so:

Joystick nach Vorne -> ADC detektiert das und es wird z.B. im Controller dem Buchstaben V zugeordnet.
Jetzt willst du das V senden. Dabei wird gecheckt ob das Flag V_gesendet schon gesetzt wurde. Da du zum ersten mal was sendest ist das Flag = 0. Jetzt sendest du V und das Flag V_gesendet wird auf 1 gesetzt. Dadurch wird ein erneutes Senden blockiert. Erst wenn du den Joystick nach hinten bewegst und dadurch ein z.B. Z detektiert wird setzt du das Flag zurück.

So in etwa sollte das Problem gelöst werden können (ist vielleicht noch nicht perfekt aber ich denke es ist ein guter Ansatz für eine Lösung).

spelli2001
05.05.2012, 16:08
Hallo!

Danke für den Tipp - es hat auch eine Verkleinerung des Pufferspeichers geholfen!

spelli2001
06.05.2012, 10:19
##########