stufenlos gibt's nicht in der digitaltechnik. nicht weil ich gern klugscheiß, sondern weil das einen wesentlichen parameter deines setups ergibt, die zugrundeliegende zeitauflösung.
das wäre also der erste schritt: welche zeitauflösung? angenommen, "stufenloses" tastverhältnis und phasenlage heißt 256 schritte, macht das bei 1.5kHz 384kHz; das sind bei 16MHz taktfrequenz 41 zyklen pro zeiteinheit, nicht sehr viel.
du könntest jetzt hergehen und für deine 8 kanäle vorberechnen, wieviele zeiteinheiten das jeweilige signal ein und aus sein muß, und dann nur mehr raufzählen und wenn der entsprechende wert erreicht ist, umschalten. dazu hast du pro kanal aber nur 5 CPU-zyklen zeit. nachdem du wegen der auflösung mindestens mit 24bit rechnen mußt, ist das unmöglich, jedenfalls bei dieser auflösung.
elegant fände ich folgendes, was aber wegen des variablen taktverhältnisses nicht geht, nur für 1:1: du rechnest mit festkommazahlen (24 oder 32 bit), und für jeden kanal gibt's einen zähler und einen wert, der bei jedem schleifendurchlauf dazuaddiert wird. das MSB vom zähler ist dann dein ausgabewert für diesen kanal. das ließe sich nämlich völlig ohne branches in eine schleife packen, an deren ende dann die gesammelten ausgabewerte auf einen port ausgegeben werden. die schleife hat dann eine fixe anzahl CPU-zyklen, sprich, das timing ist stabil. leider fällt mir hier keine variante ein, wie man das tastverhältnis da einbringt, ohne branches und die damit verbundenen variablen laufzeiten.
zum controller: optimal wäre einer, bei dem alle 8 bits eines ports verwendbar sind, dann kannst du nämlich alle kanäle zum exakt gleichen zeitpunkt umschalten. das ginge zb mit dem atmega8, allerdings mußt du dann entweder auf die RS232 oder auf den externen quarz verzichten.
cm.
Lesezeichen