Upline: Infos & Dokus Elektronik

�bung ATMEL-�C mit vollgrafischem LCD Teil 1


ATMega8515 und DataVision DG12864-12

Das 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

  • �C ATMega8515
  • herausgef�hrte Ports, 8 LEDs, 8 Taster, ideal: Testboard
  • grafisches LCD mit 128x64 Pixeln und Controller T6963c (z.B. DataVision DG12864-12)
  • Spannungsquelle -5V/GND/+5V oder alternativ nur Netzteil f�r das Testboard und -5V aus Spannungsinverter beziehen
  • PC zur Programmierung des �C in Bascom und entsprechend eAnschlu�kabel
  • 10- bzw. 20-polige Kabel, 2 Buchsen mit 2x5 Kontakten (z.b. COM-Port-Kabel aus �lteren PCs oder Floppykabel ohne die Buchsen)
  • L�tzubeh�r und 2-3h Zeit

Schaltung und Besonderheiten

Testboard f�r Atmel Controller und grafisches Display Ich 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 pollin.de f�r ca. 8€ angeboten. Vergleichbare Displays kosten sonst ca. 45-50€ (z.B. bei Reichelt reichelt.de). 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:
  • Controllertyp (ATMega8515, unproblematisch durch andere 40-F��er ersetzbar)
  • Quarzfrequenz (4 MHz)
  • Displayaufl�sung bzw. Controllertyp (128x64, T6963c)
  • PortA (Datenport f�r Display)
  • PortB (8x LED)
  • PortC (Controlport f�r Display, auch auf Reihenfolge der Leitungen achten!)
  • PortD (8x Taster)
Weiterhin sollte die Spannungsversorgung beobachtet werden, das Display hat einen recht beachtlichen Strombedarf, der zur restlichen Schaltung hinzukommt! Da bei mir der 7805er Regler sehr hei� wurde, habe ich diesen etwas vom Board abgehoben, um die durch die Platine bedingte W�rmed�mmung zu reduzieren. Au�erdem setzte ich noch einen kleinen K�hlk�rper auf den sehr hei�en Gl�ttungselko.

Software

Programmieren der AVR RISC Mikrocontroller mit BASCOM-AVR, Claus K�hnel Die 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 mcselec.com 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" Programmieren ... mit BASCOM-AVR bei Buch24.de 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.

Ergebnis

Einen Teil der Testausgaben kann man in dem oben verlinkten Foto schwach erkennen.
  • Schriftgr��e 8x8 ist besser lesbar, daf�r aber nur 128/8=16 Zeichen pro Zeile, deshalb von mir nicht verwendet
  • bei 6x8-Font Ausgabefehler (Spalte 1 um 1 Zeile nach oben verschoben in Spalte 126 sichtbar, selbiges f�r die Spalten 2 und 127)