Abendgruss aus Magdeburg, wollte mit dem Timer0 beim ATTiny461 einen Takt erzeugen. Interner Oszillator ist 8MHz und Takt ist auch korrekt. Eine LED blinkt im Sekundentakt! Nun toggle ich einen Port beim Interrupt (Überlauf des Timers) und messe nur 62,2 Hz! Das wäre aber bei einem 16Bit-Timer der Fall. Lt. Datenblatt ist der Timer0 aber ein 8Bit-Timer! Stehe ich auf dem Schlauch? Programmiere mit BASCOM Vers. 2.0.7.7! Danke
> Lt. Datenblatt ist der Timer0 aber ein 8Bit-Timer!
? - Unter 'Features' lese ich im Datenblatt:
• 8-bit Mode with Two Independent Output Compare Units
• 16-bit Mode with One Independent Output Compare Unit
Man müsste folglich das Programm sehen.
Beitrag #7320655 wurde vom Autor gelöscht.
Sorry! $regfile = "ATtiny461.dat" $crystal = 8000000 'DivideClock by 1 Ddrb = &B00000011 On Timer0 Ontimer0 'Interrupt-Routine für Timer0 - Überlauf Config Timer0 = Timer , Prescale = 1 Enable Timer0 Enable Interrupts LED Alias Portb.0 Do Toggle LED 'LED blinkt im Sekundentakt Waitms 500 Loop End Ontimer0: Portb.1 = Not Portb.1 Return
Schlecht, da hatte ich jetzt gehofft, dass mehr zu sehen ist, speziell das Setzen von TCCR0A.TCW0 - das ist nämlich für die Mode-Umschaltung zuständig. Initial value ist aber 0, d.h. 8-bit-Mode, folglich scheint BASCOM das automatisch zu setzen.
Habe mal Timer1 genommen. Gleiche Werte. Ist ja auch ein 16Bit-Timer. ;-(
Nicht dass ich wüsste - mein Kenntnisstand ist 10-bit für Timer1.
Also das steht schon auf der ersten Seite des Datenblatts:
1 | • Peripheral Features |
2 | – One 8/16-bit Timer/Counter with Prescaler |
3 | – One 8/10-bit High Speed Timer/Counter with Prescaler |
1. Zeile Timer0, 2. Zeile Timer1. Woher kommen Ihre Angaben?
Hallo, das notwendige TOP Register für den Takt ist beim Timer 0 nur im 8 Bit CTC Mode einstellbar. Ansonsten ist das TOP Register jeweils fix auf Maximum festgelegt. Die Frequenz ist dann nur noch grob mittels Prescaler einstellbar. 1Hz sind damit nicht möglich. Der 10 Bit Timer 1 mit seinen vielen und größeren Prescalern ist für 1Hz und weit darunter verwendbar. Eine andere Möglichkeit mittels ISR wäre den Timer 0 im 8 Bit CTC Mode auf eine höhere Frequenz einzustellen, passendes Vielfaches, und dann einen Zähler inkrementieren lassen der bei Vergleich auf Zielfrequenz irgendwas auslöst. In deinem Fall einen Pin umschalten. Nachteil höhere Interrupt Last. Vorteil es ist variabel und möglich. :-) Du müßtest den passenden Prescaler und passenden Wert für das TOP Register einstellen.
Morning! Habe mal nicht die BASCOM-Befehle genommen sondern direkt die Register. Und auch mal direkt die hex-Datei mit dem ATmel-Studio 4.19 auf einem anderen PC übertragen. Jetzt funktioniert es problemlos und die LED fühlt sich erwartungsgemäß nicht mehr so gut mit über 15T Interrupts pro s. Denke das Problem liegt an der Übertragung meines alten Prog.-Adapter unter Win7. Danke noch mal für die Hinweise!
??? Sind die Standardwerte für Bascom wenn nicht angegeben. Habe damit noch nie Probleme bekommen und sogar mit einigen Unterprogrammen und Funktionen. Daran liegt es sicher nicht!
Juergen schrieb: > ??? > Sind die Standardwerte für Bascom wenn nicht angegeben. > Habe damit noch nie Probleme bekommen und sogar mit einigen > Unterprogrammen und Funktionen. > Daran liegt es sicher nicht! Am Programmieradapter auch nicht. Der ändert doch keinen Code…
Juergen schrieb: > ??? > Sind die Standardwerte für Bascom wenn nicht angegeben. > Habe damit noch nie Probleme bekommen und sogar mit einigen > Unterprogrammen und Funktionen. > Daran liegt es sicher nicht! Wenn HWSTACK = 0 kriegt der Interrupt Probleme. Es schadet nicht, trotzdem einen Blick auf die Standartwerte zu werfen. Die sind nicht in Stein gemeißelt und veränderbar.
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.