![]() | 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.
|