Hallo und grüß euch, also ich möchte folgendes realisieren: Dazu besteht folgende Hardware: Ein Messstation schickt ständig per Funk alle 100ms 34 bytes auf ein Terminal. Das Terminal ist ca 10x10cm groß und besteht nur aus einem M32 und ein Display und zwei Tasten für rauf und runter. Die 34 bytes bestehen aus einem Anfangsbyte, 32 Datenbytes und ein Endbyte. Die 32 Datenbytes sind genau die 32 Zeichen des 2x16 Displays. Also alles was die Messstation schickt, sehe ich alle 100ms am Display ( Natürlich nicht Anfangs und Endbyte ). Nachdem die 34 Bytes angekommen sind, schickt das Terminal direkt 5ms danach ein Byte zurück an die Messstation. Es können drei verschiedene Bytes zurückgeschickt werden. Das erste Byte ist "Taste Runter", das zweite Byte ist "Taste rauf" und das dritte Byte ist "Ich drücke keine Taste". Wenn ich keinen Taster drücke, kommt ständig alle 100ms der selbe Text der Messstation. Drücke ich eine Taste kann ich durch das Menü hüpfen und mir mehrere Messdaten anzeigen lassen. Nun möchte ich dass dies automatisch passiert, also ich nicht mehr Tasten drücken muss. Ich möchte gerne, dass alle 5 Ebenen automatisch rauf und runterlaufen. In jeder Ebene werden natürlich die Messwerte gesondert gespeichert. Der Vorteil liegt darin, dass ich nicht mehr nur eine Ebene sehe, sondern die Daten dann anders aufs Display ausgebe, damit ich alle Daten der 5 Ebenen sehe. So, ich hoffe ihr versteht mein Vorhaben. Ich habe schon ein Bascom Programm fertig, mit dem es mit den Tasten funktioniert durch das Menü zu springen, aber wie mache ich es, dass es automatisch läuft? Ich habe ebenfalls das RS232 Protokoll mit HTerm an und sehe genau, was läuft. Nun hätte ich folgendes probiert, also sprichwörtlich( "Daten" ist ein Strin*34), Taste ist die Antwort die ich zurücksende: Do Do Taste=Rauf Loop until Mid(Daten,2,6)="Ebene1" Do Taste=Runter Loop until Mid(Daten,2,6)="Ebene2" Loop End Das Programm soll folgendes bewirken: Egal in welcher Ebene sich die Messstation gerade befindet, springe solange rauf, bis er bei der ersten Ebene ist und dann springe solange runter, bis er bei der fünften Ebene ist. Dann ist das Programm fertig und es geht von neuem los. Wenn ich das Programm so starte, macht er eigentlich genau das richtige, wenn da nicht das große ABER wäre: es geht alles ganz schnell, nur wenn er bei der Ebene1 angekommen ist und will wieder runter, bleibt er ziemlich lange bei der Ebene2 stehen ( Ca. 1,7 Sekunden ) und geht erst dann weiter runter. Das gleiche passiert auch unten. Also er ist auf Ebene5 und will wieder rauf, aber bei Ebene4 verbleibt er wieder ca. 1,7 Sekunden, dann geht er aber mit jede 100ms rauf zu Ebene1. also Ebene2 und Ebene4 dauern sooo lange und ich weis nicht warum. Er sendet aber das richtige Byte zurück... Könnt ihr mir bei meinem Problem helfen? Oder wisst ihr eine bessere Möglichkeit? Vielen Dank! Lg Peter
Sorry, kleiner Tippfehler: Do Do Taste=Rauf Loop until Mid(Daten,2,6)="Ebene1" Do Taste=Runter Loop until Mid(Daten,2,6)="Ebene5" Loop End Ebene5 nicht Ebene2...
da nimmste einfach nen timer und zählst mit dem den index runter und gut ist.
Hallo, danke für deine Antwort. Könntest du mir das bitte vielleicht noch genauer erklären? Also du meinst zb. alle 100ms lasse ich durch einen Timer eine Taste drücken? Lg Peter
Wer soll das ablesen können? 10 mal/sec einen anderen Text.
Darum ist es auch Sinn der Sache, durchs Menü zu hüpfen und die verschiedenen Werte einzusammeln und dann alle auf einmal anzuzeigen... Ausserdem sind die 100ms fix vorgegeben und können nicht verändert werden. Gut, man könnte zb. alle 200ms hüpfen, dann muss ich aber dazwischen immer wieder eine "Nicht betätigte Taste" schicken. Auch nicht Sinn der Sache... Also wüsste wer vielleicht noch einen Plan? Oder kann mir einer sagen, wieso das mit der Do - Loop Until Schleife nicht richtig funktioniert? Lg Peter
>Darum ist es auch Sinn der Sache, durchs Menü zu hüpfen und die >verschiedenen Werte einzusammeln und dann alle auf einmal anzuzeigen... Wie willst du bei 2*16 Zeichen 5 verschiedene Menüs mit je 32 Zeichen gleichzeitig anzeigen? Oder habe ich etwas falsch verstanden?
Hallo, also auf den fünf Ebenen befindet sich jeweils nur ein "kurzer" Messwert. Das würde sich ausgehen auf einem 2x16 Display. Leider hab ich keine Ahnung wie. Hab gestern wieder probiert, doch habe keinen Plan... Vielen Dank Lg Peter
Du musst die NAchrichten im Hintergrund auf die Werte parsen und die gesammelten Werte dann auf den LCD schicken..
@Peter mal noch 2 Fragen: 1) was passiert wenn du keine Informationen über den Tastenzustand sendest? Werden dann weiter Messwerte vom anderen Modul zurückgeliefert, oder stoppt die Übertragung? 2) kannst du anhand der gelieferten Messwerte zuordnen zu welchem Menüpunkt der Wert gehört? -> häng doch mal an wie die Messwerte ausehen! Sascha
Hallo Sascha, danke für deine Bemühungen. Also folgendes: 1: Wenn ich nichts zurücksende, dann stoppt die Übertragung zwar nicht, aber es wird alles viel langsamer, er kommt halt aus dem "Takt" und sendet immer wieder die gleichen 34 bytes. Also kurz gesagt, ich muss ein byte zurückschicken, wenn die 34 bytes angekommen sind. Das geschieht bei mir in dem Empfangsinterrupt gleich mit. Das funktioniert auch. 2: Ja zuordnen ist kein Problem. Da weis ich schon, wo was hingehört. In Zukunft möchte ich auch auf ein 128x64 GLCD umsteigen, dann ist der Überblick besser. Aber erst eins nach dem anderen... Wegen der Daten: Ich lese also ein Byte nach dem anderen ein bis 34 bytes angekommen sind und lege diese mittels einem "Dim ...as ...Overlay" als einen String mit 34 Zeichen ab. Das schaut dann etwa so aus : "xEbene1 Spannung1 UBat=5.0V x". Die x stehen für Anfangs und Endbyte. Ich komme einfach nicht dahinter, wie ich das durchlaufen lassen kann. Ich werde wohl probieren, probieren und probieren müssen... Danke Lg Peter
also wenn du die 34Byts im Array speicherst, werden dann alle Daten im selben Array gespeichert (1) und so die zuvor empfangen Byts überschrieben, oder trennst du das schon beim Empfang in unterschiedliche Arrays (2)? [jetzt mal in universalsprache - da ich in asm programmiere und du offens. in BASCOM] Fall 1: global sendebyte as byte sendebyte=KeyDown ;Antwortcode für Menü Down MAIN: if sendebyte=KeyNothing then ;es wurde was empfangen hier Datenarray auswerten und werte sichern ... sendbyte=KeyDown ;weiter zum nächsten Menü endif loop MAIN ------------------- UART_RX_ISR: ;hier deine Speicherfunktion für eingehende Daten ... if bytecounter=34 then UART_SEND_BYTE(sendebyte) sendebyte=KeyNothing endif END Fall 2: sende als Antwort immer KeyDown oder KeyUp, so läuft der Empfang aller Seiten immer durch. ------- achso - hüpft das Menü nach Punkt 5 wieder zum Punkt 1 wenn du die entsprechende Taste noch mal drückst, wenn nein müsste ja noch die Richtung am Ende umgeschaltet werden. => häng doch dein Programm mal an Sascha
Hi zusammen Du hast uns nur den Programmteil mit der Auswertung des Tastendrucks geschickt. Du kannst im Programmteil der Tastaturabfrage den Tastendruck simulieren. Simple Version mit 2 Sekunden - Schritten Tastaturabfrage: ' vermutlich alle 100ms ... ... Zähler = Zähler + 1 if Zähler > 20 then Taste = Rauf Zähler = 0 end if ... Return oder weiter zu anderen Routinen
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.