PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN-Minicontrol - Anzeigeproblem RN-LCDAdapter mit LCD-EADIP2



myrobo
24.09.2009, 13:19
Betreff: RN-Minicontrol - Anzeigeproblem RN-LCDAdapter mit LCD-EADIP204

Guten Tag,

eins vorweg: ich bin relativ neu im Umgang mit AVRs und BASCOM. Über BASCOM möchte ich mich Schritt für Schritt an C rantasten. Bitte helft mir eine Lösung und Erklärung für mein folgendes Problem zu finden:

ich kann mit meinem RN-MiniControl Board keinen Text auf ein LCD EADIP204 (4x20) ausgeben. Das LCD EADIP204 steckt in dem dafür vorgesehenen RN-LCDAdapter, und die Verbindung zwischen RN-MiniControl und RN-LCDAdapter erfolgt über das 10-polige Ribbonkabel (Wannenstecker nach RN-Norm!). Mein einfaches BASCOM Testprogramm ist weiter unten zu sehen. DAS LCD wird zwar eingeschaltet, es ist also hell, aber der Text "Hallo Welt" wird nicht ausgegeben. Es wird garnichts ausgegeben!

Hinweis:
--------
ich habe die Elektronik mehrmals durchgemessen, auch die PIN-Belegungen und die entsprechenden Verbindungen zwischen RN-MiniControl Board und RN-LCDAdapter. Alle Verbindungen müssen OK sein, denn die Textausgabe funktioniert mit einem RN-Control 1.4 Mega32 Board mit dem dafür vorgesehenen Testprogramm einwandfrei. Der RN-LCDAdapter und das LCD EADIP204 4x20 müssen also OK sein!

Testbedingungen
---------------
- Betriebssystem: WINDOWS-XP Prof. SP3
- Programmer: AVRISP-MKII (USB)

- Programmiersprache: BASCOM-AVR
- BASCOM Compiler Version: 1.11.9.5
- BASCOM IDE Version: 1.11.9.5

- Testboard: RN-MiniControl mit ATMEGA 168
- RN-MiniControll Jumper-Einstellungen: alle Jumper laut Beschreibung (Standardbelegung!)
- ATMEGA 168 Fuse-Bit Einstellungen: alle laut RN-MiniControl Beschreibung (auf 16 MHz)

- LCD-Adapter: RN-LCDAdapter
- RN-LCDAdapter Jumper-Einstellungen: J1 gesteckt (grüne LCD)
- RN-LCDAdapter Jumper-Einstellungen: J2 alle 4 gesteckt (4 BIT-Modus)
- LCD-Typ: DIP LCD-Display 4x20 mit Beleuchtung [EADIP204]
- Verbindung RN-MiniControl mit RN-LCDAdapter: 10 poliger Universeller Datenportstecker "CTRL" (Wannerstecker) an 10 poligen Wannenstecker

Die Port- und Pinbelegung kann man im Kommentar meines folgenden Testprogramms finden:

<<< Anfang Testprogramm --->>>
'################################################# ##############################
'
' BASCOM-AVR Beispielprogramm "MINI_CONTROL_EADIP204.BAS"
'
'################################################# ##############################
' Test des LCD EADIP204 mit RN-LCDAdapter an RN-MiniControl. Die in den
' RN-LCDAdapter eingesteckte LCD-Anzeige LCD EADIP204 wird am RN-MiniControl in
' den Universellen Datenportstecker "CTRL" gesteckt. Das 10-polige RN-Standard
' Kabel verbindet das LCD-Modul mit dem ATMEGA 168 über die vordefinierte
' PIN-Belegung des "CTRL" Datenportsteckers mit den ATMEGA 168 Ports:
' - PORTD.6 = PIN 1 (Datenportstecker "CTRL") = DB7 (LCD)
' - PORTD.7 = PIN 2 (Datenportstecker "CTRL") = DB6 (LCD)
' - PORTB.0 = PIN 3 (Datenportstecker "CTRL") = DB5 (LCD)
' - PORTB.5 = PIN 4 (Datenportstecker "CTRL") = DB4 (LCD)
' - PORTC.3 = PIN 5 (Datenportstecker "CTRL") = EN2 (LCD) - nicht verwendet!)
' - PORTB.3 = PIN 6 (Datenportstecker "CTRL") = EN (LCD)
' - PORTD.3 = PIN 7 (Datenportstecker "CTRL") = R/W (LCD) - nicht verwendet!)
' - PORTC.2 = PIN 8 (Datenportstecker "CTRL") = RS (LCD)
' - GND = PIN 9 (Datenportstecker "CTRL") = VSS (LCD)
' - VDD = PIN 10 (Datenportstecker "CTRL") = VSS (LCD)
'
' RN-LCDAdapter : Jumper J1 gesteckt (grüne LCD)
' RN-LCDAdapter : Jumper J2 alle 4 gesteckt (für 4 Bit Modus)
' RN-MiniControl: Fuse-Bit Einstellungen laut Beschreibung
' RN-MiniControl: Alle Jumper laut Beschreibung (Standardbelegung!)
' ATMEGA 168 : Fusebit KLA987 (111111), Fusebit C (1:Divide Clock by 8 Disabled)
'
'################################################# ##############################

$regfile = "m168def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64

$crystal = 16000000
$baud = 9600

Config Lcd = 20 * 4a , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , Rs = Portc.2
' Config Lcdbus = 4

Initlcd

Cls
Locate 1 , 1
Waitms 100
Lcd "Hallo Welt"

End

<<< Ende Testprogramm --->>>

Muß ich eigentlich im 4 BIT Modus auch Config Lcdbus = 4 eingeben? Wenn ja, warum? Ich habe Config Lcdbus = 4 auskommentiert, weil es weder mit noch ohne funktioniert!

Muß ich eigentlich immer, also auch wenn ich keine serielle Ausgabe habe, mit $baud die Baudrate angeben?

Was mache ich falsch? Ich bin für jede Hilfestellung dankbar. Nach Möglichkeit mit einem kleinen funktionierenden Beispielcode für mein Problem.

Vielen Dank für eure Hilfe in voraus.

Hubert.G
24.09.2009, 17:10
Du wirst das LCD über ein 10pol Flachbandkabel angeschlossen haben, da geht dann nur LCDBUS=4.
Am Kontrastregler wirst du ja mal gedreht haben.

myrobo
24.09.2009, 17:57
Hallo Hubert.G,

Danke für die Antwort.

Du wirst das LCD über ein 10pol Flachbandkabel angeschlossen haben, da geht dann nur LCDBUS=4.
Am Kontrastregler wirst du ja mal gedreht haben.
Ja, ich verwende das 10pol Flachbandkabel, was ich aber auch u. a. unter "Testbedingungen" erwähnt habe. Und natürlich habe ich am Kontrastregler gedreht! Wie auch erwähnt, das ganze funktioniert ja auch auf dem RN-Control 1.4 Mega32 Board mit dem entsprechenden Beispielcode für dieses Mega32 Board!

- Verbindung RN-MiniControl mit RN-LCDAdapter: 10 poliger Universeller Datenportstecker "CTRL" (Wannerstecker) an 10 poligen Wannenstecker
Mein Problem ist, dass ich mich an die unveränderliche PIN- bzw. PORT-Belegungen des Universellen Datenportstecker "CTRL" des RN-MiniControl halten muß.

Wie muß denn jetzt mit LCDBUS=4 mein einfacher BASCOM-Testcode für die "Hallo Welt" LCD-Ausgabe aussehen? Kannst Du, oder irgendjemand anders mir ein funktionierendes "Hallo Welt" BASCOM-Beispiel hier zeigen? Für ein Codebeispiel wäre ich sehr dankbar, denn ansonsten komme ich wohl nicht weiter. Danke.

Hubert.G
24.09.2009, 18:37
Hier gibt es das BASCOM-AVR-Manual, unter LCD findest du auch dein Beispiel.www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54

myrobo
24.09.2009, 19:55
Hallo Hubert.G,

sorry, aber jetzt passiert genau das, was ich befürchtet habe. Mein Problem klingt so trivial, dass ich Lösungsvorschläge bekomme, die ich natürlich schon längst selbst evaluiert habe.

Hier gibt es das BASCOM-AVR-Manual, unter LCD findest du auch dein Beispiel.www.mcselec.com/index.php?option=co.....cat_view&gid=99&Itemid=54
Natürlich kanne ich das BASCOM-Manual, und somit auch die entsprechenden LCD-Beispiele. Ich habe ja schließlich die neueste BASCOM-AVR Vollversion. Natürlich habe ich auch in allen mir bekannten AVR- und BASCOM Foren nach einer Lösung gesucht. Ich habe auch gegoogled! Leider ist dieses LCD-Anzeigeproblem

RN-MiniControl spezifisch.

RN-MiniControl hat in dem u. a. explizit für die LCD-Ausgabe vorgesehenen 10pol Wannenstecker (Universeller Datenportstecker CTRL) eine wie folgt fest vorgegebene PIN- und somit auch PORT-Belegung:

- PORTD.6 = PIN 1 (Datenportstecker "CTRL") = DB7 (LCD)
- PORTD.7 = PIN 2 (Datenportstecker "CTRL") = DB6 (LCD)
- PORTB.0 = PIN 3 (Datenportstecker "CTRL") = DB5 (LCD)
- PORTB.5 = PIN 4 (Datenportstecker "CTRL") = DB4 (LCD)
- PORTC.3 = PIN 5 (Datenportstecker "CTRL") = EN2 (LCD) - nicht verwendet!)
- PORTB.3 = PIN 6 (Datenportstecker "CTRL") = EN (LCD)
- PORTD.3 = PIN 7 (Datenportstecker "CTRL") = R/W (LCD) - nicht verwendet!)
- PORTC.2 = PIN 8 (Datenportstecker "CTRL") = RS (LCD)
- GND = PIN 9 (Datenportstecker "CTRL") = VSS (LCD)
- VDD = PIN 10 (Datenportstecker "CTRL") = VSS (LCD)

Nochmal: diese Belegung kann man NICHT ändern. Also passe ich meinen BASCOM LCD Code entsprechend wie folgt an:

$regfile = "m168def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64

$crystal = 16000000
$baud = 9600

Config Lcd = 20 * 4a , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , Rs = Portc.2
' Config Lcdbus = 4

Initlcd

Cls
Locate 1 , 1
Waitms 100
Lcd "Hallo Welt"

End
Aber leider wird auf der LCD nichts angezeigt, sie leuchtet halt nur gelb. Auch die Kontrastregelung zaubert keinen Text hervor. Daher nochmal meine Frage: Was ist an meinem Beispielcode falsch? Da ich die PortPins mit
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , Rs = Portc.2
dem RN-MiniControll Datenstecker angepasst habe sollte die Ausgabe von "Hallo Welt" doch eigentlich funktionieren. Warum funktioniert der Beispielcode aber nicht?

Ich bitte um Hilfe, denn ich trete wirklich auf der Stelle. Danke.

Hubert.G
24.09.2009, 21:33
Das Problem könnte sein, das bei BASCOM der R/W nicht verwendet wird und daher auf GND gelegt werden muss.
Das sollte allerdings nur Richtung LCD passieren, da der M168 schaden nehmen könnte wenn du den Port auf high legst.

Edit: Wenn du den Pin sonst nicht brauchst, kannst du ihn natürlich auch im Programm auf low legen.

myrobo
25.09.2009, 09:56
Hallo Hubert,

ich habe mir Deinen letzten Tip
Das Problem könnte sein, das bei BASCOM der R/W nicht verwendet wird und daher auf GND gelegt werden muss.
Das sollte allerdings nur Richtung LCD passieren, da der M168 schaden nehmen könnte wenn du den Port auf high legst.

Edit: Wenn du den Pin sonst nicht brauchst, kannst du ihn natürlich auch im Programm auf low legen.genauer angesehen, und auch nachvollzogen. Ich habe jetzt mit
Config Pind.3 = Output ' bestimme Ausgang für R/W
Lcd_rw Alias Portd.3 ' Variable für R/W festlegen
Lcd_rw = 0 ' 0 = Schreiben, 1 = Lesenam RN-MiniControl den Ausgang PORTD.3 mit LOW an PIN7 gelegt, und damit für das LCD den Wert für R/W auf Schreiben (W) gesetzt. Jetzt funktioniert die LCD-Ausgabe wie gewünscht. Eins sollte man aber noch beachten:
In der BASCOM IDE im Menü "Optionen"-"Compiler"-"LCD" den BUS mode auf 4 Bit, und den Data mode auf ein zu stellen!

Um anderen Anfängern den Anschluß und Betrieb des LCD EADIP204 mit einem RN-LCDAdapter an ein RN-MiniControl Board ( alles Produkte von http://www.robotikhardware.de ) zu erleichtern, füge ich hier nochmal meinen kurzen, aber ausführlich kommentierten Testcode an.

Nochmal Danke für die Hilfestellung.

Hubert.G
25.09.2009, 10:22
Mich würde noch interessieren was du bei deinem RNControl 1.4 für ein Testprogramm verwendet hast.

myrobo
25.09.2009, 11:57
Hallo Hubert,

für das RNControl 1.4 habe ich das Beispielprogramm aus der Beschreibung für den RN-LCD-Adapter von "robotikhardware.de" genommen. Du findest das Testprogram über den Link

http://www.robotikhardware.de/download/rn_LCD_adapter.pdf

unter der Überschrift "Beispielprogramm für RN-Control" ab Seite 6 bis Seite 8.

Ich hoffe diesmal konnte ich Dir helfen.

Hubert.G
25.09.2009, 12:09
Danke, habe es gefunden. Mich hat nur interessiert wie dort das Problem mit R/W gelöst ist.
Es ist genau so wie du es gemacht hast.
Wäre natürlich nicht schlecht wenn das irgendwo erwähnt würde.
Obwohl diese Art nicht sehr sinnvoll ist. Das weglassen von R/W sollte ja einen PortPin einsparen, was auf diese Weise ja nicht geschieht.

Ich selbst programmiere in C, da habe ich eine Library die kann beide Arten. Mit R/W macht es aber nur Sinn wenn man Timing-Probleme hat.

myrobo
25.09.2009, 14:14
Hallo Hubert,


Danke, habe es gefunden. Mich hat nur interessiert wie dort das Problem mit R/W gelöst ist.
Es ist genau so wie du es gemacht hast.
Wäre natürlich nicht schlecht wenn das irgendwo erwähnt würde.Genau das habe ich auch gedacht. Für einen Anfänger ist das eine schmerzliche Erfahrung, und es dauert natürlich sehr lange, bis man das Problem gelöst hat. Darum habe ich zumindest hier in diesem Forumbeitrag meinen ausführlich kommentierten Testcode zu Verfügung gestellt.
Ich selbst programmiere in C,...In C möchte ich ja zukünftig auch programmieren. Das wird aber leider wohl noch eine Weile an Einarbeitung kosten.

Frage:
kann ich Dir bei Bedarf evt. über PM zu meinem Vorhaben "Universelle Meldetexte" ein paar Fragen stellen?

Hubert.G
25.09.2009, 15:47
Selbstverständlich kannst du fragen, ob ich dir helfen kann wird sich ja zeigen.