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 BesonderheitenIch habe ein einfaches Testboard verwendet, welches über jeweils 8 LEDs und Taster verfügt. Weiterhin werden dort alle Ports herausgeführt, die Programmierung ist bequem über ein SPI-Interface mgl. und eine 5V-Spannungsversorgung ist ebenfalls integriert. Sicher, dies ist nicht unbedingt notwendig, man spart sich aber die Lötarbeiten auf einer Lochrasterplatine. Da mir in früheren Tests aufgefallen war, daß dieses kleine Testboard bei den Schaltern eine zum STK500 umgekehrte Logik verwendet, müßte dies bei Verwendung des Standardboards STK500 wahrscheinlich durch kleine Anpassungen im Quelltext berücksichtigt werden. Beim Test ist das u.a. am Status von PortD erkennbar, welcher in der letzten Displayzeile ausgegeben wird und 0 sein sollte. Das Display wurde Mitte 2005 einige Wochen bei Pollin für ca. 8 angeboten. Vergleichbare Displays kosten sonst ca. 45-50 (z.B. bei Reichelt ). Am Display war ein Flachbandkabel angebracht, welches nur über eine sehr schlecht verarbeitbare integrierte Metallfolie die Kontakte zur Verfügung stellte. Beim Auslöten dieser ist unbedingt darauf zu achten, daß man die stark abgewinkelten Lötösen nicht hochbiegt, da die scheinbar sehr schwache Kupferbeschichtung der Platine sonst in den Kontaktstellen abgerissen wird, was ich bei einem meiner beiden Displays leider zu spüren bekam. Die Reparatur mit Silberleitlack oder Kupferlackdraht ist bei den sehr kleinen Leitungsabständen und einem SMD-Rastermaß von 0.8mm sehr mühsam ...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:
SoftwareDie Software wurde in Bascom geschrieben, einem Basiccompiler, den es für verschiedene Mikrocontrollertypen gibt. Eine auf 4 kByte Flashspeichernutzung beschränkte Demoversion kann man sich kostenfrei beim Hersteller MCS Electronics herunterladen. Der Compiler ist etwas eigenwillig, trotz allem ist er für viele Projekte hervorragend geeignet. Evtl. schreibe ich irgendwann noch eine kleine Einführung in diese Sprache und die kleinen Tücken des Compilers, vorerst empfehle ich hier nur das Durcharbeiten des vorgestellten Sourcecodes und die ausgiebige Nutzung der Bascom-Hilfe. Gerade kleine Beispielprogramme wie das hier vorgestellte, kann man sich bei fleißiger Nutzung des Hilfesystems zu großen Teilen per Copy&Paste zusammenbauen ... Sehr empfehlenswert sowohl für den Einstieg als auch weitergehende Dinge ist das Buch "Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR" von Claus Kühnel.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.
|