Programa
Rotinas
-- ****************************************************************** -- Robots ESEN -- -- Definição dos Portos -- Rotinas comuns para controlo do PWM -- Rotinas comuns para conversor A/D -- ******************************************************************
-- Bibliotecas utilizadas
include f877_4 include jlib
-- ****************************************************************** -- Definição dos Portos -- ****************************************************************** -- PORTO A (esquerda) -- Sensores Laterais
pin_a0_direction = input -- entrada analógica RA0/AN0 do conversor A/D pin_a1_direction = input -- entrada analógica RA1/AN1 do conversor A/D
-- PORTO B (direita) -- Sensores de Pista
pin_b0_direction = input pin_b1_direction = input pin_b2_direction = input pin_b3_direction = input pin_b4_direction = input pin_b5_direction = input
-- PORTO C -- Controlo dos Motores
pin_c1_direction = output -- CCP2 PWM pin_c2_direction = output -- CCP1 PWM pin_c4_direction = output -- direcção do motor esquerdo pin_c5_direction = output pin_c6_direction = output -- direcção do motor direito pin_c7_direction = output
-- Motor Direito
-- pin c6 -> enable 2 motor_d -- pin c7 -> enable 1 motor_d
-- Motor Esquerdo
-- pin c4 -> enable 1 motor_e -- pin c5 -> enable 2 motor_e
-- ****************************************************************** -- Rotinas de PWM -- ******************************************************************
f877_ccp1con = 0b_0000_1100 -- pwm mode on f877_ccp2con = 0b_0000_1100 -- pwm mode on
-- pwm(motor direito, motor esquerdo)
procedure pwm_ccp ( byte in period, byte in duty_l, byte in duty_2 ) is bank_1 period = f877_pr2 bank_0 f877_ccpr1l = duty_l -- set duty cycle 1 f877_ccpr2l = duty_2 -- set duty cycle 2 f877_t2con = 0b_0000_0110 -- tmr2 on, prescale=16 -- f877_t2con = 0b_0000_0101 -- tmr2 on, prescale=4 -- f877_t2con = 0b_0000_0100 -- tmr2 on, prescale=1 end procedure
-- ****************************************************************** -- Rotinas de Conversor A/D -- ******************************************************************
procedure ch0_on is
f877_adcon0 = 0b_0100_0001 -- fosc/8, a0, ad on
end procedure
procedure ch1_on is
f877_adcon0 = 0b_0100_1001 -- fosc/8, a1, ad on
end procedure
procedure ad8_noref is
bank_1
f877_adcon1 = 0b_0000_0000 -- todas as entradas analógicas. 8 msbits do resultado em ADRESH.
bank_0
end procedure
var byte ch_hi
procedure ch_write is delay_10uS ( 2 ) -- espera do tempo mínimo de aquisição adcon0_go = high -- inicia conversão A/D while adcon0_go loop end loop -- espera pelo fim da conversão ch_hi = f877_adresh -- os 8 bits mais significativos do resultado (10 bits) ficam em adresh
end procedure
-- **************************************************************** -- Rotinas de Controlo dos Motores -- **************************************************************** procedure avancar is pin_c4 = high pin_c5 = low pin_c6 = high pin_c7 = low end procedure
procedure recuar is pin_c4 = low pin_c5 = high pin_c6 = low pin_c7 = high end procedure
procedure avancar_m_esq is pin_c4 = high pin_c5 = low end procedure
procedure recuar_m_esq is pin_c4 = low pin_c5 = high
end procedure
procedure avancar_m_dir is pin_c6 = high pin_c7 = low end procedure
procedure recuar_m_dir is pin_c6 = low pin_c7 = high end procedure
procedure parar is pin_c4 = low pin_c5 = low pin_c6 = low pin_c7 = low end procedure