mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hardware I2C beim ATMega


Autor: PatrickHH (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei mich mal mit dem Hardware I2C im ATMega8 zu
beschäftigen (die Software-I2C habe ich schon am laufen). Als einstieg
habe ich das Beispiel im Datenblatt herangezogen. Ich will einen LM75
auslesen. Jetzt bin ich schon einen Tag dran dies hinzubekommen. Doch
ich konnte noch nichts auslesen.
Laut dem TWSR Register ist alles richtig angekommen. Doch ich bekomme
aus dem TWDR Register keine Daten aus dem LM75. Es steht dort immer
noch die Addresse (145) drin. Ich weiß einfach nicht mehr weiter. Durch
Googeln habe ich auch nichts rausbekommen, da ich nur was für C gefunden
habe, oder alles per Software I2C gemacht wird. Ich bin aber nur am
Assembler programmieren (sollte vielleicht doch mal auf C umsteigen).
Im Anhang ist mein Quellcode. Was mache ich da falsch? Oder hat jemand
einen funktionierenden Code in Assmebler für mich.

Danke und Gruß

PatrickHH

Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

"(die Software-I2C habe ich schon am laufen)"

mit dem LM 75 ?

kann ich das programm mal sehen ?

ich bekomme bei meinem programm (arv 1200) nur immer das 1. byte
im 2. byte steht immer nur 0  (bit 7 - 0,5 Grad)

also habe ich nur ganze grad z.b. 21 grad ber nie 21,5
das nevt mich..............

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrick,

ich versuche mit dem Hardware I²C Interface eine PCF8583 RTC
anzusteuern.

Per Software I²C funktioniert es, aber über TWI bekomme ich kein ACK
nach dem senden der Baustein-Adresse.

Ich bin für jedes funktionierende TWI Beispiel dankbar !
(Slave und Programmiersprache sind egal)


Hier mein Code:

  TWBR=18;// 16MHz / 16 + 2(TWBR) * 4
  TWSR=0;

  TWCR=_BV(TWINT) | _BV(TWSTA) | _BV(TWEN);//Start-Konditionen
  while(!(TWCR & _BV(TWINT)));//warten auf Start - ende
  if((TWSR & 0xF8) != 0x08)goto I2C_Error;
  TWDR=0xA2;// Slave-Adresse
  TWCR=_BV(TWINT) | _BV(TWEN);// Adresse senden
  while(!(TWCR & _BV(TWINT)));//warten auf ende
  if((TWSR & 0xF8) != 0x18)goto I2C_Error;
  TWDR=0xC0;//Ram - Adresse
  while(!(TWCR & _BV(TWINT)));//warten auf ende
  if((TWSR & 0xF8) != 0x28)goto I2C_Error;
  TWDR=0x55;// Daten
  while(!(TWCR & _BV(TWINT)));//warten auf ende
  if((TWSR & 0xF8) != 0x28)goto I2C_Error;
  TWCR=_BV(TWINT) | _BV(TWEN) | _BV(TWSTO);// Stop


Gruß

Fiffi

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Thomas Burkhardt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hier der Quellcode von einem Test, der bei mir vor einiger Zeit
funktionierte...

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Beispiele !

@Hagen:

Mit welcher WinAVR Version hast du die i2c.S kompiliert ?

Ich habe es mit WinAVR 20040720 versucht, und bekomme folgende Fehler:

Assembling: i2c.S
avr-gcc -c -mmcu=atmega128 -I. -x assembler-with-cpp
-Wa,-adhlns=i2c.lst,-gstabs  i2c.S -o i2c.o
i2c.S: Assembler messages:
i2c.S:42: Error: number must be less than 64
i2c.S:44: Error: number must be less than 64
i2c.S:48: Error: number must be less than 64
i2c.S:54: Error: number must be less than 64
i2c.S:59: Error: number must be less than 64
i2c.S:63: Error: number must be less than 64
i2c.S:70: Error: number must be less than 64
i2c.S:72: Error: number must be less than 64
make.exe: *** [i2c.o] Error 1


Als makefile verwende ich das Beispiel makefile aus dem sample Ordner
von WinAVR. (nur auf "DEBUG = dwarf-2" umgestellt.)


Gruß

Fiffi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.