Hola a todos:Bueno, termine el código para la silla de ruedas de oskario. Gracias a todos los amigos y amigas del foro que colaboraron y mucho. Tambien a mi amigo Gustavo, que es quien dio el puntillaso final y muy importante. Lamentablemente Oskario que era el principal interesado no se habrá podido hacer presente.
Hay algunas cosas que tocar, como ser, la vantana cuando los potes del yoystic astán en descanso debe ser mayor, pero en general en la simulaciòn funciona bien.
Las caracteristicas generales de este programas son que:cuando avance, lógicamente funcionan los dos motores hacia adelante, para doblar en marcha segun el sentido, la velocidad de uno de los motores aumenta y la del otro diminuye, para girar insitu, un motor gira en un sentidoy el otro a la inversa. La velocidad de los motores al girar insitu es un 90 % menor al del funcionamiento normal , tambien al doblar en marcha los incrementos y decrementos en la velocidad de dichos motores no varìan en más de un 10 % con respecto a la velocidad de marcha normal, lo mismo para reversa.
Ahí dejo el código, y el archivo de la simulaciòn en Proteus.
'****************************************************************
'* Name : Silla de ruedas electrónica *
'* Author : [ *
'* Notice : Copyright (c) 2007 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 27/03/2007 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'device: 16f877
trisc=0
DEFINE ADC_BITS 8
TRISA = %11111111 ' fija porta, todo como entrada
trisb = %00000000
ADCON1 = %00000000 '
portb=0
portc=0
advaly var WORD ' Crea variable adval y almacena el resultado
advalx var word
poterd var word
poteri var word
t1 var word
t2 var word
srd var byte
sri var byte
adelanterd var bit
atrasrd var bit
adelanteri var bit
atrasri var bit
'symbol ledred = portb.0
'symbol ledgreen = portb.1
'Pause 500 ' Wait .5 second
adelanterd = 0
atrasrd = 0
adelanteri = 0
atrasri = 0
loop: ADCIN 0, advaly ' Read channel 0 to adval
ADCIN 1, advalx 'lee canal 1 en advalx
adelanterd = 0 'rueda derecha hicia adelante
atrasrd = 0 'rueda derecha hicia atras
adelanteri = 0 'rueda izquierda
atrasri = 0 '
if advalx => 130 then
t1 = advalx * 2
t2 = t1 - 255
advalx = t2 / 20
poterd = advaly - advalx 'pote rueda derecha
poteri = advaly + advalx 'pote rueda izquierda
else
t1 = advalx * 2
t2 = 255 - t1
advalx = t2 / 20
poterd = advaly + advalx
poteri = advaly - advalx
endif
if poterd => 130 then
t1 = poterd * 2
srd = t1 - 255
adelanterd = 1
atrasrd = 0
endif
if poterd =< 125 then
t1 = poterd * 2
srd = 255 - t1
adelanterd = 0
atrasrd = 1
endif
if poteri => 130 then
t1 = poteri * 2
sri = t1 - 255
adelanteri = 1
atrasri = 0
endif
if poteri =< 125 then
t1 = poteri * 2
sri = 255 - t1
adelanteri = 0
atrasri = 1
endif
HPWM 1,srd,1000
HPWM 2,sri,1000
portb.0 = adelanterd
portb.1 = atrasrd
portb.2 = adelanteri
portb.3 = atrasri
Goto loop
End