PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM mit Attiny 2313; Timer2 macht Probleme



Loppppp
01.02.2011, 23:14
Hallo erstmal
Ich hab folgendes Problem:
Ich will mir ein RGB Licht bauen und das über einen
Controller steuern.
Also hab ich das erstmal mit einem Atmega 8 gemacht weil der vorhanden
war O:)
Das hat dann auch perfekt funktioniert, alles hat schön durchgefadet wie es sein soll =D>
Doch dann dachte ich, dass ein Atmega 8 irgendwie Verschwendung wäre
und wollte einen Attiny 2313 nehmen, sollte ja angeblich aich genug Timer haben.
Also den Code vom Mega 8 umgeschrieben und versucht zu compillieren... :-&
Geht nicht!
Irgendwie sagt mir Bascom beim Kompillieren
Line 44 Assignment error (OCR2: 0 Grun: 2)
Line 52 Assignment error (OCR2: 0 Grun: 2)
Line 52 LOOP expected

Und Das versteh ich überhaupt nicht :-#
Kann mir bitte jemand sagen was an dem Code Falsch ist ?

Hier ist der Code vom Atmega8 der geht:

$regfile = "m8def.dat"
$crystal = 1000000

Config Portb.1 = Output
Config Portb.2 = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1
Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Up , Pwm = On

Dim Rr As Byte
Dim Gg As Byte
Dim Bb As Byte

Do
Gosub Raufrot , Gosub Runtergrün
Gosub Raufgrün , Gosub Runterblau
Gosub Raufblau , Gosub Runterrot
Loop
End

Raufblau:
Do
Compare1a = Rr
Incr Rr
Waitms 10
Loop Until Rr = 255
Return

Runterblau:
Do
Compare1a = Rr
Decr Rr
Waitms 10
Loop Until Rr = 255
Return

Raufgrün:
Do
Ocr2 = Gg
Incr Gg
Waitms 10
Loop Until Gg = 255
Return

Runtergrün:
Do
Ocr2 = Gg
Decr Gg
Waitms 10
Loop Until Gg = 255
Return

Raufrot:
Do
Compare1b = Bb
Incr Bb
Waitms 10
Loop Until Bb = 255
Return

Runterrot:
Do
Compare1b = Bb
Decr Bb
Waitms 10
Loop Until Bb = 255
Return

Und hier der vom Attiny2313 der nicht geht :

$regfile = "ATTiny2313.DAT"
$crystal = 1000000
$hwstack = 64
$swstack = 16
$framesize = 21

Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output


Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1
Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Up , Pwm = On

Dim Rr As Byte
Dim Grun As Byte
Dim Bb As Byte

Do
Gosub Raufrot , Gosub Runtergrün
Gosub Raufgrün , Gosub Runterblau
Gosub Raufblau , Gosub Runterrot
Loop
End

Raufblau:
Do
Compare1a = Rr
Incr Rr
Waitms 10
Loop Until Rr = 255
Return

Runterblau:
Do
Compare1a = Rr
Decr Rr
Waitms 10
Loop Until Rr = 255
Return

Raufgrün:
Do
Ocr2 = Grun
Incr Grun
Waitms 10
Loop Until Grun = 255
Return

Runtergrün:
Do
Ocr2 = Grun
Decr Grun
Waitms 10
Loop Until Grun = 255
Return

Raufrot:
Do
Compare1b = Bb
Incr Bb
Waitms 10
Loop Until Bb = 255
Return

Runterrot:
Do
Compare1b = Bb
Decr Bb
Waitms 10
Loop Until Bb = 255
Return

Bitte, bitte
falls jemand Rat weiss würde ich mich einen Keks freuen [-o<

mfg Patrick

Rone
01.02.2011, 23:44
Hallo!

Du musst die Timerkonfiguration anpassen!
Der Tiny hat glaube ich nur Timer0 und Timer1.
Datenblatt lesen ist aber Deine Aufgabe.

MfG
Rone

Loppppp
02.02.2011, 22:13
Hi,
danke wegen des Tipps das es ja keinen Timer2 also auch keinen OCR2
gibt...
](*,)

Wenn man also OCR0A eingibt funzt das

Nun ja, das compillieren geht jetzt, und die Led fadet auch ein bisschen,
aber sehr stückig, will heissen von Blau zu Grün fadet es durch dan springt es zu Pink dann fadet es zu Weiss usw. :-s

Na ja und das wundert mich weil beim Mega8 ging das ja.
Oder muss ich bei einem 8 Bit Timer einen anderen Prescale als bei dem 16 Bit Timer setzten damit sich das ausgleicht?

mfg Patrick \:D/