I²C Master prog

Gast #3521300
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
Gast #3521324
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
Gast #3521472
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
Gast #3521509
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.