Foro Sobre Pics

donde esta la rutina ADC1 que usted llama?

favor postearla

hay que tratar de reducir los call return anidados (osea call return dentro de otros call return) porque segun el tipo pic se pueden salir del stack y se pierde todo el hilo del programa.

tienes algun led en el montaje? para este tipo de diagnostico suelen ser muy utiles.
 
donde esta la rutina ADC1 que usted llama?

favor postearla

hay que tratar de reducir los call return anidados (osea call return dentro de otros call return) porque segun el tipo pic se pueden salir del stack y se pierde todo el hilo del programa.

tienes algun led en el montaje? para este tipo de diagnostico suelen ser muy utiles.
uso un pic 16f877A.

realemente el no se sale de stack a menos que ocurra la interrupcion, ya que esos call y returns quedan guardados en la "pila" y no tienen como retornar

tengo 4 leds.

ADC1 MOVLW 0C6H
CALL CONTROL
MOVF PRODH,0
MOVWF BINARIOH
MOVF PRODL,0
MOVWF BINARIOL
CALL BIN_BCD
CALL MUESTRE
RETURN

BIN_BCD BCF STATUS,0
MOVLW .16
MOVWF COUNT
CLRF DMIL
CLRF UMIL_CENT
CLRF DEC_UNID

LOOP24 RLF BINARIOL,F
RLF BINARIOH,F
RLF DEC_UNID, F
RLF UMIL_CENT, F
RLF DMIL, F
DECFSZ COUNT, F
GOTO REPITA
RETLW 0

REPITA CALL ADJDEC
GOTO LOOP24

ADJDEC MOVLW DEC_UNID
MOVWF FSR
CALL ADJBCD
MOVLW UMIL_CENT
MOVWF FSR
CALL ADJBCD
MOVLW DMIL
MOVWF FSR
CALL ADJBCD
RETURN

ADJBCD MOVLW 3
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,3
MOVWF 0
MOVLW 30
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,7
MOVWF 0
RETLW 0

MUESTRE MOVF DMIL,0
ANDLW B'00001111'
ADDLW 30H
CALL DATO
SWAPF UMIL_CENT,0
ANDLW B'00001111'
ADDLW 30H
CALL DATO
MOVF UMIL_CENT,0
ANDLW B'00001111'
ADDLW 30H
CALL DATO
MOVLW ","
CALL DATO
SWAPF DEC_UNID,0
ANDLW B'00001111'
ADDLW 30H
CALL DATO
MOVF DEC_UNID,0
ANDLW B'00001111'
ADDLW 30H
CALL DATO
RETURN
esta rutina pasa de bin a bcd y de bcd a ascii y me lo escribe en el display de una vez
aque sospecho que este el problema por que como se puede apresiar tiene varios call y return.

otra cosa, yo lei en algun lado que cuando se generaba una interrupcion la ultima direccion donde se generó la interrupcion queda guardado en el Program Counter, y este a su vez se guarda en la "pila", como puedo borrar eso? asi tal vez pueda terminar con ese error
 
donde usas interrupciones? cual es la rutina de interrupcion?
cuando se utilizan interrupciones es preferible GUARDAR TODO al principio de la interrupcion y DEVOLVER todo como estaba al final de esta.
asi nada cambia antes y despues de la interrupcion.

podrias utilizar mientras uno de los leds para diagnostico
por ejemplo encenderlo al ppio de la rutina loop24 y apagarlo al final

si se prende y se apaga pues ya sabes que ahi no es el problema
a mi me han servido siempre los leds pa saber aonde se queda pegao el programa

exitos!
 
donde usas interrupciones? cual es la rutina de interrupcion?
cuando se utilizan interrupciones es preferible GUARDAR TODO al principio de la interrupcion y DEVOLVER todo como estaba al final de esta.
asi nada cambia antes y despues de la interrupcion.

podrias utilizar mientras uno de los leds para diagnostico
por ejemplo encenderlo al ppio de la rutina loop24 y apagarlo al final

si se prende y se apaga pues ya sabes que ahi no es el problema
a mi me han servido siempre los leds pa saber aonde se queda pegao el programa

exitos!

OK gran consejo, no lo habia pensado asi :p gracias

ps este es un programa que regula la velocidad de un motor de DC, usando el PWM, las interrupciones son basicamente las del teclado, lo que se detecta en el PORTB<4:7>, lleva a la interrupcion, en un caso dado, la interrupcion debe salir de lo que este haciendo y regresar al menu principal, ahi es donde radica principalmente mi problem, por que constantemente refresca los datos provenientes de un sensor análogo al lcd

ORG 04H
MOVWF W_REG
SWAPF STATUS,0
MOVWF STATUS_REG
GOTO ATECLADO

ATECLADO MOVF PORTB,0
CALL TECLADO
MOVWF V_TECLADO
INCF NUM_MENU
MOVLW .1
XORWF NUM_MENU,0
BTFSC STATUS,2
GOTO MENU1
MOVLW .2
XORWF NUM_MENU,0
BTFSC STATUS,2
GOTO MENU2 ;CAMBIA MENU DE TECLADO
MOVLW .3
XORWF NUM_MENU,0
BTFSC STATUS,2
GOTO MENU3 ;CAMBIA MENU DE TECLADO
MOVLW .4
XORWF NUM_MENU,0
BTFSC STATUS,2
GOTO MENU4
GOTO ATRAXXX ;AQUI ES DONDE DEBE DE DEJAR DE HACER LO QUE ESTE HACIENDO Y REGRESAR AL MENU PRINCIPAL



ATRAXXX CLRF COMPARAR
BCF ADCON0,2
BCF REGX,0
MOVF V_TECLADO,0
CALL TABLA7
MOVWF COMPARAR
MOVLW 0FFH
XORWF COMPARAR,0
BTFSC STATUS,2
GOTO TERMINAR5
MOVLW .1
XORWF COMPARAR,0
BTFSC STATUS,2
GOTO BACK ;AQUI BORRA LAS VARIABLES IMPLICADAS EN EL CALCULO DEL PWM
GOTO TERMINAR


BACK CALL BORRAR_VAR
MOVLW 00H
MOVWF CCP1CON
MOVWF CCP2CON
MOVWF CCPR1L
MOVWF CCPR2L
MOVWF CCPR2H
MOVWF CCPR2L
MOVWF PWM1
MOVWF PWM2
BSF STATUS,5
MOVLW B'00000110'
MOVWF TRISC
BCF STATUS,5
MOVLW B'00000011'
MOVWF T2CON
CALL BORRAR ;SUPONGO QUE POR ESTOS LADOS ES QUE SE PIERDE POR QUE SALE DEL MENÚ EN EL QUE ESTABA ANTES
CALL INI_LCD
BSF PORTB,0
BCF PORTB,1
BCF PORTB,2
BCF PORTB,3
GOTO TERMINAR


BORRAR_VAR CLRF NUM_MENU ;FINALMENTE BORRA VARIABLES
CLRF VALORH_PWM
CLRF RES_RPM
CLRF PORTC
CLRF AUX4
CLRF AUX5
CLRF AUX6
CLRF NUMBER1
CLRF NUMBER2
CLRF NUMBER3
CLRF NUM_RPM
CLRF COMPARAR
CLRF REGX
RETURN

TERMINAR CLRF PORTC
CALL DEL200
MOVF PORTB,0
SWAPF STATUS_REG,0
MOVWF STATUS
SWAPF W_REG,1
SWAPF W_REG,0
BCF INTCON,0
RETFIE ;AQUI TERMINA LA INTERRUPCION Y COMO PODEMOS DEDUCIR EN ALGUN LADO DEBIO QUEDAR ALGUN CALL/RETURN HUERFANO

si se prende y se apaga pues ya sabes que ahi no es el problema
a mi me han servido siempre los leds pa saber aonde se queda pegao el programa

Prenderia y apagaria demasiado rapido ya que el solo pasa por ahi 16 veces y con un cristal de 4mhz esa vaina pasa es al soco :S
 
ponle un delay de 100msec antes de apagar
cuando encuentres el problema quitas lo de los leds y lo de los delays
y puedes usar tus leds o pins en otras cosas
 
ya solucioné todos los problemas que tenia...

ahora solo me queda un problema y es poner el simbolo de grados (°) "248 en decimal" en el cgram del lcd, por mas que leo como hacerlo no entiendo correctamente como hacer el procedimiento.

gracias por su ayuda
 
buenas

para solicitar una ayuda respecto a una rpogramacion de un pic16f877
es un velocimetro y este solo me muestra km/h
quisiera saber si alguno me puede colaborar modificando el codigo para
que me de la opcion de m/s y cm/s alfinal tenga las tres y se pueda cambiar con un pulsador
como esta lo del dametro de la rueda

PD: adjundo el .rar donde esta en proteus y su respectivo codigo

PD: si alguno me podria ayudar hacer el impreso tambien
PD2: el codigo no lo hize yo por eso solicito ayuda

gracias
 

Archivos adjuntos

  • pic.rar
    30.1 KB · Visitas: 163
aha?
y no va a postear las fotos funcionando?
el codigo del programa?
el schematic? las placas?
beuno como habia expresado anteriormente en este instante tengo algunos incovenientes monetarios :p :muerto:

pero ps dejo el programa y la simulacion en proteus, falta pulirlo un poco, ya que no he tenido tiempo disponible para ello.

lo que me falta es la parte de seleccion de velocidad manual, no me muestra correctamente los datos en el lcd y tambien cambiar la constante por la cual se multiplica, esto con el fin de que el pwm varie de 0 al 100% de la resistencia. de esto me encargo esta semana que estoy un poco mas desocupado.

en terminos generales el programa funciona pero solo la parte automatica, asi que sería maso un 87% del programa funcionando correctamente

otra cosa, alguien tiene una guia o algo para poder programar en C, es que asi se me haria mas facil la implementacion de formulas para este tipo de proyecto que requiere bastantes cálculos.
 

Archivos adjuntos

  • PIC PROYECT.rar
    19.7 KB · Visitas: 124
Que tal bros....ando indagando sobre las interrupciones del pic 16f84....pero no me queda claro como es que reacciona el pic ante ellas y menos como acomodar el codigo para que al momento de la interrupcion haga esto y no aquello...en fin...agradesco cualquier dato...
 
buenas gente

solicitar ayuda,
alguien me puede regalar una explicacion de un PIC16F877
caracteristicas, aplicaciones, y su conformacion interna

gracias
 
recomendadisimo
pero en que programa usted?
assembler?
C?
que desea sacarle?

de momento mi conocimiento sobre pics es casi nulo apenas los empiezo a conocer
lo que si me gustaria es que me ayudaran a configurar el programa que esta alli para cambiarle los rangos de medicion al programa

buenas

para solicitar una ayuda respecto a una rpogramacion de un pic16f877
es un velocimetro y este solo me muestra km/h
quisiera saber si alguno me puede colaborar modificando el codigo para
que me de la opcion de m/s y cm/s alfinal tenga las tres y se pueda cambiar con un pulsador
como esta lo del dametro de la rueda

PD: adjundo el .rar donde esta en proteus y su respectivo codigo

PD: si alguno me podria ayudar hacer el impreso tambien
PD2: el codigo no lo hize yo por eso solicito ayuda

gracias

el autor de codigo me dijo lo siguiente

la mecanica es la siguiente:


1-conozco el diametro de la rueda
2-la mulitplico por pi para saber cuanto recorre una sola revolucion (circuferencia= 2*pi*r ó pi*Diametro),
3-como el diametro es en centimetros, la revolucion me la da en centimetros (si el diametro es 12, recorre 12*pi centimetros cada vez que la llanta da una vuelta)
4- hago la conversion de cm a m (1m=100cm, por tanto, xm=recorrido /100)
5-multiplico eso recorrido por el numero de vueltas dados en un segundo
6-luego tengo que saber la velocidad, pero en kilometros, y yo tengo metros, como sabes, hay que hacer la conversion, aplicando matematica barata, dividimos los metros entre 1, por que eso es lo que ha pasado, un segundo, pero convertimos metros por segundo en km/hora, entonces, 1000m=1km, 3600s=1h, entones multiplico por 3600y divido por 1000, que es lo mismo que dividir ello por 3.6, y listo, tengo la velocidad en km/h,


si lo que quieres es que te bote la velocidad en m/s, no lo dividas por 3.6 en la parte que dice "KM_H:", mas abajito de "CIRCUNFERENCIA:", y si quieres que la de en cm/s, metros no lo divides entre 100 en la parte donde dice "CIRCUNFERENCIA:", y listo, problema resuelto,


pd: el programa esta mas arribita

si alguien me puede colaborar se los agradezco
 
esta muy enfocado por el lado de fisica mecanica la vaina

hay otras formas de atacar el problema

una vez hicimos un programa muy sencillo que solo comparaba el contador de pulsos con direcciones de memoria, y la direccion de memoria correspondiente contenia el numero en km/h
(solo media de 0 a 100km
en incrementos de 1km)

aunque es muy basico hace lo que tiene que hacer
y no me parece comenzar pic de una a hacer operaciones matematicas (suponiendo que esta en assembler)

primero aprenda a manejar el LCD
despues a contar pulsos
-a contar pulsos por interrupciones
-operaciones matematicas
y finalmente puede hacer su proyecto
 
buenas, hola amigos de laneros, miren lo que e estado desarrollando, se que es poco, pero no es mi fuerte :p , aver el siguiente programa, trata de hacer lo siguiente:

por medio de este programa junto a una protoboard y un display

1. mostrar en el display los numeros del 0 al 9
2 hacer una pausa
3. devolverse en el conteo

el problema es q me hace falta algo del codigo... pero no he podido dar con el clavo... se que esta en el intermedio.. donde hace la pausa y luego se devuelve(bueno... eso creo yo).

si quieren lo puede mejorar... si quieren :p

saludos
 

Archivos adjuntos

  • PRUE01.rar
    451 bytes · Visitas: 105
buenas, hola amigos de laneros, miren lo que e estado desarrollando, se que es poco, pero no es mi fuerte :p , aver el siguiente programa, trata de hacer lo siguiente:

por medio de este programa junto a una protoboard y un display

1. mostrar en el display los numeros del 0 al 9
2 hacer una pausa
3. devolverse en el conteo

el problema es q me hace falta algo del codigo... pero no he podido dar con el clavo... se que esta en el intermedio.. donde hace la pausa y luego se devuelve(bueno... eso creo yo).

si quieren lo puede mejorar... si quieren :p

saludos

hermano y el circuito en proteus
es mejor que lo subas para no ponerse a mirar el codigo y poner todas las salidas cuando ya lo tenes
 
jejejeje, olvide que yo tengo el circuito en mi protoboard :p.. pero me toka dibujrlo en proteus.. aunque no recuerdo donde esta esepregorama en mi pc, se que lo tengo.. pero me toka buscarlo...:muerto: , voy a ver si me acuerdo de dibujar circuitos en proteus

saludos