Hallo zusammen, ich hoffe ihr könnt mir wieder weiterhelfen. Ich habe in einem Projekt mit einem Mikrocontroller, ein pulsweitenmoduliertes Signal mit Hilfe der Timer realisiert. Bei der Planung dazu bin ich auf eine Alternative gestoßen, bei der Speicherregister mit dem DMA an den GPIOs ausgegeben werden, ich konnte mich, aus Zeitmangel, allerdings nicht länger damit beschäftigen. Das würde ich ganz gerne jetzt nachholen und auch mal versuchen, aber mir fehlt noch ein wenig an Hintergrundwissen, welche Peripheriekomponenten werden benötigt und wie ist der Ablauf. Hat da vielleicht jemand noch etwas mehr Ahnung oder eine Seite mit einer guten Erklärung? Vielen dank im vorraus Gruß Andy
Andy schrieb: > Hallo zusammen, ich hoffe ihr könnt mir wieder weiterhelfen. Höchstens sehr begrenzt. > Ich habe in einem Projekt mit einem Mikrocontroller, ein > pulsweitenmoduliertes Signal mit Hilfe der Timer realisiert. Bei der > Planung dazu bin ich auf eine Alternative gestoßen, bei der > Speicherregister mit dem DMA an den GPIOs ausgegeben werden Ja, kann man machen. Ist aber eine ähnliche Notlösung wie etwa, eine SPI-Schnittstelle zur Ausgabe von Bilddaten aus einem Framebuffer an einen VGA-Monitor zu verwenden. Geht sicher, aber richtig benutzte, spezialisierte Hardware ist immer besser als solche Nötlösungen. > Das würde ich ganz gerne jetzt nachholen und auch mal versuchen, aber > mir fehlt noch ein wenig an Hintergrundwissen, welche > Peripheriekomponenten werden benötigt und wie ist der Ablauf. Ersteres hängt von der verwendeten Hardwareplattform ab, die du uns in deiner unendlichen Weisheit natürlich wohlweislich verschwiegen hast (ich tippe: RasPi) und letzteres ist überaus trivial: Man berechnet das Muster in einem Stück RAM vor und läßt es dann die DMA zyklisch ausgeben. Schon fertig. Naja, fast... Interessant wird es nämlich erst, wenn sich der Duty-Faktor der PWM im Betrieb auch mal ändern soll. Dann wird's nämlich kompliziert bei der Notlösung. Dann ist mindestens ein Double-Buffer-Schema für die DMA angesagt und auch das löst nicht alle Probleme, denn der Buffer will auch noch im genau richtigen Moment umgeschaltet werden, was nicht immer so einfach ist, wie es sich anhört... Aber auch das hängt von der verwendeten Hardwareplattform ab, die du uns in deiner unendlichen Weisheit natürlich wohlweislich verschwiegen hast... Mit PWM-fähigen Timern lebt es sich viel leichter...
DMA kann sehr schnell sein. Also legt man das ein/ausschaltmuster (von mehr als 1 Kanal, ein byte erlaubt 8) im Speicher ab, vorbereitet, und lässt dann die DMA das ans Port schicken (z.B. 129 bytes nacheinander und dann 127 pause). Vor allem wenn man LEDs binär dimmt, also 1, 2, 4, 8, 16,... 128 Zeiteinheiten an/aus kann die DMA zu sehr kurzen Zeiteinheiten führen, und während der 128 Zeiteinheiten kannn man neu berechnen. Haben wir damals für Video auf LED-Wänden gemacht.
Andy schrieb: > Hat da vielleicht jemand noch etwas mehr Ahnung oder eine Seite mit > einer guten Erklärung? Wenn die Erklärung gut ist, wirst Du es anschließend nicht mehr machen wollen ;-)
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.