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.

Reply via email to