Thanks alot, Vasile! Your replies are important for me. I will answer by blocks of you reply:
понедельник, 11 апреля 2016 г., 20:18:30 UTC+3 пользователь vasile написал: > > Anatoly, > You don't need any interrupt to read the encoder and set the pwm value. > Just do the following trick: set TMR0 for overflow at x mS (where x is the > perfect match for your encoder speed, try x=10 or so). Read the enc_a and > enc_b inputs only when TMR0_IF owerflows. Then reset the TMR0_IF. Increment > (enc_a) or decrement (enc_b) the pwm dutycicle register. > *I can do it using parts of code from timer slots library, it is written very simple and understandeful. * > > Use the pwm_hardware library from Jallib pack. Take a look how to use it > from the samples. There are a few examples for 12F683. > PWM output of the CCP is GP2. First make your code to work for PWM only > using the ADC and a potmeter. Then replace ADC with your encoder routine. > *I used it much times, it is very easy to use ADC and PWM in JAL thanks to its creators.* > > Sorry but I'm not able to write any code for you, I forgot everything...:) > If doesn't work, try also to post your questions at yahoo jallist, there > are a lot of guys there which are eating code. > *I will try it if will be no result with interrupt on fade. Yes, I will try to use interrupt on pin anyway, it can be very useful in future. Thank you.* > > Vasile > > On Mon, Apr 11, 2016 at 7:27 PM, Anatoly Titov <[email protected] > <javascript:>> wrote: > >> Hello again! And thanks for reply! >> Can you help me with new code using interrupts for the same task, it does >> not work and I don't mind why.I even switched off the PWM because it uses >> interrupts too (I think so). With no result =( >> Code is small: >> -- target PICmicro >> include 12f683 >> pragma target CLOCK 8_000_000 >> pragma target OSC INTOSC_NOCLKOUT >> pragma target WDT disabled >> pragma target MCLR internal -- reset on pin A3 >> pragma target WDT DISABLED -- watchdog >> pragma target BROWNOUT DISABLED -- brownout reset >> pragma target FCMEN DISABLED -- clock monitoring >> pragma target IESO DISABLED -- int/ext osc. switch >> -- >> OSCCON_SCS = 0 -- select primary >> oscillator >> OSCCON_IRCF = 0b111 -- 8 MHz >> enable_digital_io() -- make all pins >> digital I/O >> -- setting pins >> >> alias enc_b is pin_A5 >> pin_A5_direction = input >> >> alias enc_a is pin_A4 >> pin_A4_direction = input >> >> alias led is pin_A2 >> pin_A2_direction = output >> led = off >> >> OPTION_REG_NGPPU = 0 --\ >> WPU_WPU4 = 1 -- подтяжка >> WPU_WPU5 = 1 --/ >> IOC_IOC5 = 1 --разрешаем прерывание >> OPTION_REG_INTEDG = 0 -- прерывание по переходу в низкий уровень >> INTCON_GIE = on -- глобальное разрешение прерываний >> INTCON_GPIF = off -- снимаем флаг прерывания по GPIO >> -- >> >> --setting variables >> var byte pwm_cnt, pwm = 10 >> -- >> >> procedure interrupt is -- обработчик прерывания по нажатию кнопки >> pragma interrupt >> if INTCON_GPIF then -- снимаем флаг прерывания по GPIO >> INTCON_GPIF = off >> INTCON_GPIE = off -- запрещаем прерывания по GPIO >> >> if enc_a then >> if pwm!=254 then pwm = pwm + 1 end if >> else >> if pwm!=0 then pwm = pwm - 1 end if >> end if >> >> INTCON_GPIE = on -- разрешаем прерывания по GPIO >> end if >> end procedure >> >> forever loop >> pwm_cnt = pwm_cnt + 1 --когда дотикает до 255,само станет нулем >> if pwm_cnt < pwm then led = on else led = off end if >> end loop >> >> >> >> >> понедельник, 11 апреля 2016 г., 7:14:26 UTC+3 пользователь vasile написал: >>> >>> Congratulations Anatoly! >>> >>> I'm using ISR in a way I've learn with old jal and never failed. Never >>> do it with libraries even they works ok. >>> >>> On Sun, Apr 10, 2016 at 10:55 PM, Anatoly Titov <[email protected]> >>> wrote: >>> >>>> Closed. I changed clock to 8Mhz and decreased check rate to 1 ms. All >>>> works fine. >>>> >>>> воскресенье, 10 апреля 2016 г., 12:03:04 UTC+3 пользователь Anatoly >>>> Titov написал: >>>>> >>>>> Hello! I made a code adapted from Arduino sketch. Sketch works, my >>>>> code nope =(((( Please tell, how to get working code without interrupts. >>>>> http://www.hobbytronics.co.uk/arduino-tutorial6-rotary-encoder working >>>>> sketch >>>>> my code: >>>>> >>>>> -- target PICmicro >>>>> include 12f683 >>>>> pragma target CLOCK 4_000_000 >>>>> pragma target OSC INTOSC_NOCLKOUT >>>>> pragma target WDT disabled >>>>> pragma target MCLR internal -- reset on pin A3 >>>>> pragma target WDT DISABLED -- watchdog >>>>> pragma target BROWNOUT DISABLED -- brownout reset >>>>> pragma target FCMEN DISABLED -- clock monitoring >>>>> pragma target IESO DISABLED -- int/ext osc. >>>>> switch >>>>> -- >>>>> enable_digital_io() -- make all pins >>>>> digital I/O >>>>> --OPTION_REG_NGPPU = 0 -- pull-ups ON >>>>> OSCCON_SCS = 0 -- select primary >>>>> oscillator >>>>> OSCCON_IRCF = 0b110 -- 4 MHz >>>>> -- >>>>> -- setting pins >>>>> >>>>> >>>>> alias enc_b is pin_A5 >>>>> pin_A5_direction = input >>>>> >>>>> >>>>> alias enc_a is pin_A4 >>>>> pin_A4_direction = input >>>>> >>>>> >>>>> -- configure PWM >>>>> pin_ccp1_direction = output >>>>> include pwm_hardware >>>>> pwm_max_resolution(1) >>>>> pwm1_on() >>>>> >>>>> >>>>> -- timer setup >>>>> const TIMER0_ISR_RATE = 1000 -- 1 kHz isr rate >>>>> const DELAY_SLOTS = 1 -- support slots >>>>> include timer0_isr_interval >>>>> timer0_isr_init() -- init timer0 isr >>>>> >>>>> >>>>> --setting variables >>>>> var byte pwm >>>>> var bit old_a >>>>> -- >>>>> pwm = 0 >>>>> pwm1_set_dutycycle_percent(pwm) >>>>> >>>>> >>>>> forever loop >>>>> >>>>> >>>>> if check_delay(0) then >>>>> set_delay(0, 5) >>>>> >>>>> >>>>> if old_a & !enc_a then >>>>> if enc_b then >>>>> if pwm!=254 then pwm = pwm + 1 end if >>>>> else >>>>> if pwm!=0 then pwm = pwm - 1 end if >>>>> end if >>>>> pwm1_set_dutycycle_percent(pwm) >>>>> end if >>>>> >>>>> >>>>> old_a = enc_a >>>>> end if >>>>> >>>>> >>>>> end loop >>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "jallib" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To post to this group, send email to [email protected]. >>>> Visit this group at https://groups.google.com/group/jallib. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "jallib" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at https://groups.google.com/group/jallib. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "jallib" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/jallib. For more options, visit https://groups.google.com/d/optout.
