Autor Tema: remplazar pic serie 12c5xx y 12f6xx  (Leído 3446 veces)

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

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
remplazar pic serie 12c5xx y 12f6xx
« en: 14 de Enero de 2006, 12:27:00 »
Haber si alguien me da una manitoSonrisa:

Leyendo la hoja de datos de estos pics creo que es posible hacer lo siguiente:

1.- Remmplazar el pic 12c508 por el 12c509 solo cambiando la cabecera del programa

LIST P = 12c508a
INCLUDE <P12c508a.inc>

por

LIST P = 12c509a
INCLUDE <P12c509a.inc>

siempre y cuando el programa no supere EPROM 512 y RAM 25? se puede hacer tambien lo contrario? 12c509a por el 12c508a?

2.- Remplazar 12c508a o 12c509a por cualquiera de 12f629 o 12f675, sin usar el conversor A/D.

Tengo varios programas para los 508 y 509, pero quisiera modificarlos posteriormente por lo cual no se si es posible esto para no tener que usar varios pics de la serie 12c y ahorrarme varios solesSonrisa Gigante que andan escasos por aca en el peruloco.

Gracias anticipadas y felicitaciones por el excelente foro.RebotadoRebotadoRebotadoRebotado
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #1 en: 14 de Enero de 2006, 13:23:00 »
Escrito originalmente por veguepic
Haber si alguien me da una manitoSonrisa:

Leyendo la hoja de datos de estos pics creo que es posible hacer lo siguiente:

1.- Remmplazar el pic 12c508 por el 12c509 solo cambiando la cabecera del programa

LIST P = 12c508a
INCLUDE <P12c508a.inc>

por

LIST P = 12c509a
INCLUDE <P12c509a.inc>

siempre y cuando el programa no supere EPROM 512 y RAM 25? se puede hacer tambien lo contrario? 12c509a por el 12c508a?

2.- Remplazar 12c508a o 12c509a por cualquiera de 12f629 o 12f675, sin usar el conversor A/D.

Tengo varios programas para los 508 y 509, pero quisiera modificarlos posteriormente por lo cual no se si es posible esto para no tener que usar varios pics de la serie 12c y ahorrarme varios solesSonrisa Gigante que andan escasos por aca en el peruloco.

Gracias anticipadas y felicitaciones por el excelente foro.RebotadoRebotadoRebotadoRebotado


Partimos de la base de que parece que usas algun compilador en c no?. Ahí la cosa se simplifica por que será el programa el encargado de determinar la mayoría de los parámetros de nivel interno del pic (regiones de memoria... instrucciones etc). Es la gran ventaja de los compiladores c con el ensamblador puro y duro. Logicamente deberas examinar si la memoria es del mismo tamaño numero de puertas fuses de configuracion etc.

1 saludo

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #2 en: 14 de Enero de 2006, 14:02:00 »
Añadir que si los pines del pic lo usas simplemente para entrada/salida, el cambio de un pic a otro de la misma serie(incluso de series distintas) es bastante sencillo, simplemente ojeate el data sheet de cada uno o la lbreria, en caso de actuar en ensamblador que proporciona microchip a cada dispositivo y ves lo que trae de serie dicho pic!

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #3 en: 14 de Enero de 2006, 23:21:00 »
Hora amigos.
El cambiar de un PIC 12c5xx por un 12f675 depende del programa en si. Ya que los 12c5xx trabajan con instrucciones de 12 BIT y los 12f6xx son de 14 BIT, no son de la misma gama los 12c5xx son de la gama enana igual que los 16x5x.
Los 12f675 son de la media como los 16x8xx etc.
Mira las hojas de datos y velas la diferencia aunque sean de 8pin los dos.
No digo que no se puedan cambiar los programas pero un programa hecho con un 12f5xx no se puede cambiar solo cambiando la cabecera ya que no es lo mismo
Son muy diferentes.
Microchip fabrico los 12f6xx con la intención de que los diseñadote tengan una opción de un PIC de 8pin con mucha mas característica que los 12c5xx y con una programación de basada en 14bit.
 
saludos a todos.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #4 en: 15 de Enero de 2006, 01:23:00 »
Que son unas balas, gracias por sus respuestas Rebotado:

El programa esta en asembler. No uso compilador de C, aunque era bueno programando en C++, todavia no me animo hasta manejar decentemente el asembler.


Si solo se usan para entrada y salida:

GP0 - sin uso
GP1 - Freno a traves de mosfet
GP2 - Avance a traves de mosfet
GP3 - señal de entrada del receptor
GP4 - Sensar tension de la bateria
GP5 - sin uso


Pensaba que se podia pasar asi nomas de facil, pues en una pagina para armar un variador de velocidad para radiocontrol mencionaban que usaron el pic12f629 para las pruebas y luego el 12c508 para el circuito final, mas no mencionaba ningun cambio en el programa por lo cual supuse que se pasaba asi de facil nomas Helado.

En todo caso a comerme los datasheets Flash. Gracias.
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #5 en: 15 de Enero de 2006, 11:14:00 »
Si puedes sube el programa para ver como es y asi cambiarlo de pic ya que viendo como corre se pueden hacer los cambios.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #6 en: 15 de Enero de 2006, 17:02:00 »
trate de pegarlo como un fichero adjunto pero no hay suficiente espacio, asi que
lo voy a pegar con riesgo a que me jalen las orejas por el tamaño. Reitero las gracias.



; PIC 12c508
; __________
; Vdd(+5v) I O I Vss(masa)
; I I
; BAT_IN I I FRENO
; SERVO_IN I I PWM-out
; ----------
;******************************************************************
;****** CABECERA DEL PROGRAMA *************************************
;*****************************************************************
LIST P = 12c508a
INCLUDE <P12c508a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC

;*****************************************************************
;****** FUNCIONAMIENTO DEL PROGRAMA *******************************
;******************************************************************
;El bucle dura 51 US.
; para 1224us IN -> OUT STOP -> / 51 us = 24 pasos x 2 (nb cuenta)= 48 CUENTAS
; para 1785us IN -> OUT MAXIMO -> / 51 us = 35 pasos x 2 (nb cuenta)= 70 CUENTAS
; con 24 pasos IN -> 0 pasos OUT
; con 35 pasos IN -> 11x2 pasos OUT
; con 11x2+1 pasos OUT , MAX -> 23x51 = 1173us => frecPWM = 0.85kHz.

;******************************************************************
;****** DEFINES ***************************************************
#DEFINE ACTPWM bcf
#DEFINE DESPWM bsf

#DEFINE PIN GPIO,3 ;Pin de entrada de Señal Receptor
#DEFINE PBAT GPIO,4 ;Pin de entrada de Señal de la bateria

#DEFINE PSTOP GPIO,1 ;Pin de salida de MOSFET FRENO
#DEFINE POUT GPIO,2 ;Pin de salida de PWM MOSFET
#DEFINE EEPREV FLAGS,0 ;Estado previo de la entrada

;#DEFINE PIN FLAGS,7 ;Define temporal para la entrada de señal
;#DEFINE PBAT FLAGS,6 ;Define temporal para la señal de bateria
#DEFINE TEST FLAGS,5 ;Define de prueba del programa

#DEFINE NbPLow .24 ;Relacion de pasos que detecta la posicion LOW de la palanca IpwmHref-1

#DEFINE IpwmHrf .48 ;Relacion de Frecuencias entre PWMIN - PWMOUT
#DEFINE OpwmFrec .23 ;Pasos del ciclo de las señal de salida
#DEFINE pStop .200 ;Pasos de retardo para activar el Freno 14x200x50us=140ms
#DEFINE pBat .200 ;Pasos de verificacion de caida de la bateria 200x50us=10ms
#DEFINE pRecOff .200 ;Pasos de de verificacion de apagao del receptor 200x50usx14=140ms

;******************************************************************
;***** DEFINO LOS REGISTROS RAM ***********************************

IpwmH EQU 07h ;Variable con los pasos del estado H de la entrada
OpwmH EQU 08h ;Variable con los pasos del estado H de la salida
CpwmF EQU 09h ;Contador de pasos de la frecuencia de salida
CpwmH EQU 0Ah ;Contador del estado H de la salida
CpBat EQU 0Bh ;Contador de pasos del estado de la bateria Low
CpStop EQU 0Ch ;Contador de pasos para retardar la activacion del freno
CpROff EQU 0Dh ;Contador de pasos para detectar el receptor apagado
FLAGS EQU 0Eh ;Flags

CTmp1 EQU 0Fh ;Variable temporal de contador
CTmp2 EQU 10h ;Variable temporal de contador
CTmp3 EQU 11h ;Variable temporal de contador
CTmp4 EQU 12h ;Variable temporal de contador

;******************************************************************
;****** CONFIGURO EL PIC ******************************************

RESET
org 00h

movwf OSCCAL

movlw b"11000000" ;Configuro el registro OPTION
OPTION

movlw b"11111001" ;Todas entradas menos gpio,2 -> salidaPWM y gpio,1 -> FRENO
tris GPIO
bcf PSTOP ;Desactivo el freno
NOP
DESPWM POUT ;Desactivo la señal de Salida de PWM

;******************************************************************
;****** INICIALIZO VARIABLES **************************************

INITVAR
clrf FLAGS
clrf IpwmH

movlw pStop
movwf CpStop
movlw pBat
movwf CpBat
movlw pRecOff
movwf CpROff
movlw OpwmFrec
movwf CpwmF
movlw .1
movwf CpwmH
movwf OpwmH

;******************************************************************
;****** INICIO EL PROGRAMA ****************************************
;*****************************************************************

;******************************************************************
;Aqui compruebo si estoy probando el programa para ir directamente al inicio de regulacion
btfsc TEST ;Es LOW la entrada de señal
goto WAITLOW2 ;NO
;******************************************************************
;Aqui retardo la puesta en marcha del programa para dar tiempo al receptor a enviar la señal
movlw .250
call PAUSAMS

;Compruebo que al encender el regulador el acelerador este LOW
ISLOWPAL
movlw .10 ;Hago que la comprobacion de palanca baja se realice 10 veces...
movwf CTmp4

WAITLOW1
btfsc PIN ;Es LOW la entrada de señal
goto WAITLOW1 ;NO

WAITHIGH1
btfss PIN ;Es HIGH la entrada de señal
goto WAITHIGH1 ;NO

CONTANDO ;El bucle de comprobacion debe durar el mismo tiempo que el del programa
movlw .15 ;Duracion: 2+(15-1)*3+2+1+4= 51us.
movwf CTmp1
CONT_11 decfsz CTmp1,f ;Este bucle dura 3us.
goto CONT_11
NOP
incf IpwmH,f ;Incremento el contador de ciclos de entrada
btfsc PIN ;Es LOW la entrada de señal
goto CONTANDO ;NO

movlw NbPLow ;Cargo en W la relacion entre PWM"s
subwf IpwmH,w ;Resto a los ciclos de la señal de entrada la relacion entre señales y lo guardo en W
btfss STATUS,0 ;Compruebo si el resultado es negativo
goto INICIO ;SI, me voy a comenzar la ejecucion de la regulacion
clrf IpwmH ;NO, Reseteo la variable IpwmH usada antes

;DESDE AQUI esto debe durar unos 250ms.
movlw .250
call ZUMBIDO

;DESDE AQUI otros 250-(20+10)(del pulso de señal del servo)= 220ms.

movlw .220
call PAUSAMS

;Vuelta a comprobar el acelerador
goto ISLOWPAL

;*********************************************************************
;*********************************************************************
;Aqui es donde se comienza con la regulacion de la velocidad del motor
;*********************************************************************

INICIO
clrf IpwmH ;reseteo la variable IpwmH usada antes
decfsz CTmp4,f
goto WAITLOW1

;******************************************************************
;******************************************************************
;Genero una señal que indique el inicio del programa
movlw .5
movwf CTmp4
PITIDO
movlw .50
call PAUSAMS
movlw .50
call ZUMBIDO
decfsz CTmp4,f
goto PITIDO




;******************************************************************
;******************************************************************
;INICIO DEL PROGRAMA DE REGULACION

WAITLOW2
btfsc PIN
goto WAITLOW2

START11
btfsc PIN ;es L la señal de entrada
goto SALTO10 ;NO
btfss EEPREV ;SI, fue H la señal de entrada en el ultimo ciclo?
goto SALTO30 ;NO
bcf EEPREV ;SI, especifico que la señal de entrada en este ciclo ha cambiado a L
movlw IpwmHrf ;cargo en W la relacion entre PWM"s
subwf IpwmH,w ;resto a los ciclos de la señal de entrada la relacion entre señales y lo guardo en W
btfss STATUS,0 ;compruebo si el resultado es negativo
movlw .0 ;SI, Pongo el registro W a 0 para que luego se incremente a 1 y se actualice el registro OpwmH
movwf OpwmH ;NO, Pongo el contenido de W en la variable de pasos de salida
incf OpwmH,f ;Incremento el resultado de la resta para evitar el resultado no negativo y que puede ser .0 produciendo un error al aplicar la instruccion decfsz al valor .0
clrf IpwmH ;Pongo a cero el contador de ciclos de la señal de entrada
movlw pRecOff ;Reseteo el contador de deteccion de Receptor Apagado
movwf CpROff
goto SALTO31

SALTO11
bsf EEPREV ;especifico que la ultima entrada ha sido H
incf IpwmH,f ;incremento el contador de ciclos de entrada

;******************************************************************
;COMPRUEBO SI LA BATERIA ESTA CON CARGA SUFUCIENTE

SALTO31
btfsc PBAT ;es L la señal de la bateria
goto SALTO40A ;NO
decfsz CpBat,f ;SI, Aqui decremento el contador de la bateria LOW
goto SALTO40B ;NO es cero
DESPWM POUT ;SI, Desactivo la señal de PWM

movlw .12 ;Espero 3 Segundos para volver a activar la regulacion
movwf CTmp4 ; Asi evito los tirones del limite de la BATERIA
WAITSECOND
movlw .250
call PAUSAMS
decfsz CTmp4,f
goto WAITSECOND

goto INITVAR ;Me voy al inicio del programa y empezamos de nuevo...

;******************************************************************
;AQUI SE GENERA LA SEÑAL DE SALIDA PWM

SALTO41 ;ESTO ES EL PUNTO MEDIO DEL PROGRAMA
btfsc PIN ;Compruebo la señal de entrada otra vez...
incf IpwmH,f ;incremento el contador de ciclos de entrada

;Comienzo con la generacion de señal
decfsz CpwmF,f
goto SALTO60A
movlw OpwmFrec
movwf CpwmF
movf OpwmH,w
movwf CpwmH

decfsz CpStop,f ;Decremento el contador de activacion del freno para retardar su activacion
goto SALTO50 ;NO es cero
bsf PSTOP ;Se hace Cero el contador; Activo el freno
movlw .1 ;pongo el registro W a 1 para que luego se actualice el registro CpStop
movwf CpStop ;Pongo el contenido de W en la variable de retardo STOP

SALTO51
decfsz CpROff,f ;Decremento el contador de pasos de deteccion de Receptor Apagado
goto SALTO60B
movlw .1
movwf OpwmH
movwf CpwmH
movwf CpROff

SALTO61
decfsz CpwmH,f
goto SALTO71
DESPWM POUT
movlw .1
movwf CpwmH
goto START10

SALTO71
bcf PSTOP ;Desactivo el freno
movlw pStop ;Reseteo el contador de retardo del freno
movwf CpStop
ACTPWM POUT ;Activo la señal de Salida de PWM
goto START11



;******************************************************************
;****** GOTOS para equilibrar el programa *************************
;******************************************************************

SALTO10
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
goto SALTO11

SALTO30
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
goto SALTO31

SALTO40A
movlw pBat ;Reseteo el contador de retardo de comprobacion Bateria
movwf CpBat
goto SALTO41
SALTO40B
goto SALTO41

SALTO50
goto SALTO51

SALTO60A
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
goto SALTO61
SALTO60B
NOP
goto SALTO61

START10
goto START11


;******************************************************************
;******************************************************************
;****** Funciones del programa ************************************
;******************************************************************

;***********************************
;*** Genera el Zumbido del motor ***

ZUMBIDO
movwf CTmp3

GENSIG1
;RETARDO unos 40us
ACTPWM POUT ;Genero la señal de aviso de acelerador en marcha
movlw .13 ;Duracion: 1+2+(13-1)*3+2= 41us.
movwf CTmp1
CONT_21 decfsz CTmp1,f ;Este bucle dura 3us.
goto CONT_21
;RETARDO unos 940us
DESPWM POUT
movlw .10
movwf CTmp1
CONT_31 movlw .30
movwf CTmp2
CONT_32 decfsz CTmp2,f ;Este bucle dura 3us.
goto CONT_32
decfsz CTmp1,f
goto CONT_31 ;Este bucle dura 1+2+(2+(3x(30-1)+2)+3)x10-1= 942us.

decfsz CTmp3,f
goto GENSIG1 ;Este bucle dura (41+942)x!W-1=Xus.
retlw .0

;**********************************
;*** Genera una pausa de !Wx1ms ***

PAUSAMS
movwf CTmp3

;RETARDO unos 980us
CONT_43 movlw .10
movwf CTmp1
CONT_41 movlw .31
movwf CTmp2
CONT_42 decfsz CTmp2,f ;Este bucle dura 3us.
goto CONT_42
decfsz CTmp1,f
goto CONT_41 ;Este bucle dura 2+(2+(3x(31-1)+2)+3)x10-1= 971us.

decfsz CTmp3,f
goto CONT_43 ;Este bucle dura 971x!W-1=Xus
retlw .0

;******************************************************************
;******************************************************************

END
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #7 en: 16 de Enero de 2006, 21:38:00 »
hola a todos.
chequea este ya esta cambiado a un 12f675


; PIC 12f675
; __________
; Vdd(+5v) I O I Vss(masa)
; I I
; BAT_IN I I FRENO
; SERVO_IN I I PWM-out
; ----------
;******************************************************************
;****** CABECERA DEL PROGRAMA *************************************
;*****************************************************************
   LIST P = 12F675
   INCLUDE <P12F675.inc>

   __CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

;*****************************************************************
;****** FUNCIONAMIENTO DEL PROGRAMA *******************************
;******************************************************************
;El bucle dura 51 US.
; para 1224us IN -> OUT STOP -> / 51 us = 24 pasos x 2 (nb cuenta)= 48 CUENTAS
; para 1785us IN -> OUT MAXIMO -> / 51 us = 35 pasos x 2 (nb cuenta)= 70 CUENTAS
; con 24 pasos IN -> 0 pasos OUT
; con 35 pasos IN -> 11x2 pasos OUT
; con 11x2+1 pasos OUT , MAX -> 23x51 = 1173us => frecPWM = 0.85kHz.

;******************************************************************
;****** DEFINES ***************************************************
   #DEFINE ACTPWM bcf
   #DEFINE DESPWM bsf

   #DEFINE PIN GPIO,3 ;Pin de entrada de Señal Receptor
   #DEFINE PBAT GPIO,4 ;Pin de entrada de Señal de la bateria

   #DEFINE PSTOP GPIO,1 ;Pin de salida de MOSFET FRENO
   #DEFINE POUT GPIO,2 ;Pin de salida de PWM MOSFET
   #DEFINE EEPREV FLAGS,0 ;Estado previo de la entrada

;#DEFINE PIN FLAGS,7 ;Define temporal para la entrada de señal
;#DEFINE PBAT FLAGS,6 ;Define temporal para la señal de bateria
   #DEFINE TEST FLAGS,5 ;Define de prueba del programa

   #DEFINE NbPLow .24 ;Relacion de pasos que detecta la posicion LOW de la palanca IpwmHref-1

   #DEFINE IpwmHrf .48 ;Relacion de Frecuencias entre PWMIN - PWMOUT
   #DEFINE OpwmFrec .23 ;Pasos del ciclo de las señal de salida
   #DEFINE pStop .200 ;Pasos de retardo para activar el Freno 14x200x50us=140ms
   #DEFINE pBat .200 ;Pasos de verificacion de caida de la bateria 200x50us=10ms
   #DEFINE pRecOff .200 ;Pasos de de verificacion de apagao del receptor 200x50usx14=140ms

;******************************************************************
;***** DEFINO LOS REGISTROS RAM ***********************************

IpwmH EQU 20h ;Variable con los pasos del estado H de la entrada
OpwmH EQU 21h ;Variable con los pasos del estado H de la salida
CpwmF EQU 22h ;Contador de pasos de la frecuencia de salida
CpwmH EQU 23h ;Contador del estado H de la salida
CpBat EQU 24h ;Contador de pasos del estado de la bateria Low
CpStop EQU 25h ;Contador de pasos para retardar la activacion del freno
CpROff EQU 26h ;Contador de pasos para detectar el receptor apagado
FLAGS EQU 27h ;Flags

CTmp1 EQU 28h ;Variable temporal de contador
CTmp2 EQU 29h ;Variable temporal de contador
CTmp3 EQU 2Ah ;Variable temporal de contador
CTmp4 EQU 2Bh ;Variable temporal de contador

;******************************************************************
;****** CONFIGURO EL PIC ******************************************

RESET
   org 00h

   movwf OSCCAL

   movlw b"11000000" ;Configuro el registro OPTION
   movwf OPTION_REG

   movlw b"11111001" ;Todas entradas menos gpio,2 -> salidaPWM y gpio,1 -> FRENO
   movwf   TRISIO
   BSF   STATUS,RP0
   CLRF  ANSEL
   bcf PSTOP ;Desactivo el freno
   NOP
   DESPWM POUT ;Desactivo la señal de Salida de PWM

;******************************************************************
;****** INICIALIZO VARIABLES **************************************

INITVAR
   clrf FLAGS
   clrf IpwmH

   movlw pStop
   movwf CpStop
   movlw pBat
   movwf CpBat
   movlw pRecOff
   movwf CpROff
   movlw OpwmFrec
   movwf CpwmF
   movlw .1
   movwf CpwmH
   movwf OpwmH

;******************************************************************
;****** INICIO EL PROGRAMA ****************************************
;*****************************************************************

;******************************************************************
;Aqui compruebo si estoy probando el programa para ir directamente al inicio de regulacion
   btfsc TEST ;Es LOW la entrada de señal
   goto WAITLOW2 ;NO
;******************************************************************
;Aqui retardo la puesta en marcha del programa para dar tiempo al receptor a enviar la señal
   movlw .250
   call PAUSAMS

;Compruebo que al encender el regulador el acelerador este LOW
ISLOWPAL
   movlw .10 ;Hago que la comprobacion de palanca baja se realice 10 veces...
   movwf CTmp4

WAITLOW1
   btfsc PIN ;Es LOW la entrada de señal
   goto WAITLOW1 ;NO

WAITHIGH1
   btfss PIN ;Es HIGH la entrada de señal
   goto WAITHIGH1 ;NO

CONTANDO ;El bucle de comprobacion debe durar el mismo tiempo que el del programa
   movlw .15 ;Duracion: 2+(15-1)*3+2+1+4= 51us.
   movwf CTmp1
CONT_11 decfsz CTmp1,f ;Este bucle dura 3us.
   goto CONT_11
   NOP
   incf IpwmH,f ;Incremento el contador de ciclos de entrada
   btfsc PIN ;Es LOW la entrada de señal
   goto CONTANDO ;NO

   movlw NbPLow ;Cargo en W la relacion entre PWM"s
   subwf IpwmH,w ;Resto a los ciclos de la señal de entrada la relacion entre señales y lo guardo en W
   btfss STATUS,0 ;Compruebo si el resultado es negativo
   goto INICIO ;SI, me voy a comenzar la ejecucion de la regulacion
   clrf IpwmH ;NO, Reseteo la variable IpwmH usada antes

;DESDE AQUI esto debe durar unos 250ms.
   movlw .250
   call ZUMBIDO

;DESDE AQUI otros 250-(20+10)(del pulso de señal del servo)= 220ms.

   movlw .220
   call PAUSAMS

;Vuelta a comprobar el acelerador
   goto ISLOWPAL

;*********************************************************************
;*********************************************************************
;Aqui es donde se comienza con la regulacion de la velocidad del motor
;*********************************************************************

INICIO
   clrf IpwmH ;reseteo la variable IpwmH usada antes
   decfsz CTmp4,f
   goto WAITLOW1

;******************************************************************
;******************************************************************
;Genero una señal que indique el inicio del programa
   movlw .5
   movwf CTmp4
PITIDO
   movlw .50
   call PAUSAMS
   movlw .50
   call ZUMBIDO
   decfsz CTmp4,f
   goto PITIDO




;******************************************************************
;******************************************************************
;INICIO DEL PROGRAMA DE REGULACION

WAITLOW2
   btfsc PIN
   goto WAITLOW2

START11
   btfsc PIN ;es L la señal de entrada
   goto SALTO10 ;NO
   btfss EEPREV ;SI, fue H la señal de entrada en el ultimo ciclo?
   goto SALTO30 ;NO
   bcf EEPREV ;SI, especifico que la señal de entrada en este ciclo ha cambiado a L
   movlw IpwmHrf ;cargo en W la relacion entre PWM"s
   subwf IpwmH,w ;resto a los ciclos de la señal de entrada la relacion entre señales y lo guardo en W
   btfss STATUS,0 ;compruebo si el resultado es negativo
   movlw .0 ;SI, Pongo el registro W a 0 para que luego se incremente a 1 y se actualice el registro OpwmH
   movwf OpwmH ;NO, Pongo el contenido de W en la variable de pasos de salida
   incf OpwmH,f ;Incremento el resultado de la resta para evitar el resultado no negativo y que puede ser .0 produciendo un error al aplicar la instruccion decfsz al valor .0
   clrf IpwmH ;Pongo a cero el contador de ciclos de la señal de entrada
   movlw pRecOff ;Reseteo el contador de deteccion de Receptor Apagado
   movwf CpROff
   goto SALTO31

SALTO11
   bsf EEPREV ;especifico que la ultima entrada ha sido H
   incf IpwmH,f ;incremento el contador de ciclos de entrada

;******************************************************************
;COMPRUEBO SI LA BATERIA ESTA CON CARGA SUFUCIENTE

SALTO31
   btfsc PBAT ;es L la señal de la bateria
   goto SALTO40A ;NO
   decfsz CpBat,f ;SI, Aqui decremento el contador de la bateria LOW
   goto SALTO40B ;NO es cero
   DESPWM POUT ;SI, Desactivo la señal de PWM

   movlw .12 ;Espero 3 Segundos para volver a activar la regulacion
   movwf CTmp4 ; Asi evito los tirones del limite de la BATERIA
WAITSECOND
   movlw .250
   call PAUSAMS
   decfsz CTmp4,f
   goto WAITSECOND

   goto INITVAR ;Me voy al inicio del programa y empezamos de nuevo...

;******************************************************************
;AQUI SE GENERA LA SEÑAL DE SALIDA PWM

SALTO41 ;ESTO ES EL PUNTO MEDIO DEL PROGRAMA
   btfsc PIN ;Compruebo la señal de entrada otra vez...
   incf IpwmH,f ;incremento el contador de ciclos de entrada

;Comienzo con la generacion de señal
   decfsz CpwmF,f
   goto SALTO60A
   movlw OpwmFrec
   movwf CpwmF
   movf OpwmH,w
   movwf CpwmH

   decfsz CpStop,f ;Decremento el contador de activacion del freno para retardar su activacion
   goto SALTO50 ;NO es cero
   bsf PSTOP ;Se hace Cero el contador; Activo el freno
   movlw .1 ;pongo el registro W a 1 para que luego se actualice el registro CpStop
   movwf CpStop ;Pongo el contenido de W en la variable de retardo STOP

SALTO51
   decfsz CpROff,f ;Decremento el contador de pasos de deteccion de Receptor Apagado
   goto SALTO60B
   movlw .1
   movwf OpwmH
   movwf CpwmH
   movwf CpROff

SALTO61
   decfsz CpwmH,f
   goto SALTO71
   DESPWM POUT
   movlw .1
   movwf CpwmH
   goto START10

SALTO71
   bcf PSTOP ;Desactivo el freno
   movlw pStop ;Reseteo el contador de retardo del freno
   movwf CpStop
   ACTPWM POUT ;Activo la señal de Salida de PWM
   goto START11



;******************************************************************
;****** GOTOS para equilibrar el programa *************************
;******************************************************************

SALTO10
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   goto SALTO11

SALTO30
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   goto SALTO31

SALTO40A
   movlw pBat ;Reseteo el contador de retardo de comprobacion Bateria
   movwf CpBat
   goto SALTO41
SALTO40B
   goto SALTO41

SALTO50
   goto SALTO51

SALTO60A
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   goto SALTO61
SALTO60B
   NOP
   goto SALTO61

START10
   goto START11


;******************************************************************
;******************************************************************
;****** Funciones del programa ************************************
;******************************************************************

;***********************************
;*** Genera el Zumbido del motor ***

ZUMBIDO
   movwf CTmp3

GENSIG1
;RETARDO unos 40us
   ACTPWM POUT ;Genero la señal de aviso de acelerador en marcha
   movlw .13 ;Duracion: 1+2+(13-1)*3+2= 41us.
   movwf CTmp1
CONT_21 decfsz CTmp1,f ;Este bucle dura 3us.
   goto CONT_21
;RETARDO unos 940us
   DESPWM POUT
   movlw .10
   movwf CTmp1
CONT_31 movlw .30
   movwf CTmp2
CONT_32 decfsz CTmp2,f ;Este bucle dura 3us.
   goto CONT_32
   decfsz CTmp1,f
   goto CONT_31 ;Este bucle dura 1+2+(2+(3x(30-1)+2)+3)x10-1= 942us.

   decfsz CTmp3,f
   goto GENSIG1 ;Este bucle dura (41+942)x!W-1=Xus.
   retlw .0

;**********************************
;*** Genera una pausa de !Wx1ms ***

PAUSAMS
   movwf CTmp3

;RETARDO unos 980us
CONT_43 movlw .10
   movwf CTmp1
CONT_41 movlw .31
   movwf CTmp2
CONT_42 decfsz CTmp2,f ;Este bucle dura 3us.
   goto CONT_42
   decfsz CTmp1,f
   goto CONT_41 ;Este bucle dura 2+(2+(3x(31-1)+2)+3)x10-1= 971us.

   decfsz CTmp3,f
   goto CONT_43 ;Este bucle dura 971x!W-1=Xus
   retlw .0

;******************************************************************
;******************************************************************

   END

Desconectado miltonmc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 305
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #8 en: 16 de Enero de 2006, 21:41:00 »
te voy a mandar el ASM por privado ya que el el texto cambia cuando lo pones en el foro.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
RE: remplazar pic serie 12c5xx y 12f6xx
« Respuesta #9 en: 17 de Enero de 2006, 09:19:00 »
Eso si que es rapidez FlashFlash

Ante todo gracias miltonmc RebotadoRebotadoRebotadoRebotadoRebotado, te debo por lo menos un ceviche (comida tipica a base de pescado) cuando te des una vueltita por mi querido Peru, en el que hay muchisimo que visitar o unas cervesitas si algun dia voy para tu tierra(hace tiempo que mi esposa me viene insistiendo para ir al caribe pero por el momento la unica manera de ir es de mochilero y tirando dedo).

Bromas aparte acabo de armar mi programador PIPO2 y segun dice puede programar la 12C508, 12C509, 12F629 y 12F675; haber si sera verdad tanta maravilla Demonio. En todo caso estoy armando tambien el PP2 que segun dicen programa mucho mas todavia.

Reitero las gracias por el apoyo y dejo habierta la puerta para seguirte molestando Avergonzado.
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo


 

anything