Autor Tema: Ayuda con proyecto para finalizar el secundario (PIC 16F84)  (Leído 4071 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« en: 01 de Marzo de 2012, 21:47:28 »
Hola como están, bueno soy nuevo acá y necesitaría ayuda... mucha ayuda.

Aquí esta mi situación.
Termine la escuela técnica hace 5 años, pero nunca pude terminar el proyecto final de electrónica por lo que no me dieron el secundario aprobado y esto me impide seguir con mis estudios universitarios, para ser sincero, intentaron enseñarme programación en assembler en 3 meses creo, con muchos cambios de profesores, por lo que mi conocimiento en dicho lenguaje es casi nulo.
He intentado conseguir ayuda en la escuela, y hasta he hablado con el nuevo profesor de programación de mi escuela secundaria (el cual no estaba en el momento que yo cursé), pero la verdad me tienen a las vueltas y en 1 año de ir seguido a la escuela aprendí poco y nada. Por lo que les pido, el que pueda ayudarme se lo voy a agradecer eternamente.

He aquí la cuestión, encontré en internet un trabajo de un cruce de semáforos con un PIC 16F84, el cual hice y funcionó a la perfección. Hoy fue la mesa de examen para presentarlo y como de costumbre me siguen poniendo trabas, acepto que no fui un alumno ejemplar en la secundaria pero realmente necesito sacarme el secundario de encima, y no se que pretenden... no soy ingeniero ni maestro de programación.

El programa trabaja con el temporizador por desbordamiento, lo que me piden para la próxima mesa (la semana que viene) es lo siguiente.
*En los semáforos principales que la secuencia quede modificada de la siguiente forma. (modificación del programa)
-Cuando se produzca el cambio de rojo a verde, que las luces rojo y ámbar prendan al mismo tiempo
-Cuando se produzca el cambio de verde a rojo, que pase por el ámbar nuevamente.
-Que las luces ambar no parpadeen.

El tipo de programación me preguntó lo siguiente, lo cual no supe contestarle nada ya que el programa no fue hecho por mi.
Que cálculos se hicieron para establecer la base de tiempo del temporizador.
Como se configuró el prescaler. Cualquier información de como funciona el temporizador y su programación me vendrían muy bien para explicarle al profesor.

Les voy a adjuntar el archivo con el informe del proyecto. (Es una copia del original que encontré en internet)
http://www.mediafire.com/download.php?hu5foffbkc9ge3y

y aquí esta el original donde pueden encontrar el código en assembler
http://www.google.com.ar/url?sa=t&rct=j&q=cruce%20de%20semaforos%20pic&source=web&cd=6&ved=0CD0QFjAF&url=http%3A%2F%2Fwww.ele-mariamoliner.dyndns.org%2F~fperal%2Fproy%2Fejemplo-pic.pdf&ei=sxNQT4awCovrtgeNrPjPDQ&usg=AFQjCNHfANru4L9bKdGO2zlNjKqY-QuD8w&cad=rja



Espero no ofender a nadie, y desde ya pido disculpas por mi falta de originalidad al realizar un proyecto para el secundario, pero la verdad es que estoy realmente desesperado, busqué ayuda, puse de mi parte para aprender a programación en assembler pero aún así, los profesores me siguen poniendo mas trabas y la espera se me esta haciendo infinita, además de que estoy a punto de perder estos 2 últimos años de universidad cursados ya que sin el secundario no me pasan la nota de los finales (soy estudiante de Biología), sin nada mas que decir, espero que puedan comprender mi situación y puedan ayudarme con esto que para algunos debe ser fácil pero para mi es como calcular la masa del sol con bananas y papas.

Muchas gracias a todos, y disculpen las molestias.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #1 en: 01 de Marzo de 2012, 22:10:31 »
El peor problema que tienes es que no sabes copiarte bien.
La pagina 16 del documento original explica lo que te pregunto el profesor acerca de como se selecciono el tiempo, eso ni siquiera lo miraste por lo visto...
Te copiaste hasta las imagenes, yo en lugar del profesor te evaluo por la busqueda que has hecho en Google, que has sido bueno.
Lo que te plantearon acerca de como harias esos cambios es muy simple, en los puntos donde el software en assembler hace los cambios en las salidas, es donde debes cambiar como accionas esos pines.
Es todo, la recomendacion es que leas cada linea del codigo con el manual de assembler para PIC al lado, y asi interpretaras el programa al dedillo y sabras contestar todas las preguntas que te hagan y convenceras a los profes que esta vez si sabes de que hablas, ya sin verso ni guitarreo.
No se que querras seguir, pero si es ingenieria electronica, mas vale aprendas esto ahora o sino ni lo intentes... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #2 en: 01 de Marzo de 2012, 22:23:38 »
Hola como va.

Leí el informe entero, y me fijé en esa parte (Punto 7. Cuestiones sobre la temporización), pero ya te da los resultados de lo que supongo que son cálculos previos para establecer la base de tiempo del controlador.
De hecho, si, lo copié en su totalidad, me pidieron que haga algo con un micro controlador y lo hice, no se si alguna vez te pidieron que hagas algo de lo cual no tenes la mas mínima idea, es muy desesperante y frustrante... En 3 meses de prueba y error solo llegue a hacer un solo semáforo y una base de tiempo un tanto desprolija, pero esos apuntes se perdieron hace 2 años.
Estuve mirando detenidamente el programa y creo yo que las partes a modificar para que el circuito funcione como me lo pidieron se encuentran en las siguientes parrafos de lineas ubicados en los casos 25, 30, 55, 60. Y supongo ante todo esto que lo que hace que las luces parpadeen es es la linea de comando que esta en cada cambio de luces como "XORWF PORTA, f" pero la verdad no se que es lo que hace ese comando... Y no se como modificarlo para que no parpadee. Luego para asignar las luces que prenden eso lo puedo hacer, es simplemente mover los bits a los pines que quiero que prendan en su correspondiente puerto.
Y como dije al final del primer post, soy estudiante de Biología.

Se que es un plagio, pero ya no se que hacer para terminar la escuela, necesito terminarla antes de cumplir 30 años mínimo... y los profesores me tienen a las vueltas desde hace mucho.
Se que para ustedes quizás esto les parezca una perdida de tiempo, pero me estarían haciendo un gran favor y seria de muchísima ayuda que alguien me de una mano para terminar el secundario.
Gracias por tu atención.

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #3 en: 03 de Marzo de 2012, 19:04:01 »
hola, volvi con un poco mas de conocimiento, volví a escribir el programa desde 0, habiendome leido el tutorial de assembler y unos cuantos apuntes acerca del tmr0, por lo que me despeje un monton de dudas, como deje el programa deberia hacer lo que se me pide.
Ahora a la hora de compilarlo, el mplab me tira un error en los cambios de banco para la config de los registros...

Código: [Seleccionar]
movlw b'10000111' ;cargar los valores en W para option
bsf STATUS, RP0 ;banco 1
movwf OPTION_REG ;se escriben los bits deseados al registro
bcf STATUS, RP0 ;banco 0

;Programacion de los puertos
bsf STATUS, RP0 ;banco 1
clrf TRISB ;puerto B como salida
clrf TRISB ;puerto A como salida
bcf STATUS, RP0 ;banco 0

me dice esto
Citar
Message[302] D:\MEDINA\S4\S4.ASM 38 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] D:\MEDINA\S4\S4.ASM 44 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] D:\MEDINA\S4\S4.ASM 45 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[305] D:\MEDINA\S4\S4.ASM 82 : Using default destination of 1 (file).

pero de hecho esta bien de esa forma, sera un problema de la libreria del 16f84??
« Última modificación: 03 de Marzo de 2012, 19:09:25 por mm33dd »

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #4 en: 03 de Marzo de 2012, 19:33:48 »
hola, volvi con un poco mas de conocimiento, volví a escribir el programa desde 0, habiendome leido el tutorial de assembler y unos cuantos apuntes acerca del tmr0, por lo que me despeje un monton de dudas, como deje el programa deberia hacer lo que se me pide.
Ahora a la hora de compilarlo, el mplab me tira un error en los cambios de banco para la config de los registros...

Código: [Seleccionar]
movlw b'10000111' ;cargar los valores en W para option
bsf STATUS, RP0 ;banco 1
movwf OPTION_REG ;se escriben los bits deseados al registro
bcf STATUS, RP0 ;banco 0

;Programacion de los puertos
bsf STATUS, RP0 ;banco 1
clrf TRISB ;puerto B como salida
clrf TRISB ;puerto A como salida
bcf STATUS, RP0 ;banco 0

me dice esto
Citar
Message[302] D:\MEDINA\S4\S4.ASM 38 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] D:\MEDINA\S4\S4.ASM 44 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] D:\MEDINA\S4\S4.ASM 45 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[305] D:\MEDINA\S4\S4.ASM 82 : Using default destination of 1 (file).




solved, me falto un "_" en los bits de configuracion arriba del todo :), voy a probarlo.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #5 en: 03 de Marzo de 2012, 19:36:19 »
Hola mm33dd, deberias de poner todo el codigo que tienes escrito, no solamente la parte que has puesto. "OJO" el que has realizado tu no el que copiaste, porque la verdad asi no se cual es la linea 38, 44 etc.

Saludos!

LLege tarde, de todos modos si no funciona pon el codigo entero.  :oops:
« Última modificación: 03 de Marzo de 2012, 19:38:41 por Miquel_S »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #6 en: 03 de Marzo de 2012, 20:36:51 »
Desde cero, felicitaciones, vas por buen camino! Difícilmente alguien te haga toda la tarea, pero encontraras muchos dispuestos a ayudarte.
Adjunta el código entero (en el link opciones adicionales, arriba a la izquierda del botón publicar) por las razones que te explico Miquel_S. Tiene más de 80 lineas, adjuntándolo otros podrán bajar y compilarlo fácilmente, si lo pegas será difícil leer.
Lo mensajes del tipo "Using default destination of 1 (file)" no son errores, son alertas o warning's.
PD: De novatos todos pensamos alguna vez que el problema estaba en la librería o en el compilador... excepto para los usuarios de CCS... esto rara vez fue verdad.
« Última modificación: 03 de Marzo de 2012, 20:40:54 por fabianjsm »
@fabianjsm is on twitter

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #7 en: 03 de Marzo de 2012, 20:41:57 »
Te das cuenta como has progresado ??
Y con ese progreso tienes mas ayuda, ademas de entender y poder defender tu codigo porque lo hiciste tu mismo.
Asi vas bien, publica tu codigo y prueba simularlo si no tienes un circuito armado. Si tienes el circuito no hay mejor prueba que pasarselo al pic y probar...
Felicitaciones por el avance y lo que es mejor, elcambio de actitud...!!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #8 en: 03 de Marzo de 2012, 20:50:40 »
uff no me anduvo, me quedaron las luces de peatones prendidas, en algun lugar se quedo trabado el programa lo voy a ir revisando con el mplab

aca esta el codigo entero.
Código: [Seleccionar]
;Programa para cruce de semaforos
;version modificada

list p=16f84, r=dec
#include <p16f84.inc>

__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_ON & _XT_OSC
;Comienzo de la escritura
org 0x00
goto PRINCIPAL ;salto al programa principal

;Lugar del programa luego de la interrupcion
org 0x04
goto IRQ ;salto a la rutina de interrupción

;Definicion de constantes
CUENTA equ 16
RP2 equ 7
RP1 equ 6
VP2 equ 1
VP1 equ 0

;declaracion de variables (posiciones de memoria que usan)
CONTADOR equ 0x10
RETARDO equ 0x11

;******************
;Programa principal
;inicializacion del micro: registros de control, puertos e interrupciones.
;se queda en espera en un bucle infinito

PRINCIPAL
;programacion del registro OPTION
movlw b'10000111' ;cargar los valores en W para option
bsf STATUS, RP0 ;banco 1
movwf OPTION_REG ;se escriben los bits deseados al registro
bcf STATUS, RP0 ;banco 0

;Programacion de los puertos
bsf STATUS, RP0 ;banco 1
clrf TRISB ;puerto B como salida
clrf TRISA ;puerto A como salida
bcf STATUS, RP0 ;banco 0

;Inicializacion de contador y puerto
clrf CONTADOR ;contador=0
movlw b'10011110' ;S2 rojo, S1 verde. Peatones, Rojo para S1
movwf PORTB ;lo saca por el puerto
bcf PORTA, VP2 ;peatones, verde para S2
bsf PORTA, VP1

;Programacion del temporizador
movlw CUENTA
movwf TMR0 ;cuenta inicial del temporizador, lanza la cuenta

;Programacion de interrupciones
movlw b'10100000'
movwf INTCON

ESPERA
clrwdt
goto ESPERA

;Rutina de atencion a la interrupcion del temporizador
;La interrupcion se producira cada 0,05s.
;Se contaran 5 llamadas
;Se incrementa un contador de segundos para controlar la temporizacion del semaforo
;y se modificara el estado de los semaforos, escribiendo en el puerto segun el tiempo pasado
;no se comprueba cual es la fuenta de la interrupcion porque solo esta habilitada
;la interrupcion del temporizador

IRQ
;Se reprograma el temporizador para empiece a contar ahora ya que las lineas
;anteriores del programa producirian un retardo en la temporizacion

movlw CUENTA
movwf TMR0 ;reprogramacion del timer
incf RETARDO
movwf 5
subwf RETARDO, W ;resta el contenido de RETARDO con w, si es 0, Z en STATUS vale 1
btfss STATUS, Z ;verifica el estado del bit Z en el registro
goto FINSWITCH ;si es 0 viene aca
clrf RETARDO ;si es 1 viene aca

;este codigo se ejecutara cada 0,5s. El contador cuenta medios segundos
incf CONTADOR, F ;contador=contador+1

;Implementacion de sentencias switch-case
CASO20 ;contador < 20?
movlw 40
subwf CONTADOR, W ;resta el contenido de CONTADOR con W y pone en 0 el bit C en STATUS
btfsc STATUS, C ;si hubo acarreo del 7mo bit
goto FINCASO20 ;viene aca si C=1, no hay acarreo, contador >,= a 40
;CONTADOR < 40
movlw b'10011110' ;Coches S2 Rojo, S1 Verde, peatones RP2 OFF, RP1 ON
movwf PORTB ;lo escribe en el puerto
bcf PORTA, VP2 ;Peatones, verde para S2
bsf PORTA, VP1
goto FINSWITCH
FINCASO20


CASO25 ;contador < 25?
movlw 50 ;carga 50 al registro W
subwf CONTADOR, W ;resta el contenido de contador con W
btfsc STATUS, C ;comprueba si hubi acarreo del 7mo bit
goto FINCASO25 ;Si no hubo acarreo, contador >, = 50

;CONTADOR < 25 (no hay acarreo)
movlw b'10011110' ;coches: S2 rojo, S1 verde. peatones: RP2 OFF, RP1 ON
movwf PORTB ;lo escribe en el puerto
btfsc CONTADOR, 0 ;si contador par (1 segundo)
goto FINSWITCH
movlw b'10' ;mascara XOR para conmutar VP2 sin modificar el resto
xorwf PORTA, F ;conmuta VP2 (CADA 1SEG)
goto FINSWITCH
FINCASO25


CASO30 ;25 <= contador < 30
movlw 60
subwf CONTADOR, W ;compara contador con 60
btfsc STATUS, C ;comprueba hubo acarreo del 7mo bit
goto FINCASO30 ;si no hubo viene aca, contador > = 60
;contador <30 (no hay acarreo
movlw b'00010010' ;prende ambar S2 junto con rojo
movwf PORTB ;prende luz ambar sin parpadear
bsf PORTB, 0 ;APAGA S1 VERDE

btfsc CONTADOR, 0 ;comprueba el bit 0 del registro CONTAOR
goto FINSWITCH ;si es 1 viene aca
movlw b'10' ;si es 0 salta aca
xorwf PORTA, F ;conmuta VP2 cada 1 segundo
goto FINSWITCH
FINCASO30



CASO50 ;30 <= contador < 50?
movlw 100
subwf CONTADOR, W ;compara contador con w
btfsc STATUS, C ;comprueba si hubo acarreo
goto FINCASO50 ;si no lo hubo viene aca
;contador < 50 (no hay acarreo)
movlw b'01110011' ;coches: s2 verde, s1 rojo. peatones: rp2 on, rp1 off
movwf PORTB ;lo escribe en el puerto
bsf PORTA, VP2 ;peatones verde para s1
bcf PORTA, VP1
goto FINSWITCH
FINCASO50


CASO55
movlw 110
subwf CONTADOR, W ;compara contador con 110
btfsc STATUS, C ;comprueba si hubo acarreo
goto FINCASO55 ;no hay acarreo, contador > = 110
;contador <55
movlw b'01110011' ;s2 verde, s1 rojo. peatones: rp2 on , rp1 off
movwf PORTB ;lo escribe en el puerto
btfss CONTADOR, 0 ;CONTADOR PAR?
goto FINSWITCH
movlw b'01' ;mascara xor para conmutar vp1 sin modificar el resto
goto FINSWITCH
FINCASO55


CASO60 ;55 <= contador < 60
movlw 120
subwf CONTADOR, W ;compara contador con w
btfsc STATUS, C ;comprueba si hubo acarreo
goto FINCASO60 ;si no hubo viene aca, contador > = 120
;contador<60 no hay acarreo
movlw b'00010010' ;prende ambar de s2 con verde, y con rojo de s1
btfss CONTADOR, 0 ;si contador es par
bsf W, VP1
movwf PORTB
bsf PORTB, 3
btfsc CONTADOR, 0
goto FINSWITCH
movlw b'01'
xorwf PORTA,F
goto FINSWITCH
FINCASO60


OTHERWISE ;LLEGO A 60
movlw b'10011110' ;coches s2 rojo s1 verde, peatones rp2 off rp1 on
movwf PORTB ;lo escribe en el puerto
bcf PORTA, VP2 ;peatones verde para s2
bsf PORTA, VP1
clrf CONTADOR ;empieza el ciclo de nuevo
FINSWITCH ;FIN DE LA SENTENCIA SWITCH-CASE
movlw b'10100000'
movwf INTCON
retfie ;retorno a la interrupcion
end

voy a seguir probando y lo voy a ir simulando paso a paso con el mplab a ver donde se quedo trabado.


...mmm me parece que se va al joraca este programa, si no anda en esta empiezo programando tmr0 desde 0... haciendo otra base de tiempo y otros casos para los semáforos.
« Última modificación: 03 de Marzo de 2012, 21:19:13 por mm33dd »

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #9 en: 04 de Marzo de 2012, 00:40:50 »
El primer mensaje es un alerta porque __CONFIG esta al margen, puedes separarlo con un tabulador.
El mensaje 302 te esta avisando que estas modificando un registro que no se encuentra en el banco cero, para que tomes la debida precaución antes de modificarlo, cosa que ya estas haciendo. Si te molesta podes poner en la cabecera de tu código esta linea para que el compilador no la emita.

Código: ASM
  1. ERRORLEVEL -302

Si no funciona como quieres, además de los problemas semánticos tal vez tengas algún error en la lógico del programa. Podrías utilizar un diagrama de flujos.
@fabianjsm is on twitter

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #10 en: 05 de Marzo de 2012, 19:34:13 »
gracias!!


tengo otra duda, con la instruccion subwf, estoy restando el contenido de un registro que yo elija con el el valor del registro W.
Cuando se produce un acarreo del 7mo bit en esa operación?


y otra cosa, xorwf compara todos los bits entre w y un registro si yo no espicifico que bits quiere que compare? tengo entendido que el resultado es 0, siempre que los bits que se comparen sean iguales, y es 1 cuando son distintos.
« Última modificación: 05 de Marzo de 2012, 19:45:25 por mm33dd »

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #11 en: 05 de Marzo de 2012, 22:42:50 »
SUBWF efectúa la operación destino = f - W
El acarreo en el séptimo bit se produce si f es menor que W, en numeros naturales sería el equivalente a señalar un resultado negativo.
XORWF efectúa la operación lógica XOR entre W y f, no necesariamente es para comparar, puedes utilizar para invertir bits por ejemplo:
   F   = 110011
   W   = 101010
   F^W = 011001
Observa que en las posiciones donde W tiene un 1, Resultado tiene el inverso de F, mientras que un cero no produce cambios.
@fabianjsm is on twitter

Desconectado mm33dd

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda con proyecto para finalizar el secundario (PIC 16F84)
« Respuesta #12 en: 06 de Marzo de 2012, 01:30:04 »
gracias! que buen foro, termine y me anda perfecto... voy a seguir por aca porque ahora que aprendi a programar un poco tengo algunos otros proyectos y me quedan 3 16f628 al pedo.

Saludos y muchas gracias!!