PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RN 4x20 LCD Hex Adressen für I2C_LCD Library?



rick00
29.11.2007, 19:59
Hi!

Ich bin noch Anfänger in Sachen C und AVR Controller.
Ich hab mir das RN-Control MEGA 32 + 4X20 LCD gekauft.

Nun schnall ich einfach nicht, wie ich aus dem Datenblatt die Hex Commandos bzw. HEX Adressen herauslesen kann, die ich fir die I2C_LCD Library von Peter Fleury brauche.

Ich habe mir mittels eines Port Expanders (PCF 8574) und des RN_4x20LCD´s einen I2C-LCD-Adapter gebastelt.
Die Verdrahtung erfolgte nach RN-Norm also:

PCF 8574 / LCD

P0 auf DB7
P1 auf DB6
P2 auf DB5
P3 auf DB4
P4 auf Hintergrundbeleuchtung EIN/AUS
P5 auf E
P6 auf R/~W
P7 auf RS

A0, A1, A2 jeweils auf GND => Slave Adresse 0x40
SDA und SCL mit 4k7 auf +5V
~INT nicht angeschlossen

Datenblatt zu Display:
http://www.robotikhardware.de/download/PC2004%20bei%20robotikhardware.de.pdf

Im Anhang das Header-File mit den benötigten Adressen.

Könnt mir vielleicht da jemand weiterhelfen, wäre echt dankbar, wenn das endlich funktionieren würde.

Grüsse Rick

rick00
01.12.2007, 19:53
Hat/Hatte den keiner das selbe Problem?

Hubert.G
01.12.2007, 21:12
ICh komme mit deiner Frage nicht ganz klar, steht doch alles im *.h file drinnen was benötigt wird, da gibt es keine Adressen.

rick00
04.12.2007, 18:43
Hi!
Unter Display Configuration:
LCD_LINE1 bis 4

ENTRYMODES, DISPLAYMODES, SHIFTMODES

Da stehen überall HEX-Adressen, welche auf Dein Display angepasst werden müssen.

Irgendwo hab ich auch gelesen, daß diese Library für HD Controller nicht funktioniert, nur für KS-Controller.
Ganz am Anfang steht jedoch für Displays mit HD44780 Controller und PCF8574X Expander?

Mein Display zeigt gar nix an?

Gruß Rick

rick00
06.12.2007, 19:07
Hat keiner von euch ein LCD per Portexpander am I2C-Bus hängen?

Hubert.G
06.12.2007, 19:58
Das ist nicht sehr üblich.
Die hex Aderesen brauchst du zumeist nicht ändern.

#ifndef F_CPU
#define F_CPU 16000000 /**< Change this to the clock-rate of your microcontroller */
#endif

#define wait1us _delay_loop_1((F_CPU * 0.000001) / 3) /**< 1 us delay */
#define wait1ms _delay_loop_2((F_CPU * 0.001) / 4) /**< 1 ms delay */
/*@}*/

//-------------------------------------------------------------------------------------------------------------------

#include <util/delay.h>
#include <stdbool.h>
#include <stdint.h>
#include "i2cmaster.h"

//--Display-Configuration-Settings-----------------------------------------------------------------------------------

/** \defgroup DISPLAY_CONFIGURATION DISPLAY CONFIGURATION
Change this settings to your configuration.
*/
/*@{*/
#define LCD_I2C_DEVICE 0x40 /**< Change this to the address of your expander */
#define LCD_LINES 4 /**< Enter the number of lines of your display here */
#define LCD_ROWS 20 /**< Enter the number of rows of your display here */

#define LCD_LINE1 0x00 /**< This should be 0x00 on all displays */
#define LCD_LINE2 0x20 /**< Change this to the address for line 2 on your display */
#define LCD_LINE3 0x40 /**< Change this to the address for line 3 on your display */
#define LCD_LINE4 0x60 /**< Change this to the address for line 4 on your display */
/*@}*/

//-------------------------------------------------------------------------------------------------------------------

//--The-following-definitions-are-corresponding-to-the-PIN-Assignment-(see-above)------------------------------------

/** \defgroup PIN_ASSIGNMENT PIN ASSIGNMENT
This pin assignment shows how the display is connected to the PCF8574.
*/
/*@{*/
#define LCD_D4_PIN 3 /**< LCD-Pin DB4 is connected to P3 on the PCF8574 */
#define LCD_D5_PIN 2 /**< LCD-Pin DB5 is connected to P2 on the PCF8574 */
#define LCD_D6_PIN 1 /**< LCD-Pin DB6 is connected to P1 on the PCF8574 */
#define LCD_D7_PIN 0 /**< LCD-Pin DB7 is connected to P0 on the PCF8574 */
#define LCD_RS_PIN 7 /**< LCD-Pin RS is connected to P7 on the PCF8574 */
#define LCD_RW_PIN 6 /**< LCD-Pin RW is connected to P6 on the PCF8574 */
#define LCD_EMPTY_PIN 4 /**< this pin is not connected */
#define LCD_E_PIN 5 /**< LCD-Pin E is connected to P5 on the PCF8574 */
/*@}*/

Am Anfang die F_CPU einstellen
Unter Display-Configuration-Settings
Die I2C-Adresse des Port-Expander
Anzahl der Zeilen
Anzahl der Zeichen je Zeile

Unter Pin-Assignment
Hier musst du die Zuordnung der Expander-Pin zu den LCD-PIn machen

Sonst sollte für Standardfunktionen keine weitere Einstellung notwendig sein.
Bist du sicher das I2C überhaupt funktioniert

rick00
06.12.2007, 20:07
Hi Hubert!

Das wundert mich schon. Gerade bei Microcontrollern sind doch immer viel zu wenige Pins da.

Genau die Anpassungen hab ich ja gemacht, aber am Display rührt sich gar nix!? Siehe mein angehängtes Header-File

Die Zeilenadressen hab ich geändert und zwar wie hier in einem Post beschrieben. Einer hatte ja schon mal das selbe Problem.
Da steht auch, daß die Bibliothek nur für Displays mit KS Controller richtig funktioniert?

Gruß Rick

Hubert.G
06.12.2007, 20:26
Das mit den zuwenig Pin ist schon richtig, allerdings neigen die meisten dazu einen größern Kontroller zu nehmen als einen zusätzlichen IC.
Poste doch mal deinen Code hier, vieleicht kann man da was erkennen.

rick00
07.12.2007, 14:54
Hi Hubert!

Im Anhang mein C-Code.

Danke schon mal im voraus!

Gruß Rick

Hubert.G
07.12.2007, 15:38
Hast du den beiliegenden C-Code verwendet oder einen Eigenen, wenn ja, dann fehlt der.
Simulieren kann man das nicht vernünftig, da I2C immer die Rückmeldungen braucht, man müsste wenn es so nicht geht mit dem JTAG ansehen.
PS: PullUp ist eingebaut?

rick00
07.12.2007, 20:03
Hi Hubert!

Ich habe den beiligenden C-Code verwendet.
Alle Files im Verzeichnis i2clcd-v0.1
main.c
i2clcd.c
twimaster.c

i2clcd.h
twimaster.h

Ja, den Fehler hier zu finden ist nicht leicht :-(

Gruß Rick

Hubert.G
07.12.2007, 20:08
Ich habe mir das inzwischen aufgebaut, das Disp wird initialisiert, aber dann igeht nichts mehr. Die Busy-Abfrage des Disp funktioniert irgendwie nicht richtig. Damit passt das Timing nicht. Ich werden noch schauen was geht.

Hubert.G
07.12.2007, 20:54
Hi
Bei mir läuft es. Ich muss nur noch genau schauen warum. Liegt aber fast sicher in der i2clcd.c oder i2clcd.h. Ich habe da eine andere heruntergeladen, mit der gehts.

rick00
07.12.2007, 21:13
Hi Hubert!

Hast Du das selbe Anschlußschema wie ich?
Das verblüfft mich jetzt schon etwas

Gruß Rick

Hubert.G
07.12.2007, 21:42
Genau daran dürfte es liegen. Es gibt zwei verschiedene Anschaltungen des Display an den PCF.

//--The-following-definitions-are-corresponding-to-the-PIN-Assignment-(see-above)------------------------------------

/** \defgroup PIN_ASSIGNMENT PIN ASSIGNMENT
This pin assignment shows how the display is connected to the PCF8574.
*/
/*@{*/
#define LCD_D4_PIN 0 /**< LCD-Pin DB4 is connected to P3 on the PCF8574 */
#define LCD_D5_PIN 1 /**< LCD-Pin DB5 is connected to P2 on the PCF8574 */
#define LCD_D6_PIN 2 /**< LCD-Pin DB6 is connected to P1 on the PCF8574 */
#define LCD_D7_PIN 3 /**< LCD-Pin DB7 is connected to P0 on the PCF8574 */
#define LCD_RS_PIN 4 /**< LCD-Pin RS is connected to P7 on the PCF8574 */
#define LCD_RW_PIN 5 /**< LCD-Pin RW is connected to P6 on the PCF8574 */
#define LCD_EMPTY_PIN 6 /**< this pin is not connected */
#define LCD_E_PIN 7 /**< LCD-Pin E is connected to P5 on the PCF8574 */
/*@}*/
Du musst in deiner i2dlcd.h die Belegung so einstellen und auch so verdrahten, dann funktioniert es. Warum das so ist kann ich dir nicht sagen. Ich habe eine Menge probiert, komme aber nicht darauf. Bin gespannt ob es bei dir auch so ist.

rick00
08.12.2007, 09:31
Morgen Hubert!

Also ich hab die Schaltung fix auf einer Lochrasterplatine aufgebaut.
Das alles umlöten wird ne Weile dauern.

Gruß Rick

Hubert.G
08.12.2007, 10:11
Auch einen guten Morgen
Es genügt übrigens wenn du die 4 Datenbit umlötest und umschreibst, die 3 Steuerleitungen kannst du lassen wie sie sind. Ich habe da noch ein wenig herumprobiert.

rick00
08.12.2007, 10:22
Hi!

Danke für den Tipp, das macht es etwas leichter.

Also:

P4 auf Hintergrundbeleuchtung EIN/AUS
P5 auf E
P6 auf R/~W
P7 auf RS

P0 auf DB4
P1 auf DB5
P2 auf DB6
P3 auf DB7

Gruß Rick

Hubert.G
08.12.2007, 10:45
Ja, so hat es bei mir dann funktioniert. Erklärung habe ich aber keine dafür.
Woher hast du deine Dateien, ich habe meine von da her: http://computerheld.de/i2clcd/
Da steht das so drinnen wie ich es dann gemacht habe und ist auch der einzige Unterschied.

rick00
08.12.2007, 14:14
Hi!

Ja ich hatte die selbe Quelle wie Du.

Ich habe meine Platine umgelötet und jetzt funktionierts.
Jedenfalls die ersten beiden Zeilen. Die 3. und 4. funktionieren nicht richtig.
Wahrscheinlich weil die Bibliothek nur für LCDs mit KS Kontroller und ich auch vielleicht nicht die korrekten Hex-Adressen für die Zeilen hab.
Deshalb hab ich ja auch den Post hier gemacht. Siehe Titel!
Ich weiß eben nicht wie ich aus dem Datenblatt diese Adressen herauslesen kann.
Ich dachte es funzt deswegen nicht, weil ich die falschen Adressen habe/hatte.
Das die Pinntabelle nur zur zirde da ist, hätte ich nicht gedacht.
Da wär ich selber nicht drauf gekommen.

Ich wollte diese Library verwenden, weil ich bei meinem RN-Control32 nicht (genügend Pins frei hab.

Der nächst größere Controller ist der ATmega128, aber da muß ich:

1.) mir einen Adapter machen (Eagle+ätzen)
Hab noch keine Ätzausrüstung

2.)ich hab kein 128er Testboard und ich weiß nicht, welche Probleme auftreten, wenn man einen C-Code vom 32er zum 128er portieren möchte.
Da ich noch Anfänger bin, kann das sehr schnell in die Hose gehen.
(Arbeite an einer Heizungssteuerung.)

3.) ich muß SMD-löten

...aber wahrscheinlich muß ich sowieso einen AT90CAN128 nehmen!?

Mit dem PCF8574 muß ich mich sowieso noch auseinendersetzen, weil ich nen Portexpander brauche, um die Umwälzpumpen ein und aus zu schalten.
Kennst du zufällig eine Bibliothek für den PCF8574 die zuverlässig funktioniert?

Die LCD Bibliothek von Peter Fleury hat bei mir auf anhieb funktioniert.
(Nur kurz mit dem Testprogram probiert)
Allerdings hab ich die Pinkonfiguration noch nicht ganz durchschaut.
Für was gehört die 1.) Portangabe? (mit Fragezeichen markiert)

Gruß Rick

Hubert.G
08.12.2007, 15:03
Es ist eigenartig das in deiner BIbliothek geringfügig was anderes stand. Auf der RN-Seite wäre es übrigens richtig gewesen.
Ich habe nur zweizeilige LCDs.
Wenn alles auf einem Port ist dann dort den Port angeben, sonst auskommentieren und darunter angeben.
Ich habe mich hier auch das erste mal mit dem PCF8574 beschäftigt, es ist einer von irgendwo mal ausgelötet in der Bastelkiste gelegen.
Zum testen habe ich ein STK500, ein selbstgebautes Testboard mit einem Mega8 und ein Steckbrett, da lässt sich schon einiges machen.

rick00
08.12.2007, 19:45
Hi!

...und wenn ich alles auskommentiere, ist es dann egal was ich in der 1. Zeile stehen hab?

Gruß Rick

Hubert.G
08.12.2007, 20:27
Nur die erste Zeile ist zum auskommentieren, sonst muss alles stimmen.