PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LC-Display Nokia 3310 Übertragen von daten in x und y positi



Wasi
19.12.2005, 16:42
Hi,

bin gerade dabei daten an das display Nokia 3310 zu senden,
das funktioniert auch teilweise.

Wenn eine taste gedrückt wird, wird was Übertragen und am Display ausgegeben.
Wird noch mal gedrückt wird es dann in einer anderen Position Ausgegeben.

Wie kann ich es anstellen, das nach Tastendruck die Ausgabe immer an der
selben stelle erscheint?

Unterprogramme:


Declare Sub Ukommando(byval Wert As Byte)
Declare Sub Udata(byval Wert As Byte)
Declare Sub Initialisierung
Declare Sub Lcdloeschen
Declare Sub Keypressed
Declare Sub Menueuhr
Declare Sub Menuetrip1
Declare Sub Menuetrip2
Declare Sub Menuekm


Tastendruck:


Do
Debounce Pind.0 , 0 , Keypressed , Sub
Loop


Nach dem Tastendruck (menü):


Sub Keypressed

Select Case Menue
Case Menueuhr : Menuetrip1
Case Menuetrip1 : Menuetrip2
Case Menuetrip2 : Menuekm
Case Else : Menueuhr
End Select

End Sub


Unterprogramm:


' ----------------Uhr des Menüs----------------------------------------------
Sub Menueuhr

Lcdloeschen


Udata &H3F
Udata &H40
Udata &H40
Udata &H40
Udata &H3F

Udata &H00
Udata &H7F
Udata &H08
Udata &H08
Udata &H08
Udata &H7F

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Menue = Menueuhr

End Sub

' ----------------Trip1 des Menüs----------------------------------------------
Sub Menuetrip1

Lcdloeschen


Udata &H01
Udata &H01
Udata &H7F
Udata &H01
Udata &H01

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Udata &H00
Udata &H00
Udata &H41
Udata &H7F
Udata &H41
Udata &H00

Udata &H00
Udata &H7F
Udata &H09
Udata &H09
Udata &H09
Udata &H06

Udata &H00
Udata &H00
Udata &H42
Udata &H7F
Udata &H40
Udata &H00

Menue = Menuetrip1

End Sub

Initialisierung:


' ----------------Initialisierung----------------------------------------------
Sub Initialisierung
Ukommando &H21 'Erweiterter Kommando-Mode
Ukommando &H13 'Bias (Kontrast) Einstellung Original Nokia = &H13
Ukommando &HA8 'Kontrasteinstellung Original Nokia = &HC8
Ukommando &H06


Ukommando &H0C
Ukommando &H20 'Wieder in den normalen Kommando-Mode
End Sub



Display Löschen:


' ----------------Display Löschen----------------------------------------------
Sub Lcdloeschen
Local I As Word
Ukommando &H20 'Normaler Kommando-Mode
Ukommando &H0C 'Normaler Bildschirm
Ukommando &H80 'Setze RAM-Adresse auf 0
Dc = 1 'Sicherstellen, dass man im Daten-Mode ist
For I = 0 To 503
Udata &H00
Next
End Sub


Kommando & Daten senden:


'------------Kommando Senden---------------------------------------------------

Sub Ukommando(byval Wert As Byte)
Dc = 0 'in den Kommando-Mode
Spiout Wert , 1
Dc = 1 'zurück in den Daten-Mode
End Sub

'------------Daten Senden------------------------------------------------------
Sub Udata(byval Wert As Byte)
Dc = 1 'um sicher zu gehen, dass man auch wirklich im Datenmode ist
Ce = 0
Spiout Wert , 1
Ce = 1
End Sub



Das Datenblatt vom Nokia hab ich mir schon angesehen, komm jedoch damit nicht klar.
http://www.mikrocontroller.net/attachment.php/99082/pcd8544.pdf

Da steht das man in der X Richtung das z.B. so machen kann:
"&B10000100"
Jetzt sollte es im Achten Pixel beginnen, macht er aber nicht.


Ich hoffe da kann mir einer weiterhelfen!

albundy
19.12.2005, 17:47
Hallo,


Sub Position(byval X_Wert As Byte, byval Y_Wert As Byte)
Dc = 0 'in den Kommando-Mode
X_Wert = X_Wert XOR &H80 'X_Wert = Spalte 0-83
Spiout X_Wert , 1
Y_Wert = Y_Wert XOR &H40 'Y_Wert = Zeile 0-5
Spiout Y_Wert , 1
Dc = 1 'zurück in den Daten-Mode
End Sub


Damit kannst du die Position für die Textausgabe festlegen ...

Wasi
19.12.2005, 22:07
Hallo AL,

hab dein Code mal eingebaut, leider geht wie zuvor nur die Y Position, aber
die X Position nicht.

Was mach ich Falsch? ](*,)



Declare Sub Ukommando(byval Wert As Byte)
Declare Sub Udata(byval Wert As Byte)
Declare Sub Position(byval X_wert As Byte , Byval Y_wert As Byte)
Declare Sub Initialisierung
Declare Sub Lcdloeschen
Declare Sub Keypressed
Declare Sub Menueuhr
Declare Sub Menuetrip1
Declare Sub Menuetrip2
Declare Sub Menuekm

Initialisierung
Lcdloeschen

Menue = Menuetrip1

Do
Debounce Pind.0 , 0 , Keypressed , Sub
Loop


Sub Keypressed

Select Case Menue
Case Menueuhr : Menuetrip1
Case Menuetrip1 : Menuetrip2
Case Menuetrip2 : Menuekm
Case Else : Menueuhr
End Select

End Sub

' ----------------Initialisierung----------------------------------------------
Sub Initialisierung
Ukommando &H21 'Erweiterter Kommando-Mode
Ukommando &H13 'Bias (Kontrast) Einstellung Original Nokia = &H13
Ukommando &HA8 'Kontrasteinstellung Original Nokia = &HC8
Ukommando &H06


Ukommando &H0C
Ukommando &H20 'Wieder in den normalen Kommando-Mode

End Sub

' ----------------Display Löschen----------------------------------------------
Sub Lcdloeschen
Local I As Word
Ukommando &H20 'Normaler Kommando-Mode
Ukommando &H0C 'Normaler Bildschirm
Ukommando &H80 'Setze RAM-Adresse auf 0
Dc = 1 'Sicherstellen, dass man im Daten-Mode ist
For I = 0 To 503
Udata &H00
Next
End Sub

' ----------------Uhr des Menüs----------------------------------------------
Sub Menueuhr

Lcdloeschen
Position &B10001100 , &B01000101
Udata &H3F
Udata &H40
Udata &H40
Udata &H40
Udata &H3F

Udata &H00
Udata &H7F
Udata &H08
Udata &H08
Udata &H08
Udata &H7F

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Menue = Menueuhr

End Sub

' ----------------Trip1 des Menüs----------------------------------------------
Sub Menuetrip1

Lcdloeschen
Position &B10111100 , &B01000011
Udata &H01
Udata &H01
Udata &H7F
Udata &H01
Udata &H01

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Udata &H00
Udata &H00
Udata &H41
Udata &H7F
Udata &H41
Udata &H00

Udata &H00
Udata &H7F
Udata &H09
Udata &H09
Udata &H09
Udata &H06

Udata &H00
Udata &H00
Udata &H42
Udata &H7F
Udata &H40
Udata &H00

Menue = Menuetrip1

End Sub

'------------Position x & y---------------------------------------------------
Sub Position(byval X_wert As Byte , Byval Y_wert As Byte)
Dc = 0 'in den Kommando-Mode
X_wert = X_wert Xor &H80 'X_Wert = Spalte 0-83
Spiout X_wert , 1
Y_wert = Y_wert Xor &H40 'Y_Wert = Zeile 0-5
Spiout Y_wert , 1
Dc = 1 'zurück in den Daten-Mode
End Sub

'------------Kommando Senden---------------------------------------------------

Sub Ukommando(byval Wert As Byte)
Dc = 0 'in den Kommando-Mode
Spiout Wert , 1
Dc = 1 'zurück in den Daten-Mode
End Sub

'------------Daten Senden------------------------------------------------------
Sub Udata(byval Wert As Byte)
Dc = 1 'um sicher zu gehen, dass man auch wirklich im Datenmode ist
Ce = 0
Spiout Wert , 1
Ce = 1
End Sub

albundy
20.12.2005, 10:26
Hallo,


Position &B10001100 , &B01000101

so kann das auch nicht funktionieren.
&B10000000 ($80) ist die X-Adresse und dort wird die X-Position dazu addiert.

Position (0,0) wäre 1.Spalte 1.Zeile
Position (0,5) wäre 1.Spalte 6.Zeile

Wasi
20.12.2005, 11:01
Hi AL,

heißt das das es so richtig ist?


' ----------------Uhr des Menüs----------------------------------------------
Sub Menueuhr

Lcdloeschen
Position(10,5)
Udata &H3F
Udata &H40
Udata &H40
Udata &H40
Udata &H3F

Udata &H00
Udata &H7F
Udata &H08
Udata &H08
Udata &H08
Udata &H7F

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Menue = Menueuhr

End Sub

Wasi
20.12.2005, 11:48
Hab das jetzt so gemacht!



' ----------------Uhr des Menüs----------------------------------------------
Sub Menueuhr

Lcdloeschen
Call Position(10,5)
Udata &H3F
Udata &H40
Udata &H40
Udata &H40
Udata &H3F

Udata &H00
Udata &H7F
Udata &H08
Udata &H08
Udata &H08
Udata &H7F

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Menue = Menueuhr

End Sub


Das funktioniert aber nicht, was ist den noch falsch?

albundy
20.12.2005, 11:56
Hallo,

ich habe mir nur das Datenblatt angesehen.
Aber ich denke schon, dass es so funktioniert.

albundy
20.12.2005, 12:37
ich habe nochmal nachgesehen.
Auf Seite 11 ist ein Ablaufdiagramm. Es kann sein, dass die Reihenfolge so eingehalten werden muss.

1. im Kommandomode Funktion setzen &H20 ( Chip aktiv, horizontale Adressierung und Basic Instruktionen )
2. Display Control setzen &H0C ( Normal Mode )
3. Y Adressierung ( Zeile )
4. X Adressierung ( Spalte )

EDIT:http://www.mikrocontroller.net/forum/read-4-96909.html
*** damit dürften alle Fragen geklärt sein ***

Wasi
20.12.2005, 14:23
EDIT*** das mit dem Link hab ich schon durch, da steht auch nichts genaues was die Positionierung angeht, Leider.

Hab das jetzt mal so gemacht:


' ----------------Trip1 des Menüs----------------------------------------------
Sub Menuetrip1

Lcdloeschen

Call Position(5 , 5)
Udata &H01
Udata &H01
Udata &H7F
Udata &H01
Udata &H01

Udata &H00
Udata &H7F
Udata &H09
Udata &H19
Udata &H29
Udata &H46

Udata &H00
Udata &H00
Udata &H41
Udata &H7F
Udata &H41
Udata &H00

Udata &H00
Udata &H7F
Udata &H09
Udata &H09
Udata &H09
Udata &H06

Udata &H00
Udata &H00
Udata &H42
Udata &H7F
Udata &H40
Udata &H00

Menue = Menuetrip1

End Sub
'------------Position x & y---------------------------------------------------
Sub Position(byval X_wert As Byte , Byval Y_wert As Byte)
Ukommando &H20
Ukommando &H0C
Dc = 0 'in den Kommando-Mode
X_wert = X_wert Xor &H80 'X_Wert = Spalte 0-83
Spiout X_wert , 1
Y_wert = Y_wert Xor &H40 'Y_Wert = Zeile 0-5
Spiout Y_wert , 1
Dc = 1 'zurück in den Daten-Mode
End Sub

'------------Kommando Senden---------------------------------------------------

Sub Ukommando(byval Wert As Byte)
Dc = 0 'in den Kommando-Mode
Spiout Wert , 1
Dc = 1 'zurück in den Daten-Mode
End Sub

Leider tut sich weder was in X noch in Y.

Meiner meinung nach müßte das passen, Vielleicht weiß jemand weiter???

Ich werde noch ](*,) ....

Wasi
20.12.2005, 14:33
Hab jetzt ein Code gefunden wo die Positionierung drin ist, werde ich mir
erst mal Anschauen.

Danke dir albundy! ;)