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 und I2C Kategorie: Hardware (von Marcel, Homepage - 24.02.2004 17:19)
 Als Antwort auf Re: LCD und I2C von Thomas - 24.02.2004 11:06
Hi,
schau dir mal diesen Link an:
http://home.iae.nl/users/pouweha/lcd/lcd.shtml

Ist zwar englisch, aber ich denke, das wirst du verstehen ;-)

Ansonsten hier mal meine Routine, mit der ich eins von den Teminals von CCTools anspreche. Es ist modular gehalten, da werden immer nur die I²C-Funktionen aufgerufen. Es ist allerdings DOS-codiert...
Zuerst musst du die Init aufrufen. Bevor du eine Reihe von Buchstaben schreibst, musst du die "writestart", hinterher die "writestop" aufrufen.
Ansonsten sind die Funktionsnamen selbsterklärend...
Ich hoffe, es ist verständlich genug ;-)

mfg,
Marcel

'***************************************************************************
'**                  LCD-INTERFACE                                        **
'***************************************************************************
'*** LCD_Interface ber IýC***

#LCD_pulse_e
  lcd_e = 1
  I2Cschreiben = lcd_port
'Hier #I2CPUTBYTE
FOR zaehler = 7 TO 0 STEP -1
  IF (I2Cschreiben AND 1 SHL zaehler) = 0 THEN data = 0 ELSE data = 1
  PULSE clock
NEXT
'#I2CPUTBYTE ENDE
'Hier #I2CGETACK
data = 1 : DEACT data : clock = 1 : WAIT NOT data : clock = 0
'#I2CGETACK ENDE
  lcd_e = 0
  I2Cschreiben = lcd_port
'Hier #I2CPUTBYTE
FOR zaehler = 7 TO 0 STEP -1
  IF (I2Cschreiben AND 1 SHL zaehler) = 0 THEN data = 0 ELSE data = 1
  PULSE clock
NEXT
'#I2CPUTBYTE ENDE
'Hier #I2CGETACK
data = 1 : DEACT data : clock = 1 : WAIT NOT data : clock = 0
'#I2CGETACK ENDE
RETURN

#LCD_INIT
  PAUSE 1
  GOSUB I2CSTART
  I2Cschreiben = adresse_lcdport
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
 
  I2Cschreiben = 0 'alles l”schen
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  PAUSE 3

  lcd_port = 0 'setze 8bit
  lcd_DB4 = 1
  lcd_DB5 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  'PRINT "8BitDM geklappt"  
PAUSE 5
 
  lcd_port = 0 'setze 4-Bit-Datenmodus
  lcd_DB5 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  'PRINT "4BitDM geklappt"
PAUSE 5
  lcd_port = 0 'setze 4-Bit-Daten Transfer
  lcd_DB5 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  lcd_DB7 = 1
  lcd_DB5 = 0
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  'PRINT "4Bit DT geklappt"
PAUSE 5
  lcd_port = 0 'Display und Cursor anschalten
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
'  lcd_DB5 = 1  ''''„nderung
  lcd_DB6 = 1
  lcd_DB7 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  'PRINT "DuC geklappt"
PAUSE 5  
  lcd_port = 0 'CLS
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  lcd_DB4 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  'PRINT "CLS geklappt"
PAUSE 5
  lcd_port = 0 'cursor immer nach rechts, nicht schieben
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  lcd_DB5 = 1
  lcd_DB6 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e
  PAUSE 3
  'PRINT "Cpos geklappt"
PAUSE 5  
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB I2CSTOP  
  'PRINT "lcd_init geklappt"    
PAUSE 5
RETURN

#LCD_writestart
  GOSUB I2CSTART
  I2Cschreiben = adresse_lcdport
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
RETURN
#LCD_writechar  'in LCD_param den Buchstaben
  lcd_port = 0
  lcd_RS = 1
  lcd_beleuchtung = flag_lcd_light
  IF LCD_param AND 1 SHL 7 THEN lcd_DB7 = 1
  IF LCD_param AND 1 SHL 6 THEN lcd_DB6 = 1
  IF LCD_param AND 1 SHL 5 THEN lcd_DB5 = 1
  IF LCD_param AND 1 SHL 4 THEN lcd_DB4 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  lcd_port = 0
  lcd_RS = 1
  lcd_beleuchtung = flag_lcd_light
  IF LCD_param AND 1 SHL 3 THEN lcd_DB7 = 1
  IF LCD_param AND 1 SHL 2 THEN lcd_DB6 = 1
  IF LCD_param AND 1 SHL 1 THEN lcd_DB5 = 1
  IF LCD_param AND 1 THEN lcd_DB4 = 1
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
RETURN

#LCD_writestop
  GOTO I2CSTOP  
RETURN

#LCD_gotoline 'Zeile in LCD_param
  IF LCD_param = 2 THEN GOTO LCD_gotoline2
#LCD_gotoline1
  GOSUB I2CSTART
  I2Cschreiben = adresse_lcdport
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  lcd_port = 0
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  lcd_port = 0
  lcd_DB5 = 1
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  GOSUB I2CSTOP  
RETURN
#LCD_gotoline2
  GOSUB I2CSTART
  I2Cschreiben = adresse_lcdport
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  lcd_port = 0
  lcd_DB7 = 1
  lcd_DB6 = 1
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  lcd_port = 0
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  GOSUB I2CSTOP  
RETURN

#LCD_CLS
  GOSUB I2CSTART
  I2Cschreiben = adresse_lcdport
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  lcd_port = 0
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  lcd_port = 0
  lcd_DB4 = 1
  lcd_beleuchtung = flag_lcd_light
  I2Cschreiben = lcd_port
  GOSUB I2CPUTBYTE
  GOSUB I2CGETACK
  GOSUB LCD_pulse_e  
  GOSUB I2CSTOP  
RETURN


> Hallo Tilli,
>
> ist eigentlich egal, solange es funktioniert :-)
>
>
>
> > Hallo
> >
> > Willst du das LCD mit 8 oder 4 Bit betreiben ?
> > Ich habe eine 4 Bit Lösung in CCBasic.
> > Ist nicht die schnellste aber das LCD ist etwa 8 Meter weg
> > und es funktioniert.
> >
> > Tilli

Passender Link: http://home.iae.nl/users/pouweha/lcd/lcd.shtml

Meine Homepage: http://www.fernwirken.tk

 Antwort schreiben

Bisherige Antworten:

Re: LCD und I2C (von Thomas - 25.02.2004 7:26)