Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 53

Thema: mindestens 64 Tasten abfragen

  1. #21
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    461
    Code:
    Variablen deklarieren
     ‚======================
     Dim Eing_wert As Byte
     Dim Ausg_wert As Byte ‚Konstanten
      ‚==========
     Const Eing_adresse = 113                 ‚ Adresse 
     Const Ausg_adresse = 68                  ‚ Adresse 
     ‚Eingänge konfigurieren
      ‚======================
     Taste Alias Pinb.0                       ‚ Taste
     Config Taste = Input
     ‚Ausgänge konfigurieren
      ‚======================
     Led_gn Alias Portc.1
     Config Led_gn = Output
     ‚I2C initialisieren
      ‚==================
     I2cinit
     Main:
     Do
     ‚Wert von der Eingangskarte lesen
     I2cstart
     I2cwbyte Eing_adresse                    ‚ Adresse PCF8574A 
     I2crbyte Eing_wert , Nack                ‚ Wert lesen
     I2cstop
     ‚Gleichen Wert zur inversen Ausgabekarte Schreiben
     Ausg_wert = 255  Eing_wert
     I2cstart
     I2cwbyte Ausg_adresse                    ‚ Adresse PCF8574 
     I2cwbyte Ausg_wert                       ‚ Wert schreiben
     I2cstop
     ‚LED toggeln und kurz warten
     Toggle Led_gn
     Waitms 10
     Loop
     End
    Geändert von DON (29.12.2016 um 20:34 Uhr)

  2. #22
    Platinenputzer
    Registriert seit
    02.11.2016
    Beiträge
    42
    Zitat Zitat von Acki Beitrag anzeigen
    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?
    Hallo Aki,
    das sind wohl zwei paar Stiefel, 16 bit heiß nur das du hier 16 Erweiterungen nützten kannst .

    Gruß Thomas

  3. #23
    Platinenputzer
    Registriert seit
    02.11.2016
    Beiträge
    42
    Hallo Don.
    kann es sein das dein grüner Punkt kaputt ist??

    Gruß Thomas

  4. #24
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    461
    Hallo Don.
    kann es sein das dein grüner Punkt kaputt ist??
    Admins können sich Unsichtbar machen.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  5. #25
    Kabelträger
    Registriert seit
    14.12.2016
    Alter
    46
    Beiträge
    5
    einfachste Lösung wäre eine Matrix. 10 * 10 Tasten über zwei zwei ADC Ports abfragen. Wer vorher beim Löten nicht verrückt wird, hat gute Chancen.
    Allerdings sollten die Tasten zwei Schalter besitzen, damit das auch funktioniert. Somit sind jeder Taste zwei Zustände zuordenbar - X und Y wenn man so will.
    Ob ein passendes Keypad bereits existiert, ist mir leider nicht bekannt.

  6. #26
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    32
    Beiträge
    22
    Hallo Micha

    Das mit der Matrix wird denke ich mal schwierig. Es ist keine Matrix vorhanden. Es sind alles einzelne Taster mit zwei Lötfahnen.

    Gruß Acki

  7. #27
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    32
    Beiträge
    22
    DON

    Werden automatisch die Portexpander ausgelesen oder muss ich das irgendwie anstoßen?

  8. #28
    Kabelträger
    Registriert seit
    27.11.2016
    Alter
    32
    Beiträge
    22
    Code:
    i2cbus=1
     I2cstart
     I2cwbyte Eing_adresse                   
     I2crbyte Eing_wert , Nack              
     I2cstop
    Das funktioniert irgendwie nicht. Oder kann ich das so nicht machen?

  9. #29
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    461
    Config Scl = Portc.0 ' we need to provide the SCL pin name
    Config Sda = Portc.1 ' we need to provide the SDA pin name
    I2cinit
    Const Pcf8574write = &H40
    Const Pcf8574read = &H41
    Dim Pcf8574port As Byte 'da kommen die Daten rein oder raus.
    Const Pcf8574write1 = &H42
    Const Pcf8574read1 = &H43
    Dim Pcf8574port1 As Byte

    Const Pcf8574write_led = &H44
    Const Pcf8574read_led = &H45
    Dim Pcf8574port_led As Byte

    'Es gibt auch Pcf8574A mit der Adresse 70
    Also wenn du was schreiben willst write wenn du Daten lesen willst read.
    ----------------------------------------------------------------------------------------------
    Zwei Chips als Eingang

    'Make all Pcf8574 pins high -> input
    I2cstart
    I2cwbyte Pcf8574write
    I2cwbyte &HFF 'eingang
    I2cstop

    I2cstart
    I2cwbyte Pcf8574write1
    I2cwbyte &HFF 'eingang
    I2cstop

    I2cstart
    I2cwbyte Pcf8574write_led 'Ausgang
    I2cwbyte &H00
    I2cstop
    Geändert von DON (30.12.2016 um 09:11 Uhr)
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  10. #30
    Neuer Benutzer
    Registriert seit
    02.11.2016
    Beiträge
    54
    Zitat Zitat von Acki Beitrag anzeigen
    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?
    Hallo Acki,

    da du nun weist wie viele I²C- Busteilnehmer angesprochen werde, hier mal ein sehr kleiner Ausschnitt meiner Auswertung. Nur mal so als Anregung.
    Ist schon lang her da hatte ich für ein Eisenbahnmodelclub Hard- Softwarelösung für min 120 Eingänge und 120 Ausgänge gebaut. Eine Forderung war alle E/A sollen leicht mit Software zu verknüpfen sein(I²C). Viele unkritische Abfragen habe ich als 20mA Schnittstelle mit den 6 ADC Eingängen umgesetzt.

    Auch schon mal ein Bus-Projekt(2x Mega 8 als Slave und 1x 644p als Master) für max 1000 E/A erstellt. Ist ja alles ziemlich Einfach da es in diesem Anwendungsbereich nicht auf 1µs ankommt.
    Code:
    '**** Variablen für IC1und IC3 ****
    Dim Tasten As Byte
    Dim Leds As Byte
    Dim Alte_tasten As Byte
    Dim Digital As Byte
    
    
    'Funk-Digitale aufteilen jedes Bit vom Byte ein "Namen" geben
    D0 Alias Digital.0                                          'ist Portpin PD7
    D1 Alias Digital.1                                          'ist Portpin PD6
    D2 Alias Digital.2                                          'ist Portpin PD5
    D3 Alias Digital.3
    D4 Alias Digital.4
    D5 Alias Digital.5
    D6 Alias Digital.6
    D7 Alias Digital.7
    
    
    '########### ab hier I²C Bus Unterprogramme ##############
    
    '----- Beispiel I²C-Bus Ein-und Ausgänge für 2 ICs verknüpfen.----
    ' IC1 = Eingang (Taster)    IC3 = Ausgang (LED)
    Ibus_dig:
    
    I2cstart
    I2cwbyte Taster_schreib_adresse_t
    I2cwbyte &B11111111
    I2cstop
    
    I2cstart
    I2cwbyte Taster_lese_adresse_t
    'I2crbyte Tasten , Ack                                       'lese nochmal ist sicher aber muss nicht sein
    I2crbyte Tasten , Nack
    I2cstop
    
    '### Abfrage Bit von Tasten_Byte #########
    'das Toggeln ist nur für Doppelabfrage 1x drücken EIN nochml AUS
    'ein Beispiel für Kontakte ist Bit7 vom Tasten-Byte.
    
    If Tasten.0 <> Alte_tasten.0 Then
        If Tasten.0 = 0 Then                                    'ist Bit0 vom Byte
           'steigende Flanke
             Toggle Leds.0
        Cls                                                     'alte Anzeige löschen
       Gosub Anzeigen                                           'gehe zur LCD-Anzeige
     Else
           'fallende Flanke
        End If
    End If
    
    '-- Abfrage Bit1 vom Byte Tasten  ---
    If Tasten.1 <> Alte_tasten.1 Then
        If Tasten.1 = 1 Then
            'steigende Flanke
             Toggle Leds.1
           Cls                                                  'alte Anzeige löschen
       Gosub Anzeigen                                           'gehe zur LCD-Anzeige
     Else
         'fallende Flanke
       End If
    End If
    
    '-- Abfrage Bit2 vom Byte Tasten --
    If Tasten.2 <> Alte_tasten.2 Then
        If Tasten.2 = 1 Then
             ' steigende Flanke
             Toggle Leds.2
        Else
            ' Fallende Flanke
        End If
    End If
    
    '-- Abfrage Bit3 vom Byte Tasten --
    If Tasten.3 <> Alte_tasten.3 Then
        If Tasten.3 = 1 Then
             ' steigende Flanke
             Toggle Leds.3
        Else
            ' Fallende Flanke
        End If
    End If
    
    '-- Abfrage Bit4 vom Byte Tasten --
    If Tasten.4 <> Alte_tasten.4 Then
        If Tasten.4 = 1 Then
             ' steigende Flanke
             Toggle Leds.4
        Else
            ' Fallende Flanke
        End If
    End If
    
    '-- Abfrage Bit5 vom Byte Tasten --
    If Tasten.5 <> Alte_tasten.5 Then
        If Tasten.5 = 1 Then
             ' steigende Flanke
             Toggle Leds.5
        Else
            ' Fallende Flanke
        End If
    End If
    
    '-- Abfrage Bit6 vom Byte Tasten --
    If Tasten.6 <> Alte_tasten.6 Then
        If Tasten.6 = 1 Then
             ' steigende Flanke
             Toggle Leds.6
        Else
            ' Fallende Flanke
        End If
    End If
    
    '-- Abfrage Bit7 vom Byte Tasten --
      If Tasten.7 = 0 Then
       Print "habe EIN geschalten"                              'Pin auf GND
      Else
       Print "habe AUS geschalten"                              'Pin auf Vcc oder offen (liegen ja int. auf H)
      End If
    
    '----------letzen Tastendruck merken----------
          Alte_tasten = Tasten
    '--- Tastendruck an LED weitergeben-----------
      I2cstart
      I2cwbyte Led_schreib_adresse_t
      I2cwbyte Leds
      I2cstop
    '--- Tastendruck an Anzeige-Modus weitergeben--
      Lcd_aktualisieren = Leds
      Gosub Anzeigen
    Return
    
    
    
    '---Beispiel alle Ports für IC2 als Eingänge ---------
    Eingang:
    
    Const Eingang_schreib_adresse = &B01110100                  ' ist IC2
    Const Eingang_lese_adresse = &B01110101
    Dim Taste As Byte
    
    Print "Ereignis der Tasten"
    
    I2cstart
    I2cwbyte Eingang_schreib_adresse
    I2cwbyte &B11111111                                         'alle Ports als Eingang geschalten wird mit GND
    I2cstop
    
    I2cstart
    I2cwbyte Eingang_lese_adresse
    I2crbyte Taste , Nack                                       'Taste lesen
    
    Print Bin(taste)                                            'nur für Test
    
    If Taste.0 = 0 Then
     Print "Taste 1 = " ; Taste.0
    End If
    
    If Taste.1 = 0 Then
     Print "Taste 2 = " ; Taste.1
    End If
    
    If Taste.2 = 0 Then
     Print "Taste 3 = " ; Taste.2
    End If
    
    If Taste.3 = 0 Then
     Print "Taste 4 = " ; Taste.3
    End If
    
    If Taste.4 = 0 Then
     Print "Taste 5 = " ; Taste.4
    End If
    
    If Taste.5 = 0 Then
     Print "Taste 6 = " ; Taste.5
    End If
    
    If Taste.6 = 0 Then
     Print "Taste 7 = " ; Taste.6
    End If
    
    If Taste.7 = 0 Then
     Print "Taste 8 = " ; Taste.7
    End If
       I2cstop
      Waitms 100
    
    Return
    
    '---Beispiel alle Ports für IC2 als Ausgänge -------
    Ausgang:
    Const Ausgang_schreib_adresse = &B01110100                  ' ist Beispiel für IC2
    Const Ausgang_lese_adresse = &B01110101
    Dim Led As Byte
    Dim Z As Byte
    
    I2cstart
    I2cwbyte Ausgang_schreib_adresse
    'I2cwbyte &B00000000                                         'alle Ports als Ausgang gegen Vcc
     I2cwbyte &B11111111
    I2cstop
    
    'nur für Test
     Led.z = 0                                                  'sind alle Portpins
      For Z = 0 To 7
       I2cstart
        I2cwbyte Ausgang_schreib_adresse
        I2cwbyte Led.z
        Print "LED-An  " ; Z ; "    " ; Led.z
        I2cwbyte Led.z
        Print "LED-Aus  " ; Z ; "    " ; Led.z
          Waitms 100                                            'warte 100 Millisekunden
      Next
    
       'alle LED's abschalten
        I2cwbyte Ausgang_schreib_adresse
        Led = 1
        I2cwbyte Led
        Print Led
         Wait 1                                                 'warte 1Sekunde
      I2cstop
    Return
    Gruß

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 09.12.2016, 21:05
  2. Tastatur für Arduino Raspberry PI 20 Tasten Folientastatur Keypad Keyboard
    Von DON im Forum Empfehlungen von Usern für User.
    Antworten: 0
    Letzter Beitrag: 08.12.2016, 18:47

Lesezeichen

Lesezeichen

Berechtigungen

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