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: I2C LCD-Ausgabe am MICRO Kategorie: C-Control I Micro (von ibsi - 19.08.2004 13:26)
 Als Antwort auf I2C LCD-Ausgabe am MICRO von JanPeter - 18.08.2004 22:11
> Hallo MICRO-Fans!
> Hier ein Beispiel von mir mit 2 PCF8574 mit LCD Ausgabe und LED Ausgabe:
>
>
> '*************************************************************
> '                                                            *
> ' C-Control/MICRO       I2C_LCD_Ausgabe1.BAS                 *
> '           JPM      18.08.2004   jxx2344305@aol.com         *
> ' Aufgabe:    Laufled und Anzeige der internen Uhrzeit       *
> '                                                            *
> ' - Porterweiterung für MICRO ueber den I2C-Bus              *
> ' - Ansteuerung zwei PCF8574                                 *
> '  Adr.1=LCD                                       R=64 W=65 *
> '  Adr.3=8 LEDs mit Vorwiderstand 2,2K nach +5V    R=68 W=69 *
> ' - SDA am Port 5     (kann geändert werden)                 *
> ' - SCL am Port 6     (kann geändert werden)                 *
> '                                                            *
> '*************************************************************
> '
> '       LCD Beschaltung für Adr. 1
> 'PCF  1 A0   --- I2C Addresse: Gnd
> 'PCF  2 A1   --- I2C Addresse: Gnd
> 'PCF  3 A2   --- I2C Addresse: Gnd
> 'PCF  4 P0   --- LCD 11 DB4
> 'PCF  5 P1   --- LCD 12 DB5
> 'PCF  6 P2   --- LCD 13 DB6
> 'PCF  7 P3   --- LCD 14 DB7
> 'PCF  8 Gnd  --- Gnd
> 'PCF  9 P4   --- LCD  5 R/W
> 'PCF 10 P5   --- LCD  4 RS
> 'PCF 11 P6   --- LCD  6 EN
> 'PCF 12 P7   --- frei
> 'PCF 13 INT  --- frei
> 'PCF 14 SCL  --- MICRO Port 6
> 'PCF 15 SDA  --- MICRO Port 5
> 'PCF 16 Vcc  --- + 5 Volt
>
> '*************************************************************
> ' --- Definitionen --------------------
> define SDA      port[5]
> define SCL      port[6]
> '--------------------------
> '---- Variablen -----------
> '--------------------------
> define Daten    byte[1]
> define B1       bit[1]
> define B2       bit[2]
> define B3       bit[3]
> define B4       bit[4]
> define B5       bit[5]
> define B6       bit[6]
> define B7       bit[7]
> define B8       bit[8]
> define Zaehler  byte[2]
> define N        byte[3]
> define lcd_param byte[4]
> define lcd_buf   byte[5]
> define w1        byte[6]
> define char_num  byte[7]
> '-------------------------------------------------------------
> SDA = 1
> SCL = 1
> '_____________________________________________________________
>
> ' --- Programmoperationen -------------
>
>
>      gosub LCD_INIT                     '1.Adresse PCF8574
>      gosub message1
>      gosub stop
>      
> #Loop
>     gosub Start                         'I2C-Start
>     Daten = 68                          '3.Adresse PCF8574
>     gosub I2C_Write
>     Daten = &HFD                                'LED2
>     gosub I2C_Write
>     pause 50
>     Daten = &HFB                    'LED3
>     gosub I2C_Write
>     pause 50
>     Daten = &HF7                    'LED4
>     gosub I2C_Write
>     pause 50
>     Daten = &HEF                    'LED5
>     gosub I2C_Write
>     pause 50
>     Daten = &HDF                    'LED6
>     gosub I2C_Write
>     pause 50
>     Daten = &HBF                    'LED7
>     gosub I2C_Write
>     pause 50
>     Daten = &H7F                    'LED8
>     gosub I2C_Write
>     pause 50
>
>     Daten = &HBF                    'LED7
>     gosub I2C_Write
>     Pause 10
>     Daten = &HDF                    'LED6
>     gosub I2C_Write
>     pause 10
>     Daten = &HEF                    'LED5
>     gosub I2C_Write
>     pause 10
>     Daten = &HF7                    'LED4
>     gosub I2C_Write
>     pause 5
>     Daten = &HFB                    'LED3
>     gosub I2C_Write
>     pause 5
>
>     gosub Stop                          'I2C_Stop
>
>     gosub lcd_init
>     w1=hour
>     gosub ausgabe
>     lcd_param = &H3a
>     gosub lcd_writechar
>     w1=minute
>     gosub ausgabe
>     lcd_param = &H3a
>     gosub lcd_writechar
>     w1=second
>     gosub ausgabe
>     gosub stop
>     goto loop
>
> #Start
>       SDA=0:SCL=1:return
>
> #Stop
>      SCL=1:SDA=1:return
>
> #I2C_WRITE
>      if B8=ON then SDA=ON
>      gosub pulse_SCL
>      if B7=ON then SDA=ON
>      gosub pulse_SCL
>      if B6=ON then SDA=ON
>      gosub pulse_SCL
>      if B5=ON then SDA=ON
>      gosub pulse_SCL
>      if B4=ON then SDA=ON
>      gosub pulse_SCL
>      if B3=ON then SDA=ON
>      gosub pulse_SCL
>      if B2=ON then SDA=ON
>      gosub pulse_SCL
>      if B1=ON then SDA=ON
>      gosub pulse_SCL
>      gosub pulse_SCL             ' 9. Impuls ACK vom Slave
>   return
>
> #pulse_SCL
>           SCL=0:SCL=1:SCL=0:SDA=0:return
>
> '---------------------------------------
> '---- LCD TREIBER ROUTINEN -------------
> '---------------------------------------
>
> #LCD_INIT
> ' alle ports 0
>     gosub Start
>     Daten = 64                          '1.Adresse PCF8574
>     gosub I2C_Write
>     Daten = OFF
>     gosub I2C_Write
>
> ' 8-Bit-Modus aktivieren
>   lcd_param=&H38 : gosub LCD_WRITECMD
>
> ' mit 8-Bit-Command in 4-Bit-Modus umschalten
>   daten=&B00000010
>   gosub I2C_Write
>   daten=daten or 64             '1 an E
>   gosub I2C_Write
>   daten=daten and 2             '0 an E
>   gosub I2C_Write
>
> ' ab jetzt 4-Bit-Modus
>   lcd_param = &H28 : gosub LCD_WRITECMD
>   lcd_param = &H0C : gosub LCD_WRITECMD
>
> ' Display loeschen
> #LCD_CLS
>   lcd_param = &H02 : gosub LCD_WRITECMD
>   lcd_param = &H01 : gosub LCD_WRITECMD
> return
> ' Zeilenwechsel
> #LCD_GOTOLINE
>   if lcd_param = 1 then lcd_param = &H80
>   if lcd_param = 2 then lcd_param = &HC0
>   goto LCD_WRITECMD
>
> ' LCD-Kommando
> #LCD_WRITECMD
>   lcd_buf = OFF
>   goto LCD_WRITE
>
> ' Zeichenausgabe
> #LCD_WRITECHAR
>
>   lcd_buf = &B00100000
>
> ' Kommando oder Zeichen an Display senden
> #LCD_WRITE
>   daten = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
>   gosub I2C_Write
>   daten=daten or 64             '1 an E
>   gosub I2C_Write
>   daten=daten and 2             '0 an E
>   gosub I2C_Write
>
>   daten = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
>   gosub I2C_Write
>   daten=daten or 64             '1 an E
>   gosub I2C_Write
>   daten=daten and 2             '0 an E
>   gosub I2C_Write
>
> return
>
>
> '----------------------------------------------------------------------
> #Ausgabe     'zweistellige Zahl  IN: w1=Ausgabewert
>
> lcd_param = (w1 / 10) + 48
>
> gosub lcd_writechar
> lcd_param = (w1 mod 10) + 48
> gosub lcd_writechar
> return
>
> #Ausgabe3       'dreistellige Zahl
> lcd_param = (w1 / 100) + 48
> gosub lcd_writechar
> w1 = w1 mod 100
> gosub Ausgabe   'zweistellige Zahl
> return
> '--------------------------------------------------------
> #message1
> char_num =255: lcd_param = 1 : gosub lcd_gotoline
> #read_loop1
> char_num = char_num+1
> '------- tabelle bis FF lesen -----------
>     looktab startup1, char_num, lcd_param
>     if lcd_param = &HFF then goto new_line_m1
>     gosub lcd_writechar: goto read_loop1
> '------- zweiten teil lesen --------------
> #new_line_m1
>  lcd_param = 2 : gosub lcd_gotoline
>  #read_loop2
>  char_num = char_num+1
>     looktab startup1, char_num, lcd_param
>     if lcd_param = &HFF then return
>     gosub lcd_writechar: goto read_loop2
> '-------------------------------------------------------------------
> '-------------- EINSCHALTTEXT ------------ MICRO I2C_LCD_Ausgabe1 --
> table startup1
> &H20 &H20 &H4d &H49 &h43 &H52 &H4f &HFF
> '--------------------------------------------
> &h49 &H32 &H43
> &H5f &H4c &H43 &H44 &H5f &H41 &H75 &H73 &H67 &H61 &H62 &H65 &H31 &HFF
> tabend
>
> '-----------------------------------
>
> end
>

Hallo Jan Peter,
habe da eine kürzere und einfachere I2C_Write Routine die nur mit ein paar Bytes
(58) auskommt:

define i byte             'Indexzähler
define zum_i2c byte   'Byte zum I2C-Device
define sda port [1]
define scl port [2]

#PUTBYTE
for i = 0 to 8                      '1 Byte senden.MSB first
if (zum_i2c and &H80) =&H80 then sda=1 else sda=0 'Datenbit senden
tog scl : tog scl                   'Clock zum Speichern im I2C-Device
zum_i2c=zum_i2c shl 1               'Nächstes Bit
next i

Probier´s doch mal !

Liebe Grüße aus Wien

 Antwort schreiben

Bisherige Antworten:

Re: I2C LCD-Ausgabe am MICRO (von JanPeter - 19.08.2004 21:01)
    Re: I2C LCD-Ausgabe am MICRO (von JanPeter - 19.08.2004 21:19)
        Re: I2C LCD-Ausgabe am MICRO (von ibsi - 19.08.2004 21:39)
            Re: I2C LCD-Ausgabe am MICRO (von DIE HARD - 20.08.2004 18:39)
                Re: I2C LCD-Ausgabe am MICRO (von JanPeter - 20.08.2004 21:48)
                    Re: I2C LCD-Ausgabe am MICRO (von ibsi - 21.08.2004 0:25)
                       I2C Routinen - jetzt aber richtig ;-) (von André H. - 21.08.2004 13:52)
                          Re: I2C Routinen - jetzt aber richtig ;-) (von JanPeter - 22.08.2004 13:11)
                             Re: I2C Routinen - jetzt aber richtig ;-) (von André H. - 22.08.2004 15:20)
                                Re: I2C Routinen - jetzt aber richtig ;-) (von JanPeter - 22.08.2004 22:38)
                                   Re: I2C Routinen - jetzt aber richtig ;-) (von Dietmar - 24.08.2004 16:07)
                                   Re: I2C Routinen - jetzt aber richtig ;-) (von André H. - 23.08.2004 6:40)
                                     Re: I2C Routinen - jetzt aber richtig ;-) (von JanPeter - 24.08.2004 0:31)
                                       Re: I2C Routinen - jetzt aber richtig ;-) (von Achim - 24.08.2004 0:45)
                                         Re: I2C Routinen - jetzt aber richtig ;-) (von ibsi - 24.08.2004 15:46)
                                           Re: I2C Routinen - jetzt aber richtig ;-) (von JanPeter - 25.08.2004 20:58)
                                             Re: I2C Routinen - jetzt aber richtig ;-) (von André H. - 25.08.2004 22:07)
                                               Re: I2C Routinen - jetzt aber richtig,Richtig ;-( (von JanPeter - 27.08.2004 21:34)
                                                 Re: I2C Routinen - Das kann doch nicht war sein! (von André H. - 28.08.2004 8:18)
                                                   Re: I2C Routinen - Das kann doch nicht war sein! (von JanPeter - 28.08.2004 20:49)
                                                     Re: I2C Routinen (von André H. - 4.09.2004 11:36)
                                                       Re: I2C Routinen (von JanPeter - 6.09.2004 23:21)
                                                         Re: I2C Routinen (von André H. - 7.09.2004 8:27)
                                                           Re: IR-Routine (von JanPeter - 7.09.2004 22:25)
                                                             Re: IR-Routine (von JanPeter - 7.09.2004 22:32)
                          Re: I2C Routinen - jetzt aber richtig ;-) (von DIE HARD - 21.08.2004 13:58)
                             Re: I2C Routinen - jetzt aber richtig ;-) (von André H. - 21.08.2004 15:22)
                                Re: I2C Routinen - jetzt aber richtig ;-) (von DIE HARD - 21.08.2004 18:40)