Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega88 6x PWM konfigurieren?
TobiasBlome
20.06.2009, 11:27
Hallo,
ich benötige 4 PWM Kanäle und habe den Mega 88 (aber wenn ich schon frage möchte ich natürlich alle 6 Kanäle wissen ;-))
Datenblatt:
PIN PWM
5 OC2B
11 OC0B
12 OC0A
15 OC1A
16 OC1B
17 OC2A
so, nun das Programm: bei Timer2 sagt Bascom "Invalid Parameter..."
Wer kann mir sagen was ich da eintragen muss?
Vielen Dank, Tobias
PS. hab schon einige Kombinationen durch:
Compare A
Compare PWM
Compare OCR2A
Compare OC2A
...
'Timer1 = 16 Bit = Spiegelmotore
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 256
'Timer2 = 8 Bit = Laser2
Config Timer0 = Pwm , Pwm = 8 , Compare Ocr2a Pwm = Clear Up , Compare Ocr2b Pwm = Clear Up , Prescale = 256
Enable Interrupts
...
Do
Compare1a = Motor1
Compare1b = Motor2
Ocr2a = Motor3
Ocr2b = Motor4
LOOP
stefan_Z
20.06.2009, 15:21
Schau mal in der "m88def.dat" nach, oder im "Register Summary" im Datenblatt... Da stehen meist die Registernamen
TobiasBlome
20.06.2009, 15:44
Hallo,
in der "m88def.dat" habe ich nichts gefunden...
Im Datenblatt unter "Register Summary" sieht es nicht viel besser aus:
Mir ist aufgefallen, dass ich im Datenblat nur Timer1 & Timer0 gefunden habe... Im Datenblatt steht aber auch, dass der MEGA88 6PWM Kanäle hat!
Register Summary:
(0x8B) OCR1BH Timer/Counter1 - Output Compare Register B High Byte 135
(0x8A) OCR1BL Timer/Counter1 - Output Compare Register B Low Byte 135
(0x89) OCR1AH Timer/Counter1 - Output Compare Register A High Byte 135
(0x88) OCR1AL Timer/Counter1 - Output Compare Register A Low Byte 135
(0x85) TCNT1H Timer/Counter1 - Counter Register High Byte 135
(0x84) TCNT1L Timer/Counter1 - Counter Register Low Byte 135
0x28 (0x48) OCR0B Timer/Counter0 Output Compare Register B
0x27 (0x47) OCR0A Timer/Counter0 Output Compare Register A
Kann jemand etwas damit anfangen?
Tobias
stefan_Z
23.06.2009, 01:39
Ich hab nochmal geschaut...
http://www.ledhilfe.de/viewtopic.php?f=31&t=2639&start=0
Laut dieser Seite hier soll es mit folgenden Namen gehen:
Red_pwm1 Alias Ocr0a
Red_pwm2 Alias Ocr0b
Green_pwm1 Alias Ocr1al
Green_pwm2 Alias Ocr1bl
Blue_pwm1 Alias Ocr2a
Blue_pwm2 Alias Ocr2b
OC1 hat 16bit, daher wird das "L" - LOW-Register genutzt.
Die Timer-Einstellungen macht der Kollege allerdings "zu Fuß" - kann ja sein, dass Bascom da nen Bug hat.
Würde sagen du baust es 1:1 ein und ersetzt es dann mal durch passende Einstellungen in Bascom - und sagst uns was passiert ;-)
TobiasBlome
23.06.2009, 18:37
soooooooooo - fertig er funktioniert JUUhUUUUUUUUUUUUUUU
@stefan_Z:
\:D/
DANKEE!!!
der Link war sehr gut!!!!!
Timer konfigurieren:
man kann es einzelnd machen wie im Link oder viel kürzer so:
'Timer0 = 8 Bit
Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
'Timer1 = 16 Bit
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
'Timer2 = 8 Bit
Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Enable Interrupts
bei den 8Bit Timern - hier Timer0 & Timer1 darf man NUR EINMAL GENERELL "Compare Pwm" angeben!!!! Damit konfiguriert man beide PWM-Kanäle!
und so wird´s im aufgerufen:
Ocr0a = Test1 'Timer0
Ocr0b = Test2 'Timer0
Ocr1al = Motor1 'Timer1
Ocr1bl = Motor2 'Timer1
Ocr2a = Laser_rot 'Timer2
Ocr2b = Laser_gruen 'Timer2
Man kan bei Timer1 auch:
Compare1a = Motor1
Compare1b = Motor2
nutzen - ABER das benötigt MEHR SPEICHER - keine Ahnung warum....
Frage:
Motor1 Alias Ocr0a
als was wird "Motor1" deklariert? also Byte? Word?...
in meinem bestimmten Fall benötige ich:
Dim Motor1 As Word
und mit ALIAS funktioniert es bei mir nicht richtig, weil ich einen String in die Variable Motor1 kopiere:
Motor1 = Val(wert)
Tobias
stefan_Z
23.06.2009, 19:57
als was wird "Motor1" deklariert? also Byte? Word?...
Als das, was die Original-Variable auch darstellt. In dem Fall ein Byte, da der AVR nur Byte-Register kennt.
TobiasBlome
23.06.2009, 20:07
ach so - danke.
ACHTUNG: wichtiger Nachtrag zu Timer1:
ich hatte geschrieben, das man wahlweise
Ocr1al = Motor1
Ocr1bl = Motor2
Compare1a = Motor1
Compare1b = Motor2
schreiben kann! Das ist so wohl nicht ganz richtig, wie ich festgestellt habe:
Die folgende Deklaration benötigt weniger Speicher, bekommt aber bei 10 Bit starke Probleme:
Ocr1al = Motor1
Ocr1bl = Motor2
Die folgende Deklaration benötigt mehr Speicher, läuft aber auch noch mit 10 Bit:
Compare1a = Motor1
Compare1b = Motor2
Kann mir einer sagen wo der Unterschied ist und warum es so ist?
Tobias
stefan_Z
23.06.2009, 20:11
OCR1AL ist nur das LOW-Byte vom Register - COMPARE1A sind die vollen 16-Bit
Kann man im Simulator auch schön beobachten!
TobiasBlome
23.06.2009, 20:51
aha - vielen Dank.
irgendwie habe ich da einen Feler....
ich habe alles mit dem Timer1 ausprobiert - also Hardwaremäßig.
Aber Timer0 und Timer2 funktionieren nicht...
'Konfiguration µC:
$regfile = "m88def.dat" 'AT-Mega88
$crystal = 20000000 'Quarz: 14,7456 MHz - Quarz auf Platine
$baud = 9600 'RS232 Baudrate definieren
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
'Ddrb = &B1111111 '1 Ausgang, 0 Eingang = Pin PB7-0
'Ddrc = &B1111111 '1 Ausgang, 0 Eingang = Pin PC7-0
'Ddrd = &B1111111 '1 Ausgang, 0 Eingang = Pin PD7-0
'Portb = &B0000000 '1 = Pullup
'Portc = &B0000000 '1 = Pullup
'Portd = &B0000000 '1 = Pullup
'-------------------------------------------------------------------------------
'Timer:
Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
'Timer1 = 16 Bit = Spiegelmotore
'Clear Down => 0 = 0 PWM / 1023 = max PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
'Timer2 = 8 Bit = Laser2
Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Enable Interrupts
Do
Ocr0a = 125 'Test1
Ocr0b = 125 'Test2
Compare1a = 125
Compare1b = 125
Ocr2a = 125 'Laser_rot
Ocr2b = 125 'Laser_gruen
Loop
TobiasBlome
23.06.2009, 20:54
aha - vielen Dank.
irgendwie habe ich da einen Feler....
ich habe alles mit dem Timer1 ausprobiert - also Hardwaremäßig.
Aber Timer0 und Timer2 funktionieren nicht...
'Konfiguration µC:
$regfile = "m88def.dat" 'AT-Mega88
$crystal = 20000000 'Quarz: 14,7456 MHz - Quarz auf Platine
$baud = 9600 'RS232 Baudrate definieren
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
'Ddrb = &B1111111 '1 Ausgang, 0 Eingang = Pin PB7-0
'Ddrc = &B1111111 '1 Ausgang, 0 Eingang = Pin PC7-0
'Ddrd = &B1111111 '1 Ausgang, 0 Eingang = Pin PD7-0
'Portb = &B0000000 '1 = Pullup
'Portc = &B0000000 '1 = Pullup
'Portd = &B0000000 '1 = Pullup
'-------------------------------------------------------------------------------
'Timer:
Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
'Timer1 = 16 Bit = Spiegelmotore
'Clear Down => 0 = 0 PWM / 1023 = max PWM
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
'Timer2 = 8 Bit = Laser2
Config Timer2 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Enable Interrupts
Do
Ocr0a = 125 'Test1
Ocr0b = 125 'Test2
Compare1a = 125
Compare1b = 125
Ocr2a = 125 'Laser_rot
Ocr2b = 125 'Laser_gruen
Loop
TobiasBlome
24.06.2009, 16:19
Also anscheined geht es wirklich nur, wenn man es alles einzelnd hinschreibt...(der original Code vom Link funktioniert...)
wo kann ich den Timer1 auf 10Bit umstellen?
' Timer/Counter 1 initialization
' Clock source: System Clock
Tccr1a = &HF1' Clock value: 125.000 kHz -> PWM-Freq ca. 245Hz
Tccr1b = &H03' Mode: Ph. correct PWM top=00FFh
Tcnt1h = &H00' OC1A output: Inverted
Tcnt1l = &H00' OC1B output: Inverted
Icr1h = &H00' Noise Canceler: Off
Icr1l = &H00' Input Capture on Falling Edge
Ocr1ah = &H00' Timer 1 Overflow Interrupt: Off
Ocr1al = &H00' Input Capture Interrupt: Off
Ocr1bh = &H00' Compare A Match Interrupt: Off
Ocr1bl = &H00' Compare B Match Interrupt: Off
wenn ich bei Timer1 die Kurzversion benutze gehts nur mit 8Bit wenn ich
Ocr1al = 125
Ocr1bl = 125
nutze.
mit Compare1a = 250 / Compare1b = 250 geht es nicht mehr
Tobias
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.