Stargate
04.03.2007, 12:09
Hallo Leute!
Ich melde mich mal wieder mit einer Frage zum Zeichendesiner ;-)
Also, mein Problem, auch mit Hilfedatei oder Forensuche(die zur Zeit kaputt ist), komme ich nicht weiter.
Ich wollte mir ein Paar Zeichen selbst generieren, so zum Beispiel ö , ü , ° und das g etwas verändern.
So, das Problem besteht jetzt darin, dass das zwas alles klappt, aber nur auf der ersten Displayhälfte. ich habe auch versucht vorher die jeweilige Displayhälfte anzuwählen, hat aber auch nicht geholfen.
So hier mal mein Code
'Winkelmessung mit dem Sensor MLX 90316 und Ausgabe der Gradanzeige
'über den Controler RN-MiniControl von Robotikhardware auf das Display
'Wintek 27 * 4 von Pollin
'>>>Besondere Lernleistung von Felix König<<<
$regfile = "m168def.dat" 'Controller definieren
$crystal = 16000000 'Quarzfrequenz
$baud = 9600 'Übertragungsrate in Baud
$hwstack = 32
$framesize = 32
$swstack = 32
'Die üblichen Definitionen bei Standardprogrammen auf Miniboard
'Hier kommt die Ausgabe auf das Display
Config Lcd = 40 * 4 'Bascom kennt keine Displays mit 27 * 4 Zeichen,
'daher 40 * 4 verwenden
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , E2 = Portc.3 , Rs = Portd.3
'man achte auf die Ergänzung E2 für den 2. Steuerkontroller des Displays
Dim ___lcdno As Byte 'Systemvariable der LCD-Bibliothek
___lcdno = 0 'wählt den ersten Chip aus
Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °
Initlcd 'die beiden oberen Zeilen initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °
Initlcd 'die beiden unteren Zeilen initialisieren
Cls 'die beiden unteren Zeilen löschen
___lcdno = 0 'wählt die obere Zeile aus
Locate 1 , 1 'schreibt in die erste Zeile an Position 1
Lcd " Besondere Lernleistun" ; Chr(1) ; " "; 'den Text in Anführungszeichen
Locate 2 , 1 'schreibt in die zweite Zeile an Position 1
Lcd " von Felix K" ; Chr(0) ; "ni" ; Chr(1) ; " 13 BGD" 'den Text in Anführungszeichen
Cursor Off 'unterdrückt den Cursor
___lcdno = 1 'wählt die beiden unteren Zeilen aus
Locate 1 , 1 'Wiederholt die Displayausgabe auf den unteren
Lcd "Windrichtun" ; Chr(1) ; " : "; '2 Zeilen
Locate 2 , 1
Lcd "Grad : "
Cursor Off 'unterdrückt den Cursor
'Hier kommt die Sensorwerterfassung
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Konfiguriert den AD Wandler
Start Adc 'Startet den AD Wandler
Config Pinc.2 = Input 'ADC 2 an Ctrl
Dim Sensor As Long 'Deklariert "Sensor" als Long mit 4 Byte Zeichenvorrat
Dim Grad As Single 'Deklariert die Gradvariable "Grad" als Single
Dim Grad_mit_einer_kommastelle As String * 5
Do ' Beginnt die Abfrageschleife zur Werteerfassung
Sensor = 0 'Initialisiert die Variablen Sensor, Grad, Grad2
Grad = 0
Sensor = Getadc(2) 'Der AD Wert wird am Pin C2 abgelesen und in die Variable "Sensor" geschrieben
Grad = Sensor - 50 ' ((-50+Sensor)*360)/922
Grad = Grad * 360
Grad = Grad / 922 'Ergebnis als Gradwert mit Kommastellen
Grad_mit_einer_kommastelle = Fusing(grad , "#.#")
Print "Grad: " ; Grad_mit_einer_kommastelle
'Hierhin kommt die Anzeige der Ausgesprochenen Windrichtung (NOSW)
Select Case Grad
___lcdno = 1
Case Is > 337.5 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case 292.5 To 337.4 : Print "Nord/West" ;
Locate 1 , 16
Lcd "Nord/West"
Case 247.5 To 292.4 : Print "West" ;
Locate 1 , 16
Lcd "West"
Case 202.5 To 247.4 : Print "S" ; Chr(2) ; "d/West" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/West"
Case 157.5 To 202.4 : Print "S" ; Chr(2) ; "d" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d"
Case 112.5 To 157.4 : Print "S" ; Chr(2) ; "d/Ost" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/Ost"
Case 67.5 To 112.4 : Print "Ost" ;
Locate 1 , 16
Lcd "Ost"
Case 22.5 To 67.4 : Print "Nord/Ost" ;
Locate 1 , 16
Lcd "Nord/Ost"
Case Is < 22.4 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case Else : Print "Error" ;
Locate 1 , 16
Lcd "Error"
End Select
Print " "
___lcdno = 1 'wählt die unteren 2 Zeilen aus
Locate 2 , 8
Lcd Grad_mit_einer_kommastelle ; Chr(3)
Waitms 500 '500 ms Wartezeit zwischen der Abfragewiederholung
___lcdno = 1 'Löschen der vorherig angezeigten Werte auf dem Display
Locate 1 , 16
Lcd " "
Locate 2 , 8
Lcd " "
Loop 'Ende der Ausführungsschleife
'und Sprung zum Anfang der Schleife
End 'Programmende
Hoffe dass es dafür eine Lösung gibt :-)
Viele Grüße Felix
Ich melde mich mal wieder mit einer Frage zum Zeichendesiner ;-)
Also, mein Problem, auch mit Hilfedatei oder Forensuche(die zur Zeit kaputt ist), komme ich nicht weiter.
Ich wollte mir ein Paar Zeichen selbst generieren, so zum Beispiel ö , ü , ° und das g etwas verändern.
So, das Problem besteht jetzt darin, dass das zwas alles klappt, aber nur auf der ersten Displayhälfte. ich habe auch versucht vorher die jeweilige Displayhälfte anzuwählen, hat aber auch nicht geholfen.
So hier mal mein Code
'Winkelmessung mit dem Sensor MLX 90316 und Ausgabe der Gradanzeige
'über den Controler RN-MiniControl von Robotikhardware auf das Display
'Wintek 27 * 4 von Pollin
'>>>Besondere Lernleistung von Felix König<<<
$regfile = "m168def.dat" 'Controller definieren
$crystal = 16000000 'Quarzfrequenz
$baud = 9600 'Übertragungsrate in Baud
$hwstack = 32
$framesize = 32
$swstack = 32
'Die üblichen Definitionen bei Standardprogrammen auf Miniboard
'Hier kommt die Ausgabe auf das Display
Config Lcd = 40 * 4 'Bascom kennt keine Displays mit 27 * 4 Zeichen,
'daher 40 * 4 verwenden
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , E2 = Portc.3 , Rs = Portd.3
'man achte auf die Ergänzung E2 für den 2. Steuerkontroller des Displays
Dim ___lcdno As Byte 'Systemvariable der LCD-Bibliothek
___lcdno = 0 'wählt den ersten Chip aus
Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °
Initlcd 'die beiden oberen Zeilen initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °
Initlcd 'die beiden unteren Zeilen initialisieren
Cls 'die beiden unteren Zeilen löschen
___lcdno = 0 'wählt die obere Zeile aus
Locate 1 , 1 'schreibt in die erste Zeile an Position 1
Lcd " Besondere Lernleistun" ; Chr(1) ; " "; 'den Text in Anführungszeichen
Locate 2 , 1 'schreibt in die zweite Zeile an Position 1
Lcd " von Felix K" ; Chr(0) ; "ni" ; Chr(1) ; " 13 BGD" 'den Text in Anführungszeichen
Cursor Off 'unterdrückt den Cursor
___lcdno = 1 'wählt die beiden unteren Zeilen aus
Locate 1 , 1 'Wiederholt die Displayausgabe auf den unteren
Lcd "Windrichtun" ; Chr(1) ; " : "; '2 Zeilen
Locate 2 , 1
Lcd "Grad : "
Cursor Off 'unterdrückt den Cursor
'Hier kommt die Sensorwerterfassung
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Konfiguriert den AD Wandler
Start Adc 'Startet den AD Wandler
Config Pinc.2 = Input 'ADC 2 an Ctrl
Dim Sensor As Long 'Deklariert "Sensor" als Long mit 4 Byte Zeichenvorrat
Dim Grad As Single 'Deklariert die Gradvariable "Grad" als Single
Dim Grad_mit_einer_kommastelle As String * 5
Do ' Beginnt die Abfrageschleife zur Werteerfassung
Sensor = 0 'Initialisiert die Variablen Sensor, Grad, Grad2
Grad = 0
Sensor = Getadc(2) 'Der AD Wert wird am Pin C2 abgelesen und in die Variable "Sensor" geschrieben
Grad = Sensor - 50 ' ((-50+Sensor)*360)/922
Grad = Grad * 360
Grad = Grad / 922 'Ergebnis als Gradwert mit Kommastellen
Grad_mit_einer_kommastelle = Fusing(grad , "#.#")
Print "Grad: " ; Grad_mit_einer_kommastelle
'Hierhin kommt die Anzeige der Ausgesprochenen Windrichtung (NOSW)
Select Case Grad
___lcdno = 1
Case Is > 337.5 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case 292.5 To 337.4 : Print "Nord/West" ;
Locate 1 , 16
Lcd "Nord/West"
Case 247.5 To 292.4 : Print "West" ;
Locate 1 , 16
Lcd "West"
Case 202.5 To 247.4 : Print "S" ; Chr(2) ; "d/West" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/West"
Case 157.5 To 202.4 : Print "S" ; Chr(2) ; "d" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d"
Case 112.5 To 157.4 : Print "S" ; Chr(2) ; "d/Ost" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/Ost"
Case 67.5 To 112.4 : Print "Ost" ;
Locate 1 , 16
Lcd "Ost"
Case 22.5 To 67.4 : Print "Nord/Ost" ;
Locate 1 , 16
Lcd "Nord/Ost"
Case Is < 22.4 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case Else : Print "Error" ;
Locate 1 , 16
Lcd "Error"
End Select
Print " "
___lcdno = 1 'wählt die unteren 2 Zeilen aus
Locate 2 , 8
Lcd Grad_mit_einer_kommastelle ; Chr(3)
Waitms 500 '500 ms Wartezeit zwischen der Abfragewiederholung
___lcdno = 1 'Löschen der vorherig angezeigten Werte auf dem Display
Locate 1 , 16
Lcd " "
Locate 2 , 8
Lcd " "
Loop 'Ende der Ausführungsschleife
'und Sprung zum Anfang der Schleife
End 'Programmende
Hoffe dass es dafür eine Lösung gibt :-)
Viele Grüße Felix