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: I²C Bus in Basic ansteuern - Hilfe Kategorie: Programmierung Basic (von Oskar - 29.03.2005 8:14)
 Als Antwort auf Re: I²C Bus in Basic ansteuern - Hilfe von Windt H.J. - 28.03.2005 0:05
vielen Danke für das Listing, hat mir sehr geholfen.

Gruß Oskar


> '----------------------------------------------------------------------------------------------------'
> '************************************************************************'
> '*                          WINDT SYSTEMS                               *'
> '* DATA TO PCF8574 VIA EMULATED I2C BUS v1.5 for CCIMainU1.1 with CCISB *'
> '*                            H.J. WINDT                                *'
> '*                               2005                                   *'
> '************************************************************************'
> '----------------------------------------------------------------------------------------------------'
> 'This program will demonstrate sending data to a PCF8574A(P) via an emulated I2C bus.'
> 'I2C_address must contain the PCF8574P  address/ &b0100(A2)(A1)(A0)0 or'
> 'I2C address must contain the PCF8574AP address/ &b0111(A2)(A1)(A0)0.'
> 'I2C_data must contain the byte to be sent.'
> 'The emulated SDA line is via port 1.'
> 'The emulated SCL line is via port 2.'
> 'Feel free to use and share this software!'
> '----------------------------------------------------------------------------------------------------'
> '*************** INS and OUTS ***************'
> define sda port[1]
> define scl port[2]
> '*******************************************'
> '**************** VARIABLES ****************'
> define i2c_error bit[7]
> define i2c_error_count byte[2]
> define i2c_byte byte[3]
> define i2c_ms_bit bit[24]
> define i2c_ls_bit bit[17]
> define loop byte[4]
>
> define pcf8574_i2c_address byte[5]
> define pcf8574_i2c_data byte[6]
>
> '*******************************************'
> '**************** CONSTANTS ****************'
>
> '*******************************************'
> '****************** SETUP ******************'
> i2c_error_count = 0
> '*******************************************'
> '***************** PROGRAM *****************'
> #start
> print"Enter PCF8574P I2C  address (64/66/68/70/72/74/76/78) or"
> print"Enter PCF8574AP I2C address (112/114/116/118/120/122/124)"
> input pcf8574_i2c_address
> print"Enter byte to be sent (0 to 255)"
> input pcf8574_i2c_data
> gosub send_data_via_i2c_to_pcf8574
> goto start
> '*******************************************'
> '*************** SUBROUTINES ***************'
> #send_data_via_i2c_to_pcf8574
>
> gosub start_i2c
>
> i2c_byte = pcf8574_i2c_address : gosub write_byte_i2c 'Transmit address (pcf8574_i2c_address) over the I2C bus'
> if i2c_error then goto pass_write
>
> i2c_byte = pcf8574_i2c_data : gosub write_byte_i2c 'Transmit byte (pcf8574_i2c_data) over the I2C bus'
>
> #pass_write
> gosub stop_i2c
> if i2c_error_count > 3 then goto no_ack_from_pcf8574
> if i2c_error then goto send_data_via_i2c_to_pcf8574 'If I2C error then try again'
> i2c_error_count = 0
> return
>
> #no_ack_from_pcf8574
> print"No ACK from or no PCF8574A(P) device on I2C address ";pcf8574_i2c_address
> i2c_error_count = 0
> return
>
> #start_i2c
> sda = 0 : scl = 0 : i2c_error = 0
> return
>
> #stop_i2c
> deact sda : sda = 0 : scl = 1 : sda = 1
> return
>
> #write_byte_i2c
> for loop = 1 to 8
> sda = i2c_ms_bit
> #write_byte_i2c_clock_stretch
> scl = 1 : deact scl : if scl = 0 then goto write_byte_i2c_clock_stretch
> deact scl : scl = 0
> i2c_byte = i2c_byte shl 1
> next
> #write_byte_i2c_ack_clock_stretch
> scl = 1 : deact scl : if scl = 0 then goto write_byte_i2c_ack_clock_stretch
> deact sda : i2c_error = sda
> deact scl : scl = 0
> deact sda
> if i2c_error then i2c_error_count = i2c_error_count + 1
> return
> '*******************************************'
> '****************** DATA *******************'
>
> '*******************************************'
>

 Antwort schreiben

Bisherige Antworten: