rauf81
19.09.2011, 12:30
Hallo zusammen. Wie der Titel schon sagt habe ich Probleme mit Bascom und Fading von drei PWM Kanälen.
Aufbau:
Ich habe an ADC Kanal 0/1/2 je ein Potti 10k.
Diese faden die PWM Kanäle des Timers0 / Timers1 eines Atmega 16.
Das Konkrete Problem ist das ich immer nur zwei faden kann, sobald ich den dritten fade,
Springen alle drei ADC Kanäle auf 0.
Unabhängig welche ich regele, also beide Timer1 oder je einen von Timer1 und Timer0, kommt der Dritte hinzu springt alles auf 0.
Ich höffe Ihr könnt mir weiter Helfen
Anbei das Bascom Programm.
Schaltplan
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Ddrb = &HFF
Ddrd = &HFF
Ddrc = &HFF
Ddra = &H00
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1
Config Lcd = 20 * 4
Enable Interrupts
Dim Adc_rot As Word
Dim Adc_grün As Word
Dim Adc_blau As Word
Dim Pwm_rot As Word
Dim Pwm_grün As Word
Dim Pwm_blau As Word
Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Do
Waitms 250
Cls
Locate 1 , 1
Lcd "Motion Control @ RAU"
Locate 2 , 1
Lcd "ROT "
Gosub Rot_messen
Pwm_rot = Adc_rot / 4
Lcd Pwm_rot
Locate 3 , 1
Lcd "GRUEN "
Gosub Grün_messen
Pwm_grün = Adc_grün / 4
Lcd Pwm_grün
Locate 4 , 1
Lcd "BLAU "
Gosub Blau_messen
Pwm_blau = Adc_blau / 4
Lcd Pwm_blau
Ocr0 = Adc_rot
Ocr1a = Adc_grün
Ocr1b = Adc_blau
Loop
End
Rot_messen:
Start Adc
Adc_rot = Getadc(2)
Stop Adc
Return
Grün_messen:
Start Adc
Adc_grün = Getadc(1)
Stop Adc
Return
Blau_messen:
Start Adc
Adc_blau = Getadc(0)
Stop Adc
Return
20081
Grüße Flo
Aufbau:
Ich habe an ADC Kanal 0/1/2 je ein Potti 10k.
Diese faden die PWM Kanäle des Timers0 / Timers1 eines Atmega 16.
Das Konkrete Problem ist das ich immer nur zwei faden kann, sobald ich den dritten fade,
Springen alle drei ADC Kanäle auf 0.
Unabhängig welche ich regele, also beide Timer1 oder je einen von Timer1 und Timer0, kommt der Dritte hinzu springt alles auf 0.
Ich höffe Ihr könnt mir weiter Helfen
Anbei das Bascom Programm.
Schaltplan
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Ddrb = &HFF
Ddrd = &HFF
Ddrc = &HFF
Ddra = &H00
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1
Config Lcd = 20 * 4
Enable Interrupts
Dim Adc_rot As Word
Dim Adc_grün As Word
Dim Adc_blau As Word
Dim Pwm_rot As Word
Dim Pwm_grün As Word
Dim Pwm_blau As Word
Config Timer0 = Pwm , Compare Pwm = Clear Down , Prescale = 256
Config Timer1 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Do
Waitms 250
Cls
Locate 1 , 1
Lcd "Motion Control @ RAU"
Locate 2 , 1
Lcd "ROT "
Gosub Rot_messen
Pwm_rot = Adc_rot / 4
Lcd Pwm_rot
Locate 3 , 1
Lcd "GRUEN "
Gosub Grün_messen
Pwm_grün = Adc_grün / 4
Lcd Pwm_grün
Locate 4 , 1
Lcd "BLAU "
Gosub Blau_messen
Pwm_blau = Adc_blau / 4
Lcd Pwm_blau
Ocr0 = Adc_rot
Ocr1a = Adc_grün
Ocr1b = Adc_blau
Loop
End
Rot_messen:
Start Adc
Adc_rot = Getadc(2)
Stop Adc
Return
Grün_messen:
Start Adc
Adc_grün = Getadc(1)
Stop Adc
Return
Blau_messen:
Start Adc
Adc_blau = Getadc(0)
Stop Adc
Return
20081
Grüße Flo