mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IIC-Slave mit ATTiny45


Autor: Michael Fluhr (fury) (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab versucht mit dem ATTiny45 einen IIC-Slave zu realisieren.
Ich hab es erst in C versucht, aber WINAVR unterstützt den ATTiny45
nicht, und bin jetzt doch wieder bei Assembler gelandet :-)

Ich schalte P3 dauernt ein und aus etwa 2Hz, funktioniert auch. Sobald
ich aber den Interrupt für die USI-Start-Condition freischalte und eine
Startbedingung ausführe (einfach Pin B0 auf low ziehen), schaltet der
Ausgang P3 nur noch mit der halben Frequenz um. Der Pin B4 wird nie auf
Low gesetzt, darum gehe ich davon aus, das die Interruptroutine
USI_Start nie angesprungen wird.


Mein Code ist im Anhang.
Ich benutze den internen Oszillator, sonst hätte ich die Pins auch gar
nicht frei.

Autor: Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo. habe sowas mal mit bascom gemacht
dort habe ich nen interrupt auslösen lassen, und dann die übertragung
eingelesen. wenns dich interessiert kann ich den code mal posten

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja bitte.

Autor: Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
On Int0 i2c_startchk 'hier wird auf startkondition geprüft
Config Int0 = Falling
'Bei fallender flanke an INT0 (Pind.2) Interrupt
Enable Interrupts

(variablen deklaration)

i2c_cl Alias Pind.1
i2c_da Alias Pind.0

i2c_startchk:                         'Wenn DA=1-->0
If i2c_cl = 1 Then                    'und CL=1 dann startbedingung
Disable Int0                         'Erstmal den interrupt
abschalten
Gosub Rxi2c                       'dann können wir einlesen
End If                             'sonst
Enable Int0      'Wenn startbed. nicht erfüllt dann nochmal warten
Return

Rxi2c:
'###################################################
'Adresse
i2c_adr = 0       'Wir fangen a bei null (das wird eingelesen)
i2c_i = 8 'ein zähler - 8 bytes werden eingelesen
Do
Decr i2c_i

Do
Loop Until i2c_cl = 0     '# Wir warten auf die nächte HIGH Flanke
Do
Loop Until i2c_cl =1 'so jetzt is high

i2c_adr.i2c_i = i2c_da 'adressbyte an der stelle i2c_i (am anfang=7) =
zustand der datenleitung

Loop Until Sub_i = 0

gosub jmpack 'ack überspringen

jmpack:
Do
Loop Until Sub_cl = 0
Do
Loop Until Sub_cl = 1
Return

Autor: Bob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weisst natürlich wieviele bytes du überträgst (selbe prozedur zb für
die anzahl der bytes) - dann kannst du ne schleife bauen und die bytes
in ein array schreiben

Autor: fury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bob,

Danke, aber wenn ich das richtig sehe, hast du das ohne die Hardware
für IIC (USI)programmiert.
Ich wollte die Hardware benutzen, da ich mit IIC-Slave in Software bei
1MHz auf eine Übertragungsrate von nur 12kbit/s kam.

Warte dann noch auf Beispiele mit USI.

Autor: Flo_K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wollte nur sagen das der ATtiny45 jetzt vom GNUGCC unterstützt wird.
Schon ausprobiert, klappt einwandfrei.

Autor: Bjoern H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau Dir mal Atmel AppNote AVR312 an - "Using the USI module as an I2C
slave": http://www.atmel.com/dyn/resources/prod_documents/....
Das Beispiel ist fuer ATtiny26 und 2312 geschrieben, laesst sich aber
relativ leicht auf ATtiny45 uebertragen.

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.