-
        

Ergebnis 1 bis 3 von 3

Thema: ATmega8 und PCF8574 :)

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.07.2008
    Beiträge
    7

    ATmega8 und PCF8574 :)

    Anzeige

    Moin,

    hm gleich mein erster post ist eine Frage. Ist vieleicht nicht die feine englische Art, aber das hol ich wieder auf

    Ich probiere gerade an dem ATmega8 einen PCF8574 laufen zu lassen. Dazu habe ich mit diversen Quellen folgendes hinbekommen.
    Nur leider kommt da nichts an beim PCF8574 an. Habe mal mit einem Oszilloskop den I2C bus angeschaut. Da geht nichts drüber. Also vermute ich mal auf einen Softwarefehler.

    seht ihr den Bock hier im Quellcode ? Würde mich über ein paar Tips sehr freuen.

    lg Henning
    Code:
    #include<util/delay.h>
    
    
    int sendByte(unsigned char datenbyte, unsigned char adresse)
    {
      DDRC &= !((1<<DD4)|(1<<DD5));
      PORTC = (1<<DD4)|(1<<DD5);
    
      TWCR = ((1<<TWINT)|(1<<TWSTA)|(1<<TWEN));    //TWI aktivieren und Start auslösen
      while(!(TWCR & (1<<TWINT)));          // warten auf Start
    
    
      TWDR = adresse & (0x40);            // Adresse und Schreibbit ins Datenregister
      TWCR = ((1<<TWINT)|(1<<TWEN));          // senden ...
      while(!(TWCR & (1<<TWINT)));
    
    
      TWDR=datenbyte;                  // Byte ins Datenregister
      TWCR = ((1<<TWINT)|(1<<TWEN));          // senden ...
      while(!(TWCR& (1<<TWINT)));            
    
    
      TWCR = ((1<<TWINT)|(1<<TWSTO)|(1<<TWEN));    // Stop
      return 1;
    }
    
    
    
    void main (void)
    {
      unsigned char i;
      i=0x01;
      while(1)
      {
        if(i==0x80) i=0x01;
        else i<<=1;
    
        _delay_ms(150);
    
        sendByte(i,0);
      }
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826
    Moin

    Kanns sein, dass du einfach keine Adresse für den I2C Baustein angegeben hast? Im Code von dir hast du als 2. Parameter für SendByte ne 0. Da muss eigentlich die Adresse für den I2C Baustein rein.

    Die musst du dem Datenblatt entnehmen.

    mfg

    Andun
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    die Adresse wird so nicht korrekt berechnet:
    TWDR = adresse & (0x40);
    da sollte ein ODER dazwischen.

    Dann würde ich TWI erst initialisieren, damit die Slaves Zeit haben eine Startsequenz als solche zu erkennen. Denn wenn man beim aktivieren gleich ein Start sendet, könnte es sein das es kein Slave mitbekommt.

    Nach dem warten bis TWINT wieder gesetzt ist, könnte man das Statusregister TWSR auslesen, um zu sehen was überhaupt passiert ist, ob der Slave sich gemeldet hat usw.

Berechtigungen

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