
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 |