PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GLCD mit T6963C an Atmega 16



Terfagter
22.12.2007, 15:07
Hallo,

versuche z.Z. ein GLCD mit dem Controller T6963C an einen Atmega 16 zu betreiben. Meine Pinbelegung sieht so aus:


'1 GND GND
'2 GND GND
'3 +5V +5V
'4 -9V -9V
'5 /WR PORTD.0
'6 /RD PORTD.1
'7 /CE PORTD.2
'8 C/D PORTD.3
'9 NC not conneted
'10 RESET PORTD.4
'11-18 D0-D7 PA
'19 FS PORTD.5
'20 NC not connected

Der Kontrast lässt sich mit Hilfe eines Potis an Pin 4 auch regeln.
Auf dem Display erschein aber nur eine kleine Linie, wenn ich den MC anschließe. Hab das mit 3 baugleichen Displays gepfrüft, aber es kommt immer nur diese Linie?!?

Mein Code in Bascom sieht so aus:

$regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 12000000

Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portd , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8


Cls
Cursor Off
Showpic 0 , 0 , Startbild

End

Startbild:
$bgf "startbild.bgf"

Was mache ich falsch?
Hat jemand Erfahrung mit diesen GLCDs?

H.A.R.R.Y.
22.12.2007, 17:06
Hi,

mit BASCOM kenne ich mich nicht aus, deswegen mag meine folgende Feststellung nicht zutreffend sein:

Der T6963C muß initialisiert werden bevor was erscheint. Im Datenblatt ist das beschrieben und es sind einige Zugriffe dafür notwendig. Machst Du das?

Sollte es sich um die Teile für 14,95€ vom Pollin handeln, könnte ich Dir die notwendigen Sequenzen mal zukommen lassen; allerdings erst im Januar.

Gruß H.A.R.R.Y.

for_ro
22.12.2007, 17:48
Hallo,
Initlcd macht Bascom automatisch nach dem Config Graphlcd.
Ansonsten sieht alles ok aus.
Ich würde mal sicherheitshalber den FS-Pin nicht beschalten. Es gibt einige Displays, da ist der auf der Platine fest auf GND gelegt. Das kann bis zum Dauer Reset deines µC führen.
Ansonsten versuch mal, einen Text auszugeben, z.B. mit
Locate 1,1 : Lcd "Test".

Gruß

Rolf

Terfagter
22.12.2007, 19:02
Habs mal probiert ohne FS. Aber der Fehler bleibt! WOran könnte es sonst liegen? Stimmt überhaupt der Anschluss? Viel falsch machen kann ich ja da nicht mehr! Hat jemand schon mit diesem Display gearbeitet?

for_ro
22.12.2007, 19:14
Nochmal, versuch erst mal die simplen Funktionen wie Textausgabe oder ein einzelnen Pixel setzen (Pset 5,10,255) oder eine Linie (Line(0 , 0) -(239 , 63) , 255). Beim Showpic könnte die Ursache auch im File startbild.bgf liegen.

Gruß

Rolf

Terfagter
22.12.2007, 23:24
Sry hatte ich vergessen zu schreiben.

Habe meinen Code geändert und das bild rausgenommen.

$regfile = "m16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 12000000

Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portd , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8


Cls
Cursor Off
Locate 1 , 1 : Lcd "Test"

End

Terfagter
23.12.2007, 00:20
Aber es ist doch richtig, das Data Bit 0 an Porta 0 kommt und Data Bit 1 an Porta 1 usw? oder umgekehrt?

Zapo.
23.12.2007, 01:33
hast du mal daran gedacht den Port als ausgang zu deklarieren?

so z.B.

Ddrd = &B11111111
Portd = &B11111111

ensprechend deiner Pinbelegung - Port D port C

Terfagter
23.12.2007, 01:58
Hab ich auch gerade gemacht, es bessert sich aber nichts.

for_ro
23.12.2007, 02:24
Auch die Port-Konfigurationen macht Bascom automatisch.
Bist du sicher, das der µC mit der angegebenen Frequenz (12MHz) läuft, und nicht z.B. mit einer internen? Dann ist das Timing total versaut.
Als nächstes würde ich noch die Stacks verdoppeln, die sind mir etwas klein.

Gruß

Rolf

Zapo.
23.12.2007, 02:42
Stack brauchst du ja nicht - du springst ja nicht.
schadet also auch nicht...

1 bzw. 8 Mhz interne Frequenz würde ich erstmal setzen und dann natürlich auch den Prozessor so einstellen! (nicht vergessen!)

Terfagter
23.12.2007, 13:00
Habe den Stack hochgesetzt auf 24 und 1Mhz und 8Mhz ausprobiert.
Habe das im Programm geändert und auch die Fusebits umgestellt. Aber die Linie bleibt. Es kommt immer nur diese Linie...

linux_80
23.12.2007, 13:13
Hallo,

den hwstack immer so gross wie geht, nicht unter 32, auch wenn keine IRQs verwendet werden, denn wozu Speicher sparen, wenn sonst nix damit gemacht wird, der M16 hat ja 1KB, und man ist auf der sicheren Seite.
swstack und frame sind sowieso nur interessant, wenn man Subs oder Functions verwendet.

Probier auch mal vor dem Config Lcd ein Wait 1 zu machen, damit das LCD Zeit hat sich selber zu initialisieren, kann durchaus sein, dass das LCD noch nicht soweit ist, wenn der AVR schon an den Leitungen wackelt :-k
Evtl. nach dem Config ein Wait und danch nochmal ein Initlcd.

Terfagter
23.12.2007, 13:43
Hab den Code entsprechend geändert:

$regfile = "m16def.dat"
$framesize = 16
$swstack = 24
$hwstack = 24
$crystal = 8000000

Wait 1

Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portd , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8

Wait 1


Cls
Cursor Off
Locate 5 , 20 : Lcd "Test"

End

Immer noch das selbe.

Zapo.
23.12.2007, 13:50
möglicherweise doch ein verkabelungsfehler ???

stell mal ein bild vom Display online...

und schreibe mal in die erste zeile
locate 1,1
lcd "test"

vielleicht noch cursor off weglassen - macht ja nix wenn man mal was sieht...

H.A.R.R.Y.
23.12.2007, 15:34
Hi,

wie ist die Polarität vom RESET-Anschluß des T6963C nach dem Init?

Weiß das BASCOM wie es den T6963C zu inititalisieren hat? Es gibt auch 240x64-LCDs mit anderen Controllern, die nicht kompatibel sind.

Ich habe bereits ein LCD mit T6963C am XRAM-Interface eines ATmega162 angehängt und die Sache arbeitet zuverlässig (allerdings codiere ich in C). Das Phänomen mit der Linie tritt normalerweise auf, wenn der RESET zum LCD gegeben wird und der INIT danach nicht läuft.

Wenn es weiterhin hakt, dann versuche es mit allen Zugriffen "zu Fuß". Das heißt alle Interface-Signale per eigenem Programm kontrollieren. Sobald alles richtig ist, solltest Du das jeweilige Testmuster zu sehen bekommen.

Gruß H.A.R.R.Y.

uli behrendt
24.12.2007, 21:23
Dein Programm und Deine Initialisierung, Config .Lib .Lbx sind OK. Ich kaempfe mit dem gleichen Problem seit laengerer Zeit. Dies betrifft Glyn Display 128x64 (KS108), LEDSEE Touch 128x64 (KS108), LEDSEE Touch 240x128 (T6963), Hardware und Pins sind korrekt verbunden. Ohmmeter und Oszilloscope zeigen auch alles richtig. Kleinere Quarzfrequenz, waitstates, Pullup-Widerstaende, waitstates in der .lib und .lbx bringen nichts.
Bascom mit den .lib und .lbx scheint das Problem zu sein. Bei 128x64 haengt das Programm nach dem Config, danach blinkt noch nicht mal eine LED mehr. Beim 240x128 sieht man nach dem Config wenigstens fuer 1 Sek eine
weisse Linie 240 Pixel von links nach rechts ca. in der Mitte des Display.
Wir scheinen nicht die einzigen mit diesem Problem zu sein. Manche hatten eben Glueck, dass das Display gleich lief. Der Rest, wohl die meisten, kaempfen dann in anderen Sprachen wie C oder Assembler weiter oder geben entsprechend genervt auf. Das hat man nun davon, wenn auf den Mist von anderen aufbauen muss. Leider kann ich momentan keine bessere Antwort geben.

uli behrendt
25.12.2007, 00:15
Habe die Lösung gefunden und sie funktioniert !!! Dies ist dem Kollegen
Digitali -> Stammmitglied -> im Roboternetz zu verdanken. Sein LEDSEE
Touchdisplay 240x128 ist haargenau meines. Sein Programmcode auf
http://www.robotikportal.de/phpBB2/viewtopic.php?p=304949 funktioniert.
Da hat er aber Glueck gehabt !!! Sein Config Graphlcd = 240 * 128, Dataport = Portb , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6 (alles in einer Zeile) --> mit dem arbeitet --> Bascom einwandfrei. Mit meinem Code: Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6 (alles in einer Zeile) ging es nicht. Also Pech gehabt, aber kaempfen lohnte sich. Also grosses BASCOM Problem (Bug) im Bascom Graphlcd. Das hatte ich bereits vermutet. Dieser Fehler tritt bei den 128x64 Displays und anderen Displays auch auf. Also
Vorsicht!!! ACHTUNG !!! Zuordnung der Portpins eventuell aendern. Beim
240x128 T6963 werden die .lib oder .lbx nicht benoetigt. Noch andere interessante Seiten in diesem Zusammenhang. Also viel Bit-Glueck !!!!
http://www.bipom.com/appnotes/bascomavr/an0129.php
http://www.team-iwan.de/technik/software/soft/Grafik_Entl_M16_1.bas
http://www.elektronik-projekt.de/thread.php?postid=38557#post38557

demlinger
26.12.2007, 18:04
nur mal so
wenn der portc als controllport verwndet wird muss JTAG abgeschaltet werden sonst tut sich nix

radebeul
07.01.2008, 10:05
Hallo
Ich habe ebenfalls mit einem ledsee Touch 128x64 am M32 und am M16 experimentiert. Erst nachdem ich die Quarzfrequenz auf 8MHz (intern) herabsetzte, lief das Display (nach Korrektur der Analogwerte)anstandslos. Offenbar kann das Touch-Display höhere Taktraten nicht realisieren.
Verwendete Hardware: 2 x Funkboard RFM12 von Pollin (M16 und M32). Ein Master schickt 11 Byte (Slaveadresse, Kommando, 8 Datenbytes, crc8) an Slaves, die ein Echo zurücksenden. Funktioniert auf Entfernungen bis zu 500m verblüffend gut.
radebeul

Kaum macht man's richtig, schon geht's.

uli behrendt
02.02.2008, 12:37
Dem Komentar von radebeul gebe ich recht. Das LEDSEE Display 128 x 64 funktioniert nicht mit 16 MHz Quarz am ATmega32.
Mit 8 MHz Quarz ist der Datentransfer dann OK. Das LEDSEE 240 x 128 funktioniert sogar mit Übertaktung, mit 20 MHz
Quarz am ATmega32 und anderen Atmelxxx.

Terfagter
23.02.2009, 20:33
Ich benötige für dieses Display +5V und -9V. Wie realisiere ich das am besten, bei einer Spannungsversorgung von 12VDC von einer Batterie.

Ist der Gedanke falsch, einen Spannungsteiler zu bauen und damit zu arbeiten? Also in die Mitte GND legen?
Oder gibt es eine bessere Variante.
Ich habe noch einen 7909 hier liegen. Aber den kann ich nur bei AC Eingangsspannung verwenden oder sehe ich das falsch?
Habe auch mal von einer Variante mit einem µC gehört?!?

nico_99
25.02.2009, 11:38
Hi,

Du kannst den 7909 nach dem Gleichrichter bzw. + Baterie anschließen.

Gruß
Nico

peterfido
28.02.2009, 22:39
Die negative Spannung erzeuge ich in meinem ersten Projekt mit einem DC-DC Wandler. Im nächsten werde ich ein Netzteil nehmen, welches zusätzlich -12 V ausgibt. Von da noch nen Spannungsteiler per Poti, bis der Kontrast passt. Evtl würde es auch mit einem Max 232 gehen, da dieser auch negative Spannungen erzeugen kann. Müsste man mal testen.

Terfagter
11.07.2009, 21:35
Die Idee mit dem max232 war sehr gut.

Betreibe jetzt eines dieser Displays an einem Atmega 8 zu Testzwecken.
Ich lasse nur eine Softclock laufen und will sie mit 2 Tastern einstellen können.
Jetzt habe ich aber folgendes Problem:
Die Uhr läuft wunderbar, jedoch lässt sie sich nicht fehlerfrei einstellen. D.h. beim einstellen ist es immer eine Glückssache welche Zahl erscheint, weil die Zahlen viel zu schnell hochlaufen. Woran kann das liegen?
An XTAL hängt ein 32.xxx Quarz und der interne Oz ist auf 1 Mhz gesetzt.

Hier das Programm:


$regfile = "m8def.dat"

Enable Interrupts

Config Date = Mdy , Separator = /
Config Clock = Soft
Config Portc = Input
Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portb , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8


Cls
Cursor Off


Portc.0 = 1 'Taster1, Zeit/Datum stellen, PullUp ein, schaltet gegen Minus
Portc.3 = 1 'Taster2, Zahl hochzählen, PullUp ein, schaltet gegen Minus


Time$ = "00:00:00" 'Setzen auf Startwert
Date$ = "00/00/00" 'Setzen auf Startwert

Do
Locate 1 , 1
Lcd Time$ 'Zeige Zeit in Zeile1

If Pinc.0 = 0 Then Gosub Time 'wiederhole Anzeige bis Taster 1 zum Stellen gedrückt, springe nach Sub "Time"
Loop
End


'Stunde
Time:
Waitms 200
Cls 'lösche Zeilen
Do
Locate 1 , 1
Lcd "Set Hour:" 'Stunden setzen
Locate 2 , 1
Lcd _hour
If Pinc.3 = 0 Then 'Mit Taster 2
Incr _hour 'hochzählen
Locate 2 , 1
Lcd _hour
End If
If _hour > 23 Then 'Zählt bis Max, danach wieder ab 0
Cls
_hour = 00
End If 'solange, bis Taster 1 gedrückt
Loop Until Pinc.0 = 0
Waitms 200



'Minute
Cls
Do
Locate 1 , 1
Lcd "Set Minute:"
Locate 2 , 1
Lcd _min
If Pinc.3 = 0 Then
Incr _min
Locate 2 , 1
Lcd _min
End If
If _min > 59 Then
Cls
_min = 00
End If
Loop Until Pinc.0 = 0
Waitms 200
Cls

Return



Noch eine andere Frage:

Der Befehl "locate" setzt ja den Cursor auf eine bestimmte Zeile und Spalte. Aber es ja nicht die genaue Pixelzeile und spalte.
Z.B. möchte ich ganz oben im Display eine Linie angezeigt kriegen und darunter erst den Text mit "locate". Sage ich aber Locate 2 , 1 : Lcd "Es klingelt!" erscheint der Text einige Zeilen weiter runter.
Besteht auch die Möglichkeit eine genaue Zeile und Spalte mit Text anzusteuern?

Und die letzte Frage wäre:
Cls löscht ja das ganze Display. Gibt es auch eine Möglichkeit nur bestimmte Zeilen oder Stellen des Displays zu löschen?
Gibt es verschiedene Schriftarten bzw Größen die ich übertragen kann?

Was bedeutet das Mode?
Möchte z.B. einen Balken für die Spannung anzeigen, der bei weniger Spannung fällt. Wie ginge das am besten?

Terfagter
23.07.2009, 13:25
Versuche gerade das Display an einem Atmega 16 zu Programmieren, jedoch kommt jetzt schon wieder das alte Problem mit dieser Linie.
Nach dem Starten des yC erscheint nur eine Linie an beliebiger Stelle.
Habe es jetzt mit Bascom ausprobiert und mit C in WinAVR.
Bascom Code:

$regfile = "m16def.dat"
$lib "glcd.LBX"
$hwstack = 200
$swstack = 120
$framesize = 100
$crystal = 4000000


Config Graphlcd = 240 * 64 , Dataport = Portb , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8


Do

Cls
Cursor Off
Locate 1 , 1 : Lcd "Test"


Loop
End

C-Code:

#include <avr/io.h>
#include "T6963C.h"
#include "font.h"

int main()
{

glcd_setup(); // make sure control lines are at correct levels
glcd_init(); // initialize LCD memory and display modes
glcd_clear_text();
glcd_clear_graph();
glcd_print(0,10,"AVR Microcontroller");

}

Das C-Programm stammt von Christian R:
http://www.mikrocontroller.net/topic/75124#new

Bei beidem erscheint nur die Linie.
Habe den Data Port auch schon an Port A betrieben, anstelle von B. Es bleibt aber beim alten!
JTag habe ich auch ausgeschaltet und ich habe an XTAL1 und 2 einen 4Mhz Quarz.

Übrigens: Das gleiche Display lief unter einem Atmega8 vorher einwandfrei unter Bascom!!! Ich verstehe das nicht, denn ich benutze die gleichen Ports.

Damals war es genauso!
Ich hoffe auf eure Hilfe.

for_ro
23.07.2009, 14:59
JTag habe ich auch ausgeschaltet
Bist du dir da ganz sicher? Das scheint mir genau das problem zu sein.
Kannst du nicht den Kontrollport mal auf einen anderen Port legen?

Terfagter
23.07.2009, 15:16
Ich versuche es mal.

Terfagter
23.07.2009, 15:33
Benutze jetzt PortB als Kontrollport und Port A als Dataport.
Aber es erscheint wieder nur diese Linie!

Terfagter
23.07.2009, 16:00
Habe alle Leitungen vom yC bis zum Display nochmal durchgepiepst und alles ist in Ordnung.
Und habe noch 3 baugleiche Displays ausprobiert.
Die Linie erschein z.B. auch wenn ich in Bascom die Ports vertausche?!?

for_ro
23.07.2009, 17:18
Die einzelne Linie heißt immer, dass die Initialisierung nicht durchgeführt wurde.
Mich wundert in deinem Programm nur die Lib, die du verwendest.
Kannst du mal eine höhere Taktfrequenz nehmen. Mir schwant da war mal was. Finde aber im Moment nichts dazu.
Aber wenn es beim Mega8 genau so funktioniert hat?
Den C-Code kann ich nicht beurteilen, ist aber bestimmt auch ein Standard-Code, oder?

peterfido
23.07.2009, 17:27
Wozu schickst Du den Text im Loop? Einmal sollte reichen. Wenn alles Richtig verdrahtet ist, könnten evtl Pullups an den Signalleitungen helfen. Bei meinen Projekten waren bisher keine notwenig, meine es aber irgendwo schon gelesen zu haben. Für so ein Display gibt es übrigens nur ein zu schnell. Ein zu langsam habe ich noch nicht hinbekommen. Demnach würde ich den Takt eher mal runtersetzen als rauf. Evtl sind auch die Signalleitungen zu lang.

for_ro
23.07.2009, 17:31
Ein zu langsam habe ich noch nicht hinbekommen.
Mein µC läuft mit 16MHz.

Aber er schreibt ja, dass es mit dem Mega8 genau so wie im Programm angegeben funktioniert. Seltsam.

peterfido
23.07.2009, 19:10
Irgendwas wird schon anders sein... Meine laufen auch mit 16 MHZ, jedoch habe ich die GLCD Lib darauf optimiert....

for_ro
23.07.2009, 19:23
Irgendwas wird schon anders sein... Meine laufen auch mit 16 MHZ, jedoch habe ich die GLCD Lib darauf optimiert....
Ich benutze ein T6963C-LCD und keine Lib. Einfach nur das Config GraphLCD.

peterfido
25.07.2009, 13:50
Die Lib nutzt Bascom automatisch....

for_ro
25.07.2009, 14:49
...jedoch habe ich die GLCD Lib darauf optimiert....
Schon klar, dass Bascom eine Lib dafür hat, mein Kommentar bezog sich hierauf.

peterfido
25.07.2009, 19:44
Die Lib, die Bascom automatisch nutzt, wenn es config graphlcd findet, meinte ich auch....