Atmega32 / I2C / TWI

Gast #2009480
Hallo, ich schreibe zur Zeit meine Diplomarbeit. So zu meinem Problem 
ich habe leider überhaupt keine Ahnung was den I2C Bus betrifft.

Ich habe mir ein kleines Testboard mit dem Atmega32 gebaut, jetzt dacht 
ich mir ich gehe langsam vor und lasse den µc erstmal nur als Master 
Bytes senden, aber hierbei hapert es leider schon. Ich habe noch gar 
keinen Slave angeschlossen, wollte mir das Ergebnis erstmal am 
Oszilloskop ansehen.

Ich suche eine gut verständlich Anleitung, hab mich schon seit heute 
moorgen durchs Netzt gewühlt und irgendwie nix passendes gefunden.
Hallo,

http://de.wikipedia.org/wiki/I%C2%B2C

naja, selbst Wikipedia liefert da schon sinnvolles und wenn es nur die 
Links zu den Spezifikationen sind...

Beispielcodes für den AVR sollte es bei Atmel oder hier im Forum geben.
Weit kommst Du ohne Slave ohnehin nicht, Startcondition senden, Adresse 
senden und dann ist Schluß, weil ja kein ACK vom Slave kommt.

Gruß aus Berlin
Michael
Gast
Hi, hab mir das den ganzen morgen schon durchgelesen und ich denke auch 
verstanden.

Kannst du mir vielleicht helfen das schonmal in ein c-Programm zu fügen?

-Startcondition senden
-Adresse senden
Peulebo schrieb:
> Hi, hab mir das den ganzen morgen schon durchgelesen und ich denke auch
> verstanden.
>
> Kannst du mir vielleicht helfen das schonmal in ein c-Programm zu fügen?
>
> -Startcondition senden
> -Adresse senden

Peter Fleury hat eine fertige I2C Library.
Dort kann man sich das alles mal in Natura ansehen.
Gast
Hi

>Kannst du mir vielleicht helfen das schonmal in ein c-Programm zu fügen?

Lies dir das entsprechende Kapitel vom Datenblatt durch. Da ist auch ein 
kommentiertes Codebeispiel drin.

MfG Spess
Persönliche Seite
Peulebo schrieb:

> Ich habe mir ein kleines Testboard mit dem Atmega32 gebaut, jetzt dacht
> ich mir ich gehe langsam vor und lasse den µc erstmal nur als Master
> Bytes senden, aber hierbei hapert es leider schon. Ich habe noch gar
> keinen Slave angeschlossen, wollte mir das Ergebnis erstmal am
> Oszilloskop ansehen.

Das kann schon problematisch sein, weil der Master nach dem ersten 
Senden ein ACK des angesprochenen Slave erwartet. Mit dem Oszilloskop 
könntest du max. bis zu diesem Punkt etwas sehen, d.h die Adresse und ob 
der Master ein READ oder WRITE macht.

Statt Oszilloskop sind auch spezialisierte Sniffer oder Monitore 
interessant. Die können mit Softwareunterstützung auch die Bedeutung der 
beobachteten Bits udn Bytes aufschlüsseln. Näheres im Artikel I2C
Gast
Stefan B. schrieb:
> Das kann schon problematisch sein, weil der Master nach dem ersten
> Senden ein ACK des angesprochenen Slave erwartet. Mit dem Oszilloskop
> könntest du max. bis zu diesem Punkt etwas sehen, d.h die Adresse und ob
> der Master ein READ oder WRITE macht

Genau das wollte ich machen. Hast du eine Idee?
Gast
int main (void)

{
    uint8_t   twst;
  unsigned char address=0x66;
  TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
  while(!(TWCR & (1<<TWINT)));
  twst = TW_STATUS & 0xF8;
  if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
  TWDR = address;
  TWCR = (1<<TWINT) | (1<<TWEN);
  twst = TW_STATUS & 0xF8;
  if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
  return 0;

}

Habe das so erstmal übernommen.
Gast
Hi, bin immer noch am probieren also das ist mein code soweit, sieht 
jemand Fehler?



#include <avr/io.h>

int main (void)
{

TWBR=0x20;

DDRC = (1<<DDC0)|(1<<DDC1);   //Pins als Ausgang
PORTC = (1<<DDC0)|(1<<DDC1);  //Pull ups aktivieren

  while(1)
  {
  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Startbedingung
  TWDR = 0x93;
  TWCR = (1<<TWINT)|(1<<TWEN);
  TWDR = 0x20;
  TWCR = (1<<TWINT)|(1<<TWEN);
  }
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.