Mahlzeit!
Ich suche seit fast ner Woche im Net, hab auch einiges gefunden.
Leider funzt nichts wirklich der Interrupt wird nie ausgelöst :-(
Ich wollte mir eigentlich nen 10ms Impuls ausprogrammieren, aber ich
bekomms einfach nicht hin.
Hab den Code jetzt etwas vereinfacht und wollte nur ne Led ansteuern.
Ich ersuche einen von euch Wissenden kurz mal drüber zu schauen und mir
zu sagen wo der Fehler liegt.
Danke!!
> Tccr0 = &H0D 'This will replace
Config Timer1 = Timer , Prescale = 4096
Laut Datenblatt gibt es beim Tiny13 kein Tccr0 Register. Wohl gibt es
aber ein TCCR0A und ein TCCR0B Register.
Ich weiss jetzt nicht, auf welches Register zugegriffen wird, wenn du in
BASCOM einfach nur TCCR0 schreibst. Aber es wird wohl
* enteder überhaupt nichts mit TCCR0A oder TCCR0B zu tun haben
* oder aber das falsche sein
ABer selbst wenn es das richtige ist, solltest du überprüfen, was du mit
der Zuweisung von 0x0D anrichtest
Danke für die schnelle Antwort!
Hab den Code jetzt auf die Zeilen geändert die man beim Googeln immer
findet, ist aber noch das selbe, der Interrupt wird niemals ausgelöst
Christoph Baumgartner schrieb:
> Danke für die schnelle Antwort!>> Hab den Code jetzt auf die Zeilen geändert die man beim Googeln immer> findet, ist aber noch das selbe, der Interrupt wird niemals ausgelöst
Woher weißt du das?
PS: Deine LED wird ungefähr alle 4 Sekunden getoggelt.
Edit. Korrektur.
Deine Led wird viel schneller getoggelt, da du Imp nie wieder auf 0
zurücksetzt.
Schalte doch einfach mal dein Led im Timer_int wahlweise ein oder aus,
dann weißt du ob der Interrupt ausgelöst wird. Je komplizierter du
deinen Nachweis für den Aufruf gestaltest (das ganze HäckMäck mit Imp
und Counter), desto größer wird die Gefahr, dass du dir genau in diesem
HäckMäck zusätzliche Fehler einhandelst.
geht nicht, denn der R/C Oszillator läuft mit 9.6MHz und der Teiler ist
8 im Lieferzustand = 1200000.
Wobei das hier wurscht sein sollte, denn es wird kein Wait und auch kein
UART verwandt, wofür der Compiler die Frequenz genau wissen muss. Ist
also von mir nur der Vollständigkeit halber erwähnt.
Die Variablen als IRam zu definieren ist recht sinnfrei, solange Du die
PUSH/POP Orgie in der Interrupt Routine hast, die 26 Register auf den
Stack schiebt und wieder runterholt. Wenn's schnell gehen soll, dann
NOSAVE verwenden und Register selbst sichern.
Unter einer aktuellen Bascom Version läuft Dein Code, auch im AVR Studio
getestet.
Solltest Du eine gaaaanz alte Bascom Version besitzen, so musst Du auch
noch:
1
Start Timer0
schreiben, damit der startet.
Das hier:
1
Tccr0 = &H0D
hätte versucht den Timer0 in einen Modus zu versetzen, den es nicht
gibt. Genausowenig gibt es einen Prescaler von 4096 dafür.
TCCR0 kann ersatzweise für TCCR0B verwendet werden.
Wenn Du den Timer über Register konfigurieren willst, dann würde der
Timer0 mit Prescaler 64 starten mit:
Also,
entweder liegt es an der Demo oder ich bin zu doof. In der Simulation
geht nix und auf dem Tiny auch nix.
mir fällt nix mehr ein...
danke trotzdem....
Wie alt ist die Demo ? Version ?
Pack doch mal die erzeugten Files, sollten 8 Stück inklusive der .bas
sein, in ein Zip und stell sie hier rein. Heut' kann ich sie evtl. noch
anschauen, morgen bin ich verreist.
Guten Morgen!
Bin gestern leider nicht mehr online gekommen weil sich mein Laptop
geschrottet hat. Poste das File aber trotzdem, vll findets ja jemand
anders raus
Danke!
MFG
Ich kann mich nur wiederholen
[quote]
Schalte doch einfach mal dein Led im Timer_int wahlweise ein oder aus,
dann weißt du ob der Interrupt ausgelöst wird. Je komplizierter du
deinen Nachweis für den Aufruf gestaltest (das ganze HäckMäck mit Imp
und Counter), desto größer wird die Gefahr, dass du dir genau in diesem
HäckMäck zusätzliche Fehler einhandelst.
[/quote]
Du hast dir schon wieder einen Fehler in der Hauptschleife eingehandelt!
Wenn du eine Funktionalität testen willst, dann mach den Code so einfach
wie möglich. Je weniger Spielraum du dir für Fehler lässt, umso besser.
Je umfangreicher der Code, desto mehr Möglichkeiten für Fehler.
So einfach ist das.
-> Du willst wissen, ob die Timer_int aufgerufen wird.
Dann mach dir den verdammten Nachweis dafür auch in die Timer_int
hinein. Und zwar direkt und nicht über 25 Ecken.
PS: Ich weiß nicht, ob die Timer_int überhaupt aufgerufen wird. Ich hab
weder einen Tiny13 noch BASCOM hier. Aber das erste was ich täte ist: in
der Timer_int irgendetwas ein/ausschalten um zu sehen, ob die überhaupt
aufgerufen wird.
Hallo,
das Programm ist ja übersichtlich ;-) Auf jeden Fall mal die LED aus der
IRQ-Routine ansteuern, das erhellt ungemein ...
Der ATTiny13 hat einen umfangreicheren Timer als die anderen, kleinen
Atmel Prozessoren. Es gibt zusätzliche Steuerbits um den Modus fest zu
legen. Ich habe mich schon einige Zeit mit dem Teil herum geschlagen,
weil der Timer nicht das gemacht hat was ich wollte. Hier ein Auszug aus
einem meiner Programme. Damit läuft der Timer im Interrrupt.
Ach, noch was ...
Wie sieht die verwendete "ATTiny13.dat" aus? Ich habe mal eine verwendet
die in Wirklichkeit für den ATTiny12 geschrieben war und im Bereich der
Timer nicht 100%ig richtig war ...
Prüfe mal die Register Definitionen für die Timer Register gegen die
Angaben im Datasheet.
Karl heinz Buchegger schrieb:
> PS: Ich weiß nicht, ob die Timer_int überhaupt aufgerufen wird. Ich hab> weder einen Tiny13 noch BASCOM hier. Aber das erste was ich täte ist: in> der Timer_int irgendetwas ein/ausschalten um zu sehen, ob die überhaupt> aufgerufen wird.
Ich hab mir jetzt BASCOM geholt und installiert.
Die Timer_int wird laut Simulation aufgerufen.
Allerdings dauerte es rund 230 ms bis Count den Wert 6 erreicht hat.
Hochgerechnet auf 255 (wenn die Led toggelt) würde es daher rund 9
Sekunden dauern, bis sich der Zustand der LED ändert.
Wolfgang Heinemann schrieb:
> Ach, noch was ...> Wie sieht die verwendete "ATTiny13.dat" aus? Ich habe mal eine verwendet> die in Wirklichkeit für den ATTiny12 geschrieben war und im Bereich der> Timer nicht 100%ig richtig war ...> Prüfe mal die Register Definitionen für die Timer Register gegen die> Angaben im Datasheet.
Ich glaube du hast recht. Ich hab das nur das regfile auf m8def.dat
geändert und in der Simu funzt es. Ist aber seltsam, hab mir die demo
erst vor 2 Wochen geladen. Kann mal jemand sein File für den Tiny13
posten bitte?
MFG
Christoph