Schau mal in der "m88def.dat" nach, oder im "Register Summary" im Datenblatt... Da stehen meist die Registernamen
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
Code:... '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
...
Schau mal in der "m88def.dat" nach, oder im "Register Summary" im Datenblatt... Da stehen meist die Registernamen
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
(0x8 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 (0x4 OCR0B Timer/Counter0 Output Compare Register B
0x27 (0x47) OCR0A Timer/Counter0 Output Compare Register A
Kann jemand etwas damit anfangen?
Tobias
...
Ich hab nochmal geschaut...
http://www.ledhilfe.de/viewtopic.php...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
soooooooooo - fertig er funktioniert JUUhUUUUUUUUUUUUUUU
@stefan_Z:
\/
DANKEE!!!
der Link war sehr gut!!!!!
Timer konfigurieren:
man kann es einzelnd machen wie im Link oder viel kürzer so:
bei den 8Bit Timern - hier Timer0 & Timer1 darf man NUR EINMAL GENERELL "Compare Pwm" angeben!!!! Damit konfiguriert man beide PWM-Kanäle!Code:'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
und so wird´s im aufgerufen:
Code: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
...
Als das, was die Original-Variable auch darstellt. In dem Fall ein Byte, da der AVR nur Byte-Register kennt.als was wird "Motor1" deklariert? also Byte? Word?...
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
...
OCR1AL ist nur das LOW-Byte vom Register - COMPARE1A sind die vollen 16-Bit
Kann man im Simulator auch schön beobachten!
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...
Code:'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
...
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...
Code:'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
...
Lesezeichen