Momentan möchte ich eine Soft-PWM erzeugen. Mit 8bit funktioniert das wunderbar. Innerhalb des Timer overflow ISR habe ich eine schleife, um zu testen ob die einzelnen Bits eines Ports gesetzt werden oder nicht. Anschließend wird dann ja auch die Variable an den Port übergeben. Wenn ich allerdings das ganze auf 16 Kanäle erweitern möchte könnte ich ja 2 schleifen a 8bit verwenden. Allerdings erscheit das mir nicht sehr vorteilhaft. Gibt es möglichkeiten das ganze in einer 16bit variablen auszuwerten und dann dies irgendwie auf 2 oder mehr ports aufzusplitten? Ist sicher auch für die Prozessorauslastung besser. Andere Alternativen sind natürlich auch gerne willkommen :) Gruß Julien
Quelltext? Wenn ich dich richtig verstehe, hast eine Variable mit 16Bit-Breite und willst die auf 2 Ports verteilen. ->würde ich auf die Schnelle so machen int pwm-output; PORTA = pwm-output; //ersten 8 Bits PORTB = pwm-output >> 8) //oberen 8 Bit nach rechts verschoben Anonsten bitte nochmal das Problem näher beschreiben. Grüße
Ja genau so war des gedacht:) Danke funktioniert gut! Gruß Julien
Das ist ja interessant, Bei meinem Projekt benötige ich eine 32bit Soft-PWM auf 4 Ports. Kann ich das auch irgendwie lösen? Oder geht da der µC in die Knie? gruß
Sicher kannst Du das loesen. Alles eine Frage welche PWM Frequenz du brauchst und mit welcher Taktfrequenz der AVR läuft.
Benötige PWM-Frequenz: ca. 100Hz Verwende einen AVR mit 16MHz Ist es da vorteilhaft des über eine 32bit variable zu lösen und dann wie schon gesagt, die Bits immer weiter zu schieben? Oder gibts da noch ne bessere, evtl. auch schnellere Lösung?
100 Hz PWM ? Probiers einfach aus. Wenn du fuer ne SoftPWM den Takt soweit runter teilst, dass du eine 100 Hz PWM kriegst, hat dein AVR genug Zeit um in der Zwischenzeit ne Menge teuflisch schwierige quadratische Gleichungen zu loesen :-)
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.