-
        

Ergebnis 1 bis 9 von 9

Thema: PWM mit genau 100 Hz

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2007
    Beiträge
    12

    PWM mit genau 100 Hz

    Anzeige

    Hallo,
    zur Simulation einer Bremslichtansteuerung müsste ich eine Lampe getaktet ansteuern, d. h. mit einem Tastverhältnis von 25% oder mit einem Tastverhältnis von 100 %, wenn ein Schalter gedrückt wird. Da ich mich grad erst in Bascom einarbeite und ein Neuling bin, habe ich mir mal die Infos zu Bascom und PWM hier bei RN reingezogen. Ich verwende hier noch nen alten AT90S2313 und nen 10MHz-Quarz. Ich habe aber keine Einstellung für Prescale gefunden, dass ich den 8Bit-Timer auf genau 100 Hz bringe. Ein Bekannter hat das wohl ohne Timer hingekriegt, doch ich verstehe das nicht so ganz:

    If Fahrlicht = 1 And Pwm < 11 And Bremse_err = 0 Then
    Bremse_o = 1
    Waitus 20
    If Bremse_chk = 0 Then '"Warmprüfung"
    Error = 1
    Bremse_err = 1
    Bremse_o = 0 'bei Defekt abschalten
    End If
    Else
    Waitus 20
    Bremse_o = 0
    End If
    End If
    .
    .
    .
    Counters:
    Incr Pwm
    Incr Blinkercounter

    If Blinkercounter >= 4000 Then
    Blinkercounter = 0
    End If

    If Pwm >= 48 Then
    Pwm = 0
    End If


    Return


    Ich weiss nicht, ob die beiden Ausschnitte reichen. Ich frag mich halt, wie man mit den beiden wait-Befehlen von je 20 µs das hinkriegen will, da 100 Hz ja ner Periodendauer von 10ms entsprechen. Bremse_o ist übrigens der Ausgangspin des Controllers zum Profet, der dann die Lampe schaltet.
    Grüße
    Horniak

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    wird Counters von irgendwo her angesprungen? (die Schnipsel reichen nicht) Vielleicht von nem Timer-Interrupt? Es sieht nach ner Software-PWM aus, d.h. es wird ein Zähler programmiert, der Impulse mit der geforderten Länge erzeugen kann.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2007
    Beiträge
    12
    Danke für die erste Antwort.
    Das Programm beginnt mit:

    $crystal = 10000000

    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.5 = Input
    Config Pinb.6 = Input
    Config Pinb.7 = Input
    Config Pind.0 = Output
    Config Pind.1 = Output
    Config Pind.2 = Input
    Config Pind.3 = Input
    Config Pind.4 = Input
    Config Pind.5 = Input



    Config Timer0 = Timer , Prescale = 8
    On Ovf0 Counters
    Enable Timer0
    Enable Interrupts


    Dim Blinkercounter As Integer , Pwm As Integer , N As Integer
    Dim Error As Bit , Warten As Bit , Blinker_err As Bit , Bremse_err As Bit , Fahrlicht_err As Bit
    Dim Fahrlichtbit As Bit


    Da wird zwar ein Timer0 konfiguriert, doch weiter unten finde ich nirgendwo etwas mit compare, um das Tastverhältnis einzustellen. Mein Bekannter meinte, er wollte es wohl erst mit dem Timer versuchen, hat ihn dann wohl aber doch nicht benutzt. Davon bin ich ausgegangen, da ja das compare fehlt.
    Hilft dir das weiter?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Der timer wird angeschmissen, läuft regelmäßig (mit 4882Hz) über und ruft dann Counters auf. Dort werden dann Pwm und Blinkercounter hochgezählt, bis sie 4000 bzw 48 erreichen. Diese Softwarekonstruktion entspricht also einem mit 4882Hz getakteten Timer mit einem Zählbereich von 0 bis 4000 (4. (Ohne Gewähr, hab ewig kein Bascom mehr geschrieben)

    Ist das jetzt das komplette Programm? oder fehlt immer noch was?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2007
    Beiträge
    12
    Achso, der Timer wird doch benutzt? Dann müsste er doch auf 2441,41 Hz laufen, wenn die Erläuterungen hier bei RN stimmen (link: http://www.roboternetz.de/wissen/ind...Bascom_und_PWM)
    Was ich gar nicht verstehe, ist dieses
    On Ovf0 Counters

    Das Programm ist noch etwas länger. Es werden noch andere Lampen angesteuert.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2007
    Beiträge
    12
    Stop, du hast recht. Die 2441,41 Hz wären für die PWM-Berechnung. Bei der einfachen Timer-Berechnung muss man die Timerauflösung ja nicht mit 2 multiplizieren. Dann stimmen deine 4882,82 Hz. Das mit der obigen Zeile habe ich etwas mehr verstanden, nur das Ovf0 finde ich nirgends. Nach den Beispielen hier bei RN müsste da doch:
    On Timer0 Counters
    stehen, oder?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2007
    Beiträge
    12
    und wieder bin ich fündig geworden:
    On Ovf0 ISR und On Timer0 ISR sind gleichbedeutend.
    Ich weiss nicht, ob ich euch mit der Frage unterfordere,aber kann man denn die Controller-Angabe mit $regfile für den AT90S2313 weglassen?
    Grüße

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Zitat Zitat von Horniak
    Ich weiss nicht, ob ich euch mit der Frage unterfordere,aber kann man denn die Controller-Angabe mit $regfile für den AT90S2313 weglassen?
    Grüße
    Kann man, wenn man im den Compiler-Optionen den richtigen AVR-Typ einstellt. Es spricht aber nichst dagegen, $regfile drin zu lassen.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    27.05.2007
    Beiträge
    12
    Danke dir für die netten Hilfen!
    Grüße

Berechtigungen

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