PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Strings zerhacken + LCD-Frage



Goblin
06.02.2006, 20:40
TAG!

Was ich vorhabe ist: Ich will nen kleines Prog schreiben, das quasi als "Demo" für mein neues LCD-Modul nach eigenem Standart dienen soll. Es geht mir darum meinem Board mit Atmega8 per RS232 Signale zu geben, die auf dem LCD angezeigt werden. Es gibt 2 Arten von Signalen: Steuerbefehle und Text.
Steuerbefehle z.b. den Cursor ein. Text wird auf dem LCD angezeigt. Bisher hab ichs so gemacht:



Schleife:
Input Eingabe , Zweigabe Noecho
If Eingabe = "%CBlink" Then Goto Cursormode
If Eingabe = "%CNoBlink" Then Goto Cursormode
If Eingabe = "%COn" Then Goto Cursormode
If Eingabe = "%COff" Then Goto Cursormode
Home Upper
Lcd Eingabe
Home Lower
Lcd Zweigabe
Goto Schleife

Cursormode:
If Eingabe = "%CBlink" Then Cursor Blink
If Eingabe = "%CNoBlink" Then Cursor Noblink
If Eingabe = "%COn" Then Cursor On
If Eingabe = "%COff" Then Cursor Off
If Eingabe = "%CLS" Then Cls
Goto Schleife


Das sind jetzt nur die Scheifen um die's geht. Die Steuerbefehle haben nen % davor. Ich mach nen Input mit 2 Variablen. (Ich denke mal man macht das im Terminal so dass man eine Zeile eingibt, dann "Enter" drückt und den nächsten eingibt). Dann schau ich ob es sich um nen Steuerbefehl oder Text handelt. Wenn es Steuerbefehl ist springt er in die Schleife Cursormode. Da wird der entsprechende Befehl ausgeführt und dann gehts wieder zur Eingabe. Wenns kein Steuerbefehl ist, dann wird die erste Variable in der ersten Reihe meines 16*2-LCDs angezeigt und die zweite in der zweiten. Ich denke mal der Spass müsste so funktionieren. Ich hab bisher nur den Code geschrieben und bin ein paar 100 km von meinem Board entfernt. Was ich jetzt gerne tun würde (Ja, jetzt kommt endlich die Frage! :) ) ist: Nicht in der ersten Schleife JEDEN Steuerbefehl einzeln raussuchen sondern sofort beim "%" springen. Wie kann ich den ersten Char eines Strings raussuchen? Oder einen beliebigen String mit der Länge n | n > 0 aus einem String herausziehen? Geht das überhaupt?

Zweite Frage: Ich habe schon des öfteren gehört, dass wenn man das LCD an den Prog-Port (PortB mein ich) hängt man die "Daten" die beim Brennen übertragen werden sieht. Wie muss dafür das Pinning sein? Und funzt das LCD dann auch vom Atmega aus (Wenn das Prog auf dem Atmega läuft) ohne Einschränkungen, wenn der Progger noch dranhängt? Oder gibts da Probleme? Ich hab momentan das LCD an PortC hängen, aber da blockier ich die Analogeingänge. Auf PortB könnte ich wenns da keine Probleme gibt am ehesten "Verzichten"

Ratber
06.02.2006, 22:34
Die zweite Frage kann ich dir sofort beantworten.

Das LCD kann ruhig mit am SPI hängen solange die Datenrichtungen zueinander passen.
Da die meisten LCD's nur als Empfänger betrieben werden kann hier ausser Datenmüll in der Anzeige nichts weiter passieren.




Zu deiner ersten Frage:
Ich Erahne da das Problem aber veratanden hab ich die Problemstellung ncht wirklich.

Was möchtest du nun ?

Eine Möglichkeit die Befehle von den Nutzdaten zu unterscheiden oder einfach ein universelleres Protokoll ?

Windi
06.02.2006, 22:47
Wie kann ich den ersten Char eines Strings raussuchen? Oder einen beliebigen String mit der Länge n | n > 0 aus einem String herausziehen? Geht das überhaupt?
Ja, mit dem MID - Befehl.
Substring = Mid(String , A , B)
Sting ist der String, A die Position und B die Anzahl der zu lesenden Zeichen.

Am Besten mal in die Online-Hilfe von Bascom schauen da wird es erklärt.

Goblin
07.02.2006, 07:44
danke! :) das ist genau das was ich wollte.

@ratber: ok ok, war umständlich gestellt die frage. hab da leider nen hang zu.

Goblin
07.02.2006, 18:25
problem mit meinem code:



$regfile = "m8def.dat"
$crystal = 1000000
$baud = 4800
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1

Dim Eingabe As String * 16
Dim Zweigabe As String * 16

Print "PC -> LCD V 0.2a welcomes you"
Cls
Lcd "PC -> LCD V 0.2a"
Waitms 100
Lowerline
Lcd "welcomes you"

Schleife:
Input "Enter Text " , Eingabe , Zweigabe
Print
Print Eingabe
Waitms 100
Print
Print Zweigabe
Cls
Waitms 100
Lcd Eingabe
Waitms 100
Lowerline
Lcd Eingabe
Goto Schleife




was er tut ist folgendes: Zeigt auf PC und LCD den Willkommens-Text an. OK! Dann zeigt er am PC "Enter Text" an. Dann gebe ich ein: test <enter> test. Output ist folgender:


PC -> LCD V 0.2a welcomes you
Enter Text testtest


das erste "test" schreibt er direkt wenn ichs eingegeben hat, das zweite dann wenn ich das zweite eingegeben hab. Sollte der nicht erst warten bis er 2 Strings empfangen hat? Wie dem auch sei, danach zeigt er weder was auf dem LCD an noch beginnt die Schleife von vorn...

edit: ach, und nochwas: sollte er nicht zwischen den "test"s nen Zeilenumbruch machen???

Goblin
07.02.2006, 22:51
sorry leute, lag an meinem terminalprogramm. das hat mist gebaut. ich habs mit dem terminal-emulator von bascom probiert und das ging gut. funzt also alles perfekt.