Hallo zusammen! Ich habe mit dem XMC2Go-Kit und der Dave-Umgebung von Infineon ein kleines Beispiel programmiert, um zu sehen, wie schnell die Pins umgeschaltet werden, wenn ich die App-Methoden Digital_IO_SetOuput…() verwende. Der code ist einfach: while(1U){ DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1); DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1); } Die Peripherie-Clock ist auf 32MHz, gleich wie die CPU-Clock. Nun sehe ich, dass ein Durchlauf der obigen Schleife erstens nicht konstant ist und zweitens bis zu 7.5 us braucht. Ihr seht es auf dem Bild. Ich hätte ein wesentlich schnelleres Umschalten erwartet. Und ich kann mir auch den Jitter nicht erklären (jedenfalls nicht in der Grössenordnung von 1us). Was sagen die Spezialisten dazu?
Da wird noch ein Systick vermutlich mit einem "Hundertjaehrigem Kalender" aka Systemuhr im Hintergrund laufen. Jeder kleine Winz-PICklig kann das besser (ohne Jitter). Aber halt ohne "Hundertjaehrigem Kalender". P.S.: Fuer Bilder haelt auch dein Oszi eine USB-Buxe bereit, in der ein gesteckter USB-Stick begierig auf Bilder wartet wuerde.
Hallo Larry, Merci für den Hinweis. Nein, ein RTC läuft nicht. Jedenfalls verwende ich die RTC-App nicht.
Mark S. schrieb: > Ich habe mit dem XMC2Go-Kit und der Dave-Umgebung von Infineon ein > kleines Beispiel programmiert Ich hatte auch mal selbiges Kit und auch so ein ähnliches Kit von der Embedded (ein XMC 1100 BOOT Kit). Den Seggerschen JLink-OB davon konnte man ja ganz gut verwenden, aber das Problem bei diesen Chips ist die innere Architektur. Bei diesen Dingern ist ab Adresse 0 reiner ROM und der ist m.W. (bzw. war damals) überhaupt nicht offengelegt. Und auslesen läßt der sich auch nur zu einem kleinen Teil, nicht jedoch vollständig. Dazu kommt, daß die kleineren Typen das Umverlegen der Interrupt-Tafel nicht können. Also gibt es da ein Verlegen der Interrupt-Adressen in den RAM über irgendwas im besagten ROM, was ebenfalls nur recht spartanisch dokumentiert war. Schlußendlich ist es wohl so, daß man es bei diesen Chips schwer hat, ohne DAVE und Konsorten auszukommen - und all diese Hilfsmittel führen ein Eigenleben, über das du hier gestolpert bist. Ich vermute mal, daß du lediglich annimmst, daß dein µC tatsächlich mit 32 MHz läuft. Alternativ läuft da irgendwas im Hintergrund (im ROM), von dem du nichts weißt, oder deine zwei Funktionen führen ein Eigenleben, das dir evtl. auch bloß nicht offengelegt ist. Probiere doch mal aus, wie das Ganze aussieht, wenn du großzügig auf das Verwenden dieser ominösen Funktionen verzichtest und deine Pins direkt setzt. Nun, ein Cortex M erwartet ab Adresse 0 eigentlich einen Flashrom, der den Code enthält, den man selber verzapft hat, aber bei Infineon sieht man das völlig anders. Aus diesem Grunde habe ich diese Produkte von Infineon auf meine private schwarze Liste gesetzt und bin eigentlich geneigt, auch anderen davon abzuraten. Bei den Dingern ist zuviel Geheimniskrämerei seitens des Herstellers dabei. W.S.
W.S. schrieb: > Ich hatte auch mal selbiges Kit und auch so ein ähnliches Kit von der > Embedded (ein XMC 1100 BOOT Kit). Hallo W.S, besten Dank. Ich vermute, dass du (leider) recht hast und irgend etwas im Hintergrunt mit läuft. Ich komme einfach nicht dahinter, was es sein könnte. Das Assembler-File ist allerdings (selbst für mein triviales Progrämmchen) ziemlich umfangreich: 4400 Zeilen im Texteditor. Das kann ich nciht alles durchackern. Folgendes habe ich auch nocht versucht (jeweils eine Version in den Kommentarklammern): while(1U){ /* DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1); DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1); */ /* PORT0->OMR = PORT0_OMR_PS6_Msk; PORT0->OMR = PORT0_OMR_PR6_Msk; */ /* PORT0->OMR = PORT0_OMR_PS6_Msk | PORT0_OMR_PR6_Msk; */ } Es ergibt sich jedesmal das genau gleiche Bild: Langsame Umschaltfrequenz und erheblicher Jitter. Ich werde weiter suchen müssen! Gruss Mark
Moin, ich hatte mal versucht ein Grafikdisplay ILI9341 320x240 mit dem xmc1100 anzusteuern (ich glaube ich hatte damals Soft-SPI verwendet). Da konnte man zusehen wie die Pixel gezeichnet werden. Hab irgendwann aufgegeben. Es gibt einen schönen Testbericht über verschiedene uC und deren Umschaltzyklen. Wenn ich den finde stell ich ihn hier rein.
Mark S. schrieb: > Ich werde weiter suchen müssen! Und wonach? nach der tatsächlichen Urache? Nach meinem Gefühl dürfte es für dich besser sein und weniger graue Haare bewirken, den ganzen Infineon-Kram in die Tonne zu werfen und einen ganz anderen Chip dir auszuwählen. Ich kann aber auch verstehen, daß man sowas wie diese kleinen niedlichen Boards nicht freiwillig wegschmeißen möchte. Ich hatte es damals so gemacht wie im Bild: lediglich den JLink-OB in ein Stückchen Rest-Plexi gesetzt und alles andere in die Tonne. Hatte damals - soweit ich mich erinnere - ganz passabel und universell funktioniert. Wenn ich mich recht erinnere, war dort sogar die JFlash-Lizenz eingebaut - ist aber nun schon viele Jahre her. Ob sowas ähnliches auch bei deinem winzigen Board funktionieren würde, weiß ich natürlich nicht. W.S.
Mark S. schrieb: > while(1U){ > DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1); > DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1); > } Einfach mal Interrupts deaktivieren:
1 | __disable_irq(); |
2 | while(1U){ |
3 | DIGITAL_IO_SetOutputHigh(&DIGITAL_IO_1); |
4 | DIGITAL_IO_SetOutputLow(&DIGITAL_IO_1); |
5 | }
|
Schnelles PWM macht man besser mit Timer o.ä. Peripherial in Hardware.
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.