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
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
Hallo Jürgen, das hört sich gut an. Das werde ich mal ausprobieren! Danke und Gruß Markus
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.