PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer2 beim mega 8 für PWM wer hat ein HowTo?



t4-torsten
14.01.2009, 12:42
Hallo , hier im Forum ist ja copy und paste nicht so gefragt deswegen stell ich meine bisherigen Ansätze hier mit rein ..
Irgendwie will der Timer nicht aufdimmen bzw nicht wieder abdimmen.

Der Timer1 ( 16Bit ) ging prima nur der zweite will nicht . Bin schwer am verweifeln



'================================================= =====
'System-Einstellungen
'================================================= =====
'Definition für Mega 8
$regfile "m8def.dat"

'Angabe der Taktfrequenz (8Mhz)
$crystal = 8000000

'Konfiguration der Analogeingänge

'Konfiguration Timer 2 für Hardware-PWM an OC2 (B.3)
Config Timer2 = Pwm , Prescale = 128 , Compare = Clear
Compare1a = 255
'Konfiguration der Ports
Config Portb = Output
Config Portd = Output


'================================================= =====
'Initialisierungen
'================================================= =====


'Start des PWM-Timers
Enable Timer2
Timer2 = 0
Start Timer2

'================================================= =====
'Hauptprogramm-Schleife
'================================================= =====
Do

Do
Compare1a = Compare1a + 1 ' Dimmvorgang
Waitms 12
Loop Until Compare1a = 255

Waitms 12 ' LED bleibt an

Do
Compare1a = Compare1a - 1 ' Dimmvorgang
Waitms 12
Loop Until Compare1a = 0



Loop
End


Vielleicht kann mir ja jemand von euch den entscheidenen Tip geben . Ach so für den anfang reicht es wenn das Programm erst eimal nur aufdimmt kurz wartet und wieder langsam ausgeht.

Velen Dank

Jaecko
14.01.2009, 15:15
Fehlt da evtl noch die "Enable Interrupts"-Anweisung?
Kann gut sein, dass man die bei PWM auch braucht.

niki1
14.01.2009, 15:39
Hallo.

Gehört da nicht "Compare A Pwm = Clear up" rein ? Statt dem Compare = Clear ?

Dem RN Wissens Artikel über Bascom und PWM , muss man die Timer nicht starten!

https://www.roboternetz.de/wissen/index.php/Bascom_und_PWM


Mfg niki1

Michael
14.01.2009, 17:14
Hallo t4-torsten,


Compare1a = Compare1a + 1
für Timer2 kannst du nicht das Compare-Register für Timer1 benutzen.
Für Timer2 heißt es OCR2

Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 64
OCR2 = 125
(Port auf Ausgang)

Gruß, Michael

-tomas-
14.01.2009, 17:50
Nur ein Hinweis zu den Timer-Deklarationen in Bascom:
Ich bin so oft an Compiler-Fehlern hängengeblieben, dass ich die Timer immer nach Atmel-Datenblatt deklariere. Außerdem finde ich die Einstellungen Register transparenter.

Ein Beispiel für einen Attiny25:

$regfile = "ATtiny25.DAT" 'Controllertyp
$crystal = 8000000 'crystal frequency

'*** Timer 0 CTC (read signal from TSOP173x) *******************
Tccr0a = &B0000_0010 'OC0A/OC0B disconnected, CTC
Tccr0b = &B0000_0010 'Prescale=8 @8MHz
Ocr0a = 52 '8Mhz/(8*(52+1))=18867Hz

On Oc0a _isr_t0ovf Nosave 'Interrupt NOSAVE_ISR!
Enable Oc0a
Enable Interrupts
Ich werfe auch immer einen Blick in die *.DAT (hier ATtiny25.DAT) um zu checken, ob Bascom überhaupt die Registernamen richtig schreibt...

Eine Ausnahme ist der weit verbreitete Atmega8. Den kann Bascom recht gut. Aber auch beim Atmega8 habe ich schon Bascom-Fehler bei ungewöhnlichen Timerkonfigurationen gefunden.