Autor Tema: Ayuda PIC18F23K22 CCS C  (Leído 577 veces)

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

Desconectado emanuel

  • PIC10
  • *
  • Mensajes: 3
Ayuda PIC18F23K22 CCS C
« en: 19 de Junio de 2019, 22:56:16 »

Un saludo a todos.

Hace días me dio por ver este nuevo PIC18F23K22 y dejar un poco al 18F4550/2550 dentro de la familia de los 18Fxx.

Pues bien, resulta que tratando un código sencillo no e logrado encender y apagar un Led con este nuevo PIC (simulando en proteus) durante 500ms.

creo que es la configuración de los #fuses para este nuevo PIC, ya que el la simulación mantiene encendido el led y en el osciloscopio virtual hay una ráfaga de pulsos, ahora recurro a su ayuda para empezar a manejar este nuevo modelo para mi.

Este es el código y si alguno de ustedes sabe si son los fuses o donde esta el error le agradecería inmensamente.


Código: C#
  1.      
  2.          #include <18F23K22.h>
  3.          #fuses NOWDT, NOPROTECT, NOLVP, NOPUT, NOWRT, NODEBUG, NOMCLR, NOBROWNOUT, NOPROTECT,NOCPD, NOWRT, NODEBUG, PLLEN  , HSM
  4.          #use delay(CLOCK=40MHz)        
  5.          #byte porta=0xF80
  6.          #byte portb=0xF81
  7.          #byte portc=0xf82
  8.          #use fast_io(a)
  9.          #use fast_io(b)
  10.          #use fast_io(c)
  11.          
  12.          void main()
  13.          {    
  14.          porta=0x00; portb=0x00; portc=0x00;
  15.          set_tris_a(0b11110000); set_tris_b(0b11111111);set_tris_c(0b00000000);            
  16.    
  17.          while(true)
  18.          {      
  19.          output_high(pin_c1); delay_ms(500); output_low(pin_c1);
  20.          }                          
  21.          }
  22.  
  23.         Gracias por leer mi tema. un saludo
  24.  

Desconectado emanuel

  • PIC10
  • *
  • Mensajes: 3
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #1 en: 20 de Junio de 2019, 01:36:21 »
E cambiado output_high(pin_c1); delay_ms(500); output_low(pin_c1); por output_toggle(pin_c1); delay_ms(500); y funciona  :shock:. No se por que no funciona con output_high, output_low. otro detalles que el pulso es de 125ms,es decir 1/4 de lo 500ms.


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1041
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #2 en: 20 de Junio de 2019, 09:46:37 »
Que tal emanuel,

En tu código original tienes esto:
         while(true)
         {       
         output_high(pin_c1); delay_ms(500); output_low(pin_c1);
         }                         

Si lo analizas detalladamente está haciendo justo lo que el osciloscopio te muestra:
1.- Enciendes el puerto C1
2.- Lo dejas encedido por 500 ms
3.- Apagas el puerto C1
4.- Regresa al paso 1, es decir inmediatamente después de apagar el puerto C1 lo vuelves a enceder

Lo que te falta es agregar otro delay después de apagar el puerto C1, de la siguiente manera:

Código: [Seleccionar]
        while(true)
         {       
               output_high(pin_c1);
               delay_ms(500);
               output_low(pin_c1);
               delay_ms(500);
         }   

elreypic.

Desconectado mariacontenis

  • PIC12
  • **
  • Mensajes: 73
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #3 en: 20 de Junio de 2019, 10:19:15 »
Alguna vez yo también intente usar ese pic18f23k22 por su bajo precio en microchip 1.34 de dolar. Me sorprende que trabaja hasta 64Mhz.

elreypic2 podrías ayudar a configuración de fuses para manejarlo a 64 Mhz con su Cristal externo?. Ya que no hay tanta información en la red.
« Última modificación: 20 de Junio de 2019, 10:21:28 por mariacontenis »

Desconectado emanuel

  • PIC10
  • *
  • Mensajes: 3
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #4 en: 20 de Junio de 2019, 11:06:53 »
elreypic

Gracias por responder. No se donde tenía la cabeza  :oops:
Me doy lástima como se me paso. Gracias por aclarar
« Última modificación: 20 de Junio de 2019, 11:30:44 por emanuel »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1041
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #5 en: 20 de Junio de 2019, 13:49:12 »
Alguna vez yo también intente usar ese pic18f23k22 por su bajo precio en microchip 1.34 de dolar. Me sorprende que trabaja hasta 64Mhz.

elreypic2 podrías ayudar a configuración de fuses para manejarlo a 64 Mhz con su Cristal externo?. Ya que no hay tanta información en la red.

Que tal mariacontenis,

Lo mejor para entender cómo configurar los fuses es siempre ir a la hoja de datos del microcontrolador en cuestion.

Si lo que quieres es trabajar el microcontrolador a 64MHz con cristal externo, tienes dos opciones:
1.- Usar un cristal de 16MHz y activar el PLL
2.- Usar un cristal externo de 64MHz

Para la primera opción los fuses deberían ser algo así:
Código: [Seleccionar]
#fuses PLLEN  , HSM

Para la segunda opción:

Código: [Seleccionar]
#fuses HSH

Ten en cuenta que no estoy poniendo nada de configuración del resot de los fuses como el WDT, el Power-up detect etc. Solamente lo que se necesita para configurar el oscilador externo.

elreypic.

Desconectado mariacontenis

  • PIC12
  • **
  • Mensajes: 73
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #6 en: 20 de Junio de 2019, 21:17:25 »
elreypic2

Entonces los fuses se pueden configurar de la siguiente manera para correr a 64Mhz?. Como dices con PLLEN pine un multiplo del PLL por 4; entonces clock = 16Mhz X 4 = 64Mhz, es correcto?. O lo que es lo mismo CRISTAL X PLLEN = 64Mhz.


Código: C++
  1.  #include <18F23K22.h>
  2.  #fuses NOWDT, NOPROTECT, NOLVP, NOPUT, NOWRT, NODEBUG, NOMCLR, NOBROWNOUT, NOPROTECT,NOCPD, NOWRT, NODEBUG, PLLEN  , HSM
  3.  #use delay(clock=64MHz,crystal=16Mhz)
  4.  
  5.  

Bueno, simulándolo en el proteus con un cristal de16Mhz y en el PIC con 64 MHz el retardo de 100ms tarda 25ms  :shock: algo raro.
« Última modificación: 21 de Junio de 2019, 09:20:36 por mariacontenis »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1041
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #7 en: 21 de Junio de 2019, 09:35:43 »
Que tal mariacontenis,

Parece ser que es un bug del simulador o tal vez es la operación por default del propio simulaodr (PROTEUS). Lo que tienes que hacer es definir el Procesor Clock Frequency de 16MHz en las propiedades del microcontrolador en el PROTEUS, ya que la directiva

#use delay(clock=64000000,crystal=16000000)

se encarga de colocar los fuses correctamente para que la operación interna del microcontrador sea la correcta.

Al abrir el archivo .lst se pueden enocntrar los fusibles finales configurados después de realizada la configuración y es claramente visible que el oscilador asignado es el HSH y que está activado el PLL:

Configuration Fuses:
   Word  1: F200   HSH PLLEN PRIMARY FCMEN IESO
   Word  2: 3C18   PUT NOBROWNOUT BORV19 NOWDT WDT32768
   Word  3: 3500   CCP2C1 NOPBADEN CCP3B5 NOHFOFST TIMER3C0 CCP2B5 NOMCLR
   Word  4: 0081   STVREN NOLVP NOXINST NODEBUG
   Word  5: C003   NOPROTECT NOCPB NOCPD
   Word  6: E003   NOWRT NOWRTC NOWRTB NOWRTD
   Word  7: 4003   NOEBTR NOEBTRB

Lo anterior fue claro para mí porque cuando usé la directiva definiendo la frecuencia de operación y el cristal de 64MHz tuve que definir en el proteus el Clock Procesor Frequency en 64MHz para su operación correcta. Es decir:

#use delay(clock=64000000,crystal=64000000)

y el archivo .lst mostró lo siguiente:

Configuration Fuses:
   Word  1: E200   HSH NOPLLEN PRIMARY FCMEN IESO
   Word  2: 3C18   PUT NOBROWNOUT BORV19 NOWDT WDT32768
   Word  3: 3500   CCP2C1 NOPBADEN CCP3B5 NOHFOFST TIMER3C0 CCP2B5 NOMCLR
   Word  4: 0081   STVREN NOLVP NOXINST NODEBUG
   Word  5: C003   NOPROTECT NOCPB NOCPD
   Word  6: E003   NOWRT NOWRTC NOWRTB NOWRTD
   Word  7: 4003   NOEBTR NOEBTRB

saludos y espero esta info te sirva.

elreypic.
« Última modificación: 21 de Junio de 2019, 09:43:42 por elreypic2 »

Desconectado mariacontenis

  • PIC12
  • **
  • Mensajes: 73
Re:Ayuda PIC18F23K22 CCS C
« Respuesta #8 en: 21 de Junio de 2019, 09:50:46 »
elreypic2

Entiendo ahora, la siguiente semana tendré el pic18f23k22 en fisico y realizar pruebas.

Gracias por compartir tus conocimientos.


 

anything