www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei TWI / I²C mit dem USI des ATtiny26


Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da meine Frage nach einem Beispiel eher im Nirgendwo geendet hatte mache 
ich nun einen Hilfe-Thread auf.

Ich habe es nun soweit mal geschafft dass er vom Master die 
Startcondition erkennt und empfangen kann.

In der USI Overflow-ISR wird das USI Data Register auf dem Port A auf 
LEDs ausgegeben. Man kann dort die vom Master gesandte Slave-Adresse + 
R/W erkennen. Das ganze leider um eine Bitposition nach links 
verschoben. Also das R/W Bit befindet sich nun eben an der Stelle von 
Bit 1 anstatt der Stelle von Bit 0. Das siebte Bit der Slave-Adresse 
fehlt dann natürlich. Warum ist denn das so verschoben?

mfg Paul H.
.include "tn26def.inc"        ; Deklarationen für ATtiny26

.equ  twi_addr = 100        ; TWI Adresse


.cseg                ; Programm-Flash
    rjmp  init        ; Reset-Einsprung

.org  0x007            ; USI Start Interrupt
    rjmp  usi_start

.org  0x008            ; USI Overflow Interrupt
    rjmp  usi_ovf


.org  0x00C            ; Interrupteinsprünge übergehen

init:  ldi    R16, RAMEND      ; Stapel anlegen
    out    SP, R16

    ldi    R16, 0b11111111    ; PortA als Ausgang
    out    DDRA, R16

    ; USI Control Register
    ldi    R16, (1 << USISIE) | (1 << USIOIE) | (1 << USIWM1) | (1 << USIWM0) | (1 << USICS1) | (0 << USICS1)
    out    USICR, R16

    sei              ; Interrupts aktivieren



loop:  rjmp  loop        ; Endlosschleife



usi_start:
    in    R16, USISR      ; Start Condition Interrupt Flag zurücksetzen
    ori    R16, (1 << USISIF)
    out    USISR, R16

    reti            ; Kehre zurück

usi_ovf:
    in    R16, USIDR
    out    PORTA, R16

    reti            ; Kehre zurück

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durch die freundliche und umfangreiche Hilfestellung der aktiven 
Mitglieder hier im Forum ha..*hust* räusper

Durch langes Experimentieren bin ich nun zu einer Lösung gekommen. Das 
Adress+R/W-Byte steht nun richtig im Schieberegister drinnen. Man musste 
den Schieberegister auf die steigende Flanke einstellen. Nicht auf die 
negative wie das das Datenblatt verwirrend beschreibt. Ausserdem muss 
das USIOIF zurückgesetzt werden

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Hamacher wrote:
> Durch die freundliche und umfangreiche Hilfestellung der aktiven
> Mitglieder hier im Forum ha..*hust* *räusper*

Nicht immer kann jemand helfen, und es ist lange nicht sicher, dass in 3 
Stunden so viele Mitglieder das Forum lesen. Also Glückwunsch, dass Du 
es hinbekommen hast und danke für den Tip!

Hätte ich nicht gewusst, habe aber noch nicht mit dem TWI "gespielt".

Grüsse aus Dresden, Torsten

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du auch wieder Recht.. ich glaube ich schreib mal ein Tutorial 
wenn ich alles geknackt hab.. das isn ziemlicher Brocken weils nirgendwo 
vernünftig dokumentiert ist.

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das würde mich brennend interessieren, denn ich finde auch keinerlei 
Informationen oder halbwegs fertige Sourcen. So langsam komme ich zu dem 
Schluß das eine eigene vollständige Software Implementierung des TWI und 
auch SPIs auf diesen AVRs effizenter und kompakter ist.

Gruß hagen

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Vorteil bei der benutzung des USIs is eindeutig die Tatsache dass 
man den Prozessor damit nich belastet da das ganze ja interruptgesteuert 
ist. Wenn mans mal verstanden hat ist das USI nicht kompliziert aber am 
Anfang total verwirrend und ich werde sicher noch auf Probleme stoßen.. 
da freu ich mich jetzt schon drauf >.<

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.