Forum: Mikrocontroller und Digitale Elektronik I²C Master prog


von Dani (Gast)


Lesenswert?

Hallo

ich versuche I²C kommunikation zwischen Master und Slave zu 
programmieren. Master habe ich programmiert und wollte euch fragen ob 
ihr mein code anschauen könnt und mich auf evtl. Fehler hinweisen 
könntet.

Danach habe ich vor den Slave zu programmieren.

  //
  TWBR = 0x3C;
  TWSR = ((1<<TWPS0)|(1<<TWPS1));


    while(1)
    {
      if(!(PINB & (1<<PB2)))
      {
        twi_start_condition();
        twi_adress();
        twi_read();
        twi_data();
        twi_read();
        twi_stop_condition();
      }

    }

  }

void twi_start_condition(void)
{
  TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
  while(!(TWCR & (1 << TWINT)));
}

void twi_adress()
{
  TWDR = 0xEE;
  TWCR = (1<<TWINT)|(1<<TWEN);
  while(!(TWCR & (1 << TWINT)));
}

void twi_data()
{
  TWDR = 0x2E;
  TWCR = (1<<TWINT)|(1<<TWEN);
  while(!(TWCR & (1 << TWINT)));
}

void twi_read()
{
  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWAR);
  while(!(TWCR & (1 << TWINT)));
}

void twi_stop_condition()
  {
    TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
  }


Danke

von Dani (Gast)


Lesenswert?

>
> void twi_read()
> {
>   TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA);
>   while(!(TWCR & (1 << TWINT)));
> }
>

>
> Danke

Die Stelle habe ich korrigiert

von spess53 (Gast)


Lesenswert?

Hi

>Master habe ich programmiert und wollte euch fragen ob
>ihr mein code anschauen könnt und mich auf evtl. Fehler hinweisen
>könntet.

Mach dich erst mal schlau, wie I2C wirklich tickt:

http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.nxp.com%2Fdocuments%2Fuser_manual%2FUM10204.pdf&ei=XD3zUvqqNcWqtAa9rICwDA&usg=AFQjCNG5emVs3tU5RbGVKjblTMFgLLHdqg&bvm=bv.60799247,d.Yms&cad=rja

dann würdest merken, das solche Konstrukte

>        twi_adress();
>        twi_read();
>        twi_data();

überhaupt nicht funktionieren.

Beim Senden der Adresse wird dem Slave in Bit0 mitgeteilt ob geschrieben 
oder gelesen werden soll. Und das gilt solange bis ein Stop oder 
Repeated Start gesendet wurde.

MfG Spess

von Dani (Gast)


Lesenswert?

Hi Spess,

Verstanden! Danke.

von spess53 (Gast)


Lesenswert?

Hi

>Verstanden! Danke.

An deiner Stelle würde ich als Slave erst mal etwas fertiges, z.B. 
PCF8574, nehmen und damit den Code für dem Master entwickeln. Wenn der 
läuft kannst du mit dem Slave anfangen.

MfG Spess

von Dani (Gast)


Lesenswert?

.
>
> An deiner Stelle würde ich als Slave erst mal etwas fertiges, z.B.
> PCF8574, nehmen und damit den Code für dem Master entwickeln. Wenn der
> läuft kannst du mit dem Slave anfangen.
>
> MfG Spess


Hi Spess,


Danke nochmals. Ich habe allerdings folgendes Problem. Das Projekt ist 
als ein Technikerarbeit gedacht und wir(3er Team) haben die Funktionen 
leider schon so festgelegt. Ich kann leider die Platine nicht mehr 
ändern. D.h für mich dass ich irgend wie den Slave auch Softwaremäßig 
lösen muss. (Ich musste diesen Part übernehmen, da ich eigentlich nicht 
gut programmieren kann.). Kannst du mir bitte paar hinweise geben, 
worauf ich beim Slave achten muss und wie ich die empfangene Datenpacket 
auslesen kann?

Danke

von spess53 (Gast)


Lesenswert?

Hi

Einen AVR als I2C-Slave habe ich bisher noch nicht gebraucht. Aber von 
Atmel gibt es AppNotes mit Software zu TWI:

Master:
http://www.atmel.com/Images/doc2564.pdf
http://www.atmel.com/Images/AVR315.zip

Slave:
http://www.atmel.com/Images/doc2565.pdf
http://www.atmel.com/Images/AVR311.zip

Noch ein anderer Link:

http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html

MfG Spess

von Klaus (Gast)


Lesenswert?

Dani schrieb:
> Ich kann leider die Platine nicht mehr
> ändern. D.h für mich dass ich irgend wie den Slave auch Softwaremäßig
> lösen muss.

Na, einen Draht für SCL und einen für SDA an die Platine löten kann doch 
nicht so schwer sein.

MfG Klaus

von Dani (Gast)


Lesenswert?

Danke. Ich werde mich da durchlesen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.