-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Signalerzeugung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.11.2006
    Beiträge
    35

    Signalerzeugung

    Anzeige

    Hallo,

    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,

    Danke!
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken atmel_bitausgabe.jpg  

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Da gibt es mehrere Möglichkeiten.

    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.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    @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.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    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

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    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.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.10.2008
    Ort
    Wulferstedt
    Beiträge
    1.042
    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

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    29.11.2006
    Beiträge
    35
    Hallo,

    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

    Danke nochmal!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    64
    Beiträge
    157
    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.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Dem kann ich so nicht zustimmen.
    Nur weil die eine Sache etwas komplizierter, dafür aber besser ist, sollte man nicht einen anderen Weg nehmen.

    Gerade bei Delay bzw. Wait (oder wie sie auch immer heissen) Funktionen, muss man aufpassen das der Compiler sie nicht weg optimiert!

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •