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 Routinen - jetzt aber richtig ;-) Kategorie: C-Control I Micro (von JanPeter - 22.08.2004 13:11)
 Als Antwort auf I2C Routinen - jetzt aber richtig ;-) von André H. - 21.08.2004 13:52
> Hallo @all,
>
> Da ich für meine CCTools-Produkte auch Routinen zur Mikro schreiben muß,
> poste ich anbei einmal meine Beispielroutinen.
> Mit der Mikro zu arbeiten ist zeitweise bei den ganzen Bugs relativ nervenaufreibend. :-(
>
> MfG André H.
>
>
> '-----------------------------------------------------------------
> ' CCTools I²C-Bus-Routinen für C-Control Mikro
> ' CCTools 2004 (http://cctools.hs-control.de)
> '-----------------------------------------------------------------
> ' Die häufigsten I²C-Bus-Adressen:
> ' &h20 - &h2E    MAX7311 16Bit Portexpander
> ' &h30 - &h3E    MAX7311 16Bit Portexpander
> ' &h40 - &h4E    MAX7311 16Bit Portexpander
> ' &h40 - &h4E    PCF8574 Portexpander
> ' &h50 - &h5E    MAX7311 16Bit Portexpander
> ' &h50 - &h5E    MAX520 4ch. 8Bit DA-Wandler
> ' &h68 - &h6E    MAX4572 Analog-Schalter (write only)
> ' &h70 - &h7E    PCF8574A Portexpander
> ' &h90 - &h9E    PCF8591 4ch. 8Bit AD-Wandler
> ' &h90 - &h9E    DS1631 12Bit Temperatursensor
> ' &hA0 - &hA2    PCF8583 Uhrenbaustein
> ' &hA0 - &hA6    serielle EEProms 24C128 - 24C512
> ' &hA0 - &hAE    serielle EEProms 24C01 - 24C64
> ' &hA0 - &hAE    MAX7311 16Bit Portexpander
> ' &hB0 - &hBE    MAX7311 16Bit Portexpander
> ' &hC0 - &hCE    MAX7311 16Bit Portexpander
> ' &hD0 - &hDE    MAX7311 16Bit Portexpander
> '-----------------------------------------------------------------
> ' Speicherbedarf der I²C-Bus-Routinen: 156 Byte
> '-----------------------------------------------------------------
> define SCL PORT[5] ' Pull-Up mit 4,7 bis 10k notwendig
> define SDA PORT[6] ' Pull-Up mit 4,7 bis 10k notwendig
>
> define i byte[1] 'temporäres Byte
> define data byte[2] 'Byte zur Datenübergabe zu/von I²C-Bus-Routinen
>
>
> 'Beispiele:
> 'Schreiben eines Bytes an einen PCF8574 an 0.0.0:
> data = &h40
> gosub i2c_start
> print "I2C-Start Ack: ",i 'Ack. über RS232 ausgeben
> data = 0 ' alle Ports Low
> gosub i2c_write
> print "I2C-Write Ack: ",i 'Ack. über RS232 ausgeben
> gosub i2c_stop
>
> 'Lesen eines Bytes von einen PCF8574 an 0.0.0:
> data = &h41
> gosub i2c_start
> print "I2C-Start Ack: ",i 'Ack. über RS232 ausgeben
> gosub i2c_readlast
> print "PCF8574 Daten: ",data 'Portzustände über RS232 ausgeben
> gosub i2c_stop
>
>
> 'Schreiben eines Bytes oder mehrerer an Bausteine mit Byte-Register:
> ' z.B. PCF8583, PCF8591, 24C01 bis 24C02, MAX7311, MAX520, MAX4572, DS1631
> data = &hA0
> gosub i2c_start
> data = 0 ' Register 0
> gosub i2c_write
> data = 15 ' Datenbyte für Register 0
> gosub i2c_write
> '...
> ' weitere Daten können sequentiell geschrieben werden
> '...
> gosub i2c_stop
>
>
> 'Lesen eines Bytes oder mehrerer an Bausteine mit Byte-Register:
> ' z.B. PCF8583, PCF8591, 24C01 bis 24C02, MAX7311, MAX520
> data = &hA0
> gosub i2c_start
> data = 0 ' Register 0
> gosub i2c_write
> data = &hA1
> gosub i2c_start ' repeated start
> gosub i2c_read
> print "Daten: ",data
> gosub i2c_read
> print "Daten: ",data
> '...
> ' weitere Daten können sequentiell gelesen werden
> '...
> gosub i2c_readlast
> print "Daten: ",data
> gosub i2c_stop
>
>
>
> 'Schreiben eines Bytes oder mehrerer an Bausteine mit Word-Register:
> ' z.B. EEProms 24C64 bis 24C512
> data = &hA0
> gosub i2c_start
> data = 0 ' Register 0 Highbyte
> gosub i2c_write
> data = 0 ' Register 0 Lowbyte
> gosub i2c_write
> data = 15 ' Datenbyte für Register 0
> gosub i2c_write
> '...
> ' weitere Daten können sequentiell geschrieben werden
> ' Achtung ! Page-Grenzen beachten !
> '...
> gosub i2c_stop
>
>
> 'Lesen eines Bytes oder mehrerer an Bausteine mit Word-Register:
> ' z.B. EEProms 24C64 bis 24C512
> data = &hA0
> gosub i2c_start
> data = 0 ' Register 0 Highbyte
> gosub i2c_write
> data = 0 ' Register 0 Lowbyte
> gosub i2c_write
> data = &hA1
> gosub i2c_start ' repeated start
> gosub i2c_read
> print "Daten: ",data
> gosub i2c_read
> print "Daten: ",data
> '...
> ' weitere Daten können sequentiell gelesen werden
> '...
> gosub i2c_readlast
> print "Daten: ",data
> gosub i2c_stop
>
>
> end
> '---------------------------------------
> 'I²C-Bus-Routinen
> '---------------------------------------
> '---------------------------------------
> #i2c_stop
> '---------------------------------------
>  SDA = 0
>  DEACT SCL
>  DEACT SDA
> return
>
> '---------------------------------------
> #i2c_start 'returns Ack in i
> '---------------------------------------
>  SDA = 1
>  SCL = 1
>  SDA = 0
>  SCL = 0
> '---------------------------------------
> #i2c_write 'returns Ack in i
> '---------------------------------------
>  SDA = data AND &h80
>  TOG SCL
>  TOG SCL
>  for i=1 to 8
>   SDA = data AND (&h80 SHR i)
>   TOG SCL
>   TOG SCL
>  next
>  DEACT SDA
>  TOG SCL
>  i = NOT SDA
>  TOG SCL
> return
>
> '---------------------------------------
> #i2c_read 'returns Databyte in data
> '---------------------------------------
>  gosub i2c_sub_read
>  SDA = 0
>  TOG SCL
>  TOG SCL
> return
>
> '---------------------------------------
> #i2c_readlast 'returns Databyte in data
> '---------------------------------------
>  gosub i2c_sub_read
>  TOG SCL
>  TOG SCL
> return
>
> #i2c_sub_read
>  DEACT SDA
>  data = 0
>  for i=0 to 8
>   TOG SCL
>   data = (data shl 1) or (SDA and 1)
>   TOG SCL
>  next
> return
>



Hallo Andre!

Die Routine sieht gut aus aber funktioniert nicht.
Ich habe jetzt blos nicht die Zeit den Fehler zu suchen.
MfG Jan Peter

 Antwort schreiben

Bisherige Antworten:

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)