Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
27/08/2012 #2201


mecatrodatos dijo: Ver Mensaje
Amigos vamos con un proyecto interesante control de acceso son clave utilizando un teclado matrixal de 4x4,pic 16f84a y testigos de operatividad, al ingresar los cuatro digitos correctamente se energiza un rele durante tres segundos ubicado en el pin door del pic ,si la clave es incorrecta se emite tres activaciones en bip y led ubicados en el puerto A0 y A1 respectivamente, la activacion de cada tecla va acompañado de la visualizacion del led ubicado en pin 18 del pic 16f84a.

codigo fuente en pic basic pro
Código:
@ device xt_osc ; oscilador externo XT 
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz

;creacion de variables
tecla var byte                 ;donde se guarada tecla pulsada
repit var byte                 ;para hacer repeticiones 

;configuracion de pines del pic 16f84a

bip var porta.0      ;donde se conecta la chicharra
led var porta.1  ;donde se conecta el led 
door var porta.2   ;donde se conecta rele para la puerta

a var portb.0       ;pines de las filas 
b var portb.1
c var portb.2
d var portb.3 

uno var portb.4
dos var portb.5
tres var portb.6
cuatro var portb.7

iniciando:        ;incica funcionamiento del sistema 

high led:high bip
pause 1000
low led:low bip
goto teclauno        ; comparar clave

barrido:
low a               ;sensar fila a
if uno=0 then tecla=1:return
if dos=0 then tecla=2:return
if tres=0 then tecla=3:return
if cuatro=0 then tecla=10:return
high a
low b
if uno=0 then tecla=4:return
if dos=0 then tecla=5:return
if tres=0 then tecla=6:return
if cuatro=0 then tecla=11:return
high b
low c
if uno=0 then tecla=7:return
if dos =0 then tecla=8:return
if tres=0 then tecla=9:return
if cuatro=0 then tecla=12:return
high c
low d
if uno=0 then tecla=14:return
if dos=0 then tecla=0:return
if tres=0 then tecla=15:return
if cuatro=0 then tecla=13:return
high d
pause 10
goto barrido

;rutina antirrebote de teclas
ptecla:
high led:low bip
pause 100
low led :low bip
espacio:
if uno=0 then espacio
if dos=0 then espacio
if tres=0 then espacio
if cuatro=0 then espacio
pause 25
return
 ;rutina para comparar claves

teclauno:
gosub barrido
gosub ptecla
if tecla=1then teclados
goto falso

teclados:
gosub barrido:gosub ptecla
if tecla=2 then teclatres
goto falso1

teclatres:
gosub barrido:gosub ptecla
if tecla=3 then teclacuatro
goto falso2

teclacuatro
gosub barrido:gosub ptecla
if tecla=4 then open
goto falso3

open:
for repit=1 to 2
pause 100
high led:high bip
pause 100
low led:low bip
next

high door
pause 3000
low door 
goto teclauno

;rutina teclas erroneas

falso:
gosub barrido:gosub ptecla
falso1:
gosub barrido:gosub ptecla
falso2:
gosub barrido:gosub ptecla
falso3:
for repit=1 to 3
pause 100
high led:high bip
pause 100                      
low led: low bip
next
goto teclauno
end
Me gustaría colocarle un teclado matricial de 3*4 y si la programación la tengo que modificar
28/08/2012 #2202


Timer con PIC12F675
Hola amigos hace poco les comente que recien empezaba con el pic 12f675. Ahora por les pediria me ayuden para hacer un timer con este pic los que he visto en el foro son con el 16f84 no se si necesita otra configuracion por el tema del prescaler y las interrupciones.

Agradezco de antemano por su ayuda
28/08/2012 #2203

Avatar de torres.electronico

diodito dijo: Ver Mensaje
me gustaria colocarle un teclado matricail de 3*4 y si la programacion la tengo que modificar
no te entiendo... que necesitas concretamente? Por que ese ejemplo esta completo... no es muy dificil tranformarlo a 3x4... Intentaste tratar de entender como hace la lectura del teclado o solo te interesa copiar, pegar, grabar y energizar?
29/08/2012 #2204

Avatar de ferdy575

hola a todos, de nuevo yo por aquí molestando a ver sí alguien me puede ayudar, ya hace algún tiempo estoy haciendo un temporizador con un 16f84a, bueno ya lo termine pero ahora quiero hacer una versión en el programa donde me de un mensaje al terminar el conteo pero al escribir el nuevo basic solo obtengo errores aquí subo los archivos a ver sí por favor me ayudar, sí ven en los archivos el basic tempo3 funciona normal pero el basic tempo4 funciona super mal, a ver sí me pueden ayudar y muchas gracias de antemano
Archivos Adjuntos
Tipo de Archivo: rar ejemplo temp.rar (44,7 KB (Kilobytes), 73 visitas)
31/08/2012 #2205

Avatar de torres.electronico

Hola ferdy... lo de la visualizacion del DISPLAY ya te lo corregi... estabas reiniciando la pantalla cada vez que entraba en la subrutina de imprimir.... fijate como te lo modifique:

Código:
;CONFIGURACIÓN PIC
 @ DEVICE pic16F84A
 @ DEVICE WDT_ON              
 @ DEVICE PWRT_ON                   
 @ DEVICE PROTECT_OFF      
 @ DEVICE xt_osc  
define osc 4 
;REGISTROS LCD
Define    LCD_DREG    PORTB
Define    LCD_DBIT    0
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    4
Define    LCD_EREG    PORTB
Define    LCD_EBIT    5

Symbol Minutos = PORTA.1    ; AJUSTE MINUTOS
Symbol Segundos = PORTA.2   ; AJUSTE SEGUNDOS
symbol Out = PORTB.7        ; SALIDA CONTROL 
symbol START = PORTA.3      ; INICIO CONTEO
SYMBOL STOP_ = PORTB.6      ; DETIENE CONTEO

;VARIABLES
Pulsos VAR byte 
Mts VAR byte 
Sds VAR byte 
Delay VAR byte
CLEAR
 
TRISB = %01000000 
TRISA = %00011111 

PAUSE 500 

Mts = 03
Sds = 00
pulsos = 0

OPTION_REG = %00000101 ; prescaler = 64
On INTERRUPT GOTO ISR ; IR A RUTINA ISR 
INTCON = %10100000 


;INCIO DEL PROGRAMA
LOOP:
;BOTÓN START
IF START = 0 THEN ; si el boton start es presionado ejecuta lo siguiente
TMR0 = 0 ;Inicializa refgistro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
gosub Retardo
LCDOUT $FE, 1           ; ESTA ES LA MODIFICACION... LA INSTRUCCION "$FE, 1" LO PUSE ACÁ
ENDIF 

;BOTÓN STOP
IF STOP_ = 0 THEN ; si el boton stop es presionado ejecuta lo siguiente
INTCON = 0 ;desabilita el  timer 
gosub Retardo
ENDIF 

;BOTÓN PROGRAMAR LOS MINUTOS
IF Minutos = 0 THEN
Mts = Mts - 1
gosub retardo
ENDIF

;BOTÓN PROGRAMAR LOS SEGUNDOS
if Segundos = 0 then
Sds = Sds - 1
gosub retardo
ENDIF

'*****************************
IF Mts = 60 AND Sds = 60 THEN' 
out = 1                      '
gosub mensaje_fin             '
else                         '
out = 0                      '
gosub retro
gosub MENSAJE1                '
ENDIF                        '
'*****************************
              
GOTO LOOP

;ANTIRREBOTE
Retardo:
FOR Delay = 1 To 200
Pause 1 
NEXT Delay 
RETURN

;EJECUCION DE UN SEGUNDO
DISABLE
ISR:
IF Mts < 0 OR Sds > 0 THEN 'OJO sí se cambia esta función no funciona el conteo
pulsos = pulsos + 1
IF pulsos < 61 THEN NoUpdate
endif

;TIEMPO
Retro:
pulsos = 0

IF Sds = 0 AND Mts => 0 then
Mts = Mts - 1
Sds = 61
endif
if mts > 60 then mts = 60       
if mts = 0 then mts = 0

'ALARMA
IF Mts = 60 AND Sds = 60 THEN
pulsos = pulsos
INTCON = 0 ;desabilita el  timer 
else
TMR0 = 0 ;Inicializa registro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
Sds = Sds - 1
endif                                              
return

mensaje1:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout "Tiempo de espera "  
LCDOUT $FE,$C4,DEC2 Mts, ":",DEC2 Sds
LcdOut $fe,$C16, 0
LCDOUT $fe,$40,$00,$0A,$0A,$00,$04,$11,$0E,$00 'aqui tenemos la carita feliz :)
return

mensaje_fin:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout " <<FINALIZADO>> "  
LCDOUT $FE,$C1,"  PULSE CLEAR"
return

NoUpdate:
INTCON.2 = 0 
Resume                                                                              
ENABLE 
END
END

Despues si me hago de un tiempo, le presto un poco mas de atencion y veo que hace que no pare el contador...saludos
02/09/2012 #2206

Avatar de torres.electronico

Hola...consulta; Lubeck, Reimy, Mecadatros o algun otro groso puede ser que publicaron un ejemplo de control de tarjeta de memoria SD con un 16F877 en este mismo topico? lo busque en casi las 116 paginas y no vi nada... no se por que tengo dentro de la cabeza que algunbo de ellos subio algo... Si me pueden dar una mano y refernciarme el link que me parecio ver, se los agradezco...
02/09/2012 #2207

Avatar de ferdy575

</SPAN>
torres.electronico dijo: Ver Mensaje
Hola ferdy... lo de la visualizacion del DISPLAY ya te lo corregi... estabas reiniciando la pantalla cada vez que entraba en la subrutina de imprimir.... fijate como te lo modifique:

Código:
;CONFIGURACIÓN PIC
 @ DEVICE pic16F84A
 @ DEVICE WDT_ON              
 @ DEVICE PWRT_ON                   
 @ DEVICE PROTECT_OFF      
 @ DEVICE xt_osc  
define osc 4 
;REGISTROS LCD
Define    LCD_DREG    PORTB
Define    LCD_DBIT    0
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    4
Define    LCD_EREG    PORTB
Define    LCD_EBIT    5
 
Symbol Minutos = PORTA.1    ; AJUSTE MINUTOS
Symbol Segundos = PORTA.2   ; AJUSTE SEGUNDOS
symbol Out = PORTB.7        ; SALIDA CONTROL 
symbol START = PORTA.3      ; INICIO CONTEO
SYMBOL STOP_ = PORTB.6      ; DETIENE CONTEO
 
;VARIABLES
Pulsos VAR byte 
Mts VAR byte 
Sds VAR byte 
Delay VAR byte
CLEAR
 
TRISB = %01000000 
TRISA = %00011111 
 
PAUSE 500 
 
Mts = 03
Sds = 00
pulsos = 0
 
OPTION_REG = %00000101 ; prescaler = 64
On INTERRUPT GOTO ISR ; IR A RUTINA ISR 
INTCON = %10100000 
 
 
;INCIO DEL PROGRAMA
LOOP:
;BOTÓN START
IF START = 0 THEN ; si el boton start es presionado ejecuta lo siguiente
TMR0 = 0 ;Inicializa refgistro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
gosub Retardo
LCDOUT $FE, 1           ; ESTA ES LA MODIFICACION... LA INSTRUCCION "$FE, 1" LO PUSE ACÁ
ENDIF 
 
;BOTÓN STOP
IF STOP_ = 0 THEN ; si el boton stop es presionado ejecuta lo siguiente
INTCON = 0 ;desabilita el  timer 
gosub Retardo
ENDIF 
 
;BOTÓN PROGRAMAR LOS MINUTOS
IF Minutos = 0 THEN
Mts = Mts - 1
gosub retardo
ENDIF
 
;BOTÓN PROGRAMAR LOS SEGUNDOS
if Segundos = 0 then
Sds = Sds - 1
gosub retardo
ENDIF
 
'*****************************
IF Mts = 60 AND Sds = 60 THEN' 
out = 1                      '
gosub mensaje_fin             '
else                         '
out = 0                      '
gosub retro
gosub MENSAJE1                '
ENDIF                        '
'*****************************
 
GOTO LOOP
 
;ANTIRREBOTE
Retardo:
FOR Delay = 1 To 200
Pause 1 
NEXT Delay 
RETURN
 
;EJECUCION DE UN SEGUNDO
DISABLE
ISR:
IF Mts < 0 OR Sds > 0 THEN 'OJO sí se cambia esta función no funciona el conteo
pulsos = pulsos + 1
IF pulsos < 61 THEN NoUpdate
endif
 
;TIEMPO
Retro:
pulsos = 0
 
IF Sds = 0 AND Mts => 0 then
Mts = Mts - 1
Sds = 61
endif
if mts > 60 then mts = 60       
if mts = 0 then mts = 0
 
'ALARMA
IF Mts = 60 AND Sds = 60 THEN
pulsos = pulsos
INTCON = 0 ;desabilita el  timer 
else
TMR0 = 0 ;Inicializa registro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
Sds = Sds - 1
endif                                              
return
 
mensaje1:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout "Tiempo de espera "  
LCDOUT $FE,$C4,DEC2 Mts, ":",DEC2 Sds
LcdOut $fe,$C16, 0
LCDOUT $fe,$40,$00,$0A,$0A,$00,$04,$11,$0E,$00 'aqui tenemos la carita feliz :)
return
 
mensaje_fin:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout " <<FINALIZADO>> "  
LCDOUT $FE,$C1,"  PULSE CLEAR"
return
 
NoUpdate:
INTCON.2 = 0 
Resume                                                                              
ENABLE 
END
END
Despues si me hago de un tiempo, le presto un poco mas de atencion y veo que hace que no pare el contador...saludos
hola gracias por tu ayuda, tenias razón con el reseteo del LCD ya funcionan bien los mensajes pero no se por que ahora el tiempo se ha vuelto loco los 3 minutos de programacion los pasa como en 10 segundos y no logro encontrar el error en el tiempo te agradezco sí me puedes ayudar gracias
02/09/2012 #2208


christus dijo: Ver Mensaje
Hola amigos hace poco les comente que recien empezaba con el pic 12f675. Ahora por les pediria me ayuden para hacer un timer con este pic los que he visto en el foro son con el 16f84 no se si necesita otra configuracion por el tema del prescaler y las interrupciones.

Agradezco de antemano por su ayuda
yo no creo....el microcontrolador difiere porque solo cuenta con seis pines i/o y su configuracion es GPIO en vez de port....de resto es lo mismo...si necesitas algun registro interno del micro miras el datasheet pero para lo que pedis lo unico que tenes que tener en cuenta es eso...
03/09/2012 #2209


una consulta soy nuevo en el tema de pic basic pro, esta revisando un libro y halle un ejemplo donde se utiliza una bandera, queria saber para que sirve eso
05/09/2012 #2210


Timer con 12f
guigo dijo: Ver Mensaje
yo no creo....el microcontrolador difiere porque solo cuenta con seis pines i/o y su configuracion es GPIO en vez de port....de resto es lo mismo...si necesitas algun registro interno del micro miras el datasheet pero para lo que pedis lo unico que tenes que tener en cuenta es eso...
hola amigo gracias por tu ayuda tienes razon no hay ningun problema; entonces adjunto el programa ya probado en este caso mantengo apagado un led por 30min y luego enciende 1 min. Ya luego esta salida se puede usar como mejor nos parezca. espero les sea de ayuda.

Código:
;*******************************************************************************
; Notas:
; Enceder y apagar un LED por GP0 
;*******************************************************************************
@ DEVICE PIC12F675
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,PROTECT_OFF,CPD_OFF,WDT_OFF,MCLR_ON,PWRT_ON,BOD_OFF
;*******************************************************************************

DEFINE OSCCAL_1K 1      ; Calibración del oscilador interno
DEFINE OSC 4            ; Definir el oscilador a 4MHz (Para cálculos del compilador)    

ANSEL = 0               ; Modo digital I/O (Cuando todos los bits son 0
                        ; No tiene caso poner %00000000) =)
CMCON = 7               ; Comparadores análogicos desactivados
TRISIO = %111110        ; GPIO = 'e,e,e,e,e,s' (62) Solo GP0 como salida
                        ; GP3/MCLR/Vpp Solo puede ser usado como entrada
                        ; Si se declara el fuse MCLR_XX en OFF



Ticks       VAR byte                           
Minute      VAR byte                         
Second      VAR byte 
a           var byte
ap          var byte
en          var byte
Minute = 0 'inicializa los valores del timer 
Second = 0 
Ticks = 0 
a = 0  
GPIO.0 = 0



inicio:

OPTION_REG = $05               ;  prescaler = 64
ON INTERRUPT GoTo ISR          ; ir a rutina ISR 

 IF a = 0 Then
 
   TMR0 = 0 ;inicializa registro TRMO
   INTCON = $A0 ; habilita tiempo de interuupcion
   a = 1
    
 ENDIF   
     

goto inicio

DISABLE
 ISR:
 Ticks = Ticks + 1
 IF Ticks < 61 Then NoUpdate
 Ticks = 0
 Second = Second + 1
 IF Second = 60 Then
 Second = 0
 Minute = Minute + 1

 ENDIF
 
 
 IF Minute = 30 Then   ' control de la recirculacion
 
 GPIO.0 = 1
 
 endif
 
 IF minute = 31 Then
 
 GPIO.0 = 0
 minute = 0
 
 endif
 
 NoUpdate:
 INTCON.2 = 0 ;rehabilitainterrupciones del TRMO
 Resume
 ENABLE ; 
 End
 End ; Fin del programa
05/09/2012 #2211

Avatar de LaElectronicaMeOdia

como antecedente, estoy realizando una conexion USB con un micro 18f4550 y picbasic+VB6.0, simulado en proteus. (anexo codigos y diagrama)

el problema que tengo que ya me esta dando dolor de cabeza es que pongo el el siguiente codigo como bucle principal y no me funciona

Código:
ProgramStart: 
 gosub DoUSBIn
 Select case usbbuffer[0]
  Case "A"
   toggle PortB.0
  Case "B" 
   toggle PortB.1
   usbbuffer[0]="C"
   gosub DoUSBOut
 End Select

 button  PortC.0,0,0,0,BVarD,0,ExitB
  toggle PortB.1
  usbbuffer[0]="C"
  gosub DoUSBOut   
 ExitB:
goto  ProgramStart
pero si yo comento la parte correspondiente a la entrada de datos, la rutina button funciona bien, mas o menos asi:
Código:
ProgramStart: 
 'gosub DoUSBIn
' Select case usbbuffer[0]
'  Case "A"
'   toggle PortB.0
'  Case "B" 
'   toggle PortB.1
'   usbbuffer[0]="C"
'   gosub DoUSBOut
' End Select

 button  PortC.0,0,0,0,BVarD,0,ExitB
  toggle PortB.1
  usbbuffer[0]="C"
  gosub DoUSBOut   
 ExitB:
goto  ProgramStart
y si yo comento la parte de la rutina button, la parte de entrada de datos funciona bien, mas o menos asi:
Código:
ProgramStart: 
 gosub DoUSBIn
 Select case usbbuffer[0]
  Case "A"
   toggle PortB.0
  Case "B" 
   toggle PortB.1
   usbbuffer[0]="C"
   gosub DoUSBOut
 End Select

 ' button  PortC.0,0,0,0,BVarD,0,ExitB
 '  toggle PortB.1
 '  usbbuffer[0]="C"
 '  gosub DoUSBOut   
 ' ExitB:
goto  ProgramStart
alguien ha tenido algun problema similar con estas instrucciones?

sera un Bug del PBP?
Archivos Adjuntos
Tipo de Archivo: rar CyberCtrl.rar (126,3 KB (Kilobytes), 67 visitas)
05/09/2012 #2212

Avatar de LaElectronicaMeOdia

Por si alguien esta interesado hice esta variante al algoritmo del button y tampoco funciona!
Código:
BVarD            var bit

ProgramStart: 

 gosub DoUSBIn
 Select case usbbuffer[0]
  Case "A"
   toggle PortB.0
  Case "B" 
   Gosub Pulse
 End Select

 if PortC.0 = 0 then
  bvarD=1
 else
  if BVard=1 then BVarD=0: Gosub Pulse
 endif

goto ProgramStart  

Pulse:
 toggle PortB.1
 usbbuffer[0]="C"
 gosub DoUSBOut
Return
por lo que me hace suponer que el usbin esta bloqueando de alguna manera al puerto.C
cualquier sugerencia es bien recibida y considerada.

*Nota en el codigo que anexe me falto actualizar y no puse el TrisC.1 como entrada, pero aun asi no funciona.
07/09/2012 #2213

Avatar de torres.electronico

Hola amigo "LaElectronicaMeOdia", recuerda que select case en todos los tipos de micros de 16 bits para abajo, se queda esperando el valor de la variable para funcionar y saltar donde corresponde... Si no hay dato, espera por el... Similar al comando infrain de los picaxe...Quizas este pasando eso, no estoy el 100% seguro... Yo, te recomendaria sumar un CASE mas que este preparado para cuando el valor sea "0" (o "1" osea la inversa de loq ue estas haciewndo ahora)y directamente salte a lo que tenes abajo u haga otra funcion... De ultima, si ves que el empleo de los pulsadores son importantes, implementa interrupciones por hardware y este donde este, sin importar lo que este haciendo, saltara al programa de interrupcion donde tenes las ordenes para el boton...
saludos
07/09/2012 #2214

Avatar de LaElectronicaMeOdia

Hola Torres, me sirvio mucho tu consejo para cambiar la forma de como estaba viendo el flujo del USBIN, y efectivamente se queda "esperando" el valor.

pongo el diagrama de flujo por si a alguien le sirve.



lo que hice fue poner un timer en VB6 que este enviando el Valor cada 1ms y asi "destrabar" la espera y como mencionas otra posibilidad es el uso de interrupciones en lugar del button, pero se me hizo mas facil de esa manera

Muchas gracias por tu ayuda!.

ademas anexo el ejemplo de comunicacion bidireccional con usb para quien le pueda servir.
esta probado en PBP 2.5, MCS 3.0, MPASM 5.2 y Proteus 7.8

SAludos y de nuevo gracias.
Imágenes Adjuntas
Tipo de Archivo: jpg Dibujo.JPG (28,1 KB (Kilobytes), 357 visitas)
Archivos Adjuntos
Tipo de Archivo: rar CyberCtrl.rar (139,3 KB (Kilobytes), 85 visitas)
07/09/2012 #2215

Avatar de torres.electronico

Excelente aporte "LaElectronicaMeOdia" Gracias por tu generocidad
08/09/2012 #2216
Moderador

Avatar de Chico3001

Alever89 dijo: Ver Mensaje
una consulta soy nuevo en el tema de pic basic pro, esta revisando un libro y halle un ejemplo donde se utiliza una bandera, queria saber para que sirve eso
Una bandera es simplemente un bit que se usa para indicar que una accion ya se ha ejecutado... por ejemplo que el micro termino una rutina matematica y tiene datos listos para enviar, o el ADC ya termino una conversion

Posteriormente otra rutina revisara si esa bandera se encuentra activada y en base a esto ejecutara otra accion
09/09/2012 #2217


aporte a tu proyecto
reyvilla dijo: Ver Mensaje
Muchas gracias amigos, aqui lo prometido la puesta en marcha del brazo, cabe destacar que aun le falta bastante para hacer lo cometido grabar una secuencia, hice unas pruebas pero al parecer el pic se resetea y no hace la secuencia de manera apropiada el brazo se vuelve loco y empieza a dar golpes por todos lados pareciera que tuviera vida propia jejeje ...Pero espero poder lograrlo, creo que es cuestión de velocidad esta muy rápido y lo otro lo de la fuente.
Bueno espero sus criticas y sugerencias...saludosss

http://www.youtube.com/watch?v=6Ui3kS5R2AY
Muy buen proyecto, encuentro que comentas que se resetea el pic, te comento que eso mismo me paso, y depues de investigar tanto y realizar los circuitos encontre que primero se debe colocar varios condensadores de 0,1 mf a las salidas y entradas de los puertos del pic,
segundo que algunas ocaciones colocas mas palabras inadecuadas en la escritura de tu programa, tercero debes aislar muy bien los circuitos. he leido casi todos los comentarios de este tema del foro y casi nadie veo que habla de que han realizado las pruevas en circuitos fisicos, si no en simuladores y la verdad no es lo mismo.
he realizado varias automatizaciones, como procesos de entrada de un producto en un circuito de produccion hasta la salida del producto, automatizacion de una maquina sopladora, automatizacion de una inyectora de plastico vertical, etc y en todos he realizado los circuitos con su proceso de generacion del programa, verificacion y ejecucion del mismo. Al principio cuando realice el primer proyecto, siempre se me reseteava el pic o generava ordenes que no habia introducido o se activava solo, me toco aprender como estabilizar el pic y quitar lo que llaman interferencias electromagneticas y que camello hasta que lo logre y me di cuenta de los herrores cometidos, esto no se lo enseñan a uno en ningun libro, ni en ninguna parte.

asi pues que si quieren publico todo lo que he realizado con circitos y programacion

gracias te felicito por tu proyecto
09/09/2012 #2218

Avatar de kiyero

amigos, solicito su ayuda en el siguiente tema con pulsadores, soy neófito en el tema y estoy estudiándolo, soy de la escuela que piensa que en el tema de la electrónica es mejor ir leyendo y practicando, así que paso a lo que quiero hacer y para lo cual solicito su ayuda:

estoy haciendo una ruleta de leds con el pic 16f628a, y lo que quiero es cada vez que presiono el botón en el porta.0 se ejecute un efecto diferente (si presiona la primera vez, se ejecuta el efecto 1, si presiono nuevamente se ejecuta el efecto 2 y así sucesivamente), los diferentes efectos ya los tengo hechos, pero estoy confundido en cómo hacer la rutina de programación del pulsador

gracias por su ayuda
10/09/2012 #2219


amigo como esta.....

quiciera que me colaboraras en algo
quiero hacer una pausa con un numero que ingreso por comunicacion serial pero no he podido lograrlo....tambien...como hago para enviar numeros mayores de 9....sucede que cuando quiero ingresar un numero por ejemplo el 60, en donde hay un condicional donde ese numero es clave para que la funcion se cumpla, al ingresarlo no lo reconoce...al parecer solo ingresa el 6....que sucede....y lo anterior es que quiero almacenar ese valor para dar un pause con cualquier valor ingresado por serial....

ejemplo

serin portb.0, T2400, variable

si esa variable es igual a cualquier numero supengamos que quiero prender un led i apagarlo despues de una pausa igual al valor ingresado en variable....amigo le pido porfavor una manito es un trabajo de maestria urgente muchas gracias....

---------- Actualizado después de 3 minutos ----------

reyvilla dijo: Ver Mensaje
Hola que bueno que hayas aprendido eso es lo importante ya que para eso es el foro, no solo aprendes tu yo también, con respecto a lo que mencionas de los led's con pulsadores, yo diría que casi todo es posible con los pic y de seguro que si se puede, la cuestión es sacarle el mayor provecho al pic, claro esta sin suturarlo. Ahora lo que se me ocurre es que si le damos prioridad al tiempo al presionar el pulsador este va seguir Incrementando solo que va a cambiar el estado del led hasta que termine su tiempo y vuelva a cambiar de estado por desbordamiento del registro asignado para ese led...Si te fijaste en el código anterior las salidas del puerto A al presionar el botón cambian y eso sin afectar los tiempo de los leds.

Un dato importante que no se si notaste es que a pesar de manejar tiempos bien precisos a través del reloj de tiempo real interno del pic, es que si dentro de nuestro loop de interrupción hacemos muchas otras sentencias el tiempo se ve afectado para largos periodos, un ejemplo seria una hora, si dentro del loop interrupción tenemos muchas sentencias eso genera un retardo y mas en pbp, eso sucede porque consumimos el tiempo y eso pasa porque al entrar al loop se deshabilita la interrupción y el reloj deja de funcionar hasta que se vuelva habilitar la interrupción, si en ese proceso utilizamos muchas sentencias las cuales generan el uso de muchos ciclos de maquina, con lo cual empezamos a degradar la precisión de los tiempos de los leds. Es por eso que solo se uso una sola sentencia en la interrupción para que sea lo mas preciso posible.

Cualquier cosa me avisas saludosss


haaa se me olvidaba....estoy simulando en el terminal de proteus...
saludos
10/09/2012 #2220


kiyero dijo: Ver Mensaje
amigos, solicito su ayuda en el siguiente tema con pulsadores, soy neófito en el tema y estoy estudiándolo, soy de la escuela que piensa que en el tema de la electrónica es mejor ir leyendo y practicando, así que paso a lo que quiero hacer y para lo cual solicito su ayuda:

estoy haciendo una ruleta de leds con el pic 16f628a, y lo que quiero es cada vez que presiono el botón en el porta.0 se ejecute un efecto diferente (si presiona la primera vez, se ejecuta el efecto 1, si presiono nuevamente se ejecuta el efecto 2 y así sucesivamente), los diferentes efectos ya los tengo hechos, pero estoy confundido en cómo hacer la rutina de programación del pulsador

gracias por su ayuda
SALUDOS:Lo mejor que puedes hacer es realizar un diagrama de flujo para poder comprender los pasos a seguir en cada proceso, en realidad siempre que vas ha desarrollar unproyecto siempre debes empezar por realizar un diagrama de flujo.
si quieres te puedo ayudar con el diagrama de flujo
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.