mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega168 & twi/i2c - immer im slave-transmitter-mode?


Autor: Martin S. (smartinick)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits!

schon wieder ein problem mit i2c...

atmega168 mit 20mhz, hardware-twi.
prescaler ist auf 1, bitrate-register auf 192 -> 50khz. (auch schon mit 
100khz probiert, bringt keine änderung)
interrupts sind disabled, also alles gepolled.

pullups sind auf beiden twi-leitungen aktiviert, pcf8583p / lm75a hängen 
gemeinsam bzw. einzeln drauf, macht eigentlich keinen unterschied, der 
status ist immer der gleiche:

nach der twi-initialisierung sende ich ein start, anschließend warten 
bis twint gesetzt ist und twsr auslesen. die prescalerbits ausmaskieren 
und den status am lcd ausgeben. der sollte jetzt lt. datenblatt 0x08 
sein -> start condition has been sent.

ist aber immer 0xb8 ->  lt. datenblatt ist das der status das ich im 
slave transmitter-modus ein byte gesendet und ack empfangen habe.

nur will ich nichts vom slave transmitter-mode, ich will master sein und 
habe ja erst eine start-condition gesendet...?

außer den twbr, twsr & twdr registern greife ich nichts an, müsste ich 
noch irgendwas extra initialisieren...?

Hier die relevanten asm-schnipsel:

i2c_init:
   push temp3
   lds temp3,twsr
   andi temp3,0b11111100
   sts twsr,temp3      ; prescaler = 1
   ldi temp3,192      ;192=50khz, 92=100khz
   sts twbr,temp3      ; bitrate=192 -> 50khz bei 20mhz
; enable wird bei start-condition bzw. send/read/stop erledigt
   pop temp3
   ret

i2c_start:
  push temp3
  ldi temp3,(1<<TWINT)|(1<<TWEN)|(1<<TWSTA)
  sts twcr,temp3
  ldi temp1,'!'
  rcall lcd_printchar
;warten bis twint-bit gesetzt & status abfragbar ist
i2c_start_loop:
  lds   temp3,TWCR
  sbrs   temp3,TWINT
        rjmp  i2c_start_loop
  ldi temp1, twsr ;statusregister laden
  andi temp1, 0b11111000 ; prescaler ausmaskieren
  rcall lcd_number_hex ; ausgabe -> 0x08 sollte erscheinen, 0xb8 kommt 
raus
  ldi temp1,'!'
  rcall lcd_printchar
  pop temp3
  ret

und im hauptprogramm rufe ich init & start nacheinander auf...

-> der rest wie lesen,... liefert leider nichts, meiner meinung nach 
hänge ich ja schon beim senden der Startkondition...

Die code-samples die ich hier gefunden habe machen es auch nicht 
wirklich anders -> bitrate setzen, enablen und start schicken...?

wenn ich mir die abläufe im atmega168 datenblatt ansehe müsste aber 
alles passen...?

bin mittlerweile für jede idee dankbar!, Martin.

Autor: Martin S. (smartinick)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, problem gelöst. eine pause hat dann wieder die bäume vor lauter wald 
sichtbar gemacht... ein, 2 kleine fehler und nix ging.
1x twsr statt twcr beschrieben und nach der start-kondition das 
start-bit nicht gelöscht wie es im datenblatt steht.

Danke & sorry für den unnötigen post!

dafür gibts - wenns fertig ist - ein asm-beispiel für die codesammlung 
wenn pcf8583 und dcf77 gemeinsam funktionieren, d.h. sich alle x stunden 
synchen.

lG, Martin.

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.