Hallo Zusammen, ich möchte gerne mit einen LED-Controller bauen, der lediglich das PWM-Signal eines anderen Controllers aufnimmt und angepasst wieder ausgibt. Zur Erfassung eines PWM-Signal gibt es ja von Atmel ein Beispiel (AVR135), leider wird dafür aber der Input-Capture-PIN verwendet, von dem es zumindest beim ATmega8 und 16 jeweils nur einen gibt. Nun habe ich überlegt das einfach über einen durchlaufenden Timer zu regeln und den Zustand der drei Eingangssignale in Software zu speichern. Ob die Ausgangsseitigen 3 PWM-Kanäle dann als Hardware oder Software-PWM laufen müsste ich dann sehen. Leider habe ich schön länger nix mehr mit Mikrocontrollern gemacht, daher bin ich gerade nicht so richtig fit darin nach zu rechnen ob das überhaupt gehen kann. Wenn ich richtig rechne, dann müsste ich den µC mit ca. 60MHz laufen lassen um schnell genug zu sein, was dann das aus für diese Idee wäre: PWM-Frequenz des führenden Controllers: mal 80Hz, mal 830Hz, je nach Betriebsmodus (gemessen mittels DSO) Angenommene Auflösung der PWM: 8 bit 830Hz * 256 Zustände = 212480 Messungen pro Sekunde nötig 8 Bit Timer ohne Prescaler, überlauf bei 256: 54.394.880 Takte pro Sekunde erforderlich. Liege ich richtig? Was hätte ich für alternativen? Hintergrund ist folgender: Ich habe eine LED-Beleuchtung mit insgesamt 7 Metern LED-Strips. Leider sind ca 2 Meter mit anderen LEDs bestückt als die anderen 5 Meter, so das die Farbe nicht immer passt. Hier würde ich gerne mit einer Anpassungsschaltung Abhilfe schaffen. vielen Dank im Voraus und schonmal frohe Weihnachten Biertrinker
Spricht etwas dagegen, die PWMs mit einem RC-Tiefpass zu filtern, das Resultat A/D zu wandeln und daraus neue, passende PWM-Muster zu erzeugen? Die vorgeschlagenen Antiquitäten ATmega8 und ATmega16 haben dafür jedenfalls genügend Ressourcen.
Du hast einen Faktor 256 zu viel drin. Du willst die An-Zeit eines PWM Signals mit 800Hz bestimmen mit 8bit Auflösung. Es werden 256*800Hz = 205kHz Abtastfrequenz.
Zwingt dich denn jemand, wirklich jeden einzelnen PWM Puls zu messen, du könntest da ja auch nur alle 10tel Sekunde oder so die Teile durchgehen. Und tu dir einen Gefallen, nimm einen MC mit Pinchange Interrupt. Als Zeitbasis kannst du einen Timer durchlaufen lassen und per Pinchange Zeitstempel erfassen.
Hallo, Marcus schrieb: > Spricht etwas dagegen, die PWMs mit einem RC-Tiefpass zu filtern, das > Resultat A/D zu wandeln und daraus neue, passende PWM-Muster zu > erzeugen? eigentlich nichts, ausser das das PWM-Signal mit 80Hz kommt und mal mit 830Hz. Wie der zu berechnen wäre ist mir auch nicht so recht klar, aber das ließe sich schon rausfinden ;-) Würde natürlich den Zeitfaktor aus der Sache nehmen, wenn der Tiefpass nicht zu viel glättet. Sonst hinkt der zweite Abschnitt bei schnelleren Farbwechseln hinterher. Allerdings würde ich es auch gerne ohne AD-Wandlung lösen wenn es denn geht. > Du hast einen Faktor 256 zu viel drin. Du willst die An-Zeit eines PWM > Signals mit 800Hz bestimmen mit 8bit Auflösung. Es werden 256*800Hz = > 205kHz Abtastfrequenz. Der Faktor kam durch die Annahme da rein, dass ich den Overflow-Interrupt eines 8-Bit Timers nutze. Ok, ich könnte auch einen Compare Match Timer nutzen, dann brauche ich keine 256 als Faktor, aber ein Timer der bei jedem CPU-Takt auslöst hilft mir ja auch nicht ;-) Mit einem Compare Match bei 50 und dann neu zählen komme ich auf: 830*256*50 = 10.624.000 das wäre ja immerhin machbar. Anders gerechnet, wenn ich einen 16MHz Quarz nehe müsste ich alle 75 CPU Takte eine Messung durchführen. Ist das realistisch zu schaffen? > Und tu dir einen Gefallen, nimm einen MC mit Pinchange Interrupt. Als > Zeitbasis kannst du einen Timer durchlaufen lassen und per Pinchange > Zeitstempel erfassen. Das wäre ja die Lösung, wie sie auch Atmel in der AVR135 vorschlägt, geht aber mit meiner Bastelkistenhardware nicht, da immer nur ein Pinchange Interrupt verfügbar ist. vielen Dank und viele Grüße Biertrinker
Aike Terjung schrieb: > leider wird dafür aber der Input-Capture-PIN > verwendet, von dem es zumindest beim ATmega8 und 16 jeweils nur einen > gibt. Du kannst doch den Input-Capture auf 8 verschiedene Pins umschalten und dann einfach nacheinander messen.
:
Bearbeitet durch User
Peter Dannegger schrieb: > Du kannst doch den Input-Capture auf 8 verschiedene Pins umschalten und > dann einfach nacheinander messen. Kann ich? Dann habe ich das Gestern im Datenblatt übersehen! Ich schau es mir genauer an, wäre ja die perfekte Lösung! vielen Dank und frohe Weihnachten!
Aike Terjung schrieb: > Ich schau > es mir genauer an, wäre ja die perfekte Lösung! Du mußt den Input-Capture über den analog Komparator auslösen; dieser kann per ADC-Multiplexer die zugehörigen Eingänge anwählen. Aike Terjung schrieb: > Allerdings würde ich es auch gerne ohne AD-Wandlung lösen wenn es denn > geht. Der ADC steht dann wegen der Verwendung des Multiplexers auch nur noch begrenzt zur Verfügung.
Was ist das für ein Controller, der die Streifen ansteuert? Wenn es ein simpler IR RGB Dimmer ist, währe es vielleicht einfacher, wenn du ihn durch einen AVR mit IRMP/6 PWM Ausgängen ersetzt...
Such dir einen µC mit mindestens 3 Capture/Compare Einängen und mindestens 3 PWM Ausgängen aus. Es gibt mehr als genug die das können. Vielleicht auch einer aus der AVR Familie. Alles andere ist nur Murks.
@Sean: Das ist ein Fertiger LED-Controller mit Fernbedienung, den wollte ich eigentlich nicht komplett ersetzten, das ist mir dann doch zu viel Arbeit. @Ralph: Ich möchte eigentlich schon mit den Komponenten arbeiten, die ich gerade da habe. Soll ja auch ein Einzelstück werden und keine Serie. viele Grüße Biertrinker
Falls es eine dieser Flachen Fernbedienungen ist, währe das aber vielleicht sogar einfacher. Siehe hier: Beitrag "IR Signal einlesen. Welcher Code ist das?" Die "Programme" sind ja trivial.
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.