ich bin noch recht neu in der AVR Programmierung und Suche einwenig Starthilfe für mein Problem.
Ich möchte auf einem Pin eines ATTiny2313 ein zeitlich gesteuertes Signal ausgeben (siehe angehängte Datei).
Also z.B.:
1. 20 ms High-Pegel
1. 20 ms Low-Pegel
1. 40 ms High-Pegel
1. 20 ms Low-Pegel
1. 40 ms High-Pegel
1. 20 ms Low-Pegel
usw.
Wie mach ich das am besten? Über PWM? Oder über Timer? Interrupt?
Für ein paar Tipps wäre ich sehr dankbar,
1) Mit Delay funktionen
2) Über einen Timerinterrupt alle 20 ms (CTC Modus)
3) Über einen Timerinterrupt jeweils zur passenden Zeit (Compare Register jeweils anpassen)
4) über eine PWM Ausgang, mit verändern der Einstellungen im Interupt
5) Über die UART oder alternativ auch das SPI Interface mit passendem Takt
Die einfachste Lösung, und noch ziemlich genau wäre wohl der Timerinterrupt.
Ganz einfach: Mit dem wait-Befehl (Eingabe in Sekunden), in diesem Falle mit dem Befehl Waitms, Eingabe im Millisecunden.
Beispielauszug:
Portb.1 = 1
Waitms 20
portb.1 = 0
Dies erzeugt einen 20ms-Impuls
VG Micha
@hardware.bas
Es geht hier nicht um Bascom!! Wer lesen kann...
Außerdem ist deine Variante die schlechteste die man wählen kann.
Wenn die Pulsweiten nicht ständig wechseln, würde ichn PWM nehmen, einmal konfiguriert, und es läuft ohne das du dich um was kümmern musst. Wenn du eine andere Pulsweite brauchst kannst du sie bequem per Register ändern.
Ändert sich die Pulsweite ständig, dann wie Besserwessi vorgeschlagen hat, n Timerinterrupt alle 20 ms und den Pegel ändern bzw. stehen lassen.
TobiKa:
mr.burns ist Anfänger und sicherlich interessiert an einem schnellen Erfolgserlebnis. Die Lösung erstmal mit Waitms-Befehlen zu erledigen,
ist m. Era. erstmal das Beste. Ich stimme dem zu, dass mit dieser Läsung
keine Hintergrundprogramme laufen können.
Zu BASCOM. Es war nicht auch nicht Rede, Bascom auszuschliessen,
noch dazu, wo sie die Sprache der Praktiger ist. VG Micha
1. Ich versteh nicht was du möchtest... schreib erstmal ordentlich!
2. Bascom ist was? Besser? Nö!
3. Wer im C Bereich postet möchte höchstwahrscheinlich keinen Bascom Code.
Nachtrag:
Sehe erst jetzt, dass ich mich in der falschen Rubrik befand, sorry.
Habe versucht zu helfen aud der Rubrik "letze Beiträge"
Also bitte nicht verübeln. VG Micha
danke erstmal an alle, die hier so schnell geantwortet haben.
Ich bin hier im Forum C-Programmierung und in der Tat an einer Implemenation in C interessiert.
Ich habe bereits viel Erfahrung in C und C++ jedoch auf einem PC und nicht im Bereich Mikrocontroller.
Ich denke ich versuche die Interrupt-basierte Lösung, die Besserwessi vorgeschlagen hat.
PWM kommt weniger in Frage, da sich die Pulsweiten ständig ändern.
Werde mich dan mal ranmachen, wenn ich Probleme habe weis ich ja, wo ich Hilfe bekomme
Interrupts sind nur dann eine gute Lösung, wenn die Zeitsteuerung nebenläufig erfolgen soll. Wenn die Zeitsteuerung die einzige Aufgabe ist, ist der Einsatz einer Delay- oder Wait-Funktion die bessere Alternative. Ist einfach weniger komplex und kürzer. Interrupts sind außerdem sehr schwer zu debuggen.
Wenn die Zeitsteuerung sehr genau sein sein, empfiehlt es sich einen Timer zu starten und auf dessen Ablauf (Timerregister abfragen) in einer Schleife warten.
Lesezeichen