Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: LCD m. PCF8574 am I²C (SDA-SCL Port9,10) Kategorie: C-Control I V1.2/2.0 (von michi - 1.06.2005 11:56)
 Als Antwort auf LCD m. PCF8574 am I²C (SDA-SCL Port9,10) von Roland - 1.06.2005 11:28
Servus,
Diese Demo liegt, neben vielen anderen auf www.c-control-support.de (bei den Updates):
Ich hoffe das hilft dir


'--------------------------------------------------------------------
' ANWENDUNG:   IIC-BUS LCD (19 83 30)      MIT PCF8574 - ANSTEUERUNG -
'
'--------------------------------------------------------------------
' Das IIC-LCD MODUL beeinhaltet einen PCF8574 zur Ansteuerung des LCD
' Die Unterstützung der Externen Ports durch das Betriebssystem machen
' die Ansteuerung recht einfach. Allerdings können z.B. Texte an ein
' IIC-BUS LCD nicht so komfortabel gesendet werden, wie das beim LCD
' an Byteport 2 der Fall ist.
'--------------------------------------------------------------------
' Sie können diese externen Ports ansprechen, wenn ein entsprechend adressierter
' Baustein an den IIC-Bus angeschlossen ist.
' Speziell für den PCF8574 ist das Betriebssystem aber so erweitert, dass
' Sie auf die Ports dieses Bausteins direkt über die PORT-Funktionen des
' Betriebssystems zugreifen können und sich über die IIC Protokollierung
' keine Gedanken müssen, das dies das Betriebssystem vollständig übernimmt.
' Allerdings ist die Zugriffszeit auf einen externen Port bedeutend grösser
' als bei den CPU-Ports 1 bis 16 (Byteport 1 u. 2)
'
' Das IIC-MODULE brauchen sie hier nicht zu benutzen, da der PCF 8574 vollständig
' vom Betriebssystem unterstützt wird, im Hintergrund allerdings die Protokollierung
' Statt findet, wie sie in den Beispielen zum IIC-MODULE beschrieben ist.
'
' Wissen müssen Sie allerdings, welche Ports zu welche PCF-Adresse gehören. Sie
' finden hier eine Aufstellung:
'
' PCF 8574    ADR 0      Ports 17 - 24      BYTEPORT 3
' PCF 8574    ADR 1      Ports 25 - 32      BYTEPORT 4
' PCF 8574    ADR 2      Ports 33 - 40      BYTEPORT 5
' PCF 8574    ADR 3      Ports 41 - 48    BYTEPORT 6
' PCF 8574    ADR 4      Ports 49 - 56    BYTEPORT 7
' PCF 8574    ADR 5      Ports 57 - 64    BYTEPORT 8
' PCF 8574    ADR 6      Ports 65 - 72    BYTEPORT 9
' PCF 8574    ADR 7      Ports 73 - 80    BYTEPORT 10

' PCF 8574A  ADR 0      Ports 81 - 88    BYTEPORT 11
' PCF 8574A  ADR 1      Ports 89 - 96    BYTEPORT 12
' PCF 8574A  ADR 2      Ports 97 - 104    BYTEPORT 13
' PCF 8574A  ADR 3      Ports 105 - 112     BYTEPORT 14
' PCF 8574A  ADR 4      Ports 113 - 120     BYTEPORT 15
' PCF 8574A  ADR 5      Ports 121 - 128     BYTEPORT 16
' PCF 8574A  ADR 6      Ports 129 - 136     BYTEPORT 17
' PCF 8574A  ADR 7      Ports 137 - 144     BYTEPORT 18
'-------------------------------------------------------------------
' Der IIC-Bus liegt an PORT 9 (SDA) und PORT 10 (SCL)
'
' Beschreibung:
' Der PCF8574 hat eine wählbare 3-Bit Adresse. In unserem Beispiel gehen wir
' davon aus, dass alle Bits der Adresse HI sind, die Adresse ist also 7
' In der Tabelle oben sehen Sie, dass zur Adresse 7 des PCF8574 der
' BYTEPORT 10 gehört. Die zugehörigen Bitports sind 73 bis 80, werden
' aber hier nicht benutzt, da der Port als Byte beschrieben wird.
'
' Das Programm schreibt einen Text auf das LCD.
' Die Variable OUTBYTE und BUF wird vom Treiber selbst verwaltet.
' Die Variable LCDDATA ist Ihre Schnittstelle zur Übergabe von Buchstaben an das LCD
' EXTPORT ist der auf den PCF8574 ausgelagerte BYTEPORT
'-----------------------------------------------------------------------
' Achtung, ganz wichtig:
' Die Ports müssen als Ausgang initialisiert werden bevor der IIC-Bus
' benutzt wird: SDA=on:SCL=on
' Achten Sie unbedingt darauf, dass das LCD auf dem Application Board initialisiert ist,
' wenn es angesteckt ist (auch wenn sie es nicht benutzen).
' Es teilt sich einen Teil seines Busses mit dem IIC-BUS
' print"#ON_LCD#";
' print"#INIT#";
' print"#OFF#";
'-----------------------------------------------------------------------
'Hier sehen Sie, welche PCF 8574 Ports dem LCD zugeordnet sind:
'Port 0  LCD DB4
'Port 1  LCD DB5
'Port 2  LCD DB6
'Port 3  LCD DB7
'Port 4  LCD R/W
'Port 5  LCD RS
'Port 6  LCD EN
'-------------------------------------------------------------------
'--------------------------
'------ I/O PORTS ---------
'--------------------------
'--- IIC INTERFACE  -------
define SDA      port[9]
define SCL      port[10]
define EXTPORT  byteport[10]
'--------------------------
'------ SYSTEM MEMORY -----
'--------------------------
'--- IIC INTERFACE  -------
define OUTBYTE      byte[2]
define LCDDATA      byte[3]
define BUF          byte[4]



'---- ZEICHENSATZ DEFINITION -------------
define Z0&H30:define Z1&H31:define Z2&H32:define Z3&H33
define Z4&H34:define Z5&H35:define Z6&H36:define Z7&H37
define Z8&H38:define Z9&H39
define A&H41:define B&H42:define C&H43:define D&H44
define E&H45:define F&H46:define G&H47:define H&H48
define I&H49:define J&H4A:define K&H4B:define L&H4C
define M&H4D:define N&H4E:define O&H4F:define P&H50
define Q&H51:define R&H52:define S&H53:define T&H54
define U&H55:define V&H56:define W&H57:define X&H58
define Y&H59:define Z&H5A:define BLK&H20


print"#ON_LCD#";
print"#INIT#";
print"#OFF#";

'---------- IICBUS INIT ------------------
SDA=on:SCL=on


'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'II   PCF 8574 PORTERWEITERUNG FÜR LCD        II
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
pause 20
gosub lcd_init

'----- WRITE CHARACTERS LINE 1 ---------------
LCDDATA=4:gosub L1_GOTOPOS    'LINE 1 POS 4
LCDDATA=D:gosub lcd_writechar
LCDDATA=E:gosub lcd_writechar
LCDDATA=M:gosub lcd_writechar
LCDDATA=O:gosub lcd_writechar
LCDDATA=BLK:gosub lcd_writechar
LCDDATA=M:gosub lcd_writechar
LCDDATA=BLK:gosub lcd_writechar
LCDDATA=Z2:gosub lcd_writechar
LCDDATA=&H2E:gosub lcd_writechar
LCDDATA=Z0:gosub lcd_writechar
'----- WRITE CHARACTERS LINE 2 ---------------
LCDDATA=3:gosub L2_GOTOPOS    'LINE 2 POS 3
LCDDATA=P:gosub lcd_writechar
LCDDATA=C:gosub lcd_writechar
LCDDATA=F:gosub lcd_writechar
LCDDATA=BLK:gosub lcd_writechar
LCDDATA=Z8:gosub lcd_writechar
LCDDATA=Z5:gosub lcd_writechar
LCDDATA=Z7:gosub lcd_writechar
LCDDATA=Z4:gosub lcd_writechar
LCDDATA=BLK:gosub lcd_writechar
LCDDATA=L:gosub lcd_writechar
LCDDATA=C:gosub lcd_writechar
LCDDATA=D:gosub lcd_writechar

#LOOP
goto LOOP
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII





'-------------------------------------------------------
'--- PCF 8574 LCD DRIVER AT ADDR 7 / EXT BYTEPORT 10 ---
'-------------------------------------------------------
#LCD_INIT
EXTPORT=0
LCDDATA=&H38:gosub LCD_WRITECMD
EXTPORT= &B00000010:EXTPORT= &B01000010:EXTPORT= &B00000010:
LCDDATA=&H28:gosub LCD_WRITECMD:LCDDATA=&H0C:gosub LCD_WRITECMD
#LCD_CLR
LCDDATA=&H02:gosub LCD_WRITECMD:LCDDATA=&H01:gosub LCD_WRITECMD:pause 20:return
#L1_GOTOPOS
LCDDATA=LCDDATA +&H7F:goto LCD_WRITECMD
#L2_GOTOPOS
LCDDATA=LCDDATA +&HBF:goto LCD_WRITECMD
#LCD_WRITECMD
BUF = off:goto LCD_WRITE
#LCD_WRITECHAR
BUF = &B00100000
#LCD_WRITE
'--------- ------WRITE HI NIBBLE ------------------------
OUTBYTE=BUF or (LCDDATA shr 4)
EXTPORT=OUTBYTE or &B01000000:EXTPORT=OUTBYTE and &B10111111
'--------------- WRITE LO NIBBLE ------------------------
OUTBYTE=BUF or (LCDDATA and &H0F)
EXTPORT=OUTBYTE or &B01000000:EXTPORT=OUTBYTE and &B10111111
return
'-------------------------------------------------------



 Antwort schreiben

Bisherige Antworten: