Hallo, ich hatte mir vorgestellt, dass ich 8 Timer Compareregister mit dem DMA möglichst schnell befülle. (ca. im 1/3 MHz Intervall). Anschließend habe ich gehofft, dass diese neu eingespielten Register sofort verglichen werden. Das Problem beginnt schon beim einspielen. Anscheinend kann man nur in den Vorbuffer einspielen, dann muss man warten bis der Timer auf Bottom gelaufen ist, dass es geupdatet wird und nun muss noch wartet werden bis die Zählerwerte mit den Comparewerten überein stimmen. Ist dieser Timer überhaupt als reiner Vergleicher zu gebrauchen? Der Timer soll bei mir nicht selbstständig durchzählen, nur sofort vergleichen... dann gibt es ein Clock-Signal das die entstanden Bits in Schieberegister schiebt... Kennt jemand ein Prozessor mit DMA und dieser Compare-Funktion? Problem ist die CPU würde dafür zu lange brauchen -> Byte aus RAM laden, mit Wert vergleichen und 0 oder 1 auf Portbit ausgeben. Danke Zedd
Die Xmega sind zwar nicht sehr populär hier, aber meiner Meinung nach das schärfste was es an neuen 8bit MCUs gibt. Jahre zu spät aber schöne Teile. Was Du eigentlich machen willst erzählst Du nicht. Du verwendest Ausdrücke wie vorgestellt, erwartet, gehofft ... Steht alles im Datenblatt, da braucht man nicht hoffen oder erwarten. Steht drin oder nicht und den 'Vorbuffer' kann man abstellen und unmittelbar beschreiben. Zedd schrieb: > Ist dieser Timer überhaupt als reiner Vergleicher zu gebrauchen? Der > Timer soll bei mir nicht selbstständig durchzählen, nur sofort > vergleichen... dann gibt es ein Clock-Signal das die entstanden Bits in > Schieberegister schiebt... Timer als Vergleicher ? Der Timer vergleicht seinen aktuellen Counter Wert mit dem Compare Register. Wenn der Timer nicht läuft was soll der denn dann vergleichen ? Der Vergleich ist flankengetriggert und wenn es keine Flanke gibt dann ... ?! Willst Du den Timer ernsthaft dazu verwenden um einfache 16bit vergleiche durchzuführen ? Was zum Geier sind die 'entstandenen Bits ' Bei 32Mhz Takt sollte es nicht so das Thema sein 333.000 mal die sec. 8 x 16bit Werte mit einer Variable zu vergleichen und Schiebeoperationen auszuführen.
Hallo Michael... Hab das Datenblatt gelesen... keine Sorge... sonst würde ich hier nicht Fragen... Wie gesagt, Schieberegister an den Ausgängen... 6 parallele Zweige (parallel ist für µC ja immer nen bissel bescheiden) Konstantstrom für LED Matrix.. Also muss die PWM von "Hand" hinein geschoben werden... Das Datenblatt versteh ich so, wenn der CNT Wert nicht dem CCA Wert entspricht, passiert gar keine Aktion am Port Ausgang. Also bringt es mir auch herzlich wenig, wenn ich CNT (z.B. um eins) hochzählen lasse... wie du meinst (deine Flanke)... Wie oben beschrieben, möchte ich 8 Timer compare Register befüllen!!! Der Timer0 ist schon auf 8 Bit gesplittet (=Timer2)... aber das macht keinen Unterschied zum Problem. Außer das deine Annahme, dass es die CPU in 1/3 MHz schafft, nicht war sein kann. Trotzdem danke für deine Hilfe Zedd P.S. Ich find die XMega auch schick... aber ich habe ihn wohl funktional ein wenig überschätzt! Die Frage ist, ob es überhaupt µC gibt, die so eine Timerfunktionalität mitbringen.
Ich sehe gerade, hier liegt ein Missverständnis vor... Intervall = Zeiteinheit Und ich hätte vielleicht doch Klammern setzen sollen: 1/(3 MHz) VG Zedd
Ich habe immer noch nicht die leiseste Vorstellung wie Du vom Ansteuern einer LED Matrix mit PWM auf dieses komische Timer Konstrukt kommst und auf 1/3 (ein drittel) Mhz bzw. 1/3Mhz (333ns) und was genau Du eigentlich von der Timer Hardware verlangst. Du verstehst mich und anscheinend auch die Timer Hardware völlig falsch. Ich habe Dir nicht geraten den Counter zu erhöhen, sondern ich habe Dir geraten zu verstehen wie der Timer arbeitet und was der kann und was nicht. Du scheinst vorrauszusetzen das ich genau weiß was Du da machst obwohl Du es auf eine Art tust wie es wohl niemand macht. Ich kann nur vermuten das Dein Problem ursächlich daher kommt das Du eine große Anzahl an PWM Quellen brauchst und das irgendwie in die Hardware reintricksen willst. Wenn dem so ist verwende PDM (Pulse Dichte Modulation) die läßt sich wunderbar in Software machen und kann eine große Anzahl 'PWM' Signale zur Verfügung stellen. Andere verwenden Schieberegister mit /OE und senden Ihre PWM Bitmuster per DMA an den SPI. 10bit / 100Hz reicht selbst für sehr gute RGBW Leuchten aus um weder flackern noch Farbsprünge zu sehen. Das sind 1024 Vergleiche pro Ausgang alle 10ms und ich das habe ich mit 16 Kanal PDM schon auf winzigen 8051er gemacht. Von mir aus nehme ein FPGA und einen 170Mhz ARM wenn selbst ein 32Mhz Xmega noch zu schwach ist. Jeder wie er meint.
wenn du viele Kanäle brauchst, warum nutzt du dann nicht DMA und schaufelst entsprechende Werte aus einem vordefinierten Array mit Hilfe des Event Systems auf entsprechende Ports? Wenn du z.b. 32Bits brauchst dann schreibst in einem Array Deine Werte entsprechend rein. Dann konfigurierst die DMA so, dass diese dann immer jeweils 4Byte direkt auf ports ausgibt, oder halt mehr, soviele ports es gibt. Die Xmega DMA kann nämlich vom SRAM zum PORT Daten schieben. dann erscheinen entsprechende Pegel an entsprechenden Pins. Ist es das was Du machen willst?
Ja schon... Aber mal den RAM Bedarf bei 32x16Leds mit 3 Farben und 256 PWM Schritten durchgerechnet? Ganz abgesehen von der nötigen Übertragungszeit von außerhalb...
@Basti M. so ist es... und es könnten noch mehr LEDs sein... @Michael Knoelke ich habe nicht vorausgesetzt, dass du das Problem verstehen sollst (daher auch nicht näher beschrieben)... das ist nen kleiner Unterschied. Mein Frage vom Ausgangspost steht immer noch: Gibt es einen µC bei dem ich den Comparewert per DMA einspielen kann und der Vergleich mit dem Zählregister unmittelbar nach dem Einspielen des neuen Comparewertes erfolgt und mir dann sofort das entsprechende Bit auf den Port schreibt (0 oder 1)? Das Datenblatt des XMegas sagt: nein, geht nicht. Daher suche ich einen alternativen Controller. (kein FPGA) Evtl. habe ich was im Datenblatt übersehen. Falls ich mich geirrt haben soll und der XMega so etwas kann, dann korrigiert mich... VG Zedd
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.