Hallo Glenn, hat Sauerbruch schon erläutert. Die Deklarationen der Variablen könnte so aussehen (und es könnten immer noch welche fehlen?):
Code:'### Alle Variablen können als Byte deklariert werden (spart Speicher im kleinen Tiny13)
.
.
Dim Anzahlmodi As Byte
Dim Modus As Byte
Dim Anzahlphasen as Byte
Dim Phase as Byte
Modus = 1
Anzahlmodi = 3
.
.
Mit dem Config Timer0 Kommando wird der Timer in den Clear Timer on Compare Match Mode gebracht. Erklärt im RN Wiki http://rn-wissen.de/wiki/index.php/T..._Match_mode.29 (und im Datenblatt zum Tiny13 ;) ). Compare0a=116 setzt das OCR0A Register, so daß der Timer0 nach 116 Schritten wieder bei 0 an zu zählen fängt. Der Presacaler 1024 sorgt dafür, das der Timer mit 1/1024stel des Systemtaktes läuft. Er läuft also mit 1200000Hz/1024 = 1171,875Hz, braucht also für einen Schritt 1/1171,875Hz = 0,000853s. Für 116 (OCR0A) Schritte plus 1 = 117 * 0,000853s = 0,099801s.Zitat:
Und könntest du mir diesen Bereich etwas genauer erklären?Code:Compare0a = 116 '99,84ms Interruptperiode bei 1,2MHz µC-Takt
Config Timer0 = Timer , Prescale = 1024 , Clear_timer = 1 'Timer0 im Clear Timer on Comparematch
On Compare0a Isr_blink 'ISR wird bei Compare Match A aufgerufen
Der Timer läuft also in knapp 100ms von 0 auf 116 (116Schritte) dann wieder auf 0 (117ter Schritt) und erzeugt jedesmal wenn er auf 116 ist einen ComparematchA Interrupt.
Mit On Compare0a Isr_blink werden also alle ca 100ms die LEDs geschaltet. Der Code ist nicht ganz vollständig. Es fehlt noch "Enable Compare0a" und "Enable Interrupts" direkt nach "On Compare0a .."
Dadurch, daß die ISR (Interrupt Service Routine) immer nur alle 100ms die LEDs schaltet, kann ein Druck auf die Taste erst nach maximal 125ms - aber nicht länger - sichtbar werden. (100ms wg. Interruptfrequenz und 25ms Verzögerung durch die Debounce Routine). Falls da was stört, könnte man sich noch was überlegen...:confused:
Gruß und hoffentlich klappts
Searcher