Hallo, als absoluter Neuling auf dem Gebiet der AVR Programmierung stehe ich vor der Aufgabe einen Taktgeber mit variablem Tastverhältnis zu erstellen bei dem sich das Tastverhälnis innerhalb von 30 Sek. von 25% HIGH/75% LOW zu 75% High/25% LOW ändert und dann so bleibt. Die Frequenz bleibt bei konstant 220 Hz. Hat jemand eine Idee wie ich da rangehen könnte? VG Patrick
Patrick Müller schrieb: > Hat jemand eine Idee wie ich da rangehen > könnte? dafür bietet sich doch der PWM mode des Timers an.
Wie schon gesagt, ich bin Neuling. Ich dachte ja erst an Timer und Loop´s aber das ist Asche. Gibts das vielleicht schon einigermaßen fertigen Code den ich nur bissl umstricken brauche und vielleicht gleich in einen ATTiny13 passt?
:
Bearbeitet durch User
Patrick Müller schrieb: > Ich dachte ja erst an Timer und Loop´s aber das ist Asche. Was ist daran Asche? Du mußt nur warten, bis der Timer einen Überlauf macht und kannst dann neu über das Tastverhältnis befinden. Das ist alles.
Patrick Müller schrieb: > Gibts das vielleicht schon einigermaßen fertigen Code den ich nur bissl > umstricken brauche und vielleicht gleich in einen ATTiny13 passt? Warum muss es immer schon alles Fertig sein? Programmieren ist nicht das gleiche wie copy&paste. Nimm die das Datenblatt, das steht alles zu den Timern drin. Das ganze sind dann nur ein paar Zeilen Code.
...aber wie viele Zeilen Code sollen das werden wenn ich nach jedem Zyklus die Werte neu definieren will? Von 25/75 zu 75/25 sind es ja doch schon einige Zwischenwerte wenn es "gleichmäßig" werden soll. Ich hoffte das es irgendwas gibt was schön "smooth´t" und dann dort bleibt.
Patrick Müller schrieb: > ...aber wie viele Zeilen Code sollen das werden wenn ich nach jedem > Zyklus die Werte neu definieren will? Der Timer kann das Tastverhältnis sowieso nur schrittweise erhöhen (und nicht kontinuierlich). Bei 30s Flankendauer braucht der Timer mit seinen 220Hz genau 6600 Durchläufe. Ein 8-Bit Timer müßte also alle 51.5 Durchläufe den Umschaltpunkt ändern, ein 16-Bit Timer müßte bei jedem Durchlauf den Umschaltpunkt um 5 verändern. Bei Formulierung in einer Schleife werden das wohl etwa 10 Zeilen zzgl. Initialisierung des Timer und Verwaltung. Wenn die 30s haarklein eingehalten werden müssen, allerdings deutlich mehr.
Der Code soll eine Schaltung zur "sanften" Einschaltung der Hochspannung für eine Röhrenendstufe steuern. Erst wenn die Heizung voll da ist soll die HV langsam zugeschaltet werden. Daher sollte es einigermaßen gleichmäßig gehen da das SNT für die Röhren HV PWM steuerbar ist und mit den Tastverhältnissen die Ausgangsspannung gesteuert wird. Verstehe ich das richtig, dass am Ende des Timer eine neue Schleife begonnen wird die das neue Tastverhältnis im Code hat?
Patrick Müller schrieb: > Verstehe ich das richtig, dass am Ende des Timer eine neue Schleife > begonnen wird die das neue Tastverhältnis im Code hat? Ein Signal mit konstantem Tastverhältnis kann der Timer selbständig erzeugen, wenn er richtig für eine PWM-Betriebsart konfiguriert ist. Das z.B. auch ist im AVR-GCC-Tutorial/Die Timer und Zähler des AVR beschrieben.
Wie "smooth" soll es werden? Reichen 70 Zwischenschritte mit je 0,7%, oder sollen es 6600 Zwischenschritte mit < 0,01% sein?
Röhrenendstufe? Wie wäre es mit einer analogen Schaltung?
Stefan1234 schrieb: > Röhrenendstufe? Wie wäre es mit einer analogen Schaltung? Wie analoge Schaltung? Für´s Schaltnetzteil? Der Code soll doch nur die Steuerung des SNT´s übernehmen mit dessen Spannung dann die Röhren betrieben werden. Durch die Röhren selbst gehts selbstverständlich analog.
Meine Güte, das lässt sich beim Tiny 13 mit wenigen Code-Zeilen zur Initialisierung von Timer/Counter 0 erledigen. - WGM02:0 in TCCR0A und TCCR0B -> Waveform Mode 7 - OCR0B und COM0B1, COM0B0 in TCCR0A -> duty cycle an OC0B - OCR0A und CS02:0 in TCCR0B -> PWM-Frequenz Dazu kommen vielleicht 20 Zeilen Interrupt-Code (dauert jeweils nur wenige µs), für das Hoch-Steppen der PWM. Nach etwas Überschlagsrechnung müsste der Tiny13 eher mit 8 MHz, als mit 1 MHz betrieben werden, um die PWM-Stufung zu optimieren. - Wenn es denn unbedingt 220 Hz PWM-Frequenz sein müssen... Sind die 220 Hz wichtig, oder gingen auch 500 Hz? Für den Tiny13 wäre das kein Problem...
> Sind die 220 Hz wichtig, oder gingen auch 500 Hz? > Für den Tiny13 wäre das kein Problem... Die 220 Hz sind wichtig da das SNT die erwartet. Der ATTiny13 nicht, kann auch ein anderer sein. Hab nur etliche rumliegen und wollte die einer sinnvollen Bestimmung zuführen. Wie schon gesagt, ich bin Neulung. >Meine Güte, das lässt sich beim Tiny 13 mit wenigen Code-Zeilen >zur Initialisierung von Timer/Counter 0 erledigen. > - WGM02:0 in TCCR0A und TCCR0B -> Waveform Mode 7 > - OCR0B und COM0B1, COM0B0 in TCCR0A -> duty cycle an OC0B > - OCR0A und CS02:0 in TCCR0B -> PWM-Frequenz >Dazu kommen vielleicht 20 Zeilen Interrupt-Code (dauert jeweils >nur wenige µs), für das Hoch-Steppen der PWM. ...ist zwar lieb gemeint, wenn man aber keine Ahnung hat - so wie ich - nicht besonders hilfreich. Was helfen würde wäre ein Beispielcode an welchem ich die relevanten Stellen nur meinen Bedürfnissen anpassen muss. Die Stellen selbst finde ich dann schon, nur das Grundgerüst brauche ich.
...es gibt doch bestimmt irgendwo Code mit dem man eine LED oder einen Motor mit PWM softdimmen oder softstarten kann. Sowas wie hier scheint etwas zu sein was meinen Vorstellungen nahe kommt, oder? http://maxembedded.com/2012/01/avr-timers-pwm-mode-part-ii/
Ich könnte mich eine Stunde hinsetzen und das in Assembler aufschreiben. Als Antwort kommt dann wahrscheinlich: - ASM versteh ich nicht. - Wie krieg ich den Code in den ATTiny? "Ich bin Anfänger" hört sich an, als ob du was lernen willst. Fang an und stell Fragen... Dazu bekommst du hier Hilfe. Wenn du nicht ANFANGEN willst, vergiss es.
Sicher will ich´s lernen. Allerdings kann ich mir gut vorstellen das dies ein langwieriger Prozess werden wird von dem ich bezweifle das es sich langfristig rentiert. Wenn ich nach Griechenland in den Urlaub fahre lerne ich ja nun auch nicht gleich perfekt griechisch sondern frage Leute dies es schon können oder nutze ein Übersetzungtool um mich zu verständigen. Schließlich muss man ja auch nicht alles wissen und sollte seine begrenzten Synapsen für Dinge bereithalten die wirklich wichtig sind. Das programmieren ist schon irgendwie eine Kunst für sich und wer Künstler ist, ist das aus gutem Grund.
Patrick Müller schrieb: > Sicher will ich´s lernen. Das ist doch ein sehr guter Vorsatz. > Allerdings kann ich mir gut vorstellen das > dies ein langwieriger Prozess werden wird Das ist leider zu erwarten, ja. Von nix kommt nix. > von dem ich bezweifle das es > sich langfristig rentiert. Wer da so rangeht, negiert seinen guten Vorsatz schon in dem Moment, da er ihn angeblich fasst... > Wenn ich nach Griechenland in den Urlaub fahre lerne ich ja nun auch > nicht gleich perfekt griechisch sondern frage Leute dies es schon können > oder nutze ein Übersetzungtool um mich zu verständigen. Blöder Vergleich. Was hat der Plan, einen Urlaub in Griechenland zu verbringen mit einem Plan zu tun, Griechisch zu lernen? Richtig: Garnix. > Schließlich muss man ja auch nicht alles wissen Sicher nicht, das ist auch völlig unmöglich. > Das programmieren ist schon irgendwie eine Kunst für sich und wer > Künstler ist, ist das aus gutem Grund. Nein. Programmieren hat mit Kunst nix zu tun, das ist reines Handwerk. Meinetwegen Kunsthandwerk, aber immer noch deutlich mehr Handwerk als Kunst. Und ein guter Handwerker wird man nur dadurch: Indem man das Handwerk erlernt, selber regelmäßig ausübt und nur "mit den Augen" bei den anderen guten Handwerkern klaut und nicht nur deren fertige Produkte einbaut. Das ist wäre dann "Industrie".
Mit "langfristig rentiert" will ich nichts negieren. Ich denke aber, dass ich ein, zwei mal im Jahr in die Verlegenheit komme irgend einen Code zu brauchen - und das auch nicht mal zu wirklich wichtigen Dingen. Dafür viele Resourcen in Form von Zeit und Geduld aufzuwenden um extra das Coden zu lernen halte ich für bedenklich. Daher der Vergleich mit Griechenland. Ich hätte auch schreiben können das ich nicht extra eine Kuh kaufe um ein Glas Milch trinken zu können. Das mit dem Handwerk triffts aber ganz gut. Wenn ich nicht schweißen kann gehe zu zu nem Kumpel der´s kann. Der kann wiederum nicht mit SMD´s umgehen. So wäscht eine Hand die andere.
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.