PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software PWM geht mit AT90S2313 und mit ATtiny2313 nicht???



TobiasBlome
23.10.2006, 20:16
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

TobiasBlome
23.10.2006, 21:21
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