werden genau in der Mitte des Displays die Striche versetzt.(Im Anhang)
Ich benutzte einen Atmega16. Die Kabel zum Display sind 15cm lang, ich
habe es mit einem Schnelleren bzw. Langsameren internen Takt versucht
und mit einem Atmega32 und einem Externen Resonator. Jedoch kam bei
allem das gleiche Problem heraus... Habt ihr eine Idee ?
Mfg Salex.
Hallo da ich mit mit Bascom nicht auskenne gehe ich mal davon aus, das
die Konfig des Displays auch zur Schaltung passt.
>Lcd "Hello World">Locate 32 , 48
sollte das nicht eher andersrum da stehen
probiere erst mal nur eine Ausgabe
Sascha
Hallo Sascha,
erstmal Danke für die Antwort, aber Ich hab das "Hello World" Extra auf
diese Koordinaten Platziert, um zu schauen ob das auch verzerrt wird,
wie diese Linien welche 2 Sekunden später erscheinen. Das "Hello World"
wird etwas nach Links verschoben Angezeigt. Jedoch ,da die Striche aber
durch den Display durchgezogen sind werden die genau in der Mitte
Verzerrt, und wenn man sich den Schaltplan des Displays anschaut
(http://www.pollin.de/shop/downloads/D120424D.PDF) Sieht man das für den
einen Teil ein anderer Controller benutzt wird. Kann das daran liegen,
das der Controller Kaputt ist oder so etwas ?
Hallo Salex,
wenn du Prints in deinem Programm hast, konfiguriert Bascom den Pin D.0
als RX und du kannst ihn nicht für den Reset Pin des Displays verwenden.
sieht so aus, als ob der eine Controller nicht richtig initialisiert ist
- muss man das bei Bascom noch irgendwie aufrufen?!
>Line(0 , 7) -(128 , 7) , 255
kann nicht 128 sein, da die Pixel ja nur von 0 bis 127 gehen !
Sascha
Teste mal den Code hier must nur für dich anpassen.
$regfile = "m8def.dat" ' Mega8
$crystal = 8000000
$lib "glcdks108.lbx"
$include "Font6x8.font"
' Disable JTAG interface
Dim Bz As Byte
Bz = Mcucsr 'READ VALUE OF &H34
Bz = Bz Or &H80 'SET UPPER BIT
Mcucsr = Bz 'WRITE TWICE TO DISABLE JTAG
Mcucsr = Bz
'for Glcd Ks108
Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portc ,
Ce = 3 , Ce2 = 2 , Reset = 4 , Rd = 5 , Cd = 0 , Enable = 1
'The dataport is the portname that is connected to the data lines of
the LCD
'The controlport is the portname which pins are used to control the
lcd
'CE = CS1 Chip select
'CE2 = CS2 Chip select second chip
'CD = DI Data/instruction
'RD = R/W Read/Write
'RESET = RST reset
'ENABLE = E Chip Enable
Waitms 500
Do
Cls
Setfont Font6x8
Lcdat 1 , 0 , "SETUP MENU 123456"
Lcdat 2 , 1 , "Wait ....."
Lcdat 3 , 1 , "Wait ....." , 1
Lcdat 4 , 1 , "Wait ....."
Wait 1
Loop
End
Ja stimmt das war mein Fehler, hab das schon abgeändert und es hat sich
nichts getan ... Leider .
Danke Ronny für den Code ich werde ihn sofort ausprobieren und dannach
berichten.
Mfg Salex
>Die Hexdatei klappt leider nicht, sie zeigt nur zufällige Pixel am>Display an. Trotzdem vielen Dank !
Die war übrigends für einen ATmega16.
Habs vergessen zu erwähnen.
Ich kontrolliere die Pinbelegung gleich noch mal.
Deine da oben stimmt doch?
:-)
Holger, ich probier es Sofort, ich bin nur erleichter weil ich dachte,
dass der 2te Controller kaputt wäre weger den falschen Anzeigen.
Vielen Vielen Dank an alle !!
Holger, mit der neuen HEX-Datei Klappt es auch. Dankeschön !!!
Ich weiss wirklich nicht warum es mit meinem Code nicht ging. Naja Jetzt
gehts, könntest du vielleicht den Code hier reinschreiben ?
Mfg Salex
>Naja Jetzt gehts, könntest du vielleicht den>Code hier reinschreiben ?
Besser nicht;) War auch kein Bascom sondern C.
Wenn ein Ks108 Display so komische Sachen macht, dann hat
man in der Regel zu schnell darauf zugegriffen. Bei dir hatte
sich dadurch die Display Start Line auf dem linken Controller
verschoben.
>$crystal = 4000000
Dein Takt wird wohl doch irgendwie schneller als 4MHz gewesen sein.
holger schrieb:>>$crystal = 4000000>>>> Dein Takt wird wohl doch irgendwie schneller als 4MHz gewesen sein.
Naja jetzt sollte er 8 MHZ sein und müßte auch laufen oder hast Probleme
damit.
@ holger,
mal OT hast Du zufällig für mich auch einen Guten Tip Sed1335 640*200 in
Bascom nur Text Ausgabe würde reichen.
mfg
Sabri Kaygusuz schrieb:> Also ich habe es Mit 2 Mhz Takt mit 4 und Mit 8 Mhz Takt Versucht und> Externen Resonator und es hat nicht geklappt.
Zeige mal deinen jetzigen Code hier nochmal mit dem es nun geht,sollte
auch mit mehr als 1 Mhz gehen.
>>>$crystal = 4000000>> Dein Takt wird wohl doch irgendwie schneller als 4MHz gewesen sein.>>Naja jetzt sollte er 8 MHZ sein und müßte auch laufen oder hast Probleme>damit.
Ja, nur weil du da
$crystal = 8000000
hinschreibst ändert sich der CPU Takt dadurch nicht.
Das ist ein Hinweis für Bascom das du einen 8MHz Takt
hast. Einstellen musst du diesen schon selber über die
Fuses.
Mit welchem Takt deine CPU läuft kannst du ganz schnell
selber testen. Einfach eine LED im (angeblichen) Sekundentakt
ein/aus machen. Dann siehst du was wirklich Sache ist.
>Ich habs über die Fuses und im Code geändert, jedoch ist nichts>passiert.
Falsches HEX File geflasht? Das Programm geändert aber nicht
neu übersetzt? Passiert doch jedem mal;) Ich weiss
aber nicht wie Bascom da tickt.
Kaum hast du das Programm von Ronny oder mein HEX File
da reingebrutzelt gehts dann komischerweise.
Dein Takt hat einfach nicht gestimmt.
Ronny S. schrieb:> @ holger,>> mal OT hast Du zufällig für mich auch einen Guten Tip Sed1335 640*200 in>> Bascom nur Text Ausgabe würde reichen.>>>> mfg
Naja wenns denn jetzt bei ihm geht ist doch alles i.o für ihn.
Hast du zufällig für mich nun auch noch eine guten Tip in C bin ich
leider nicht so bewandert werd ich aber wohl noch lernen müssen.
mfg
Kann auch Sein, Ok Vielen Dank. Jetzt gehts einzeln mit den Linien und
dem Text aber Zusammen Fehlalarm ... Egal ich mach es jetzt "Manuell"
bevor ich mich damit verrückt mach. Trotzdem Vielen Dank, Ihr habt mir
echt geholfen !
>Ronny S. schrieb:>> @ holger,>>>> mal OT hast Du zufällig für mich auch einen Guten Tip Sed1335 640*200 in>>>> Bascom nur Text Ausgabe würde reichen.
Tut mir leid da hab ich keinen Tip.
@Sabri
>Dein Takt hat einfach nicht gestimmt.
Im Anhang mal eine HEX Datei die von 4MHz Takt ausgeht.
Da kannst du ja gerne mal mit rumspielen und an deinem Takt rumdrehen
bis das Display was vernünftiges anzeigt.
Hier ist das Bild, am Anfang werden die Linien ganz normal gezeichnet,
doch wenn der Text dazukommt verschiebt sich ab dem 64 Pixel, alles um 1
Pixel, in den Fuses habe ich 4MhZ eingestellt jedoch passiert nichts.
Hier nochmal der Code für Bascom :
Sabri Kaygusuz schrieb:> Wisst ihr vielleicht woran das liegen könnte ?
Ja, z.B. an zu kleinen Stack- und Framewerten, die du leider in deinem
Programm nicht angegeben hast.
Hallo Mikros,
Wie meist du das jetzt. Ich hab den Code abgeändert und überall bei
Lcdat
Y, X, "xxxx" hingeschrieben, jedoch meint Bascom es gibt dort Fehler.
Mfg Salex
Hallo,
Ich habe keine anderen Fonts in meinen Samples gefunden, nur 8x8
deswegen hab ich diese Fontart genommen, theoretisch sollte das doch
kein Problem sein oder ?
$regfile = "m16def.dat" ' specify
the used micro
$crystal = 8000000 ' used
crystal frequency
$baud = 9600 ' use baud
rate
$hwstack = 32 ' default
use 32 for the hardware stack
$swstack = 10 ' default
use 10 for the SW stack
$framesize = 40 ' default
use 40 for the frame space
$lib "glcdks108.lbx"
$include "Font6x8.font"
Danke Ronny für die Fonts und den Code,
Ich habe den jetzt übernommen jetzt kann ich sogar Linien und Text
anzeigen lassen, ohne Probleme. Jedoch wenn ich jetzt ein Menü schreibe
und mit 2 Tastern durch das Menü Navigiere verschieben sich die Linien
wieder um einen Pixel nach unten, schon wieder genau in der Mitte des
Displays...
Mfg Salex
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40
$lib "glcdks108.lbx"
$include "Font6x8.font"
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Dim X As Integer
X = 5
Dim Y As Integer
Y = 0
Dim A As Integer
Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portd ,
Ce = 3 , Ce2 = 2 , Reset = 0 , Rd = 5 , Cd = 6 , Enable = 4
Cls
Waitms 500
Do
Line(0 , 10) -(127 , 10) , 255
Line(0 , 54) -(127 , 54) , 255
Waitms 200
If Pinc.2 = 1 Then
Y = X + 1
End If
If Pinc.0 = 1 Then
Y = X - 1
End If
If Y > 4 Then
Y = 4
End If
If Y > 5 Then
Y = 5
End If
If Pinc.0 = 1 Then
Cls
Waitms 200
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Start"
Lcdat 4 , 0 , "->"
End If
If Pinc.2 = 1 Then
Cls
Waitms 200
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Start"
Lcdat 5 , 0 , "->"
End If
Setfont Font6x8
Waitms 200
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Start"
Loop
End
Sabri Kaygusuz schrieb:> Hallo, Danke dafür.> Jedoch hat sich nichts geändert immernoch ab der häfte des Displays> werden alle Pixel um 1 nach Unten Versetzt.
Sorry habe leider so ein Display nicht da um testen zu können.
Aber zeig doch mal Bild von deinem Aufbau eventuell könnte da auch die
fehlerquelle liegen.
mfg
Sabri Kaygusuz schrieb:> Also hier im Groben die Bilder, hoffe die sind gut genug wenn nicht,> mach ich gleich noch welche.
Display rückseite mach mal ein Bild von wo man das richtig sehen kann
wegen den Brücken für die Beschaltung.
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 40
$swstack = 40
$framesize = 40
$lib "glcdks108.lbx"
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Dim X As Integer
X = 5
Dim Y As Integer
Y = 0
Dim A As Integer
Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portd ,
Ce = 3 , Ce2 = 2 , Reset = 0 , Rd = 5 , Cd = 6 , Enable = 4
Cls
Waitms 500
Do
Line(0 , 10) -(127 , 10) , 255
Line(0 , 54) -(127 , 54) , 255
Waitms 200
If Pinc.2 = 1 Then
Y = X + 1
End If
If Pinc.0 = 1 Then
Y = X - 1
End If
If Y > 4 Then
Y = 4
End If
If Y > 5 Then
Y = 5
End If
If Pinc.0 = 1 Then
Cls
Waitms 200
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Start"
Lcdat 4 , 0 , "->"
End If
If Pinc.2 = 1 Then
Cls
Waitms 200
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Start"
Lcdat 5 , 0 , "->"
End If
Setfont Font6x8
Waitms 200
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Start"
Loop
End
$include "Font6x8.font"
Ich hab den Code jetzt übernommen, bis ich den ersten Taster drücke
Läuft alles Perfekt aber nach dem 1 Tastendruck wird wieder jeder Pixel
ab der Mitte um 1 nach Unten verschoben.
Mfg Salex
Hallo,
ich hatte das gleiche Problem.
Meine Erkenntnis:
Schreibe bei LCDAT für X alles >0 und dann ist Dein Fehler weg.
Also in Deinem Fall z.B.: Lcdat 5 , 1 , "->"
Viel Erfolg
Sepp
Kaum ist das Erste Problem gelöst kommt schon das Zweite ...
Nun wenn ich z.b eine Ladeleiste mache und nach 2 Sekunden einen Text
Darüber erscheinen soll, zeigt das Komplette Display nurnoch zufällige
Pixel an und nach dem Text sollte das Menü kommen, welches Komplett
Verschoben ist.
Hallo,
ich habe Dein Programm getestet und folgendes gändert:
Setfont Font6x8 muss vor Deiner ersten Textausgabe stehen, ich habe es
z.B.
direkt nach Deiner Config Graphlcd geschrieben.
Dann wird Text und Grafik einwandfrei dargestellt.
Deine Tastereingänge konnte ich nicht testen, da bei mir eine völlig
andere Belegung vorliegt.
Sepp
Hallo,
ich programmiere gerade ein Menü, aber da die Testversion von Bascom nur
4096 Bytes frei hat ist das nicht gerade Vorteilhaft, da ich nicht
gerade "sparend" Programmiere..
Kann man dies irgendwie umgehen Ohne die Vollversion zu kaufen, z.B den
Code Platzsparender zu schreiben ?
Hier der Code, ich weiss dass es wahrscheinlich "Sehr Schlimm"
geschrieben ist aber ich Programmiere erst Seit Kurzem mit Bascom...
Hallo,
so was ...
> Line(44 , 45) -(54 , 45) , 255> Line(44 , 46) -(54 , 46) , 255> Line(44 , 47) -(54 , 47) , 255> Line(44 , 48) -(54 , 48) , 255> Line(44 , 49) -(54 , 49) , 255> Line(44 , 50) -(54 , 50) , 255> Line(44 , 51) -(54 , 51) , 255> Line(44 , 52) -(54 , 52) , 255
kann man ja locker mit einer Schleife machen
for x=45 to 52
Line(44 , x) -(54 , x) , 255
next
oder gibts auch einen Befehl für ein gefülltes Rechteck?
bei den Menüpunkten kannst du mal abgesehen davon das ein derartiger
Menüaufbau extrem unübersichtlich wird, sparen indem du wiederholende
Sachen zusammenfasst. Du hast z.B. immer ein Wait (zum Entprellen?!!?)
und ein CLS.
Frage ob ab sich irgendwas an den Eingabeelementen geändert hat, wenn ja
dann mach das wait und cls und entscheide dann was neu darzustellen ist.
Sascha
Ich hab jetzt die Ladeleiste abgeändert und schonmal ein bisschen
Speicher gewinnen können.
Ja das Wait ist zum Entprellen da...
Wie gesagt ich bin ein ziemlicher Anfänger in Bascom, das Menü hätte ich
jetzt "logisch" aufgebaut mit 10.000.000 von If schleifen ...
Salex
Hallo,
ich habe mal versucht etwas zu optimieren, werde Dir aber nicht fertigen
Code liefern.
Du hast wieder bei LCDAT für X eine 0 genommen, was Du aber bereits
wissen solltest das geht nicht.
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40
$lib "glcdks108.lbx"
$include "Font6x8.font"
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Dim X As Integer
X = 4
Dim Y As Integer
Y = 0
Dim Z As Bit
Dim N As Byte
Dim X0 As Byte
Dim Y0 As Byte
Dim X1 As Byte
Config Graphlcd = 128 * 64sed , Dataport = Portb , Controlport = Portd ,
_
Ce = 3 , Ce2 = 2 , Reset = 0 , Rd = 5 , Cd = 6 , Enable = 4
Setfont Font6x8
Cls
Box(43 , 45) -(88 , 52) , 255
Lcdat 4 , 27 , "Konfiguriere."
Waitms 750
X0 = 44
X1 = 54
For N = 1 To 4
For Y0 = 45 To 52
Line(x0 , Y0) -(x1 , Y0) , 255
Next
Waitms 750
Lcdat 4 , 27 , "Konfiguriere.."
X0 = X0 + 11
X1 = X1 + 11
Next N
Waitms 750
Cls
Lcdat 4 , 53 , "DRINK"
Wait 3
Cls
Do
Line(0 , 10) -(127 , 10) , 255
Line(0 , 54) -(127 , 54) , 255
If Pinc.2 = 1 Then
Y = X + 1
End If
If Pinc.0 = 1 Then
Y = X - 1
End If
If Pinc.1 = 1 Then
Z = 1
End If
If Z = 0 Then
If Y < 4 Then
Y = 4
End If
If Y > 5 Then
Y = 5
End If
End If
If Z = 1 Then
If Y < 3 Then
Y = 3
End If
If Y > 7 Then
Y = 7
End If
End If
If Pinc.0 = 1 Then
Gosub Delay_100ms
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Getraenke"
Lcdat 4 , 1 , "->"
End If
If Pinc.2 = 1 Then
Gosub Delay_100ms
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Getraenke"
Lcdat 5 , 1 , "->"
End If
If Y = 4 And Pinc.1 = 1 Then
Gosub Delay_100ms
X = 3
Cls
Gosub Text
Lcdat 3 , 1 , "->"
If Pinc.2 = 1 And X = 3 Then
Gosub Delay_100ms
Gosub Text
Lcdat 4 , 1 , "->"
End If
If Pinc.2 = 1 And X = 4 Then
Gosub Delay_100ms
Gosub Text
Lcdat 5 , 1 , "->"
End If
If Pinc.2 = 1 And X = 5 Then
Gosub Delay_100ms
Gosub Text
Lcdat 6 , 1 , "->"
End If
If Pinc.2 = 1 And X = 6 Then
Gosub Delay_100ms
Gosub Text
Lcdat 7 , 1 , "->"
End If
End If
Lcdat 5 , 15 , "Optionen"
Lcdat 4 , 15 , "Getraenke"
Loop
End
Text:
Lcdat 3 , 15 , "Cola"
Lcdat 4 , 15 , "Fanta"
Lcdat 5 , 15 , "Sprite"
Lcdat 6 , 15 , "Ice Tea"
Lcdat 7 , 15 , "Wasser"
Return
Delay_100ms:
Waitms 100
Cls
Return
Ist verständlich und finde ich auch besser so dass du mir nicht den
fertigen Code lieferst, ich will schließlich auch was lernen. Oh das mit
der 0 habe ich völligst übersehen, danke !
Jedoch verstehe ich diesen Teil nicht in deinem Code
was gibts da nicht zu verstehen?
die innere Schleife (Y0) zeichnet ein gefülltes Rechteck, wie ich schon
vorgeschlagen hatte. Die äußere Schleife (N) sorgt dafür, das vier
dieser Rechtecke gezeichnet werden. Wobei die Textausgabe innerhalb der
Schleife sinnlos ist, da der Text so mehrmals an der selben Stelle
ausgegeben wird - in deinem Code hast du den Text aber auch 3x an der
selben Stelle ausgegeben?!
Sascha
Zum Beispiel so:
'Deinen ersten Block habe ich nicht eingefügt, da hier ein anderer Pin
'abgefragt wird, und wo ist das END IF ?
If Pinc.2 = 1 Then
Select Case X
Case 3 : Y1 = 4
Gosub Text
Case 4 : Y1 = 5
Gosub Text
Case 5 : Y1 = 6
Gosub Text
Case 6 : Y1 = 7
Gosub Text
End Select
End If
Text:
Gosub Delay_100ms
Lcdat 3 , 15 , "Cola"
Lcdat 4 , 15 , "Fanta"
Lcdat 5 , 15 , "Sprite"
Lcdat 6 , 15 , "Ice Tea"
Lcdat 7 , 15 , "Wasser"
Lcdat Y1 , 1 , "->"
Return
Delay_100ms:
Waitms 100
Cls
Return
'Wobei Du natürlich Y1 erst als Variable (Byte) deklarieren musst.
'@Sascha
'Ich habe das Programm sinnfrei etwas optimiert, wollte die
grundsätzliche 'Programmierung nicht in Frage stellen.
'Sepp
Ja das Endif habe ich vergessen mit herauszukopieren ...
Das mit den Cases kapier ich noch nichts richtig, da ich noch Bascom
Neuling bin ...
Und wie kürtzt man sowas, darüber zerbreche ich mir seit 2 Stunden den
Kopf und komme einfach auf keine Sinnvolle Lösung ...
Hi
>Und wie kürtzt man sowas, darüber zerbreche ich mir seit 2 Stunden den>Kopf und komme einfach auf keine Sinnvolle Lösung ...
Ob das BASCOM so versteht weiß ich nicht
If Y => 3 And Y<=8 and Pinc.1 = 1 Then
Compare2 = 40*(Y-2)
Gosub Progress
End If
MfG Spess
>Und wie kürtzt man sowas
Genau wie ich es Dir im letzten Beispiel gezeigt habe,
nur das dieses mal als Bedingung PinC.1 eine logische 1 haben muss.
Das Y kannst Du wieder mit Select Case Y abfragen.
Ich würde Dir empfehlen, die Beispiele von Bascom anzusehen, auch in der
Hilfe gibt es jede Menge Informationen.
Da Du dich aber so knapp an der 4K Grenze bewegst, wirst Du um eine
Vollversion nicht herumkommen.
Das Speicheraufwendigste ist das Graphische Display + Zeichensatz.
Sepp