![]() | Upline: Infos & Dokus
Elektronik
Übung ATMEL-µC mit vollgrafischem LCD Teil 1ATMega8515 und DataVision DG12864-12Das hier vorgestellte Beispiel ist sehr einfach gehalten und sollte auch einem Laien erste Gehversuche zur Verwendung eines grafischen LCDs an einem Atmel-Mikrocontroller ermöglichen.Komponenten
Schaltung und Besonderheiten![]() ![]() ![]() Da das hier verwendete gLCD-Display eine externe negative Kontrastspannung erfordert und diese in der Regel nicht gegeben ist, muß man sie aus der 5V-Spannung erzeugen. Hierzu gibt es einige Schaltungsvorschläge im Netz, empfehlenswert ist die auch auf der von Pollin angebotenen PC-Vorschaltplatine verwendete Schaltung mit einem MC34063. Verwendet man direkt diesen Bausatz, so genügt das Einlöten der dafür nötigen Bauteile und der Anschluß der Versorgungsspannung aus der µC-Schaltung (z.B. Pin 9/10 der Portstecker). Die negative Spannung wird dann direkt an das Display zurückgeführt. Auch verwendbar sind Spannungsinverter wie der ICL 7660, den man bereits für 0,60 bekommt und der zusätzliche Schaltungsaufwand ist auch relativ gering. Auf keinen Fall an 5V verwendbar ist eine Schaltung mit dem bekannten Timerbaustein 555! Dieser erzeugt aus 5V nur ca. -2,5V, was zwar für das init (erkennbar an 2 schwarzen Pixelreihen) des Displays genügt, anschließend aber nicht mehr zur Darstellung von Text/Grafik ausreicht. Die 555er Schaltung könnte evtl. verwendet werden, wenn sie an einer anderen Spannungsversorgung (>5V) betrieben wird, da viele andere 555er Schaltungen mit bedeutend höheren Spannungen arbeiten. Dies habe ich allerdings nicht getestet. Schaltungsvorschläge findet man u.a. auch bei Polin im Downloadbereich - die Datenblätter/Treiber zu diversen LCDs enthalten diese Schaltungen. Der weitere Aufbau ist sehr einfach: ich habe ein 20-poliges Flachbandkabel (altes Floppykabel) an das Display angelötet und das andere Ende entsprechend verbunden. Hierzu nimmt man die 8 Datenleitungen (Pin 10-17) und die LED-Hintergrundbeleuchtung (Pin 19/20) und drückt auf das freie Ende eine 2x5-polige Buchse (bei Reichelt "PFL 10" für 0,09). Hierbei muß lediglich auf die Reihenfolge geachtet werden, standardmäßig ist ein Portsockel wie folgt belegt: Pin 0-7 sind die Portpins, Pin 9 ist Gnd und Pin 10 liegt auf +5V. Pin 1-4 (2xGnd, +5V, -5V) habe ich an die Vorschaltplatine gelötet, welche Gnd und +5V aus der zweiten 2x5-poligen Buchse des Controlports bezogen hat. Von den anderen 8 Pins des Controlports werden nur 6 benötigt und zwar für die Pins 5-9 und 18 des Displays. Die Reihenfolge ist hierbei egal und muß nur entsprechend im Source angepaßt werden. Ich habe Pin 5-9 des Displays an Pin 2-6 des Controlports und Pin 18 an Pin 7 gelegt. Die Pins 0 und 1 dieses Ports stehen also für beliebige Erweiterungen noch zur Verfügung. Man sollte dafür dann auch gleich noch 2 Drähte in die Buchse legen, da ein späteres Hinzufügen nicht ohne Zerstörung der Plastikbuchse mgl. ist. Somit ist die Schaltung fertig, man muß lediglich die Portbuchsen auf die entsprechenden Steckerleisten stecken und kann mit dem Testen beginnen. Bei Bedarf (andere Hardware) müßten im unten aufgeführten Quelltext folgende Parameter angepaßt werden:
Software![]() ![]() ![]() Ein Hinweis noch: die Parameter von "Config Graphlcd" müssen alle in einer Zeile stehen, ich habe nur um das vertikale Scrolling in dieser Seite zu verhindern, einen Zeilenumbruch eingefügt. 'Programm nutzt 128x64-Pixel-Display für Ausgaben $regfile = "m8515.dat" $crystal = 4000000 $baud = 9600 Config Portb = Output 'LEDs Config Portd = Input 'Taster Config Graphlcd = 128 * 64 , Dataport = Porta , Controlport = Portc , Wr = 2 , Rd = 3 , Ce = 4 , Cd = 5 , Reset = 6 , Fs = 7 , Mode = 6 'PortA/C für LCD Dim A As Byte , B As Byte , D As Byte Cls Gosub Textout Gosub Lineout Waitms 200 Showpic 0 , 0 , Prote Waitms 200 Cls Text Waitms 200 Cursor Off Do B = B + 1 Portb = B D = 128 * Pind.7 A = 64 * Pind.6 D = D + A A = 32 * Pind.5 D = D + A A = 16 * Pind.4 D = D + A A = 8 * Pind.3 D = D + A A = 4 * Pind.2 D = D + A ' A = 2 * Pind.1 'weggelassen, da Taster defekt ;) ' D = D + A D = D + Pind.0 If D = 1 Then Cls If D = 4 Then Gosub Textout If D = 5 Then Cls Text If D = 8 Then Gosub Lineout If D = 9 Then Cls Graph If D = 16 Then Showpic 0 , 0 , Prote If D = 32 Then Pset 0 , 0 , 1 Pset 0 , 5 , 10 Pset 0 , 10 , 255 Pset 0 , 15 , 1 End If If D = 64 Then Pset 1 , 0 , 1 Pset 1 , 5 , 1 Pset 1 , 10 , 1 Pset 1 , 15 , 1 End If If D = 128 Then Pset 124 , 0 , 1 Pset 125 , 5 , 1 Pset 126 , 10 , 1 Pset 127 , 15 , 1 End If ' If D = 48 Then Display On 'funzt beim DG12864-12 nicht -> µC macht Reset ' If D = 96 Then Display Off Locate 8 , 1 : Lcd "PortB=" : Lcd B : Lcd " " Locate 8 , 12 : Lcd "PortD=" : Lcd D : Lcd " " Waitms 200 Loop End 'end program Textout: Locate 1 , 1 : Lcd "ATMega8515@4MHz" Locate 2 , 1 : Lcd "gLCD 128x64 T6963c" Locate 3 , 1 : Lcd "PortD belegt: 1,4,5," Locate 4 , 1 : Lcd " 8,9,16,32,64,128" Return Lineout: Line(0 , 26) -(127 , 26) , 1 Line(0 , 29) -(126 , 29) , 255 Line(0 , 32) -(125 , 32) , 1 Line(1 , 35) -(125 , 35) , 1 Return Prote: 'das pic ... $bgf "prote.bgf"Bei der Grafik ist man auf 2 Farben beschränkt. Bascom enthält einen Converter in dieses mir zuvor nicht bekannte bgf-Format. Wer für erste Tests keine eigene Grafik erstellen möchte, kann auch mit meiner Testgrafik experimentieren. ErgebnisEinen Teil der Testausgaben kann man in dem oben verlinkten Foto schwach erkennen.
|