• Martes 5 de Noviembre de 2024, 12:32

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - jgpeiro

Páginas: [1] 2 3
1
Microcontroladores / Validador De Numeros Primos Y Lcd 16x2
« en: Jueves 10 de Noviembre de 2005, 02:25 »
Aqui os dejo un programa que valida y muestra en una pantalla el numero primo entre 0 y 2^32.

;1-Inicio Div=3, Dis=2.
;divsqrt=SQUARE_ROOT(DIV)
;2-Ejecutar Div/Dis.
;3-¿Res==0?
;   3Si-Div NO es primo, Div=Div+2, Dis=2, ld=0, Ir a calcsqrt.
;   3No-¿Dis>DivSqrt?
;      3NoSi-Div SI es primo, Tabla[sv]=Div ,sv++ ,ld=0 ,Div=Div+2, Dis=2, Ir a calcsqrt.
;      3NoNo-Dis=Tabla[ld], ld++ Ir a 2.
;sv apunta en la Tabla a la direccion que hay que salvar.
;Cuando se detecta un numero primo de mas de 14 bits ya no se almacenan mas, ni se incrementa sv.
;ld apunta en la Tabla a la direccion que hay que cargar.
;Cuando ld supera el valor de sv (dis>16384) no carga mas primos de la tabla e incrementa Dis de dos en dos.

Si alguien lo quiere tb puedo poner el include necesario xa enviar datos al LCD y los archivos para el Proteus ISIS.

2
Microcontroladores / Re: Microchip O Motorola ??
« en: Jueves 22 de Septiembre de 2005, 12:44 »
mmmm, yo me inicien en el mundo de los microccontroladores con la serie 68hc11 de motorola, conoci los 68hc12, 68k y mpc555...pero me pase a los microchip porque habia mucha mas gente q los usaba y podia darme informacion, proporcionarme codigo, esquemas, programadores, software...ahora trabajo con los dsPIC son bastante mas potentes y programco cn C++. Ten en cuenta tambien las herramientas de desarrollo, ademas ATMEL creo q tambien tiene micros q valen la pena. En fin, no puedo responder exactamente a tu pregunta , habira q hacer un test con un programa concreto y hacerlo rular en los distintos micros, pero....eso no debe de ser tan facil....bueno, a lo mejor lo de las herramientas de desarrollo t ayuda a decidirte.Ah, no se si al final seran mas potentes o no, pero la serie de microcontroladores de 8 bits de atmel tienen 130 intrucciones, mientras q los pic16 tienen 34...

3
Microcontroladores / Re: Leer Y Ejecutar Programa De Una Eeprom Externa.
« en: Jueves 18 de Agosto de 2005, 16:37 »
Por cierto, se puede hacer un programa que mida el numero de veces que permite ser grabada la FLASH de un PIC....

Haces que borre y escriba en la direccion que quieras el dato 0xAA y una vez escrito lo lees y compruebas si el dato es correcto. Si lo es borras ,incrementas un contador de 32bits y escribes 0x55. Compruebas, borras, incrementas el contador...asi hasta que la  el dato no se grabe correctamente.

No es algo util, xq con saber que esta entre 10000 y 100000 sobra xa lo que kiero, pero weno, es una manera de hacerlo....

Por cierto, sigue sin gustarme el tener que hacer que cada rutina ocupe un tamaño maximo de 4Kintrucciones, es que yo estoy empezando a programar los dsPIC en C++, y con nada de programa ya ocupo todo eso. Lo que puedo hacer es que el micro tenga restringidas el numero de veces que puede reescribir el buffer para las rutinas a 30 veces al dia. , Tambien obligar al micro a que, despues de escribir una rutina en su flash, la campare con la de la memoria esterna e indique si hay errores...
Por cierto, ahi va el PCB, cree los esquemas con el PROTEL DxP y pcb tb, aunke no conseguia routearlo adecuadamente. Despues utilice el router de PADS, un programa de mentor graphics, y lo hizo todo el solito, recomiendo que todos los usuarios de protel le echen un vistazo.

4
Microcontroladores / Re: Leer Y Ejecutar Programa De Una Eeprom Externa.
« en: Jueves 18 de Agosto de 2005, 00:02 »
10,000 erase/write cycle (min.) for
industrial temperature range, 100K (typical)

Eso me obliga a plantearmelo todo de una manera un poco distinta, ya no me puedo permitir que el micro este renovando sus rutinas constantemente...Quizas reserve una parte de 4Kinstructions o algo asi para rutinas almacenadaas en la EEPROM.
De esta manera el tamaño tendria que ser siempre de un maximo de 4, pero no tengo que partirlas ni por supuesto puedo permitir que una ISR(rutina de servicio a la interrupcion) cambia la rutina, pero me ahorro tb la pila stack...
Bueno, gracias por el dato, era algo bastante importante.

Lo que yo kiero hacer es un aparato al que luego todo el mundo pueda introducirle sus propias aplicaciones, por eso lo de la EEPROM externa con mas memoria. Yo hago el programa principal con un pequeño menu y un par de aplicaciones de ejemplo, y luego ya cada uno que kiera que le de el uso qeu desee.

El aparato es un circuito de 36x48mm con dsPIC30F4013, una RAM-FLASH (AT45DB321C)de 32Mb, un conector de TRANSFLASH o miniSD, un sensor de acceleracion de 3 ejes, un LCD de nokia a color, 3 leds, un boton, un microfono, un conversor DAC para audio y un coenctor mini-jack.  

Me gustaria hacerle un programa principal que permita ver que aplicaciones tiene(una agenda, un reloj, un grabador de voz, juegos...) y q luego permita que cada uno pueda hacer la aplicacion que kiera (grabandola en la RAM-FLASH).

Si solo cada vez que el usuario accede a una nueva aplicacion, esta se graba en la flash, esto puede dar una vida de...¿tres años?(cambiando treinta veces al dia de aplicacion)

5
Microcontroladores / Leer Y Ejecutar Programa De Una Eeprom Externa.
« en: Miércoles 17 de Agosto de 2005, 21:46 »
Pues eso, estoy diseñando un circuito con un PIC conectado a una EEPROM.

Mi intencion es almacenar el programa principal (configuraciones, ISR...)en la flash del  PIC y las rutinas en la EEPROM y que el PIC las copie a su flash ,cuando el programa principal las solicite, para ejecutarlas.

-¿que soluciones hay para esto? parece facil pensar que simplemente compilo la rutina como si empezase en la linea del programa 800(x ejemplo)y cada vez que se necesita se carga en la flash y ya ta.
-¿Pero que ocurre si esta rutina ocupa mas de lo que cabe en el PIC? podria hacer que el propio PIC la partiese en cachos y se fuese copiando y ejecutando los cachos?
-¿Que ocurre si durante la ejecucion de un cacho de rutina, este llama a un cacho de rutina que no ha sido cargado xq no cabia?
-¿Que ocurre si durante la ejecucion de una rutina,se genera una interrupcion y esta misma necesita cargar de la EEPROM otra rutina distinta?

Llevo un par de dias y creo que he encontrado una solucion algo complicada y probablemente irrealizable. Estos serian los pasos a seguir:
1 Que el propio PIC parta las rutinas en cachos que quepan dentro del PIC.
2 leyendo instruccion a instruccion el cacho de rutina a cargar y modificando todos los brach, call y goto que ayan.
3 Ademas creando una PILA STACK para las rutinas que se van llamando y cargando., y que cada vez que se genera una IRQ durante la ejecucionde una rutina se guarde el "nombre" de la rutina q estaba ejecutandose.

No existen soluciones mas sencillas para esto? A mi me mosquea un poco que un PIC tenga una memoria de programa de 48Kbytes y un ProgramCounter de 24bits...

Por cierto, tengo en cuenta que el tiempo de escritura de un byte de flash (x ejemplo 2mS), pero creo que puede ser despreciable xq he pensado que en 1000 lineas de programa (2segundos en cargarse) se puede meter un programa que tarde mucho mas en ejecutarse.

En unos dias are un dibujo de como pienso que se podria solucionar.

6
C/C++ / Re: Mi Solucion De El Gato En El Sombrero
« en: Sábado 16 de Julio de 2005, 14:24 »
///EL GATO EN EL SOMBRERO//////////////////////////////////////////////
float gatosA, gatosL, gatosNA , gatosS, gatosNGAct, gatosAct, gatosAi, gatosAT ,gatosnT;
//   gatosA=0    Altura de nuestro gato
//   gatosL=0    Gatos que limpian(altura 1)

//gatos por sombrero
//   gatosNA=0   Numero de Alturas de gatos
//   gatosS=0    Gatos por sombrero en funcion de un numero de alturas.

//gatos Altura
//   gatosNGAct=0   Es el numero de gatos que hay con una altura
//   gatosAct=0   Es el numero de Altura de gatosa en el que estamos
//   gatosAi=0    Incremento
//   gatosAT=0   Altura total de los gatos

//gatos NO trabajan
//gatosnT=0      Numero total de gatos(lo gatos que limipan no se suman

gatosA=64;   //Declaracion de la Altura de nuestro gato.
gatosL=27;   //Declaracion del Numero de gatos que limpian.
//Gatos numero alturas
for (gatosNA=1 ; gatosA!=pow(gatosS+1,gatosNA-1) ; gatosNA++)//Calculamos UN numero de alturas y validamos alturas y sombreros.
   {//gatos por sombrero
   gatosS=pow(gatosL,1/(gatosNA));//Calculamos UN numero de gatos por sombrero en funcion de las alturas que tenemos
   }

for ( gatosAi=1, gatosAct=gatosA ,gatosAT=gatosA+gatosL , gatosnT=1; gatosNA>gatosAi+1 ; gatosAi++ )
   {//gatos Altura
   gatosAct=gatosAct/(gatosS+1);//Calculamos la altura de los gatos
   gatosNGAct=gatosL/pow(gatosS,gatosNA-gatosAi-1);//Calculamos el numero de gatos que hay en esa altura
   gatosAT=gatosAT+(gatosAct*gatosNGAct);//multiplicamos la altura de los gatos por el numero de gatos, y lo acumulamos
   //gatos NO trabajan
   gatosnT=gatosnT+gatosNGAct;//calculamos el numero de gatos que no trabajn en la altura y acumulamos
   }
gatosnT=gatosnT;   //Devuelve el numero de gatos que no trabajan.
gatosAT=gatosAT;   //Devuelve la suma de las alturas de todos los gatos.

float FIN_GATO=0;
}
//1      //1885      //17   //1   //3   //1   //31    //13   //   //Devuelve el numero de gatos que no trabajan.
//25   //122461   //817   //5   //2   //9   //671   //175   //   //Devuelve la suma de las alturas de todos los gatos.

//13   //28561      //289   //3   //5   //9   //216   //64   //Declaracion de la Altura de nuestro gato.
//12   //20736      //256   //2   //4   //4   //125   //27   //Declaracion del Numero de gatos que limpian.


//FIN de gato sombrero

7
C/C++ / Re: Mi Solucion De El Gato En El Sombrero
« en: Martes 12 de Julio de 2005, 23:49 »
///EL GATO EN EL SOMBRERO//////////////////////////////////////////////
float gatosA=0, gatosL=0,gatosNAi=0 , gatosS=0, gatosSi=0, gatosNGAct=0, gatosAct=0, gatosAi=0, gatosAT=0 ,gatosnT=0;
//   gatosA=0    Altura de nuestro gato
//   gatosL=0    Gatos que limpian(altura 1)

//gatos por sombrero
//   gatosNA=0   Numero de Alturas de gatos
//   gatosNAi=0   Incremento
//   gatosS=0    Gatos por sombrero , o mejor dicho posibles sombreros
//   gatosSi=0    Incremento

//gatos Altura
//   gatosNGAct=0   Es el numero de gatos que hay con una altura
//   gatosAct=0   Es el numero de Altura de gatosa en el que estamos
//   gatosAi=0    Incremento
//   gatosAT=0   Altura total de los gatos

//gatos NO trabajan
//gatosnT=0      Numero total de gatos(lo gatos que limipan no se suman

gatosA=64;//13//28561//289//3//5//9//216//64   //Declaracion de la Altura de nuestro gato.
gatosL=27;//12//20736//256//2//4//4//125//27   //Declaracion del Numero de gatos que limpian.

//Gatos numero alturas
for (gatosNAi=0 ; gatosA!=pow(gatosSi+1,gatosNAi) ; gatosNAi++)
   {//Calculamos UN numero de alturas por sombrero y validamos alturas y sombreros.
   //gatos por sombrero
   for (gatosSi=1 ,gatosS=1 ; gatosL>pow(gatosSi,gatosNAi+1) ; gatosSi++, gatosS++)
      {//Calculamos UN numero de gatos por sombrero
                }
   }
//gatos Altura//gatos NO trabajan
for ( gatosAi=1, gatosAct=gatosA ,gatosAT=gatosA , gatosnT=0; gatosNAi>=gatosAi ; gatosAi++ )
   {
   gatosAct=gatosAct/(gatosSi+1);//Calculamos la altura de los gatos
   gatosNGAct=gatosL/pow(gatosSi,gatosNAi-gatosAi);//Calculamos el numero de gatos que hay en esa altura
   gatosAT=gatosAT+(gatosAct*gatosNGAct);//multiplicamos la altura de los gatos por el numero de gatos, y lo acumulamos
   gatosnT=gatosnT+gatosNGAct;//calculamos el numero de gatos que no trabajn en la altura y acumulamos
   }

gatosnT=gatosnT;//1//1885//17//1//3//1//3 //31 //13         //Devuelve el numero de gatos que no trabajan.
gatosAT=gatosAT;//25//122461//817//5//2//9//19//671//175   //Devuelve la suma de las alturas de todos los gatos.

float FIN_GATO=0;
}
//1      //1885      //272   //1   //3   //1   //3    //31    //13   //Devuelve el numero de gatos que no trabajan.
//25   //122461   //817   //5   //2   //9   //19   //671   //175   //Devuelve la suma de las alturas de todos los gatos.

//13   //28561      //289   //3   //5   //9   //216   //64         //Declaracion de la Altura de nuestro gato.
//12   //20736      //256   //2   //4   //4   //125   //27         //Declaracion del Numero de gatos que limpian.


//FIN de gato sombrero

8
C/C++ / Mi Solucion De El Gato En El Sombrero
« en: Martes 12 de Julio de 2005, 02:54 »
Solo so ocupa de realizar los calculos, no se permite introducir ni extraer datos en el archivo ejecutable, ni sikiera esta listo para ejecutar, pero se puede insertar en cualquier codigo fuente con cortar y pegar y se pueden variar los valores de entrada antes de compilar...
Lo realiza con un compilador para microchips, asi que no se si sera compatible con los compiladores mas utilizados para c++... bueno, ahi va:
Ley ayer el problema del gato, y no e mirado por supuesto ninguna solucion en mensajes anteriores(salvo el dibujo con los gatos de junk) y e tardado unas horas en resolverlo....he comprobado con unos cuantos codigos y me funciona...


///EL GATO EN EL SOMBRERO//////////////////////////////////////////////
float gatosA=0, gatosL=0;
//   gatosA=0    Altura de nuestro gato
//   gatosL=0    Gatos que limpian(altura 1)
gatosA=9;//3//5//9//216//64   //Declaracion de la Altura de nuestro gato.
gatosL=4;//2//4//4//125//27   //Declaracion del Numero de gatos que limpian

//gatos por sombrero
float gatosNA=0, gatosNAi=0 , gatosS=0, gatosSi=0;
//   gatosNA=0   Numero de Alturas de gatos
//   gatosNAi=0   Incremento
//   gatosS=0    Gatos por sombrero , o mejor dicho posibles sombreros
//   gatosSi=0    Incremento
//gatos Altura
float gatosAct=0, gatosActT=0, gatosAi=0, gatosAnt=0, gatosAT=0;//Altura total de los gatos
//   gatosAct=0   Es el numero de Altura de gatosa en el que estamos
//   gatosActT=0   El la suma de las alturas de todos los gatos de el numero de altura en el que estamos
//   gatosAi=0    Incremento
//   gatosAnt=0    Altura del gato anterior
//   gatosAT=0   Altura total de los gatos


////Comprobar si Concuerda con la altura de nuestro gato
gatosNA=0; gatosNAi=0;//gatosNA no es usada
for (gatosNA=0 ; 1!=gatosAct ; gatosNAi++)
   {
//gatos por sombrero
gatosS=0; gatosSi=0;
   for (gatosSi=0 ; gatosL>gatosS ; gatosSi++)
      {
      gatosS=pow(gatosSi+1,gatosNAi+1);
      }
//gatos Altura
gatosAct=0; gatosActT=0; gatosAi=0; gatosAnt=0; gatosAT=0;
   for ( gatosAi=0, gatosAct=gatosA ,gatosAT=gatosA ; gatosNAi>=gatosAi ; gatosAi++)
      {
      gatosAnt=gatosAct;
      gatosAct=gatosAnt*1/(gatosSi+1);
      gatosActT=gatosAct*(gatosS/(pow(gatosSi,gatosNAi-gatosAi)));
      gatosAT=gatosAT+gatosActT;
      }
   }

//gatos NO trabajan
float gatosnT=0, gatosnTi=0;
//gatosnT=0      Numero total de gatos
//gatosnTi=0      Incremento
for   (gatosnTi=0 ; gatosNAi>gatosnTi ; gatosnTi++)
   {
   gatosnT=gatosnT+(gatosS/(pow(gatosSi,(gatosNAi-gatosnTi))));
   }
//gatosnT=gatosnT-gatosL;

gatosnT=gatosnT;//Devuelve el numero de gatos que no trabajan
gatosAT=gatosAT;//Devuelve la suma de las alturas de todos los gatos

float FIN_GATO=0;
}
//FIN de gato sombrero

9
Microcontroladores / Iar Embedded Workbench Professional Pic18
« en: Martes 7 de Septiembre de 2004, 20:07 »
He intalado este paquete de soft. concretamente IAR.Embedded.Workbench.for.Microchip.PIC.v2.21A.FULL-YgH que me baje con el emule para probarlo a ver que tal....a primera vista no me e aclarado para nada, parece que tambien permite crear diagramas de flujo com el niple, aunque de una manera mas complicada...no se, si alguien en este foro tiene experiencia con este soft...espero me digais vuestras impresiones...

10
Microcontroladores / Re: Programador Para Pic 16f88
« en: Jueves 26 de Agosto de 2004, 15:21 »
por cierto, en que aparatito estas utilizando el 16F88?soo curiosidad, a lo mejor t puedo ayudar con algun problema que te encuentres mas adelante....

11
Microcontroladores / Re: Programador Para Pic 16f88
« en: Jueves 26 de Agosto de 2004, 15:16 »
Yo los he utilizado en algun proyecto mio, se progranman mediante ICSP, los pnes son identicos a los de un 16F84, el hardware que tengo es un TE-20,(mas sencillo que el tuyo creo) y el software que encontre tras unos dias de buscar se llama winpic, que se puede bajar de esta  aqui http://www.qsl.net/dl4yhf/winpic/winpicpr.zip y aqui hay info del programa http://www.qsl.net/dl4yhf/winpicpr.html . Supongo que tendras el datasheet del 16F88....si no, t recomiendo enormemente que t lo bajes de www.microchip.com ...

12
Microcontroladores / Rtos Para Pic18
« en: Viernes 23 de Julio de 2004, 14:48 »
Pues eso, me estoy planteando las ventajas de utilizar un sistema operativo para mi TDB, peor no se las ventajas que tienen ni como funcionan exactamente ni los requisitos de hardware ni apenas nada de nada. Me gustaria que fuese un linux o algo asi , con el que luego poder utilizar aplicaciones bajadas de la red, o juegos para mobiles o yo q se...bueno, si alguien tiene experiencia en la utilizacion de sistemas operativos en tiempo real con micros y me puede dar alguna info o consejo le estare my agradecido.

13
Microcontroladores / Re: Evaluacion De La Idea De Mi Proyecto
« en: Sábado 26 de Junio de 2004, 18:40 »
por si alguien esta interesado en realizar este aparato conmigo aqui dejo los archivos con el codigo y demas para simularlo con el MPLAB v6.51.  tb voy a colgar un esquema y si alguien quiere puedo meter tambien los PCBs.

14
Microcontroladores / Re: Evaluacion De La Idea De Mi Proyecto
« en: Lunes 14 de Junio de 2004, 12:56 »
aqui va el esquema del programa que e escrito en ASM, por cierto, son unas 380 instrucciones....

15
Microcontroladores / Re: Evaluacion De La Idea De Mi Proyecto
« en: Lunes 14 de Junio de 2004, 00:16 »
Por fin termine 3 de las 4 rutinas para controlar el hardware, con sus interrupciones y su codigo optimizado para permitir ocupar el tiempo minimo al micro. Segun unos calclos aproximados el micro permanece libre aproximadamente un 90% del tiempo, es decir, la mayor parte del tiempo esta esperando a que se desborde un timmer o a q le devuelvan un dato del exterior.
El micro se arranca y configura los registros de todos los perifericos, busca la procendencia de las interupciones, salva y carga los registros mas importantes durante las interrupciones, lee datos analogicos de un ADXL 311 cada periodo de 3mS y toma el valormedio de cada 16 medidas. Comprueba e estado de la bateria cada 3mS. Envia datos a un LCD LPH7366 utilizando el periferico SSP y sus interrupciones, informa al usuario mediante 2 LEDs(rojo y verde) que tb van con IRQ...bueno, si alguien quiere el codigo en ASM que me lo pida, tb realice algunso cambios en el esquema, pero no son importantes. De mometo pienso eliminar el 74LVC07, el regulador de 5V y alimentar todo el circuito a 3.3V o 3.0V, pero no es nada demasiado importante....
Me queda realizar una rutina para leer y escribir en las EEPROM. Primero voy a hacer un diagrama de flujo del codigo que e escrito....en unos dias lo pondre.

16
Microcontroladores / Re: Instruccion Movfwy Bits De Estado
« en: Jueves 10 de Junio de 2004, 16:08 »
ok, todo solucionado, una vez mas los programas y los datasheets demuestran no tener erratas y ser yo quien se equivoca. Cuando escribimos con el MPLAB la intruccion MOVWF o MOVFW parece que son dos variantes de la misma instruccion y que ninguna de las dos afecta al bit Z. La instruccion MOVFW, es transformada por el MPLAB en MOVF, y por eso el codigo funciona perfectamente salvo esta pequña variacion. En fin, tendre que hacer algun apaño en mi codigo.

17
Microcontroladores / Instruccion Movfwy Bits De Estado
« en: Jueves 10 de Junio de 2004, 13:22 »
pues resulta que cuando ejecuto una instruccion de MOVFW y el valor del regitstro W es 0, se pone a 1 el bit Z del status, cuando en el datasheet de PIC pone clarisimamente que estas instyrucciones no afectan a los bits de estado. Que ocurre aqui? es un fallo del MPLAB? alguien sabe si es q estoy coemtiendo algun error?

18
Microcontroladores / Sspsr
« en: Domingo 30 de Mayo de 2004, 14:29 »
mmm, el SSPSR es un registro interno no accesible directamente para el usuario de los PICs que incorporan el modulo SSP. Se supone que el MPLAB permite ver el estado de este registro en la ventana de SPRs(eso dice en el help), pero no o veo. alguien sabe dnd puedo encontrasr este registro?

19
Microcontroladores / Re: Nuevo Proyecto
« en: Miércoles 26 de Mayo de 2004, 17:27 »
no veo necesario convertirla a una señal digital. Probablemente sea mucho mas sencillo transmitir la señal de video compuesto en AM. No necesitaras muchos integrados, pero si muhcos discretos. de todas formas existen muchos circuitos de este tipo y supongo que en internet podras encontrar esquemas y demas que te sirvan como ejemplo.
El TFT puede interpretar la señal de video compuesto?

20
Microcontroladores / Re: Evaluacion De La Idea De Mi Proyecto
« en: Martes 18 de Mayo de 2004, 17:24 »
#include <p16f88.inc>

ledRreg         equ      021H
ledGreg         equ      022H
ledcount      equ      023H
chanelreg      equ      024H
ADchanel2outC   equ      025H
ADchanel3outC   equ      026H
ADchanel4outC   equ      027H
;050H-05FH,0D0H-0DFH   Accx Buffer
;060H-06FH,0E0H-0EFH   Accy Buffer

init  
   nop
   nop
   nop
   nop
   
   ;BuscarFlAG, ejecutar subrutina, retfie.
   btfsc   INTCON,TMR0IF
   goto   TMR0overflow
   btfsc   PIR1,SSPIF
   goto   SSPcompleteTR
   btfsc   PIR1,TMR2IF
   goto   TMR2toPR2match
   btfsc   PIR1,TMR1IF
   goto   TMR1overflow
   btfsc   PIR2,EEIF
   goto   EEPROMwritecompleted ;Internal EEPROM
   

CONFIGDEV  ;CONFIG DEVICE(I/O PORTS, A/D, clock, SPI, IRQs,TIMERs, WDT)   
;OSCILLATOR CONFIGURATIONS            INTO2 8MHZ,whit I/O on RA6,RA7
   bsf      STATUS,RP0
   movwf   B'00000000'
   movwf   OSCTUNE
   movlw   B'01110010'
   movwf   OSCCON
   bcf      STATUS,RP0
;INTERRUPTS         TMR0,TMR1,TMR2,SSP
    bsf      STATUS,RP0
    movlw   B'10000010'
    movwf   OPTION_REG
    bsf      STATUS,RP0
   movlw   B'11100000'
   movwf   INTCON
   movlw   B'00000000'
   movwf   PIR1
   movlw   B'00000000'
   movwf   PIR2
   bsf      STATUS,RP0
   movlw   B'00001001'
   movwf   PIE1
   movlw   B'00010000'
   movwf   PIE2
   bcf      STATUS,RP0
;I/O PORTS
   ;PORTA
   movlw   B'00000000'
   movwf   PORTA
   bsf      STATUS,RP0
   movlw   B'01011100'   
    movwf   TRISA   
    bcf      STATUS,RP0
    ;PORTB
   movlw   B'00000000'
    movwf   PORTB      ;PORTB7-0 outputs
   bsf      STATUS,RP0
   movlw   B'00100010'   
    movwf   TRISB   
    bcf      STATUS,RP0
;SSP      configurado en modo SPI Master
   movlw   B'00000000'
   movwf   SSPBUF      ;b7-0
   movlw   B'00100000'
   movwf   SSPCON      ;b7-0   
   bsf      STATUS,RP0
   movlw   B'11000000'
   movwf   SSPSTAT      ;b7-6,1
   bcf      STATUS,RP0
;A/D
   movlw   B'00000000'
   movwf   ADRESH      ;b7-0
   movlw   B'01000001'
   movwf   ADCON0      ;b7-2,0
   bsf      STATUS,RP0
   movlw   B'0'
   movwf   ADRESL      ;b7-0
   movlw   B'11000000'
   movwf   ADCON1      ;b7-4
   movlw   B'00011100'
   movwf   ANSEL      ;b6-0
   bcf      STATUS,RP0

;TIMER0 MODULE
   movlw   B'00000000'
   movwf   TMR0
   
;TIMER1 MODULE
;TMR1L
;TMR1H
;T1CON
;TIMER2 MODULE
;TMR2
;T2CON
;PR2
;DATA EEPROM
;WDT
   bsf      STATUS,RP0
   movlw   B'00011110'
   movwf   WDTCON
   bcf      STATUS,RP0

;CCP MODULE                        OFF
;USART                           OFF
;COMPARATOR MODULE                  OFF
;COMPARATOR VOLTAGE REFERENCE MODULE   OFF

CONFIGREGS
   movlw   050H
   movwf   ADchanel2outC
   movlw   060H
   movwf   ADchanel3outC
   movlw   B'00000100'
   movwf   chanelreg
   movlw   B'10101010'
   movwf   SSPBUF
   movlw   B'00100000'
   movwf   SSPCON   

   
ledlevel
   ;como cambiar LedXreg desde cada subrutina?
   movlw   B'10101010'
   movwf   ledRreg
   movlw   B'10000000'
   movwf   ledGreg
   movlw   0B0H
   movwf   ledcount

loop      ;el programa inicial despues de un ReSET un configurar el uC

   nop
   goto loop
   nop


TMR0overflow ;(interrupt);
   bcf      INTCON,TMR0IF
ADnoend
   btfsc   ADCON0,GO_DONE   ;esperar en caso de q el AD no haya terminado
   goto   ADnoend
   btfsc   chanelreg,2      ;comprobar que canal se ha leido
   goto   ADchanel2out
   btfsc   chanelreg,3
   goto   ADchanel3out
   btfsc   chanelreg,4
   goto   ADchanel4out

ADchanel2out
   bcf      STATUS,RP0
   movfw   ADchanel2outC      ;guardar los datos de la conversion en un buffer mediante indf
   movwf   FSR
   movfw   ADRESH
   movwf   INDF
   bsf      STATUS,RP0
   bsf      FSR,7
   movfw   ADRESL
   movwf   INDF
   bcf      FSR,7
   bcf      STATUS,RP0
   incf   ADchanel2outC,f
   movfw   ADchanel2outC
   sublw   060H
   btfss   STATUS,Z
   goto   ADchanelselect
   movlw   050H
   movwf   ADchanel2outC
   ;indicar que el buffer Accx(050H-05FH,0D0H-0DFH)esta completo.El buffer Accy aun le queda un dato por almacenar
   goto   ADchanelselect


ADchanel3out   
   bcf      STATUS,RP0
   movfw   ADchanel3outC      ;guardar los datos de la conversion en un buffer mediante indf
   movwf   FSR
   movfw   ADRESH
   movwf   INDF
   bsf      STATUS,RP0
   bsf      FSR,7
   movfw   ADRESL
   movwf   INDF
   bcf      FSR,7
   bcf      STATUS,RP0
   incf   ADchanel3outC,f
   movfw   ADchanel3outC
   sublw   070H
   btfss   STATUS,Z
   goto   ADchanelselect
   movlw   060H
   movwf   ADchanel3outC
   ;indicar que el buffer Accy(060H-06FH,0E0H-0EFH)esta completo. Los buffers Accx y Accy estan llenos
   ;desactivar interrupciones por AD?
   goto   ADchanelselect


ADchanel4out
   ;solo comprobar que las tensiones son adecuadas comparandolo con una referencia
   goto   ADchanelselect
   
ADchanelselect
   ;change chanel to read in next AD obtain(2,3,4)
   bcf      STATUS,C
   rlf      chanelreg,f
   btfsc   STATUS,C
   bsf      chanelreg,0

   btfsc   chanelreg,2
   goto   chanel2      ;el AccX
   btfsc   chanelreg,3
   goto   chanel3      ;el AccY
   btfsc   chanelreg,4
   goto   chanel4      ;el Vbat
   movlw   B'00000100'
   movwf   chanelreg
   goto   chanel2   ;;; xq es el proximo que se debe leer!!!
chanel2   
   movlw   B'00010000'      ;seleccionar canal 2 (010)
   iorwf   ADCON0,f
   movlw   B'11010111'      ;seleccionar canal 2 (010)
   andwf   ADCON0,f   
   goto   ADstart
chanel3
   movlw   B'00011000'      ;seleccionar canal 3 (011)
   iorwf   ADCON0,f
   movlw   B'11011111'      ;seleccionar canal 3 (011)
   andwf   ADCON0,f
   goto   ADstart
chanel4   
   movlw   B'00100000'      ;seleccionar canal 4 (100)
   iorwf   ADCON0,f
   movlw   B'11100111'      ;seleccionar canal 4 (100)
   andwf   ADCON0,f
   goto   ADstart

ADstart
   bsf      ADCON0,GO_DONE
   goto   rotateLEDs
rotateLEDs
   incfsz   ledcount,f      ;esperar varias IRQ por TMR0 para rotar los LEDs
   retfie
   rrf      ledGreg,f      ;rotar y mostar LEDGREEN
   btfsc   STATUS,C
   bsf      ledGreg,7
   bcf      STATUS,C
   btfss   ledGreg,0
   bsf      PORTB,6
   btfsc   ledGreg,0
   bcf      PORTB,6
   rrf      ledRreg,f      ;rotar y mostar LEDRED
   btfsc   STATUS,C
   bsf      ledRreg,7
   bcf      STATUS,C
   btfss   ledRreg,0
   bsf      PORTB,7
   btfsc   ledRreg,0
   bcf      PORTB,7
   movlw   0B0H
   movwf   ledcount
   retfie               ;FIN DE LA INTERRUPCION ;Datos AD obtenidos y guardados en buffer, LEDs rotados.



SSPcompleteTR
   bcf   PIR1,SSPIF
;   subrutine
   retfie
TMR2toPR2match
   bcf   PIR1,TMR2IF   
;   subrutine
   retfie   
TMR1overflow
   bcf   PIR1,TMR1IF   
;   subrutine
   retfie
EEPROMwritecompleted
   bcf   PIR2,EEIF   
;   subrutine
   retfie

   END

21
Microcontroladores / Configuracion Del Periferico Ssp En Pic
« en: Martes 18 de Mayo de 2004, 14:17 »
estoy simulando un 16F88 con el MPLAB, y no se como hacer que el modulo SSP en modo SPI funcione. Alguien tiene experiencia con este modulo? alguien tiene algun .asm en el que se utilice este modulo?

22
Microcontroladores / Re: Conversor A/d
« en: Miércoles 28 de Abril de 2004, 21:43 »
lo que debe suceder es que exista una diferencia de potencial entre la masa del PC y la masa del circuito que proporciona señal de muestra.

Teniendo los 3 circuitos por separado y midiendo con el polimetro entre la masa del PIC y del PC no debe haber diferencia de potencial(creo), pero si debe haber una diferencia de potencial entre la masa del PC y la masa del circuito que proporciona señal de muestra.

El PIC lleva una alimentacion aislada de la red mediante un transformador, lo cual permite que sepueda conectar al PC o a la circuito que proporciona señal de muestra. Pero el circuito que proporciona la señal de muestra no esta aislado de la red,  y si t ocurre ese corto creo que la masa del PC tampoco estara aislada de la red(aunque las fuentes deberian aislarlo pero.....kizas la que tu tienes no....)en fin, no se si sera esta la causa del problema, pero lo mas sencillo que se me ocurre es colocar un circuito que aisle el circuito que proporciona señal de muestra del PIC como por ejempl un octocoplador(si se llama asi) que es un integrado que dentro tiene un emisor y un recptor de luz.
Ahm, otra cosa, debes colocar alguna resistencia para descargar el condensador xq supongo q solo con el divisor resistivo no sera suficiente...

bueno, espero aportarte alguna idea nueva en el proximo post...ejjeje

23
Microcontroladores / Re: Rutinas De Multiplicacion 16 Bits Para Pic 16f84
« en: Viernes 16 de Abril de 2004, 14:39 »
Este codigo lo he generado en 1 minuto con el niple. Te permite escoger algunas opciones, pero yo he puesto lo mas estandar, que todos los valores de entrada y salida de la rutina esten en registor de la RAM....bueno, espero t sirva esta rutina.


;------------------------------------------------------------
; Código assembler generado por Niple.
; Nombre del Proyecto: tdbprototipo
; Autor: Desarrollo Niple.
; Fecha: 14/04/2004
; PIC: 16F84
; Velocidad de reloj: 4 Mhz
; Descripcion: crear las rutinas basicas para un 16f84a para comprobar el hard. del prototipo del tdb
;------------------------------------------------------------


 LIST    P=PIC16F84


;------------------------------------------------------------
;                  Declaración de Registros
;------------------------------------------------------------
w                     equ  00h
status                equ  0x03
porta                 equ  0x05
_np_temp1             equ  0x0c
regalto               equ  0x0d   multiplicando bajo
regbajo               equ  0x0e   multiplicando alto
rmultiplicadoralto    equ  0x0f   multiplicador alto
multiplicadorbajo     equ  0x10   multiplicador bajo
res3                  equ  0x11   resultado
res2                  equ  0x12   resultado
res1                  equ  0x13   resultado
res0                  equ  0x14   resultado
_np_temp2             equ  0x15
_np_temp3             equ  0x16
_np_temp4             equ  0x17
_np_temp5             equ  0x18
_np_temp6             equ  0x19
_np_temp7             equ  0x1a
_np_temp8             equ  0x1b
_np_temp9             equ  0x1c


;------------------------------------------------------------
;                  Declaración de Bits
;------------------------------------------------------------
c               equ  0   ;carry / borrow bit
rp0             equ  5   ;registrer banck select bit


;------------------------------------------------------------
;                        Inicio
;------------------------------------------------------------

reset   org 0
   goto paso2


;------------------------------------------------------------
;                      programa principal
;------------------------------------------------------------
paso2
   ;multiplicar a 16 bits (res0,res1,res2,res3 = regalto,regbajo * rmultiplicadoralto,multiplicadorbajo)
   bcf status,rp0         ;cambiar a pagina 0
   movf regbajo,w
   movwf _np_temp2
   movf regalto,w
   movwf _np_temp1
   movf multiplicadorbajo,w
   movwf _np_temp2
   movf rmultiplicadoralto,w
   movwf _np_temp1
   call multiplicacion_16
   movf _np_temp3,w
   movwf res0
   movf _np_temp4,w
   movwf res1
   movf _np_temp5,w
   movwf res2
   movf _np_temp6,w
   movwf res3
   "aqui el resto del programaaaaa""


;------------------------------------------------------------
;                  Declaración de Subrutinas
;------------------------------------------------------------

multiplicacion_16
   ;calculo matematico multiplicacion a 16 bits
   movlw 0x10
   bcf status,rp0         ;cambiar a pagina 0
   movwf _np_temp9
   movf _np_temp4,w
   movwf _np_temp8
   movf _np_temp3,w
   movwf _np_temp7
   clrf _np_temp4
   clrf _np_temp3
multiplicacion_16_1
   rrf _np_temp8,f
   rrf _np_temp7,f
   btfss status,c
   goto multiplicacion_16_2
   movf _np_temp1,w
   addwf _np_temp3,f
   btfsc status,c
   incf _np_temp4,f
   movf _np_temp2,w
   addwf _np_temp4,f
multiplicacion_16_2
   rrf _np_temp4,f
   rrf _np_temp3,f
   rrf _np_temp6,f
   rrf _np_temp5,f
   decfsz _np_temp9,1
   goto multiplicacion_16_1
   return


 End

24
Microcontroladores / Re: Reloj Con Lcd Y Pic 16f873
« en: Domingo 4 de Abril de 2004, 01:50 »
mmmmmmm, leyendo tu post se me ha ocurrido una idea que cn la que tal vez todos salgamos beneficiados.

Desde siempre he tenido e inconveniente de ser un poco vago a la hora de llevar mis proyectos a la practica. Me gusta mucho darle al coco y desarrollarlos, pero a la hora de montar placas e ir depurando el hard. y sobretodo el soft. me da mucha pereza seguir cn cualquier proyecto y siempre inicio en otro nuevo.

Se me ocurre que yo podria ir diseñando todo el proyecto a condicion de que tu  vayas indicandome exactamente todas las funciones que este debe cumplir asi como montarlo y verifincar el hard. y el soft.

Me dan vacaciones la semana que viene, dispondre de mas tiempo para escribir en el foro o comunicarme contigo via msn.
jgpeiro@hotmail.com, (si alguien mas esta interesado en este metodo de trabajo que me agrege a su msn).

25
Microcontroladores / Experiencia Con Rtos Sobre Un Pic
« en: Sábado 28 de Febrero de 2004, 10:47 »
Pues me gustaria saber que ventajas e inconvenientes tiene utilizar un sistema operativo , o un sistema operativo en tiempo real en un microcontrolador PIC.

Tambien me gustaria saber un poco como se realiza un programa para que funcione bajo ese SO, empresas que los ofrezcan(los SO) y... no se, quisiera que alguien me comentase un poco su experiencia.

Páginas: [1] 2 3