TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: groundman en 17 de Abril de 2014, 15:09:13

Título: Proyectos con 18F67K22
Publicado por: groundman en 17 de Abril de 2014, 15:09:13
hola.de nuevo salto en la eleccion de un microcontrolador pic.el ultimo fue el 18F2550.pero se me queda pequeño en cuanto a algunos perifericos.
asi que me he decantado por el 18F67K22. que la verdad.anque es de la misma serie.parece que es mas complicado.aunque complicados lo son todos
si no se saben de sus caracteristicas.asi que algo tan simple como usar el modulo A/D.se me esta atrabesando.

practicamente todos los ejemplos que he buscado estan en C.y mi intencion es programarlo en asm.igual que hago con el 18F2550.
no se que puede estar pasando.he tenido que configurar mas cosas que las que tenia que configurar en el 18F2550.y todabia no
he podido hacerlo funcionar.

alguien sabe de algun ejemplo en asm? mi intencion es ir insertando ejemplos de sus respectivos modulos.
Título: Re: Proyectos con 18F67K22
Publicado por: sander en 17 de Abril de 2014, 15:38:11
Hace tiempo que no programo en ASM, pero si sube algun proyecto que tenga puedo echarle una mano para revisarlo.

Saludos
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 17 de Abril de 2014, 16:23:13
gracias por tu interes sander.nada mas ver tu mensaje he dicho a hacer una prueba y ya he atinado.o almenos ya he obtenido datos en el registro ADRES.

pondre por aqui el ejemplo.cuando funciona algo,lo facil que parece.pero cuando no funciona.... :?
y ademas cuando el pic es diferente.y algo no funciona,no se sabe ni por donde mirar.porque son muchisimas caracteristicas añadidas.
Título: Re: Proyectos con 18F67K22
Publicado por: migsantiago en 17 de Abril de 2014, 16:38:03
Hola Groundman

Normalmente lo que da lata al principio es el configurar el reloj del micro. Imagino que de la datasheet ya barriste todo el capítulo 2.0 GUIDELINES FOR GETTING STARTED WITH PIC18FXXKXX MICROCONTROLLERS.

Checa la sección de los osciladores y ve qué debes poner en los registros de configuración del PIC. Luego ve qué debes poner en tiempo de ejecución para echar a andar el reloj.

Saludos!
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 17 de Abril de 2014, 17:27:31
si.migsantiago. ya me he buelto loco con eso. :z) he tenido que leerme muchas cosas del datasheet.hay muchas diferencias entre los dos pic.incluido registros
que han cambiado su funcionamiento.

creo que me voy a jugar bastante con este pic.  :D

y adjunto el proyecto.lo he puesto de la forma mas simple.y con la simulacion con proteus.el potenciometro que vale es el que esta conectado por AN0.
la salida por PORTB.los servos no sirven en este proyecto.los pondre en el siguiente.
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 17 de Abril de 2014, 20:34:53
ahora estoy liado con los servos.resulta que quiero controlar 10 servos por PWM.por el momento mi programa controla 5.pero ese no es el problema
la cosa esta en que uso el TMR2 para controlar los tiempos.ya que con este se pueden gestionar bastantes servos.

pero no logro superar el  tiempo de ciclo de 255us.el prescaler lo tengo a 16.que es lo maximo que divide la frecuencia.el postscaler
no sirve para la gestion del tiempo.y los servos funcionan entre 1 a 2ms.

y no quiero bajar la velocidad del pic.ya que me va ha hacer falta para otras gestiones.hay alguna forma que no sea la de cambiar de temporizador?
no se si habra alguna gestion de tiempos interna.que divida la velocidad del TMR2 pero no del pic.
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 17 de Abril de 2014, 21:42:06
por lo que he visto en el datasheet.parece que voy a tener que vajar la velocidad de fosc a 16Mhz. los registros que gestionan el PWM.son

TMR2,4,6,8,10 y 12.  y estos cogen el clk de la frecuencia principal.y parece ser que tampoco puedo meterles una señal externa. :(
es mala pata.ya que estos servos son vastante baratos.2€ cada uno.si fueran digitales no habria ningun problema.pero estos son mas caros.
Título: Re: Proyectos con 18F67K22
Publicado por: tapi8 en 18 de Abril de 2014, 04:46:36
Hace algun tiempo que no hago nada con servos, pero siempre he hecho la temporizacion de 20mS con TIMER0 y las temporizaciones del DUTTY normalmente entre 0,5 y 2,5mS (algunos 0,3 y 2,3mS) siempre por bucle, y nunca he tenido problemas para controlar todos los servos sin problema.
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 18 de Abril de 2014, 14:38:15
resulta de que hize un proyecto de un termostato.y que simulado en proteus y en circuito real funciona perfectamente.pues le añadi un servo.
y tambien funciona perfectamente.en este proyecto uso un cristal de 4Mhz y conmuto los osciladores para que trabaje a 48Mhz.
y con el PWM consigo hasta 2ms.

pues me extrañaba de que con 64Mhz me da un tiempo maximo de 255uS.asi que me he ido al proyecto donde funcionaba el servo.donde tengo un cristal
de 4Mhz y el pic configurado a 48Mhz.y me he dado cuenta de que el pic esta funcionando a 1uS por instruccion.que son 4Mhz

parece que me he equivocado al configurar el oscilador interno.

no se si se podra poner un cristal de 4Mhz y que el TIMER2 funcione con esta frecuencia.y configurando el PLL el pic trabaje a 64Mhz.
la verdad que no entiendo muy bien la configuracion de los osciladores internos.a la vista esta el error del anterior proyecto.

PD:el tiempo que tarda una instruccion nop a 64Mhz es de 62.5uS ? no valla a estar confundido.
Título: Re: Proyectos con 18F67K22
Publicado por: sander en 18 de Abril de 2014, 14:48:20
Hola groundman, a 64 MHz el tiempo de instruccion es de 4/64M lo que equivale a 62.5 nano segundos o 16 MIPS.

Alguna vez hice la prueba de trabajar  a 64 MHz y no da el tiempo del TMR2 para generar la señal de 20 ms para los servos analogicos, lo resolvi utilizando el modo COMPARE del modulo CCP para generar la base de tiempo de 20 ms, y usaba el TMR2 para variar el ancho de pulso.


Saludos
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 18 de Abril de 2014, 17:55:22
si.me he confundido.queria decir 62.5nS .referente al compare mode.nunca lo he utilizado.se podran usar todas las salidas PWM?
creo que son 3 ECCP Y 7 CCP.

otro problema que me esta volviendo loco.es el tema de la frecuencia de reloj del pic.como dige tengo un proyecto de un termostato montado.
y estoy confundido con respecto a la frecuencia a la que esta funcionando.ya que el proteus me indica que el tiempo mas corto de ejecucion de
instruccion es de 1uS.cuando trabajando a 48Mhz deberia de ser de 83.3nS.

me extraña que el circuito preostato este trabajando a 4Mhz.mas que nada porque uso un teclado resistivo que consume mucho recurso.
y que una vez hize uno con menos codigo para un 16f84 y iva muy lento en la lectura de teclas.

asi que he realizado una rutina que produce una interrupcion cada 524ms. lo he probado en el circuito real con un led y funciona.tiene ese retardo.
y tambien lo tiene el proteus.asi que se puede decir que proteus y el circuto real van a la misma velocidad.y esto me hace dudar de si el
circuito real esta trabajando a 4Mhz o 48Mhz.

T1CON lo he cargado con este valor:   b'11111101'   = 1:8 Prescale value

asi que si la frecuencia es de 4Mhz (FOSC/4) = 1Mhz  (1/1Mhz)=1uS *8= 8uS *512 del tmr1= 520mS.

esto me hace pensar de que el circuito esta funcionando a 4Mhz.y no a 48Mhz.

y la palabra de configuracion creo que esta bien configurada:

 CONFIG PLLDIV =1
 CONFIG USBDIV = 1
 CONFIG CPUDIV = OSC1_PLL2

no se que me falta.para conseguir los 48Mhz
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 18 de Abril de 2014, 20:00:42
por fin.ya me funciona el pic 18F2550 a 48Mhz.por lo visto el oscilador no sirve el modo XT.almenos en la simulacion con el ICD2.estos son los fuses.

  CONFIG PLLDIV =1
  CONFIG USBDIV = 1
  CONFIG CPUDIV = OSC1_PLL2
  CONFIG FOSC =  HSPLL_HS      ;Osc por XTAL 4mhz

aunque en el proteus no detecta la configuracion de los fuses.y hay que ponerle al pic 48Mhz para que simule correctamente.

ahora hare las pruebas con el 18F67K22.haber si puedo hacer lo del comparador para que me funcionen los servos.

Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 15 de Julio de 2014, 18:07:35
hola de nuevo.como comentaba al principio del hilo.queria pasarme  a un pic superior de la serie 18F.

al final me decante por el 18F87K22.ya que segun el precio y las caracteristicas creo que es la mejor opcion.ya monte la PCB y estoy empezando con las practicas
en el ICD2.

por el momento son todo problemas.el primero es que segun una nota de microchip.no debe de excederse el voltage de vpp.describen como proteger
el pin MCLR con un diodo zener regulado para no pasar de 12V.al principio puse un zener de 11v porque no encontraba uno de 12v.pues el
MPLAB no reconocia el pic.puse uno de 12V y ya me lo reconoce.puedo programarlo,leerlo y borrarlo.

ahora el problema lo tengo cuando quiero usar el ICD2 en modo debugger.me sale el mensage:

ICD0083: Debug:  Unable to enter debug mode.  Please double click this message for more information.
MPLAB ICD 2 ready for next operation


creo que el problema esta en la configuracion de los fuses.pero no se si esta configuracion es la correcta para un crystal de 10Mhz.

   CONFIG    RETEN=ON      ; VREG Sleep Enable bit:
            CONFIG    INTOSCSEL=LOW   ; LF-INTOSC Low-power Enable bit:
         CONFIG    SOSCSEL=DIG   ; SOSC Power Selection and mode Configuration bits:
            CONFIG    XINST=OFF      ; Extended Instruction Set:
             CONFIG    FOSC=EC3      ; Oscillator:
            CONFIG    PLLCFG=OFF   ; PLL x4 Enable bit:
            CONFIG    FCMEN=OFF      ; Fail-Safe Clock Monitor:
            CONFIG    IESO=OFF      ; Internal External Oscillator Switch Over Mode:
            CONFIG    PWRTEN=OFF   ; Power-up Timer:
            CONFIG    BOREN=OFF      ; Brown-out Detect:
            CONFIG    BORV=1      ; Brown-out Reset Voltage bits:
            CONFIG    BORPWR=LOW   ; BORMV Power level:
            CONFIG    WDTEN=OFF;ON      ; Watchdog Timer:
            CONFIG    WDTPS=1024   ; Watchdog Postscaler:
            CONFIG    MSSPMSK=MSK5   ; MSSP address masking:
           CONFIG    MCLRE=ON      ; Master Clear Enable:
            CONFIG    STVREN=ON      ; Stack Overflow Reset:
            CONFIG    BBSIZ=BB1K   ; Boot Block Size:
         CONFIG     CCP2MX=PORTC

se le ha dado este caso  alguien?
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 15 de Julio de 2014, 18:52:22
YA FUNCIONA. :-/ :-/ :-/ :-/ :-/

que alivio.pensaba que me haia cargado de alguna forma el pic.he puesto esta configuracion:

  CONFIG    RETEN=OFF;ON      ; VREG Sleep Enable bit:
            CONFIG    INTOSCSEL=LOW   ; LF-INTOSC Low-power Enable bit:
         CONFIG    SOSCSEL=LOW;DIG   ; SOSC Power Selection and mode Configuration bits:
            CONFIG    XINST=OFF      ; Extended Instruction Set:
             CONFIG    FOSC=INTIO2;EC3      ; Oscillator:
            CONFIG    PLLCFG=ON;OFF   ; PLL x4 Enable bit:
            CONFIG    FCMEN=OFF      ; Fail-Safe Clock Monitor:
            CONFIG    IESO=OFF      ; Internal External Oscillator Switch Over Mode:
            CONFIG    PWRTEN=OFF   ; Power-up Timer:
            CONFIG    BOREN=OFF      ; Brown-out Detect:
            CONFIG    BORV=1      ; Brown-out Reset Voltage bits:
            CONFIG    BORPWR=LOW   ; BORMV Power level:
            CONFIG    WDTEN=OFF;ON      ; Watchdog Timer:
            CONFIG    WDTPS=1024   ; Watchdog Postscaler:
            CONFIG    MSSPMSK=MSK5   ; MSSP address masking:
           CONFIG    MCLRE=ON      ; Master Clear Enable:
            CONFIG    STVREN=ON      ; Stack Overflow Reset:
            CONFIG    BBSIZ=BB1K   ; Boot Block Size:
         CONFIG     CCP2MX=PORTC




ahora toca averiguar cual es el fuse que me genera el problema.y hacer que el pic funcione a 64Mhz.
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 15 de Julio de 2014, 20:06:54
por ahora he conseguido hacerlo funcionar con el oscilador interno.pero eso serian 16Mhz.
si intento seleccionar en los fuses un oscilador externo a crystal.el MPLAB me salta un error.no se si sera porque hay algo mal en el circuito.
o es que el ICD2 no funciona con este modo en este pic. supongo que 64Mhz son muchos para este.o quizas sea que no se pudede poner un crystal de 10Mhz
y ha de ser otro.si el PLL multiplica x2. supongo que esl crystal ha de ser de 16Mhz.
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 16 de Julio de 2014, 19:23:55
no logro hacer que el 18F87K22 funcione con el oscilador por crystal.con el oscilador interno va perfectamente.tanto en emulacion como en
circuito externo.

nunca he trabajado con estos pic.ahora me entero de que tiene un regulador interno.pero las notas de microchip no ponen nada en claro.
por ejemplo:

no pone a que voltage puede trabajar el pic.el datasheet dice que de 1.8 a 5.5  pero eso es despues del regulador o antes del regulador?
tambien dice que el regulador interno regula a 3.3v

no se si se puede conectar directamente voltages de 1.8 a 5.5 directamente a Vdd,o tiene que pasar por VddCore estando el regulador dehabilitado.
Título: Re: Proyectos con 18F67K22
Publicado por: Tisco en 17 de Julio de 2014, 15:45:30
no logro hacer que el 18F87K22 funcione con el oscilador por crystal.con el oscilador interno va perfectamente.tanto en emulacion como en
circuito externo.

nunca he trabajado con estos pic.ahora me entero de que tiene un regulador interno.pero las notas de microchip no ponen nada en claro.
por ejemplo:

no pone a que voltage puede trabajar el pic.el datasheet dice que de 1.8 a 5.5  pero eso es despues del regulador o antes del regulador?
tambien dice que el regulador interno regula a 3.3v

no se si se puede conectar directamente voltages de 1.8 a 5.5 directamente a Vdd,o tiene que pasar por VddCore estando el regulador dehabilitado.


en el apartado 2.0 del datasheet (GUIDELINES FOR GETTING STARTED WITH PIC18FXXKXX  MICROCONTROLLERS)aparece como conectar la alimentación del core. A mí me pareció un poco raro al principio pero una vez pillas como va no tiene problema.

Un saludo!
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 18 de Julio de 2014, 14:50:45
hola Tisco.ya habia leido esto.pero no me aclaro con el ingles.creo que dice que para habilitar el regulador,hay que conectar el pin ENVREG A Vcc.

y entonces aplicar el voltage de entrada al pin VddCore.que este debe tener un condensador de 10uF como filtro.
pero no estan claros los voltages.supongo que el valor maximo es de 5.5V . y que al estar activo el regulador interno,en Vcc habran 3.3V

en el caso de que se deshabilite el regulador,hay que poner ENVREG a Vss.y creo que dice que VddCore se deja aislado pero con un condensador de 10uF
y que la alimentacion al pic se realizara por Vdd.

eso es lo que he entendido.estoy equivocado?




respecto a lo de la frecuencia del oscilador.en el modo INTIO1,el pic funciona perfectamente con una frecuencia maxima de 16Mhz creo.
el PLL no afecta a la velocidad del pic.ya que este no esta entre el camino del oscilador interno y el nucleo.

ahora ya se que funciona el crystal.ya que los modos HS1 y HS2 permiten trabajar al pic.incluso usando el PLL,puedo ver como el led
que tengo conectado a una salida.funciona a intervalos de tiempo diferentes.

pero los modos EC1,EC2,EC3.el debugger en circuito ICD2 me manda mensages de error.

incluso si programo el pic y lo hago funcionar independientemente,este funciona en el modo HS pero no en el modo EC.

tengo puesto un crystal de 10Mhz y el PLL activado.lo suyo seria usar uno de 16Mhz.pero no dispongo de ninguno en estos momentos.
asi que me queda probar a cambiar de frecuencia de crystal o cambiar el pic.




PD:he estado realizando todas las combinaciones para la gestion del regulador interno.y no me da los resultados esperados.supongo que estara
   averiado.pero no se si esto influye para el funcionamiento en el modo EC3.
Título: Re: Proyectos con 18F67K22
Publicado por: Tisco en 18 de Julio de 2014, 17:53:21
El regulador interno se habilita o deshabilita en función de la tensión de alimentación que uses.
Si alimentas el uC a 3.3V, puedes deshabilitarlo tirando ENVREG a masa y colocando un condensador de 100n en VDDCORE.
Si lo alimentas a más de ese valor (o uno parecido, no recuerdo exactamente, pero aparece en el datasheet) tienes que habilitar el regulador interno tirando ENVREG a VCC y poner un condensador de unos 10uF en el VDDCORE.

En cuanto al oscilador, yo sólo lo he usado en modo INTRC y EC, es decir, entrando una señal cuadrada de reloj por el pin RA6; tanto habilitando como deshabilitando el PLL.

Si tienes un cristal de 10MHz deberías usar el modo HS.

También es importante analizar el condensador que pongas en el VDDCORE, pues tiene que tener una ESR específica. Yo siempre he usado de tántalo cuando se trata del condensador de 10uF y cerámicos en el caso de 100n.

Espero que te te sirva de ayuda.

Un saludo!
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 19 de Julio de 2014, 05:18:19
 :5].ahora entiendo porque no me funciona en modo EC.no preste atencion al datasheet.es cierto que dice que es un frecuencia inyectada al pic.
y yo estaba usando un cristal resonador.

espero que poniendo un crystal de 16Mhz y pasando por el PLL.el pic trabaje a 64Mhz.

respecto a la alimentacion del pic.si no se usa el regulador interno,por donde debemos alimentar al pic?.por Vddcore o por Vdd?
porque por lo que veo,usar el regulador interno solo es para cuando trabajemos con el chip a 3.3v
Título: Re: Proyectos con 18F67K22
Publicado por: Tisco en 19 de Julio de 2014, 15:54:38
Que yo sepa se alimenta siempre por Vdd. Vddcore es sólo para poner el condensador que corresponda y que pueda trabajar el core del micro.

Saludos!
Título: Re: Proyectos con 18F67K22
Publicado por: MerLiNz en 19 de Julio de 2014, 17:45:42
El propio pic tiene un regulador a 3.3v para el CORE, en el pin VDDCORE se le pone un condensador (en el datasheet te pone de que capacidad y ESR maxima) para estabilizar la tension del core. En caso de que no quieras usar el regulador interno entonces le pones 3.3v directamente a VDDCORE y automaticamente lo detecta desactivando el regulador interno. Todo esto es porque aunque el pic funcione a 5V internamente el core trabaja a 3.3v para reducir el consumo y ruidos, es por eso que acepta sus 64mhz.
Este trabaja a 3.3v, otros trabajan a 1.8V, incluso los hay que trabajan a 1.2V pero externamente a 5V
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 20 de Julio de 2014, 07:43:37
entonces.en el datasheet que dice que el voltage de operacion es desde 1.8 a 5.5v,quiere decir que en la patilla Vddcore podemos introducir cualquier
voltage dentro de este rango,que el regulador interno alimentara al core a 3.3v?

asi que si yo tengo una fuente externa de 5v,deberia tener activado el regulador interno.y si es asi,las salidas del pic van a 3.3v?

deduzco que deberia ser asi.y que habra patillas que soporten 5V y otras no.
Título: Re: Proyectos con 18F67K22
Publicado por: MerLiNz en 20 de Julio de 2014, 08:07:11
Hay que leer un poco mas el datasheet ehh  :lol:

Si tu pones el pic a 5V este trabaja internamente a 3.3v y externamente a 5V, es decir, todas las patillas iran a 5V, no tendras 3.3V en ningun sitio.

El pin VDDCORE tiene 2 funciones, como VDDCORE o VCAP, si quieres utilizar el regulador interno simplemente conectale un condensador a VCAP y masa y luego el ENVREG a +5V.

http://ww1.microchip.com/downloads/en/DeviceDoc/39960d.pdf
Mirate el datasheet en la seccion:
28.3
Título: Re: Proyectos con 18F67K22
Publicado por: groundman en 20 de Julio de 2014, 17:53:17
gracias por las molestias.ya lo entiendo.la cosa es que me he repasado el datasheet un monton de veces.lo de las conexiones si lo entendia.lo que no comprendia
es como el core trabaja a un voltage y los perifericos a otro.esto es algo nuevo para mi.el ultimo pic que he usado es el 18F2550 y este no lleva ese sistema de alimentacion.

Título: Re: Proyectos con 18F67K22
Publicado por: MerLiNz en 20 de Julio de 2014, 18:42:06
es lo ultimo, por ejemplo un pic32 va a 1.8v (o quizas menos) sin embargo se alimenta a 3.3v y algunos pines es tolerante a 5V.

Yo uso un freescale el cual va a 1.2v y externamente se alimenta a 5V.

Entre mayor es la frecuencia lo normal es que el voltaje del core sea menor, pero todo esto es simplemente informacion, tu con saber como va ese pues te sobra jeje.