Forum: Mikrocontroller und Digitale Elektronik Software I2C mit Timer-Interrupt


von Mathias Müller (Gast)


Lesenswert?

Hallo zusammen,
hat jemand einen brauchbaren C-Beispielcode der einen I2C-Master
mittels Timer-Interrupt und nicht mit irgendwelchen delays realisiert?
µC-Typ ist egal, es geht mir nur ums Prinzip.

Gruß Mathias

von Peter Dannegger (Gast)


Lesenswert?

"µC-Typ ist egal"


Das ist es ganz und gar nicht !

Ein  ATTiny12 bei 1,2MHz braucht für einen leeren Interrupt schon mal
10  Zyklen, also 8,5µs und da ist noch nicht mal das SREG gesichert.

Du siehst also, mit einem simplen Delay von 1,3µs (400kBaud) bist Du um
Klassen schneller.

Und deshalb findest Du wohl auch keinen, der so verrückt ist, I2C mit
dem Timer zu machen.


Peter

von Mathias Müller (Gast)


Lesenswert?

Ok, ganz egal ist der µC-Typ wohl doch nicht aber ich verwende einen ARM
9 und der ist um den Faktor 150 schneller als der ATTiny.
Da würde sich der Timer-Interrupt vielleicht doch anbieten ?!

von Peter Dannegger (Gast)


Lesenswert?

D.h. also, der ARM9 arbeitet mit 180MHz ?

Trotzdem ist er aber nicht 150 mal schneller, da Bitschubsen bei den
32-er Boliden nicht gerade zu den Stärken zählt.

Und Interrupts sind bei den Boliden besonders zeitaufwendig. Beim
Philips ARM7 waren minimal 60 Zyklen drin (bei 20MHz, d.h. ohne
Waitstates im Flash !), sonst gingen Interrupts verloren. Dabei habe
ich im Interrupt nur eine Variable hochgezählt, mehr nicht !


Außerdem haben zumindest die Philips ARM7 ein HW-I2C. Trotzdem hat mein
Kollege das I2C erstmal in Software und mit Delays gemacht, weil das
viel einfacher ist.
Und da er nur ab und zu mal in einem EEPROM Parameter schreibt/liest
ist die CPU-Last weit unter 0,1%.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.