Forum: Mikrocontroller und Digitale Elektronik PWM messen mit dem TC1766


von Markus (Gast)


Lesenswert?

Hallo alle zusammen,

im Rahmen einer Forschungsarbeit nutze ich den TC1766. Zur Konfiguration 
nutze ich DAvE. Die beiliegenden Dokumentationen, z.B. um ein PWM Signal 
zu erzeugen, helfen ungemein weiter, wenn man vorher noch nichts mit dem 
TC1766 gemacht hat.

Nun möchte ich mit dem TC1766 ein PWM Signal messen. Dabei scheitert es 
bei mir schon, welche Komponente der unzähligen Komponenten des TC1766 
dafür benötigt werden. (vielleicht FPC+DCM?)

Kann mir jemand beispielhaft erklären, wie ich mit DAvE den 
Mikrocontroller dafür konfigurieren muss?

Über eine Antwort würde ich mich sehr freuen.

Mfg
Markus

von Jürgen F. (funksoulbrother)


Lesenswert?

Hallo Markus,

was genau möchtest du denn messen? Den Duty-Cycle und die Frequenz nehme 
ich an, oder? Oder auch die Amplitude? Wahrscheinlich eher nicht.

Ich kenne mich mit deinem Controller nicht absolut aus aber was hältst 
du davon, einen GPIO-Pin als Input zu konfigurieren und ihn einen 
Interrupt werfen zu lassen wenn sich etwas ändert (high->low bzw. 
low->high).
Dann könntest du bei jedem Interrupt abhängig von fallender oder 
steigender Flanke die Zeit bestimmen (Timer auslesen) und damit dann die 
Frequenz und den Duty-Cycle bestimmen.

Ist das ungefähr was du machen willst?

mfg

Jürgen

von Markus (Gast)


Lesenswert?

Hallo Jürgen,

das hört sich gut an. Das werde ich mal ausprobieren!

Danke und Gruß
Markus

von Anja (Gast)


Lesenswert?

Markus schrieb:
> Nun möchte ich mit dem TC1766 ein PWM Signal messen. Dabei scheitert es
> bei mir schon, welche Komponente der unzähligen Komponenten des TC1766
> dafür benötigt werden. (vielleicht FPC+DCM?

FPC + DCM brauchst Du nur für Spezialzwecke. (z.B. Mittelwertbildung 
über mehrere Perioden oder ausfiltern von Glitches).

Im Normalfall reichen 2-3 GTC-Zellen (24 Bit) oder 3 FPC-Zellen 
(16-Bit).

Die 1. GTC-Zelle läßt man als free-running counter laufen.
An einer der Taktleitungen vom clock-bus mit den ganzen prescalern.
(die 1. GTC-Zelle braucht man im Normalfall nur eine für alle 
GTC-Funktionen).

mit der 2. Zelle wird an einer Eingangsignal der Wert der 1. GTC 
gecaptured und das ganze im Interrupt ausgewertet. (Differenz zum 
letzten Ereignis)

Falls steigende und fallende Flanke dicht aufeinander folgen können 
sollte man 2 benachbarte GTC-Zellen konfigurieren die sich einen 
Interupt teilen (eine captured die steigende die andere die fallende 
Flanke).
Das ganze ist natürlich ziemlich Interrupt-Lastig.

FPC läuft ähnlich, jedoch braucht man immer 3 aufeinanderfolgende Zellen
(ein counter und 2 capture-Zellen für beide Flanken). Wenn man die 
Counterzelle bei einer der beiden Flanken löscht braucht man keine 
Interupts sondern kann bei Bedarf high und low-Zeit auslesen.

Die Prescaler sollte man so konfigurieren daß sich eine möglichst hohe 
Auflösung bzw. kein Überlauf des Timers ergibt.

Gruß Anja

von Markus (Gast)


Lesenswert?

Danke auch dir Anja für die Antwort. Ich verfolge gerade Jürgens weg und 
schaue gerade seit 2h in das megalange Datenblatt und bin mittlerweile 
etwas durcheinander vom ganzen stöbern:)

Es scheitert schon bei folgendem: Interrupt werfen, wenn eine Änderung 
an einem GPIO erkannt wird. Muss ich das über ERU machen oder mache ich 
es mir gerade kompliziert?

Gruß Markus

von Anja (Gast)


Lesenswert?

Markus schrieb:
> Es scheitert schon bei folgendem: Interrupt werfen, wenn eine Änderung
> an einem GPIO erkannt wird. Muss ich das über ERU machen oder mache ich
> es mir gerade kompliziert?

Soweit ich weiß geht das beim TC1766 nur mit GPTA-Pins (Es sei denn du 
willst den NMI misbrauchen). Und bei den GPTA-Pins kann man dann sowieso 
eine GTC oder LTC-Zelle triggern.

Gruß Anja

von Markus (Gast)


Lesenswert?

Ich versuche jetzt erstmal nur einen Interrupt mit DAvE zu konfigurieren 
(bin auch erst seit kurzem beim TC).

Hier meine Schritte:
GPTA_CLOCK:
1. GPTA_CLOCK einschalten und "Select normal divider mode" auswählen
2. GPTA0 timer einschalten und bereits bei der Initialisierung laufen 
lassen

GPTA0:
3. IN0 (P0.0) einschalten
4. dann in "Global Timer"->"GTC0" GTC0 einschalten, und "Connect the 
input line to GTC0" auswählen
5. im selben Fenster unter GTC0 Mode Control fallende und steigende 
Flanken auswählen
6. dann "Data Input" "Use GPTA0_IN0(=P0.0) auswählen
7. dann "SRN"->"Service Request Node 6-9 (GTC0-7) auswählen und im neuen 
Fenster die "service request node" aktivieren
8. unter "Interrupts" "GPTA0 SRN6" einem InterruptLevel zuordnen

Ist das so der Weg, wie man das machen sollte? Kann das leider noch 
nicht testen, da die HW gerade nicht zur Verfügung steht.

Gruß und großes Danke!
Markus

von Anja (Gast)


Lesenswert?

Hallo,

mein Problem ist daß ich den DAVE nicht verwende sondern fertige 
Bibliotheken. Ich kenne daher nur die Grundprinzipien, allerdings nicht 
alle Einzelheiten.
Trotzdem einige Hinweise:

Port 0 ist bei mir für die Prozessorkonfiguration reserviert.
Damit ist bei mir GPTA-Zugriff erst ab Port 1.0 möglich.
GTC0 und GTC1 sind bei mir ebenfalls reserviert (feste Taktraten bzw. 
free running timer als Basis-Timer mit z.B. 1 us/50 ns Auflösung vom 
Clock Bus her). Diese beiden Zellen sind "wertvoll" da die Werte dieser 
beiden Zellen im "capture mode" von jeder beliebigen anderen GTC-Zelle 
mittels Flanke "gecaptured" werden können.
Siehe (MOD-Field im GTC-Register Kapitel 22 im Users Manual)

Ich würde dann GTC2 (auf beide Flanken konfiguriert) oder GTC2 + GTC3 
(die eine auf fallende die andere auf steigende Flanke konfiguriert) 
verwenden um z.B. den GTC0-Wert exakt an der Flanke zu latchen. Der 
Interrupt SRN ist dann für 2 benachbarte GTC Zellen gemeinsam.

Markus schrieb:
> 6. dann "Data Input" "Use GPTA0_IN0(=P0.0) auswählen
Ich nehme an daß dann Dave auch automatisch den "ALT"-Mode für die 
Port-Konfiguration einstellt, ansonsten müßtest Du das Routing auf die 
richtige Timer-Ebene manuell in der Portkonfiguration machen.

Ich hoffe Du schaust nicht nur ins Datenblatt sondern auch ins Users 
Manual.

http://www.infineon.com/dgdl/TC1766_um_v2.0_2007_07.pdf?folderId=db3a304412b407950112b408e8c90004&fileId=db3a304412b407950112b40f469b137d

Gruß Anja

von Markus (Gast)


Lesenswert?

Hallo Anja,

es ist schon ein bisschen her, aber ich bin in einem anderen Projekt 
unterwegs gewesen. Jetzt versuche ich es wieder mit der PWM.

Eigentlich verstehe ich, wie es ablaufen soll. Ich lasse eine Zelle als 
Timer laufen (als Input eine der Clockleitungen). Eine weitere 
konfiguriere ich im Capture-Mode (als Input P0.0), die auf Flanken 
getriggert ist. Bei Auftreten einer Flanke wirft die zweite einen 
Interrupt, in der ich dann die Zeit bestimmen kann.

Als Zellen kann ich doch auch normal LTCs, nehmen? (Bekomme die GTC0 
Zelle nicht als Timer zum laufen mit DAvE, nur Capture und Compare)

Hast du vielleicht ein Beispielcode dafür, den du mir senden könntest?
Was sind das für fertige Bibliotheken die du nutzt?

Viele Grüße und Danke,
Markus

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
Noch kein Account? Hier anmelden.