Hallo,
mir soll der TCB0 Timer eines AVR128DB28 ein niederfrequentes Signal am
zugehörigen Pin A2 (als Output konfiguriert) liefern. Problem: Da kommt
nix, der Pin bleibt auf Low. Das Ganze soll im Periodic Interrupt Mode
(siehe Screenshot der zugehörigen Datenblatt Passage) geschehen.
Was läuft hier schief? Der zugehörige Timer-Asm-Initcode schaut so aus:
;WO freischalten
ldi XL,$10
sts TCB0_CTRLB,XL
;Top Value mit 4000 laden
ldi XL,$a0
ldi XH,$f
sts TCB0_CCMPL,XL
sts TCB0_CCMPH,XH
;Timer bei 8/2= 4Mhz aktivieren:
ldi XL,3
out TCB0_CTRLA,XL
Auf alternative Ports ist auch kein Pin umgebogen.
c-hater schrieb:> DB Abschnitt 24.3.3.2. lesen und anwenden.
Der führt hier auch nicht weiter.
> Insbesondere auch den 7. Satz> in diesem Abschnitt berücksichtigen.Stefan schrieb:> am> zugehörigen Pin A2 (als Output konfiguriert)
Abschnitt 24.3.2 (siehe Bild) erklärt die Schritte zur Initalisierung
des hier beabsichtigten Periodic Interrupt Mode. Dazu kann wie
beschrieben optional die Waveform am zugehörigen TCB0 Output-Pin WO =
PA2 verfügbar gemacht werden!
Bislang also alles leider keine Erklärung :-(
Stefan schrieb:> Stefan schrieb:>> am>> zugehörigen Pin A2 (als Output konfiguriert)
Das ist dem geposteten Code nicht zu entnehmen. Wer weiß, was sonst noch
alles NICHT im geposteten Code steht.
Poste also einen VOLLSTÄNDIGEN Code, der das Problem zeigt, dann sehen
wir weiter.
Sehr wahrscheinlich ist aber, dass du schon bei der Erstellung dieses
Codes selber auf das Problem stößt...
c-hater schrieb:> Poste also einen VOLLSTÄNDIGEN Code, der das Problem zeigt,
So ist es bereits geschehen, c-hater!
Speziell für Dich als vertrauensbildende Maßnahme noch die Konfiguration
des PA2 als Output:
sbi VPORTA_DIR,2
c-hater schrieb:> Sehr wahrscheinlich ist aber, dass du schon bei der Erstellung dieses> Codes selber auf das Problem stößt
Sehr wahrscheinlich ist daß Du momentan auch keinen Plan hast.
> ein niederfrequentes Signal
Wie sollte dieses denn aussehen? Tastgrad 0.5? Welche Frequenz? Also ich
interpretiere das Datenblatt so, dass im 'Periodic Interrupt Mode'
schlicht kein Ausgangssignal erzeugt wird.
S. Landolt schrieb:> Also ich interpretiere das Datenblatt so, dass im 'Periodic Interrupt> Mode' schlicht kein Ausgangssignal erzeugt wird.
Interpretieren?
Wie kommst Du drauf?
Stefan schrieb:> Abschnitt 24.3.2 (siehe Bild) erklärt die Schritte zur Initalisierung> des hier beabsichtigten Periodic Interrupt Mode. Dazu kann wie> beschrieben optional die Waveform am zugehörigen TCB0 Output-Pin WO => PA2 verfügbar gemacht werden!
S. Landolt schrieb:> Wie sollte dieses denn aussehen? Tastgrad 0.5?
Jepp.
> Welche Frequenz?
Halbe Überlauffrequenz. Entspricht im Prinzip dem CTC-Mode der
klassischen AVR8-Timer.
> Also ich> interpretiere das Datenblatt so, dass im 'Periodic Interrupt Mode'> schlicht kein Ausgangssignal erzeugt wird.
Das interpretierst du wohl falsch. Wenn das so wäre, würde die vierte
Zeile in Table24-2 keinen Sinn ergeben.
Stefan schrieb:> Sehr wahrscheinlich ist daß Du momentan auch keinen Plan hast.
Richtig. Weil du wohl deine Fehler nicht offenlegst.
Liefere einfach ein vollständiges, assemblierbares Beispiel, welches das
Problem zeigt, dann kann man ohne viel Aufwand sehen, was rauskommt und
wo das Problem liegt.
So funktioniert Fehlersuche.
c-hater schrieb:> Weil du wohl deine Fehler nicht offenlegst.
So ein Quatsch.
Welche sollten das sein?
> dann kann man ohne viel Aufwand sehen, was rauskommt und wo das Problem> liegt.
Das könntest Du auch jetzt schon.
Oder eben nicht.
S. Landolt schrieb:> 24.3.2 erklärt allgemein die Initialisierung; das 'it' in '... to> start using it' bezieht sich auf 'TCB', nicht auf 'Periodic Interrupt> Mode'.
Ich werde das so hinnehmen müssen.
Im Periodic Interrupt wird nichts ausgegeben.
Also unter uns, Stefan: zwischenzeitlich habe ich einiges probiert, auch
mit dem ähnlichen ATmega4809 - es kommt bei mir hier im TCB-'Periodic
Interrupt Mode' kein Ausgangssignal.
S. Landolt schrieb:> Also unter uns, Stefan: zwischenzeitlich habe ich einiges> probiert, auch> mit dem ähnlichen ATmega4809 - es kommt bei mir hier im TCB-'Periodic> Interrupt Mode' kein Ausgangssignal.
Ich bedanke mich.
Da werde ich umdisponieren müssen.
Vom TCB0 bin ich einigermaßen enttäuscht,
es wäre doch ein Leichtes gewesen, das Signal
bei der ohnehin dafür vorgesehenen Freischaltung
via CCMPEN in CTRLB auch im Default-Modus dieses
Timers auszugeben!
S. Landolt schrieb:> allein schon die Beschränkung beim Vorteiler ist> mir unverständlich.
Wo wir gerade bei Enttäuschungen sind, den hätte ich auch schon fast
erwähnt... Schon sehr speziell dieser Timer, dafür in vielfacher
Ausführung.
Vom kostbaren TCA gibts unter 48 Pins beim AVR128DB im Gegenzug nur
einen ;-(
Hallo,
bin von hier Beitrag "Re: Frage zu CCL-Einheit in neueren AVR-Controllern"
hierher geleitet wurden.
Ich denke das Manual wird hier falsch interpretiert. Der Name Periodic
Interrupt sagt schon was der Mode macht, Interrupts erzeugen.
Im Periodic Interrupt Mode kann man einen Aufgaben nur in ISR erledigen
lassen.
Wenn man einen Takt mit TCB erzeugen möchte, warum dann nicht mit 8Bit
PWM Modus?
Der Periodic Interrupt löst ja nur einen Puls/Flag aus, wenn der zum WO
rausgeleitet würde hätte man nichts gewonnen.
Abgesehen vom PWM Mode möchte ich erwähnen das der TCB ein Mess-Timer
ist. Die gesamte Funktionalität ist darauf ausgerichtet.
> 24.3.2 Initialization> By default, the TCB is in Periodic Interrupt mode. ...
Der 1. Satz sagt nur aus, dass der Timer in Defaultkonfig auf Periodic
Interrupt Mode eingestellt ist, weil Registerwert 0. An der Stelle wird
der Timer noch allgemein beschrieben. Die einzelnen Modi werden später
erklärt. Desweiteren wissen wir ja das das Manual fehlerhaft bzw.
unvollständig ist. Keine Ahnung wann ein Update rauskommt. Dabei ist
auch die Tabelle 24-2 leider Irreführend. Das Port Funktion
Überschreiben funktioniert ja auch nicht immer. Lieber selbst auf
Ausgang setzen oder vorher probieren. Das man 32Bit Input Capture im
Gegensatz zur Beschreibung mit allen Mess-Modi nutzen kann hatte ich ja
schon einmal vor langer Zeit erwähnt. Und ja die fehlenden Prescaler für
TCB stören mich auch, aber man findet Umwege. :-)
Mal ein anderes Bsp.
Mit einem Umweg über die RTC und Eventsystem und ohne TCA kann man dann
den TCB Takt verlangsamen.
1
#include<avr/interrupt.h>
2
#include<util/atomic.h>
3
#include"AVRxDB_Pin.h"
4
#include"AVRxDB_TCBn.h"
5
6
OutputPin<pinPD0>pinTakt;
7
TCB<0>tcb0;
8
9
voidsetup()
10
{
11
pinTakt.init();
12
initEventSystem();
13
initTCBn(tcb0);
14
initRTC();
15
}
16
17
voidloop(void)
18
{}
19
20
voidinitRTC(void)
21
{
22
RTC.CLKSEL=RTC_CLKSEL_INT32K_gc;// period duration 30,518µs
> Mal ein anderes Bsp.> Mit einem Umweg über die RTC und Eventsystem ...
Wenn dies auch für den hier diskutierten 'Periodic Interrupt Mode' oder
den von Ihnen angesprochenen '8-Bit PWM mode' funktionierte, wär's nett
- ist dem so?
Hallo,
ja dem ist so. Das Bsp. setzt den Timer in den Periodic Interrupt Mode.
Ich habe mir nur eine Lib erstellt und mich mit den Bezeichnungen an das
Manual/Defines angelehnt und möglichst sprechende Namen verwendet.
Falls du mehr Einzelheiten benötigst zwecks Übersetzung C/C++ <>
Assembler sag Bescheid.
gekürzter Auszug was was entspricht.
1
setModeINT()............CTRLB-TCB_CNTMODE_INT_gc
2
enableCAPTInterrupt()...INTCTRL-TCB_CAPT_bm
3
setCLKEVENT()...........CTRLA-TCB_CLKSEL_EVENT_gc
4
setCompare(9)...........CCMP-value
5
enable()................CTRLA-TCB_ENABLE_bm
Der Umweg sollte mit allen Modi funktionieren. Es wird nur der
Takteingang von TCBn von einer anderen Quelle gespeist. In dem Fall vom
RTC OVF Puls.
Man könnte auch einen I/O Pin verwenden, den übers Eventsystem dem TCBn
Takteingang zuführen und mittels Taster von Hand takten o.a.. Noch nicht
probiert aber muss gehen. Oder per Software-Event den TCBn takten
lassen. Probiert - funktioniert. Ist das gleiche Prinzip wie vom RTC OVF
Puls.
Darauf kam ich u.a. weil ich mit dem Arduino Nano Every rumgespielt habe
und mir fehlten außen paar Pins für die CCL. Das Board ist zu klein und
es sind nicht alle Pins vom ATmega4809 rausgeführt. Also habe ich mir
übers Eventsystem die Zugänge zwischen Pins und den CCL Ein- und
Ausgängen gelegt. Dann kam eins zum anderen.
Danke für die Rückmeldung.
Ich tat mich mit dem von Ihnen gezeigten Programm etwas schwer (und
tue es noch), hatte folglich heute morgen das Ganze mal selbst probiert
(in Assembler).
Oh ja, ich hatte das mit dem 'CLKSEL=EVENT' schon mal gemacht, vor
geraumer Zeit, allerdings mit TCB und TCD als Generator, und war jetzt
durch den RTC etwas irritiert - aber natürlich funktioniert das mit
diesem genauso.
Und um auf den Auslöser zurückzukommen: auch die Ansteuerung von PA2
im 'Periodic Interrupt Mode' per CCL funktioniert, seit anfang Januar,
aber Stefan hatte wohl seine eigene Lösung gefunden.