What I did: Simple oscilloscope measurement of ATtiny speed.
I triggered the interrupt input of the ATtiny84 on pin9 externally and let the ISR switch digital output pin 7 HIGH. The Void loop pulls that output low then. And the loop adds two pulses as fast as it can.
I documented the time results in the oscillogram.
About 100µs from trigger to output HIGH.
I could not hide a tiny disappointment.
Is it plausible? Could I expect more?
Das weiß ich noch nicht, wie das geht.
Erst mal habe ich ein Einfachst-Programm geschrieben, das nichts weiter macht als im Loop einen Ausgang 1-0-1-0-1-0 zu schalten. Keine Interrupt, kein gar nix. Und wieder 62µs für einen positiven Puls 1-0. Das ist doch eine Zeit, in der UNO einen ganzen ADC-Zyklus abarbeitet.
Was hat es mit den Fuses auf sich? Wo kann ich mich da schlau machen?
Ah. Verstehe so langsam. Ich hatte falsch verstanden. Dachte "Bootloader brennen" muß ich vermeiden. Jetzt habe ich das vor dem Upload geklickt und siehe da: 8x schneller. Hammä! Wahnsinn! 7,8µs für einen pos Puls. Ziemlich genau ein Achtel von den 62µs vorher.
Habe noch einen Vergleich mit einem 328er @16MHz durchgeführt: 4µs. Das ist stimmig.
Ich habe zu viel erwartet. In digitalWrite() ist offenbar mehr Overhead als der kleine Sparkassenkunde so vermutet.
Combie, Sie haben mir weitergeholfen. Vielen Dank.
Auch die Interrupt-Reaktionszeit des ATtiny84@8MHz ist jetzt 8x kürzer: 11,8µs (vom Triggersignal am Interrupteingang bis Flanke am Output) . Damit läßt sich was anfangen. Danke.
Noch schneller geht es mit Assembler, hat mir eine vertrauenswürdige Person erzählt.
Dazwischen ( Assembler -- Arduino digitalWrite ) liegt noch normales C/C++ für den avr-gcc Compiler.
Was man in diesem Fall praktisch genauso schnell wie Assembler machen kann.
CombiePin ist komplett in C++ geschrieben, richtig?
Die combiePin Lib habe ich um einen ATtiny841 ergänzt. Dem zu Grunde liegt die Pinnummierung von SpenceKonde.
Normalerweise benötigt man zur Codegenerierung den Ziel Controller, für die hinterlegte Tabelle. Ich lehne mich einmal aus dem Fenster. Bei Bedarf könnte man das Forumsübergreifend erstellen, falls es widererwartend zu Fuss zu fehlerträchtig ist.
Die combiePin Lib habe ich um einen ATtiny841 ergänzt.
Genau, der wars...
Den habe ich jetzt auch mal eingeflochten.
Ebenso den MD-328D.
Und auch einen Fallback, so dass die Pin Sammlung mit allen nicht direkt unterstützten Plattformen arbeiten kann.
Dann zwar ohne jede besondere Optimierung.
Die müssen für jede Plattform einzeln hinzuerfunden werden.
die Inkluderei ist doch okay so. Das ATtiny841.h Headerfile ist noch das Gleiche wie damals von mir, da sehe ich keine Probleme. Ich werde es bei nächster Gelegenheit testen.
habe kreuz und quer getestet und keine Fehler feststellen können. Da die eigentlichen Methoden und Registeradresstabelle auch nicht verändert wurden, kann ich das mit ruhigen Gewissen "absegnen".