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