-
-
Erfahrener Benutzer
Roboter Experte
Software PWM geht mit AT90S2313 und mit ATtiny2313 nicht???
Hallo,
ich habe 2 LED´s die per Software PWM angesteuert werden. Af dem alten AT90S2313 läuft das Programm. Nun brauche ich das gleiche für ein anderes Projekt, und da es den nicht ehr gibt, habe ich den ATtiny2313 genommen. Leider läuft hier das Programm nicht - genauer gesagt die LED´s dimmen nicht langsam hoch, sonder sie flacker langsam hoch!
Kann mir jemand sagen wo hier der Timer0 Überlauf festgelegt wird um die PWM Steuerung zu beschleunigen?
Tobias
Programm
'Konfiguration µC:
'$regfile = "2313def.dat" 'AT90S2313-Deklarationen
$regfile = "ATtiny2313.dat" 'ATtiny2313-Deklarationen
$crystal = 3686400 'Quarz: 3.6864 MHz
'Timer konfigurieren, Vorteiler auf 1 ist gut fürs Simulieren (evtl. anpassen, dann aber ausgang mit R-C Tiefpass)
Config Timer0 = Timer , Prescale = 1 'Teiler
Config Timer1 = Timer , Prescale = 8
Enable Timer0 'timer einschalten
Enable Timer1
On Timer1 Ledcount 'Unteprogramm aufrufen
On Timer0 Pwm_prog
Enable Interrupts 'interrupts einschalten
'Ein-/Ausgänge:
Config Pinb.2 = Output
Config Pinb.3 = Output 'Port B = Ausgang
'Variablen
Dim R As Byte
Dim B As Byte
Dim Z As Word
Dim Ri As Byte ' Hilfsregister
Dim Bi As Byte
Dim Led1 As Byte
Dim Led1m As Byte 'LED1 Merker
Dim Led2 As Byte
Dim Led2m As Byte
Z = 0 'Zähler Z auf NULL stellen
Led1 = 255 'LED startet mit hell
Do
R = Led1
B = Led2
Loop
Pwm_prog: 'PWM Takt über Timer0
If Z = 0 Then 'Gewünschte Ausgabewerte an
Ri = R 'Hilfsregister übergeben
Bi = B
Z = 255
End If
Z = Z - 1
If Ri > 0 Then 'R > Port B.0
Portb.3 = 1 'bei R = 51 wird hier
Else 'Port B.0 51 mal auf 1
Portb.3 = 0 'und 205 mal auf 0 geschaltet
End If 'das ergibt bei 5V Ub im Mittel
Ri = Ri - 1 ' ca. 1 V
If Ri = 255 Then Ri = 0
If Bi > 0 Then
Portb.2 = 1 'B > Port B.2
Else
Portb.2 = 0
End If
Bi = Bi - 1
If Bi = 255 Then Bi = 0
Return
Ledcount: 'Farbwechsel über Timer1
Timer1 = 50000 'LED´s wechseln die Farbe mit ca 30 Hz
If Led1 = 255 Then
Led1m = 0
End If
If Led1 = 0 Then
Led1m = 1
End If
'Zähler1 hoch/runter
If Led1m = 1 Then
Incr Led1 'um 1 hochzählen
End If
If Led1m = 0 Then
Decr Led1 'um 1 runterzählen
End If
'-------
If Led2 = 255 Then
Led2m = 0
End If
If Led2 = 0 Then
Led2m = 1
End If
'Zähler1 hoch/runter
If Led2m = 1 Then
Incr Led2 'um 1 hochzählen
End If
If Led2m = 0 Then
Decr Led2 'um 1 runterzählen
End If
Return
-
Erfahrener Benutzer
Roboter Experte
Hallo,
hat sich erledigt,
es sind noch Funktionen dazu gekommen und nun schafft der µC das nicht mehr mit software PWM!
Also werde ich wohl einen neuen Threat aufmachen, denn ich habe noch nichts mit PWM gemacht...
Tobias
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen