IIC-Slave mit ATTiny45

Gast #229947
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.
Angehängte Dateien:
Gast #229950
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
Gast #229952
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren