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
"µ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
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 ?!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.