PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit genau 100 Hz



Horniak
27.05.2007, 20:46
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

uwegw
27.05.2007, 21:11
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.

Horniak
27.05.2007, 21:22
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?

uwegw
27.05.2007, 21:33
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 (48). (Ohne Gewähr, hab ewig kein bascom mehr geschrieben)

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

Horniak
27.05.2007, 21:44
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: https://www.roboternetz.de/wissen/index.php/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.

Horniak
27.05.2007, 22:07
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?

Horniak
28.05.2007, 15:14
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

uwegw
28.05.2007, 15:22
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.

Horniak
29.05.2007, 16:28
Danke dir für die netten Hilfen!
Grüße