PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : programmiere I²C-LCD, funktioniert aber nicht immer



Skynet
29.10.2006, 12:28
Ich habe es endlich geschaft das LCD von Conrad für die C-Control 1 M2.0 mit Basic++ zu programmieren. Aber nur mit geteilter freude

Wenn ich das programm übertragen habe (schalte Betriebsspannung ab) stecke das LCD an den controler (schalte Spannung wieder an) und betätige den Start-Eingang. Aber nur manchmal (zufall) zeigt das LCD was an.

Ausserdem kann ich keine vernümpftige Anwendung programmieren.
(Wie zubeispiel mit IF)
Kann es sein dass die C-contol jenach dem wie schnell sie wieder eingeschalten wird das LCD falsch initialiesiert.

Ich habe halt von programmieren nicht viel ahnung, von elektronik schon. Oder ich werde den LCD umbauen und direkt an den controller anschliessen, aber somit muss ich 8 PORTs einbüssen.

Hier ein Beispiel:

define SDA port[9]
define SCL port[10]

import "....\LIB\ASCII_TABLE.BAS"
import "....\LIB\IIC_LCD_DRIVE.BAS"

SDA=on
SCL=on

pause 2

LCD_INIT()

pause 2

LINE1(4)
LCD_WRITE(20h,U)
LCD_WRITE(20h,N)
LCD_WRITE(20h,I)
LCD_WRITE(20h,T)

LCD_WRITE(20h,BLANK)
LCD_WRITE(20h,M)
END

221
29.10.2006, 15:10
HI ich habe auch so ein änliches Problem.
ist es von der Programierung eigentlich anders wenn man LC Dyspla über I2C bus anschließt????
sorry das das ich dein Frage nicht antworten kann.





Danke

FriLu
29.10.2006, 17:19
Hallo,
das Problem hatte ich auch...
habe am IIC-Bus ein ext. Terminal angeschlossen ( Eigenbau mit LP von CC-Tools ) und ebenfalls mal gehts, mal nicht...
Ich denke, das Prob liegt am IIC-Bus, denn seit ich mein Terminal über den Buspuffer P82B715 angeschlossen habe, ist dieser Fehler nicht mehr aufgetreten.
Zur Fehlersuche ( zugegeben, aufwendig ):
PCF 8574 mit adr 10 mit Leds bestückt statt LCD anschliessen, und versuchen den Datenverkehr nachzuvollziehen, dazu pausenbefehle in die lib einfügen damit man auch was sieht O:)
Vlt. hilft auch, einfach externe Pullups an SDA und SCL anzuschliessen ( etwa um 4K7 oder bis min. 1k ) - mal probieren
MfG Lutz

@221: Das Betriebssystem unterstützt ein LCD am BytePort2 direkt, damit lassen sich Text und Zahlen easy ausgeben, über IIC-Bus muss man sich das selbst zusammenfrickeln, siehe Prog-Auszug von Skynet. -umständlicher, und ziemlich speicherfressend ( zumindest bei mir, bin noch am basteln, tabellen in ein ext. EEPROM abzulegen und auszulesen ).

Suggarman
30.10.2006, 07:48
Vlt. hilft auch, einfach externe Pullups an SDA und SCL anzuschliessen ( etwa um 4K7 oder bis min. 1k ) - mal probieren


Ohne Pullups sollte der I2C-Bus garnicht funktionieren.

Unter http://www.c-control-support.net/ gibt es fertige Programmdemos.

mfg

Stefan

Dierk
30.10.2006, 08:41
Ja, Du brauchst unbedingt Pullup-Widerstände an SCL und SDA (Port 9 und Port 10)
Du kannst aber auch die integrierte Pullups für den byteport2 aktivieren.
Siehe Config-Objekt: http://www.csslabs.de/ccontrol/help/config.html


FUNCTION PULLUP2_ENABLE()
define TEMPVAL as byte
CONFIG.INIT
CONFIG.GET TEMPVAL 'den aktuellen Wert lesen
CONFIG.PUT (TEMPVAL or 00010000b) 'Bit setzten und zurück schreiben
CONFIG.OFF
END FUNCTION

Das müsste ebenfalls funktionieren, wenn die Kabelverbindung nicht zu lange ist.

FriLu
30.10.2006, 18:41
Hi,
Intere Pullups aktiviert hatte ich stillschweigend vorausgesetzt...
LG Lutz

Amiwerewolf
31.10.2006, 18:53
naja die internen pullups reichen oft nicht.
ich benutze eigentlich immer externe.
mach mal die wartezeit größer nach dem I²C bus initialisieren,
dann eine wartezeit einfügen nach LCD.init

wenns nicht funkt bau dir das programm mit manueller ansteuerung mal um (einfach statt das die ausgänge auf ein Byteport verweisen auf einen PCF verweisen.
das programm findest du unter https://www.roboternetz.de/wissen/index.php/LCD_an_C-Control_M-Unit_2

gruß Michi