PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3310 display mit atmega32



Che Guevara
07.07.2008, 21:47
hallo leute,

ich will jetzt endlich mal meine mit dem µC ermittelnden daten auf einem lcd ausgeben! glückerweise habe ich hier schon ein lcd (grafik) (aus einem nokia 3310) rumliegen!

nach einiger zeit googlen habe ich folgende seite gefunden:
http://www.mkprojekt.de/index.php/content/view/2/2/

der code in bascom auf der ersten seite funzt auch wunderbar, auf meinem display erscheint ein "M", nach 2 sek erscheint es dann eine stelle weiter!

wenn ich allerdings den ganzen code auf der 2. seite noch anfüge (inclusive datensatz der zeichen), dann zeigt mir bascom fast ausschließlich fehler in der zeile an, in der "Nprint" steht!!

ich habe natürlich die ganzn subs im header declariert und nach position habe ich auch etwas hingeschrieben ( 1 , 1 ). ich weiß wirklich nicht mehr weiter, währe wirklich nett, wenn mir jemand helfen könnte (sagen, wo der fehler liegt/ lösung liefern / mit mir bearbeiten, etc.)

danke schon mal für eure antworten

gruß
chris

stefan_Z
09.07.2008, 20:11
Sub Nprint(Byval Text As String * 14)
Aufruf also mit
Call Nprint("hiertextrein")
Strings brauchen "" !

- In der Deklaration Byval vergessen?
- Die Subs eingebaut, die in Nprint aufgerufen werden?

Che Guevara
09.07.2008, 20:41
hallo stefan,

ich habe alles überprüft, was du vorschlägst, allerdings war der fehler nicht dabei! :-(

wenn ich irgendetwas bei call nprint ("") eingebe, dann zeigt mir das lcd nur einen langen schwarzen balken!! :-(
an was könnte es den noch liegen??

gruß
chris

stefan_Z
09.07.2008, 20:48
Welchen Fehler sagt dir der Compiler denn?

Che Guevara
09.07.2008, 20:53
jetzt gar keinen mehr!
der einzige fehler ist der balken auf dem display (anstelle der zeichen)!

gruß
chris

stefan_Z
09.07.2008, 20:57
Hmm hört sich fast nach Stackoverflow an.
Stell mal die Stacks hoch, das hilft oft.
$hwstack = 64
$swstack = 40
$framesize = 64

Sowas.. je nachdem wieviel RAM übrig ist...

Che Guevara
09.07.2008, 21:00
daaaaaaaaaaaaaaaaaaanke, das war der fehler!!!!

ganz ganz ganz netten gruß
chris

stefan_Z
09.07.2008, 21:17
Hehe ist IMMER ein guter Ansatzpunkt, wenn komisches passiert.
Ich stell den grundsätzlich schön hoch und bei RAM-Mangel dann wieder runter...

Che Guevara
09.07.2008, 21:45
jetzt habe ich aber nochmal eine frage:

wie kann ich eine variable (in diesem fall z) mit nprint ausgeben??

also:
call nprint (z)

funzt nicht!!
wie geht das??

gruß
chris

stefan_Z
09.07.2008, 22:59
Du musst Z in einen String verwandeln - Nprint nimmt nur Strings entgegen!
Umwandeln kannst du das so:
Dim STRING_var as String * 10
STRING_var = STR(Z)
CALL NPRINT(STRING_var)
sollte dann gehen

Che Guevara
10.07.2008, 15:54
das geht leider nicht!!
muss ich string_var mit dim "erklären"??

stefan_Z
10.07.2008, 16:12
das ist nur ein Beispiel - du musst halt einen String übergeben - DIM dir die STRING_var mal und teste es.

Che Guevara
10.07.2008, 16:58
habe ich gemacht, jetzt zeigt mir der display den z wert an.
habs so gemacht:

dim x as string * 2

x = str(z)

...

allerdings wird der z wert jetzt so schnell hochgezählt, dass ich ungefähr eine zehntel sekunde auf den taster drücken muss, schon zählt mir das prog um 1 hoch!! warum ist das so?? was kann ich dagegen machen??

gruß
chris

stefan_Z
10.07.2008, 17:54
Was du brauchst ist ein Debounce.
CONFIG DEBOUNCE im Handbuch hilft dir.
Oder mach ne
WHILE Pinx.x = 1 WEND
drumherum

Che Guevara
10.07.2008, 18:13
das verstehe ich nicht ganz.

zurzeit erstelle ich so mein j (z = j * 50):

if pind.2 = 0 then
waitms 200
if j < 5 then
j = j + 1
else
j = 1
endif
endif

könntest du mir mal ein beispiel zeigen??

gruß
chris

stefan_Z
10.07.2008, 18:47
ich würde das WAITMS 200 nach hinten schieben vors END IF.
Ansonsten sollte das so auch gehen - wenn du WAITMS 400 machst wahrscheinlich besser.

Che Guevara
10.07.2008, 20:21
hab ich gemacht, ist aber immer noch das gleiche problem!!
das ist eig erst so, seitdem ich z (also x) auf dem lcd ausgeben lasse!
an was könnte das den liegen??

stefan_Z
10.07.2008, 20:58
keine Ahnung, habe ja nicht das ganze Programm.
Läuft das vielleicht über nen Interrupt?
Ist der Taster vielleicht auf einer LCD-Leitung?

Che Guevara
10.07.2008, 21:18
nein, es ist kein interrupt im prog und auf einer lcd leitung ist der taster auch nicht!!

hier das prog (weiß leider nicht, wie man das so in eine kasten bekommt):

$regfile = "m32def.dat"
$crystal = 1000000
$hwstack = 64
$swstack = 40
$framesize = 64

Declare Sub Ukommando(byval Wert As Byte)
Declare Sub Udata(byval Wert As Byte)
Declare Sub Initialisierung
Declare Sub Lcdloeschen
Declare Sub Position(byval X As Byte , Byval Y As Byte)
Declare Sub Nprint(byval Text As String)
Declare Sub Zeichenout
Declare Sub Version1
Declare Sub Version2

Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4

Config Portb = Output
Config Portc = Output
Config Porta = Output
Config Portd = Input

Dim I As Word
Dim J As Word
Dim Z As Word

I = 1
J = 1

L1 Alias Porta.0
L2 Alias Porta.1
L3 Alias Porta.2
L4 Alias Porta.3
L5 Alias Porta.4
L6 Alias Porta.5
L7 Alias Porta.6
L8 Alias Porta.7
L9 Alias Portc.0

E1 Alias Portc.5
E2 Alias Portc.6
E3 Alias Portc.7

T1 Alias Pind.0
T2 Alias Pind.1
T3 Alias Pind.2
T4 Alias Pind.3

Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1

L1 = 0
L2 = 0
L3 = 0
L4 = 0
L5 = 0
L6 = 0
L7 = 0
L8 = 0
L9 = 0

E1 = 0
E2 = 0
E3 = 0

Dc Alias Portb.0
Ce Alias Portb.2
Re Alias Portb.1



Re = 0
Waitus 250
Re = 1

Spiinit

Initialisierung
Lcdloeschen

Position 7 , 2
Call Nprint( "haupt")
Wait 3
Lcdloeschen

Do

Z = J * 50

If T1 = 0 Then
Waitms 200
If I < 2 Then
I = I + 1
Else
I = 1
End If
Elseif T2 = 0 Then
Waitms 200
If I > 1 Then
I = I - 1
Else
I = 2
End If
End If

If T3 = 0 Then
Waitms 200
If J < 5 Then
J = J + 1
Else
J = 1
End If
Elseif T4 = 0 Then
Waitms 200
If J > 1 Then
J = J - 1
Else
J = 5
End If
End If

If I = 1 Then
Position 7 , 0
Call Nprint( "version 1")

Position 7 , 1
Call Nprint( "z:")



Call Version1

Elseif I = 2 Then
Position 7 , 0
Call Nprint( "version 2")

Position 7 , 1
Call Nprint( "z:")


Call Version2

End If


Loop


Sub Initialisierung
Ukommando &H21
Ukommando &HC8
Ukommando &H06
Ukommando &H13
Ukommando &H20
Ukommando &H0C
End Sub

Sub Lcdloeschen
Local O As Word
Ukommando &H20
Ukommando &H0C
Ukommando &H80
Dc = 1
For O = 0 To 503
Udata &H00
Next
End Sub


Sub Ukommando(byval Wert As Byte)
Dc = 0
Spiout Wert , 1
Dc = 1
End Sub

Sub Udata(byval Wert As Byte)
Dc = 1
Ce = 0
Spiout Wert , 1
Ce = 1
End Sub


Sub Position(byval X As Byte , Byval Y As Byte)
Local Nout As Byte
Dc = 0
Ce = 0
Nout = Y + 64
Spiout Nout , 1
Ce = 1
Ce = 0
Nout = X * 6
Nout = Nout + 128
Spiout Nout , 1
Ce = 1
Dc = 1
End Sub

Sub Nprint(byval Text As String * 14)
Local Loops As Byte
Local Laenge As Byte
Local Zeichen As String * 1
Laenge = Len(text)
For Loops = 1 To Laenge
If Loops = 1 Then
Zeichen = Left(text , 1)
Elseif Loops = Zeichen Then
Zeichen = Right(text , 1)
Else
Zeichen = Mid(text , Loops , 1)
End If
If Zeichen = "0" Then Restore 0:
If Zeichen = "1" Then Restore 1:
If Zeichen = "2" Then Restore 2:
If Zeichen = "3" Then Restore 3:
If Zeichen = "4" Then Restore 4:
If Zeichen = "5" Then Restore 5:
If Zeichen = "6" Then Restore 6:
If Zeichen = "7" Then Restore 7:
If Zeichen = "8" Then Restore 8:
If Zeichen = "9" Then Restore 9:
If Zeichen = "a" Then Restore A1:
If Zeichen = "b" Then Restore B1:
If Zeichen = "c" Then Restore C1:
If Zeichen = "d" Then Restore D1:
If Zeichen = "e" Then Restore E1:
If Zeichen = "f" Then Restore F1:
If Zeichen = "g" Then Restore G1:
If Zeichen = "h" Then Restore H1:
If Zeichen = "i" Then Restore I1:
If Zeichen = "j" Then Restore J1:
If Zeichen = "k" Then Restore K1:
If Zeichen = "l" Then Restore L1:
If Zeichen = "m" Then Restore M1:
If Zeichen = "n" Then Restore N1:
If Zeichen = "o" Then Restore O1:
If Zeichen = "p" Then Restore P1:
If Zeichen = "q" Then Restore Q1:
If Zeichen = "r" Then Restore R1:
If Zeichen = "s" Then Restore S1:
If Zeichen = "t" Then Restore T1:
If Zeichen = "u" Then Restore U1:
If Zeichen = "v" Then Restore V1:
If Zeichen = "w" Then Restore W1:
If Zeichen = "x" Then Restore X1:
If Zeichen = "y" Then Restore Y1:
If Zeichen = "z" Then Restore Z1:
If Zeichen = "A" Then Restore A:
If Zeichen = "B" Then Restore B:
If Zeichen = "C" Then Restore C:
If Zeichen = "D" Then Restore D:
If Zeichen = "E" Then Restore E:
If Zeichen = "F" Then Restore F:
If Zeichen = "G" Then Restore G:
If Zeichen = "H" Then Restore H:
If Zeichen = "I" Then Restore I:
If Zeichen = "J" Then Restore J:
If Zeichen = "K" Then Restore K:
If Zeichen = "L" Then Restore L:
If Zeichen = "O" Then Restore O:
If Zeichen = "P" Then Restore P:
If Zeichen = "Q" Then Restore Q:
If Zeichen = "R" Then Restore R:
If Zeichen = "S" Then Restore S:
If Zeichen = "T" Then Restore T:
If Zeichen = "U" Then Restore U:
If Zeichen = "V" Then Restore V:
If Zeichen = "W" Then Restore W:
If Zeichen = "X" Then Restore X:
If Zeichen = "Y" Then Restore Y:
If Zeichen = "Z" Then Restore Z:
If Zeichen = " " Then Restore Leer:
If Zeichen = "." Then Restore Punkt:
If Zeichen = "-" Then Restore Strich:
If Zeichen = ":" Then Restore Doppelpunkt:
If Zeichen = "°" Then Restore Gradzeichen:
If Zeichen = "<" Then Restore Pfeillinks:
If Zeichen = ">" Then Restore Pfeilrechts:
Call Zeichenout
Next Loops
End Sub

Sub Zeichenout
Local Count As Byte
Local Daten As Byte
Dc = 1
For Count = 1 To 6
Read Daten
Ce = 0
Spiout Daten , 1
Ce = 1
Next Count
Dc = 0
End Sub

Sub Version1
E1 = 1
E2 = 0
E3 = 1
L1 = 1
L2 = 0
L3 = 1
L4 = 0
L5 = 1
L6 = 0
L7 = 1
L8 = 0
L9 = 1
Waitms Z
E1 = 0
E2 = 0
E3 = 1
L1 = 1
L2 = 1
L3 = 0
L4 = 0
L5 = 0
L6 = 1
L7 = 1
L8 = 1
L9 = 0
Waitms Z
End Sub

Sub Version2
E1 = 1
E2 = 1
E3 = 1
L1 = 0
L2 = 0
L3 = 0
L4 = 0
L5 = 0
L6 = 0
L7 = 0
L8 = 0
L9 = 0
Waitms Z
E1 = 1
E2 = 1
E3 = 1
L1 = 1
L2 = 1
L3 = 1
L4 = 1
L5 = 1
L6 = 1
L7 = 1
L8 = 1
L9 = 1
Waitms Z
End Sub


0:
Data &H00 , &H3E , &H51 , &H49 , &H45 , &H3E
1:
Data &H00 , &H00 , &H42 , &H7F , &H40 , &H00
2:
Data &H00 , &H42 , &H61 , &H51 , &H49 , &H46
3:
Data &H00 , &H22 , &H41 , &H49 , &H49 , &H36
4:
Data &H00 , &H18 , &H14 , &H12 , &H7F , &H10
5:
Data &H00 , &H27 , &H45 , &H45 , &H45 , &H39
6:
Data &H00 , &H3E , &H49 , &H49 , &H49 , &H32
7:
Data &H00 , &H61 , &H11 , &H09 , &H05 , &H03
8:
Data &H00 , &H36 , &H49 , &H49 , &H49 , &H36
9:
Data &H00 , &H26 , &H49 , &H49 , &H49 , &H3E

A1:
Data &H00 , &H30 , &H4A , &H4A , &H52 , &H7C
B1:
Data &H00 , &H3F , &H48 , &H44 , &H44 , &H38
C1:
Data &H00 , &H38 , &H44 , &H44 , &H44 , &H28
D1:
Data &H00 , &H38 , &H44 , &H44 , &H48 , &H7F
E1:
Data &H00 , &H38 , &H54 , &H54 , &H54 , &H18
F1:
Data &H00 , &H00 , &H04 , &H7E , &H05 , &H00
G1:
Data &H00 , &H0C , &H52 , &H52 , &H4A , &H3C
H1:
Data &H00 , &H7F , &H08 , &H04 , &H04 , &H78
I1:
Data &H00 , &H00 , &H44 , &H7D , &H40 , &H00
J1:
Data &H00 , &H00 , &H40 , &H44 , &H3D , &H00
K1:
Data &H00 , &H7F , &H20 , &H10 , &H28 , &H44
L1:
Data &H00 , &H00 , &H41 , &H7F , &H40 , &H00
M1:
Data &H00 , &H7C , &H04 , &H18 , &H04 , &H7C
N1:
Data &H00 , &H7C , &H08 , &H04 , &H04 , &H78
O1:
Data &H00 , &H38 , &H44 , &H44 , &H44 , &H38
P1:
Data &H00 , &H7C , &H14 , &H24 , &H24 , &H18
Q1:
Data &H00 , &H18 , &H24 , &H24 , &H14 , &H7C
R1:
Data &H00 , &H7C , &H04 , &H04 , &H08 , &H00
S1:
Data &H00 , &H08 , &H54 , &H54 , &H54 , &H20
T1:
Data &H00 , &H04 , &H3F , &H44 , &H40 , &H00
U1:
Data &H00 , &H3C , &H40 , &H40 , &H40 , &H3C
V1:
Data &H00 , &H1C , &H20 , &H40 , &H20 , &H1C
W1:
Data &H00 , &H3C , &H40 , &H30 , &H40 , &H3C
X1:
Data &H00 , &H44 , &H28 , &H10 , &H28 , &H44
Y1:
Data &H00 , &H0C , &H50 , &H50 , &H48 , &H3C
Z1:
Data &H00 , &H44 , &H64 , &H54 , &H4C , &H44

A:
Data &H00 , &H7C , &H12 , &H11 , &H12 , &H7C
B:
Data &H00 , &H7F , &H49 , &H49 , &H49 , &H36
C:
Data &H00 , &H3E , &H41 , &H41 , &H41 , &H22
D:
Data &H00 , &H7F , &H41 , &H41 , &H41 , &H3E
E:
Data &H00 , &H7F , &H49 , &H49 , &H49 , &H41
F:
Data &H00 , &H7F , &H09 , &H09 , &H09 , &H01
G:
Data &H00 , &H3E , &H41 , &H49 , &H49 , &H3A
H:
Data &H00 , &H7F , &H08 , &H08 , &H08 , &H7F
I:
Data &H00 , &H00 , &H41 , &H7F , &H41 , &H00
J:
Data &H00 , &H20 , &H41 , &H41 , &H41 , &H3F
K:
Data &H00 , &H7F , &H08 , &H14 , &H22 , &H41
L:
Data &H00 , &H7F , &H40 , &H40 , &H40 , &H40
M:
Data &H00 , &H7F , &H02 , &H04 , &H02 , &H7F
N:
Data &H00 , &H7F , &H04 , &H08 , &H10 , &H7F
O:
Data &H00 , &H3E , &H41 , &H41 , &H41 , &H3E
P:
Data &H00 , &H7F , &H09 , &H09 , &H09 , &H06
Q:
Data &H00 , &H3E , &H41 , &H51 , &H61 , &H7E
R:
Data &H00 , &H7F , &H09 , &H19 , &H29 , &H46
S:
Data &H00 , &H06 , &H49 , &H49 , &H49 , &H30
T:
Data &H00 , &H01 , &H01 , &H7F , &H01 , &H01
U:
Data &H00 , &H3F , &H40 , &H40 , &H40 , &H3F
V:
Data &H00 , &H1F , &H20 , &H40 , &H20 , &H1F
W:
Data &H00 , &H7F , &H20 , &H10 , &H20 , &H7F
X:
Data &H00 , &H63 , &H14 , &H08 , &H14 , &H63
Y:
Data &H00 , &H03 , &H04 , &H78 , &H04 , &H03
Z:
Data &H00 , &H61 , &H51 , &H49 , &H45 , &H43

Leer:
Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00

Punkt:
Data &H00 , &H00 , &H60 , &H60 , &H00 , &H00
Strich:
Data &H00 , &H18 , &H18 , &H18 , &H18 , &H00
Doppelpunkt:
Data &H00 , &H00 , &H6C , &H6C , &H00 , &H00
Gradzeichen:
Data &H00 , &H00 , &H07 , &H05 , &H07 , &H00
Pfeilrechts:
Data &H00 , &H41 , &H63 , &H36 , &H1C , &H08
Pfeillinks:
Data &H00 , &H08 , &H1C , &H36 , &H63 , &H41

gruß
chris

stefan_Z
10.07.2008, 22:22
ah ich glaube du musst noch die Pullups anschalten bei den Tastern!
Also T1 = 1
Oder einen 10k Widerstand vom Pin zu VDD
Ansonsten floaten die und sind quasi immer an - bzw. superoft und das wait kommt ja nur wenn gedrückt ist - also ist dauerhaft 1 für den AVR...

Che Guevara
11.07.2008, 13:57
hab ich gemacht, funzt immer noch net!! :-(

pyr0skull
14.08.2008, 17:44
Hallo, ich versuche verzweifelt ein 3310-Display zum laufen zu bringen.. klappt aber nicht. Das Display ist in Ordnung, im Handy funktioniert es. Ich benutze das 1. Beispielprogramm von dieser Seite:

http://www.mkprojekt.de/downloads/nokia3310.bas

Habe es entsprechend angepasst auf einen Atmega8 und meine Ports.


Dc Alias Portc.0
Ce Alias Portc.1
Re Alias Portc.2

Das ganze läuft auf einem Mega8 der mit 3,3v versorgt wird, habe also keine Spannungsteiler etc. Wenn ich die Spannung drauf gebe flackert das Display kurz, es passiert aber sonst nichts weiter. Habe schon versucht die Leitungen zu oszilloskopieren, aber was brauchbares bekomme ich da nicht raus.

Kann mir aber auch nicht erklären was ich falsch gemacht haben könnte, da gibt es ja nicht viel, was man falsch machen kann. :-k

Che Guevara
15.08.2008, 14:47
hallo pyr0skull,

wie wird den dein mega8 versorgt??
vielleicht bricht die stromquelle zusammen, überprüf mal den strom den das teil zieht.
poste doch mal dein ganzes prog, vielleicht können wir dir dann besser helfen?!!!

gruß
chris

pyr0skull
15.08.2008, 15:08
Der Atmega wird von einem Lithium-Ionen Akku versorgt. Die Spannung sollte eigentlich nicht einbrechen, ich hab zum Test mal mit einem Timer eine Rechteckspannung ausgegeben und die blieb konstant. Daran kann es also nicht liegen. Das Programm ist bis auf die Controllerdefinition und die Portkonfiguration identisch mit dem Beispiel.

Meine Versuche liegen aber jetzt auch erst mal brach, da meine Freundin bei einer Routine-Aufräumaktion das Anschlusspanel abgerissen hat. Ich werd mir jetzt erstmal ein paar neue besorgen.