watterott ;title =
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 48

Thema: mindestens 64 Tasten abfragen

  1. #11
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    31
    Beiträge
    21
    Danke dir für das Beispiel. wie bekomme ich aber hin das ich zum Beispiel
    &B01010101 an Adresse H40 des ersten I2C Bus schicke und nich an die Adresse H40 des 2. I2C Bus schicke? Das habe ich noch nicht verstanden.

    Danke dir DON und allen anderen das ihr euch so eine Mühe mit mir gebt.

  2. #12
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    i2cbus=0 oder bus i2cbus=1 must du vorher auswählen.
    Dann die Daten senden.
    Habe Ich noch nie selber getestet.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  3. #13
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    31
    Beiträge
    21
    Ock das werde ich gleich mal ausbrobieren. Bin gespannt. Wenn das Funktioniert, könnte ich jede Taste direkt einzeln einlesen und auswerten und bräuchte keine Matrix. Sehe ich das richtig?

  4. #14
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    Geändert von DON (29.12.2016 um 16:09 Uhr)
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  5. #15
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    31
    Beiträge
    21
    Also das mit den unterschiedlichen SDA und SCL funktioniert super. Befehle ausgeben funktioniert. Jetzt muss ich nur noch raus bekommen wie ich die Taster (Befehle) einlese. Könnt ihr mir da noch einen Tip zu geben?

  6. #16
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  7. #17
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    31
    Beiträge
    21
    Da steht aber nix wie man Ports einliest oder bin ich gerade blind?

  8. #18
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    Set PCF8574A to input, masked pins high (pull-up)
    I2cstart
    I2cwbyte Pcf8574write
    I2cwbyte Columnsmask
    I2cstop
    Einstellen ob Eingang oder Ausgang
    Aus dem altem Forum.
    http://altesforum.bascom-forum.de/showthread.php?5905-Ich-habe-mal-was-mit-I%B2C-und-keypad-und-IRQ-gemacht&p=45354&viewfull=1#post45354

    Code:
    $sim
    $regfile = "m32def.dat"
    $crystal = 16000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
    Config Scl = Portc.0                                        ' we need to provide the SCL pin name
    Config Sda = Portc.1                                        ' we need to provide the SDA pin name
    Config Twi = 400000                                         ' wanted clock frequency when using $lib "i2c_twi.lbx"
    I2cinit                                                     ' we need to set the pins in the proper state
    Config Portb.0 = Output
    Config Portd.1 = Output
    $baud = 57600
    
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Timer_irq                                         '61HZ
    Const Timervorgabe = 0
    Enable Timer0
    Enable Interrupts
    
    $lib "AH_GLCDKS108.LBX"
    '$lib "GLCDKS108.Lib" die Läuft nicht sauber
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 3 , Ce2 = 2 , Cd = 4 , Rd = 5 , Reset = 6 , Enable = 7
    Setfont Font 6x8
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
     ' External EEPROM Config
    '$lib "key_i2c_neu.lib"
    ' External EEPROM Config
    '
    $eepromsize = &H8000                                        ' 32kB for FM24C256
    $lib "fm24c64_256_pic.lib"
    $eeprom
    $eepromhex
    Uwe1:
    $bgf "uwe3.bgf"
       $data
    
    'Int from PCF8574 to Int0 pin
    Config Int1 = Falling
    
    Const Pcf8574write = &H70
    Const Pcf8574read = &H71
    'Mask for reading columns and rows state
    Const Columnsmask = &B11110000
    Const Rowsmask = &B00001111
    'Keyboard debounce time
    Const Debouncetime = 80                                     '150
    Const Wtime = 100
     Dim Taster As Byte
     Dim Entprellzahler As Byte
     'Dim Pcf8574input As Byte
    'Dim keypadzeile As Byte
    'Dim keypadspalte As Byte
    'Dim Keycode As Byte
    'Dim Keychar As String * 1
    'Dim Keystring As String * 1
    'Dim Keycharpos As Byte
    'Dim Endofstring As Bit
    'Cls
    'Declare Function Uhrfunktion() As string*4
    Declare Sub Pcfint(byval Test As Byte) As Byte
    On Int1 Pcfint
    Enable Int1
    Enable Interrupts
    
    
    'Set PCF8574A to input, masked pins high (pull-up)
    I2cstart
    I2cwbyte Pcf8574write
    I2cwbyte Columnsmask
    I2cstop
    
    
    Showpice 0 , 0 , Uwe1
    Do
        Lcdat 8 , 1 , "S " ; Taster
       Set Portb.0
       Waitms Wtime
       Reset Portb.0
       Waitms Wtime
     Loop
    
    'PCF8574 interrupt routine
    
    $include "font6X8.FONT"
    Sub Pcfint(byval Was As String * 4 ) As Byte
    
     Local Keypadzeile As Byte , Keypadspalte As Byte , Keycode As Byte , Keychar As String * 1 , Keystring As String * 1
     If Entprellzahler < 6 Then Goto Ende
     Entprellzahler = 0
     Disable Int1
      'read the input pins
      I2cstart
      I2cwbyte Pcf8574read
      I2crbyte Keypadspalte , Nack
      I2cstop
      'shift upper nibble to lower nibble
      Shift Keypadspalte , Right , 4
      'switch column and row input/output state
      I2cstart
      I2cwbyte Pcf8574write
      I2cwbyte Rowsmask
      I2cstop
      'read the input pins
      I2cstart
      I2cwbyte Pcf8574read
      I2crbyte Keypadzeile , Nack
      I2cstop
      'switch column and row input/output state back
      I2cstart
      I2cwbyte Pcf8574write
      I2cwbyte Columnsmask
      I2cstop
      Select Case Keypadzeile
        Case 7 : Keycode = 0
        Case 11 : Keycode = 4
        Case 13 : Keycode = 8
        Case 14 : Keycode = 12
        Case Else : Keycode = 99
      End Select
      'make final keycode from portb pins read
      Select Case Keypadspalte
        Case 7 : Keycode = Keycode + 0
        Case 11 : Keycode = Keycode + 1
        Case 13 : Keycode = Keycode + 2
        Case 14 : Keycode = Keycode + 3
        Case Else : Keycode = Keycode + 99
      End Select
    
      'illegal keycode from bounce effects
      If Keycode > 15 Then Keycode = 16
      Keychar = Lookupstr(keycode , Keycodes)
     Taster = Val(keychar)
     'lcdat 8,1, "S " ; Keystring
      'Waitms Debouncetime
      Enable Int1
      Ende:
      End Sub
    
    Timer_irq:
    If Entprellzahler < 255 Then Incr Entprellzahler
      Timer0 = Timervorgabe
      Return
    
    
    End
    
    Keycodes:
    Data "1" , "2" , "3" , "A" , "4" , "5" , "6" , "B" ,
    Data "7" , "8" , "9" , "C" , "*" , "0" , "#" , "D" , "?"
    Geändert von DON (29.12.2016 um 19:31 Uhr)
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  9. #19
    Platinenputzer
    Registriert seit
    02.11.2016
    Beiträge
    42
    Hallo Aki,
    der kann sogar 16 bit Input oder Output.

    PCA9555 Remote 16-Bit I2C

    Gruß Thomas

  10. #20
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    31
    Beiträge
    21
    Sorry DON aber ich steig gerade nicht so wirklich durch. Habe ich das richtig verstanden das immer das komplette BYTE eingelesen und in einer Variable abgespeichert wird? Da müsste ich dann nur die Variable auslesen oder? Smith danke dir für den Tip. Aber hat der AVR zum beispiel nicht nur 8 Bit oder verdrehe ich da jetzt was?

Lesezeichen

Lesezeichen

Berechtigungen

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