- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: PCF8574 mit Taster auslesen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.03.2015
    Beiträge
    31
    Habe schon öfter mal darüber nachgedacht die Lib zu verwenden aber bei mir treten manchmal Fehler auf. Ich möchte sobald das funktioniert ein paar eigene kleine Funktionen schreiben.
    Die Lib habe ich schon mal gedownloadet und glaube, dass ich weiß wie es funktionieren könnte. Aus der Lib kann ich folgendes ableiten:
    while(1)
    {
    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
    while (!(TWCR & (1<<TWINT)));
    TWDR = 0x41; // Leseadresse
    TWCR = (1<<TWINT) | (1<<TWEN);
    while (!(TWCR & (1<<TWINT)));
    input = i2c_readNak(); // Die Funktion werd ich dann so übernehmen, habe jetzt die Lib durchgeschaut aber nirgend die Definition für input gesehen
    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);

    if Abfrage
    }

    So sollte es dann eigentlich funktionieren. Ich denke mal das input als uint8_t definiert ist.

    - - - Aktualisiert - - -

    Kleiner Nachtrag: Ich habe gerade den Wald vor lauter Bäumen nicht gesehen input ist natürlich unsigned char

    - - - Aktualisiert - - -

    Nochmal der zum Glück letzte Nachtrag: Danke für den Code mit der Peter Fleury Lib! Nachdem ich die readNAK funktion übertragen habe funktioniert der Code einwandfrei und die LED leuchtet beim Tastendruck. Ich werde jetzt noch Funktionen zum senden und lesen einbauen aber bin auf jeden fall jetzt schon sehr zufrieden.

    Mfg Dennis

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    62
    Beiträge
    199
    Ich freue mich, dass ich helfen konnte!
    Gruß, Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.03.2015
    Beiträge
    31
    Es gibt doch noch ein kleines Problem : TWBR steht bei mir ja auf dem Minimum,mit der Formel SCL = CPU/(16+2TWBR*4^TWPS) bekomme ich als Ergebnis SCL = 41666,666666... also ungefähr 41500 (macht ja keinen Sinn aufzurunden)
    Das Problem hierbei ist,dass das Programm mit einer Stromversorgung durch den Programmer(mySmartUsb Light) funktioniert. Mit einer 9V Batterie(die auf 5V runtergeregelt wird) allerdings nicht. Kann es sein, dass die Frequenz zu niedrig ist und deshabl der Quarz im Programmer mitbenutzt wird? Die LEDs am PCF8574 können über einen Atmega Port problemlos betrieben werden und bei der PCF8574 Schaltung sind sie ja von Vcc nach P0 bzw P1 geschaltet d.h. daran kanns nicht liegen
    Geändert von D3nni5 (13.08.2015 um 16:00 Uhr) Grund: Schreibfehler

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    62
    Beiträge
    199
    Welchen Controller benutzt Du? Hängen die TWI Pins auch am Programmer (als SPI Pins), wenn dieser angesteckt ist?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.03.2015
    Beiträge
    31
    Ich benutze den Atmega32. Die TWI Pins sind nicht mit dem Programmer verbunden

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    62
    Beiträge
    199
    Wie sind die Fuses gesetzt?
    Ist ein Schwing-Quartz am ATMEGA32 angeschlossen?
    Pull-ups an SDA und SCL sind vorhanden? So 4,7k jeder?
    Hast Du ein Oszi oder einen Logikanalyser ? Dann schau Dir mal die I2C Signale an.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    19.03.2015
    Beiträge
    31
    Die Fuses sind so gesetzt, dass die interne Frequenz von 1Mhz mit Startuptime : 6 CK + 0ms benutzt wird.
    Es ist noch kein Schwing-Quarz angeschlossen. Ich habe aber ein paar 16Mhz Quarze und genügend 22pF Kondensatoren.
    Die Pull-ups haben beide 10k ich kann die aber auch noch runtersetzten.
    Habe leider keins von beidem.
    Der Taster funktioniert allerdings.

  8. #8
    HaWe
    Gast
    ich veerwende diesen Code für Arduino C/C++:

    Code:
    #include <Wire.h>
    
    #define ADDR_PCF8574  0x30
    
    void setup() {
       Wire.begin();
       writei2cbyte(ADDR_PCF8574, 0xff);
       //...
    }
    
    void writei2cbyte(int addr, byte data) {
      Wire.beginTransmission(addr);
      Wire.write(data);
      Wire.endTransmission();
      delay(5);
    }
    
    uint8_t readi2cbyte(uint8_t addr, uint8_t reg) {
      uint8_t  bdata;
    
      Wire.beginTransmission(addr);
      Wire.write(reg);                   // target data register number
      Wire.endTransmission();
    
      Wire.requestFrom(addr, reg);           // Request 1 bytes from PCF8574
      while(Wire.available() < 1);           // Wait for byte to become available
      bdata = Wire.read();      
      return(bdata);
    }
    
      //...
      uint8_t bitmask = readi2cbyte(ADDR_PCF8574, 1);  // read all btn states (bitmask) at reg 1
      if(bitRead(bitmask,1) {...}
      else 
      if(bitRead(bitmask,2) {...}  
      //...
    Geändert von HaWe (18.08.2015 um 06:58 Uhr)

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    19.03.2015
    Beiträge
    31
    Ich habe gerade eben einen 16Mhz Quarz mit entsprechend zwei 22pF Kondensatoren an den Atmega gelötet und es hat direkt funktioniert. Es scheint so als hätte der Atmega tatsächlich den Quarz des Programmes verwenden.

    @HaWe
    Danke für die Antwort, auch wenn sich das Problem gerade gelöst hat .

  10. #10
    HaWe
    Gast
    aber gern, n.p.
    ich muss zu meiner Schande auch gestehen, dass ich nur ein Rudiment gepostet habe. Nur der Vollständigkeit und Richtigkeit halber, falls andere sich daran versuchen, habe ich den Code oben jetzt in der korrekten Version gepostet!

    vG
    Helmut

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. PCF8574 nach Interrupt an INT2 auslesen
    Von Reissdorf im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 22.03.2013, 08:38
  2. Taster-Spannung auslesen mit RN-Control und BASIC
    Von Torrentula im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 14
    Letzter Beitrag: 08.04.2010, 19:21
  3. Einzelnen Taster auslesen.
    Von Asuroneuling im Forum C - Programmierung (GCC u.a.)
    Antworten: 59
    Letzter Beitrag: 19.07.2009, 16:39
  4. PCF8574 auslesen
    Von Andun im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 29.10.2007, 19:10
  5. ASURO ADC für Taster direkt auslesen
    Von I2C im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 17.06.2005, 15:54

Berechtigungen

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

Labornetzteil AliExpress