TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: todopic en 14 de Enero de 2010, 12:13:50
-
:5] así es amigos.... no se si son los años... las cervezas... :D
La cuestion es que tengo tres pulsadores en el puerto b de un 16f873, en RB5, RB6, y RB7....
Tengo seteado __CONFIG _XT_OSC & _WDT_ON & _PWRTE_ON & _CP_ALL & _BODEN_ON & _LVP_OFF
RB5 y 6 funcionan correctamente... RB7 no hay forma...
Esta configurado su tris como entrada... la placa está comprobada y es correcta...
pero que me estoy olvidando?... :( :oops:
Un abrazo
Norberto
-
Hola Norberto, asumo que colocaste pull ups o pull downs a B7. ¿No será que activaste accidentalmente la pullup interna en B7?
Si programas el PIC con ICSP habría que darle un vistazo al diagrama de B7.
-
:5] :5] :oops: :oops: :mrgreen: :D :D je je je...
realmente ya me estaba desesperando....
Revisé placa, cambio de bancos..... je je je...
MOVLW B'1110000'
MOVWF TRISB
y el error estaba ante mis ojos... y no lo veía!!! :5]
MOVLW B'11100000' falta un bit.... quizas entre los cambios lo borré ... :mrgreen:
Gracias Mig por tu preocupacion....
ya está solucionado...
Norberto
-
:D :D :D
De nada Norberto.
-
jajajajajajaja :-/ Amigo norberto te comento que ese tipo de cosas siempre me pasa por olvidar conectar un cable o cualquier cosa y paso horas dandole a la cabeza y nada. Abeces resulta tomar un respiro pero ya estoy harto de estos, quisiera hacer procedimientos pero como hacerlos cuando no se ni donde voy!!!! :( .... bueno sera como los Gringos anotar todo lo que se hace y se deja de hacer, me rebienta tener que hacerlo pero creo que cuando los diseños se vuelven complicados no queda otra!
-
:x En assembler pasan esos descuidos! Habré perdido tiempo buscando esos errores y cuando te das cuenta te quieres matar!! :5]
Saludos! Y aflojale a la Quilmes! :D
-
Estoy casi seguro que toma cervesa Santa fe :D :D :D :D
-
Hola, pues aqui te envio el código fuente que yo escribi y que configura RB7, RB6 y RB5
como entradas. Y RB3 y RB2 como salidas. El prog esta hecho con PIC Basic Pro v3.0.
Al presionar RB7 (set_1), RB3= ON RB2= OF. Al volver a presionar RB7 (set_1), RB3= OFF y RB2= ON
Al presionar RB6 (set_2), RB3= RB2= ON.
Al presionar RB5 (reset), RB3= RB2= OFF.
Se visualiza cada pulsación en un LCD de 2x16 conectado en PORT C
Adapta este prog para cualquier PIC. Si funciona
define osc 4 ' Velocidad del cristal XT= 4.000000 Mhz
DEFINE LCD_DREG PORTC ' Configura el puerto C para datos del LCD
DEFINE LCD_DBIT 0 ' Bit de inicio 0 o 4 para bus de datos, RC0 en este caso
DEFINE LCD_RSREG PORTC ' Configura el Register Select en el pto C
DEFINE LCD_RSBIT 5 ' Configura RC5 para habilitar el RS del LCD
DEFINE LCD_EREG PORTC ' Configura el Enable Register en el pto C
DEFINE LCD_EBIT 4 ' Configura RC4 para habilitar el E (Enable) del LCD
DEFINE LCD_BITS 4 ' Configura el numero de bits del bus de datos del LCD
DEFINE LCD_LINES 2 ' Numero de lineas del LCD
DEFINE LCD_COMMANDUS 2000 ' Configura tiempo de espera para comando en uSeg
DEFINE LCD_DATAUS 50 ' Configura tiempo de espera de datos en uSeg
input portb.7 ' Configura RB7 como entrada
input portb.6 ' Configura RB6 como entrada
input portb.5 ' Configura RB5 como entrada
output portb.3 ' Configura RB3 como salida
output portb.2 ' Configura RB2 como salida
pause 10
conmuta var bit
bandera var bit
option_reg.7= 0
on interrupt goto isr
intcon= %11001000 ' Habilita la GIE y las resistencias pull ups
bandera= 0
conmuta= 0
Ciclo:
if bandera= 1 then ' Verifica que no se ha accionado un push bottom
goto Ciclo
endif
disable
isr:
if portb.7= 0 and conmuta= 0 then
LCDOUT $FE, 1 ' Limpia el LCD
PAUSE 10
lcdout $FE, 1,"RB7: Set_1"
pause 10
lcdout $FE,$C0,"RB3: ON RB2: OFF"
pause 10
portb.3= 1 ' Pone a 1 RB3
portb.2= 0 ' Pone a 0 RB2
conmuta= 1
while portb.7= 0
wend
pause 200
goto salir
endif
if portb.7= 0 and conmuta= 1 then
LCDOUT $FE, 1 ' Limpia el LCD
PAUSE 10
lcdout $FE, 1,"RB7: Set_1"
pause 10
lcdout $FE,$C0,"RB3: OFF RB2: ON"
pause 10
portb.3= 0 ' Pone a 0 RB3
portb.2= 1 ' Pone a 1 RB2
conmuta= 0
while portb.7= 0
wend
pause 200
goto salir
endif
if portb.6= 0 then
LCDOUT $FE, 1 ' Limpia el LCD
PAUSE 10
lcdout $fe, 1, "RB6: Set_2"
pause 10
lcdout $FE, $C0, "RB3: ON RB2: ON"
pause 10
portb.3= 1 ' Pone a 1 RB3
portb.2= 1 ' Pone a 1 RB2
while portb.6= 0
wend
pause 200
goto salir
endif
if portb.5= 0 then
LCDOUT $FE, 1 ' Limpia el LCD
PAUSE 10
lcdout $FE, 1, "RB5: Reset"
pause 10
lcdout $FE, $C0, "RB3_OFF RB2_OFF"
pause 10
portb.3= 0 ' Pone a 0 RB3
portb.2= 0 ' Pone a 0 RB2
while portb.5= 0
wend
pause 200
goto salir
endif
salir:
bandera= 1
intcon.0= 0
resume
enable