- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: MCP23017 - I2C ansprechen ohne Erfolg

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #5
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    So... neues Jahr, neues Glück. (Hoffe ich)

    Ich habe mir nun ein Testprogramm aus den Vorschlägen erstellt, das zumindest bestätigt, das der MCP am Bus verfügbar ist.

    Hex40 und Hex41 passt als Adresse und anscheinend wird alles soweit korrekt gesendet.
    Leider bleiben GPA und auch GPB trotzdem stumm.
    Theoretisch sollten aber jeweils alle Ausgänge auf 1 sein und nur ein Ausgang jeweils auf 0. (ähnlich Lauflicht)



    Code:
    $regfile = "M328pdef.dat"                                   
    $crystal = 16000000                                        
    $baud = 38400                                              
    
    '**********************************************************************
    '**  I2C pins **
    '**********************************************************************
    Config Sda = Portc.4                                        ' I2C Data.
    Config Scl = Portc.5                                        ' I2C Clock.
    Config I2cdelay = 10
    
    '**********************************************************************
    '** Declare subroutines **
    '**********************************************************************
    
    Declare Sub I2c_mcp23016_write(byval Cmd As Byte , Byval Lsb As Byte , Byval Msb As Byte)
    
    Declare Sub I2c_mcp23016_read
    
    '**********************************************************************
    '** Define working variables and constants  **
    '**********************************************************************
    Dim Busaddress As Byte
    Dim Busaddress_read As Byte
    Dim Chipaddress As Byte
    Dim Erkannt As Bit
    
    Dim Mcp23016_adress_w As Byte
    Mcp23016_adress_w = &H40 'Write Adress: 0 1 0 0 _0 0 0_ 0
    
    Dim Mcp23016_adress_r As Byte
    Mcp23016_adress_r = &H41 'Read Adress: 0 1 0 0 _0 0 0_ 1
    
    Dim Counter_1 As Byte
    Dim Lsb As Byte
    Dim Msb As Byte
    
    'This is for the Microchip MCP23016 initialization, some examples below
    
    'Call I2c_mcp23016_write(&H04 , &Hff , &Hff) 'Invert All Input Polarities
    'Call I2c_mcp23016_write(&H0a , &H01 , &H01) 'Initialize Iares , For Fast Input Scan Mode
    'Call I2c_mcp23016_write(&H06 , &H00 , &HFF) 'Initiallize It So The Lsbs Outputs Are & Msbs Are Inputs
    'Call I2c_mcp23016_write(&H06 , &Hff , &Hff) 'Initiallize It So That Both Lsbs & Msbs Are Inputs
    'Call I2c_mcp23016_write(&H02 , &HFF , &HFF) 'Initiallize The Ouput Latch
    'Call I2c_mcp23016_write(&H06 , &H00 , &H00) 'Initiallize It So That Both Lsbs & Msbs Are Outputs
    
    '**********************************************************************
    '** Main-Programm  **
    '**********************************************************************
    'Scan bus for valid I2C addresses on bus
    '( test for ACK to come back from Busaddress )
    
    Do
    
    Print "Scan start"
    For Busaddress = 0 To 255 'for all even addresses
      I2cstart
      I2cwbyte Busaddress
        If Err = 0 Then
        Erkannt = 1
          Print "Slave at address: " ; Busaddress ; " Dezimal, = " ; Hex(busaddress) ; " hex"
          Chipaddress = Busaddress \ 2
          Print " with chip address " ; Hex(chipaddress) ; "hex"
        End If
      I2cstop
    Next
    
    Print "End Scan"
    If Erkannt = 0 Then Print "Keine I2C Teilnehmer gefunden!!"
    Waitms 250
    
    Loop Until Erkannt = 1
    
    
    Main:
    
    Waitms 250 ' wait 250 ms for the MCP23016 powerup timer
    
    Call I2c_mcp23016_write(&H02 , &HFF , &HFF) 'Initiallize The Ouput Latch
    Call I2c_mcp23016_write(&H06 , &H00 , &H00) 'Initiallize It So That Both Lsbs & Msbs Are Outputs
    
    Lsb = &HFE '0 => Led is "on" FE => 11111110
    Msb = &HFE '0 => Led is "on" FE => 11111110
    
    Counter_1 = 0
    
    Do 'Chaser effect
     Print Bin(lsb) 'Ausgabe zur Kontrolle
     Print Bin(msb) 'Ausgabe zur Kontrolle
     Call I2c_mcp23016_write(&H02 , Lsb , Msb) 'Write Lsb & Msb to MCP23016
    
     Rotate Lsb , Left , 1 'Rotate the bits
     Rotate Msb , Left , 1
    
     Waitms 1000                                                 
     Counter_1 = Counter_1 + 1 'Increase the counter
    
    Loop                                                      
    
    End 
    
    '**********************************************************************
    '** Define Subroutines **
    '**********************************************************************
    Sub I2c_mcp23016_write(byval Cmd As Byte , Byval Lsb As Byte , Byval Data2 As Byte) ' Writes data to the I2C MCP23016.
    
     I2cstart 'Generate A Start Condition
     I2cwbyte Mcp23016_adress_w 'Transmit The "ADDRESS and WRITE" Byte
     I2cwbyte Cmd 'Transmit The Command Byte
     I2cwbyte Lsb 'Transmit First Data Byte
     I2cwbyte Msb 'Transmit Second Data Byte
     I2cstop 'Generate a STOP condition
     Waitus 50 'Some delay may be necessary for back to back transmitions
    
    End Sub
    
    Sub I2c_mcp23016_read
    ' Read data from the I2C MCP23016
    
     I2cstart 'Generate START condition
     I2cwbyte Mcp23016_adress_w 'Transmit The "ADDRESS and WRITE" Byte
     I2cwbyte &H00 'Transmit The Command Byte
     I2cstop 'Generate a STOP condition
     I2cstart 'Generate a START condition
     I2cwbyte Mcp23016_adress_r  'Transmit ADDRESS with READ command
     I2crbyte Lsb , Ack 'Receive first DATA byte (LSB) and acknowledge
     I2crbyte Msb , Nack 'Receive second DATA byte (MSB) and don't acknowledge
     I2cstop 'Generate a STOP condition
    
    End Sub
    Geändert von JoeM1978 (04.01.2014 um 15:39 Uhr)
    JAAAA... Microchips kann man essen... aber der Geschmack ist furchtbar.

Ähnliche Themen

  1. LCD über I2C ansprechen
    Von Reissdorf im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 30.12.2012, 19:48
  2. PCA9635 per i2c ansprechen
    Von Sven2010 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.01.2010, 20:19
  3. MD22 via i2c vom Arduino ansprechen
    Von kywalda im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 01.04.2009, 19:48
  4. I2c-Bus ansprechen..aber wie???
    Von Goliath im Forum Software, Algorithmen und KI
    Antworten: 7
    Letzter Beitrag: 27.12.2007, 09:32
  5. RAMs / EEPROMs ansprechen (I2C)
    Von Zarathustra im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 01.04.2007, 11:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress