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]
> <javascript:>> 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] <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.