Autor Tema: Pequeño pero poderoso: PIC12F/LF1822  (Leído 7497 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Pequeño pero poderoso: PIC12F/LF1822
« en: 30 de Noviembre de 2011, 07:28:05 »
He estado peleando con este PIC horas para hacerlo función que me lleno de alegría por haberlo conseguido  :mrgreen: Les cuento:

El PIC que tengo es un PIC12LF1822, cuando mi padre lo pidio, hace como un año atras, ya no habia en stock en digikey el PIC12F1822. Bueno, primero, me quite un peso de encima al saber que el susodicho PIC era en formato DIP8; pues pensé que era SOIC y me daba flojera tener que hacerle una PCB para poder ponerlo en el protoboard, soldar, etc. Luego, no me gustaba mucho la idea de que fuera LF, ya saben...

Entonces, manos a la obra, el PIC al protoboard, vss y vdd con su 104, un led para test (blink) y conectado directamente el pickit2. Ya me habia asegurado que mi programador (el pickit2) podia programar este PIC (en su version LF no se olviden =D); que, porcierto, solo lo soporta con su propio programa (Pickit 2 Programmer.exe o como quieran llamarle), ya que el MPALB dice que no lo soporta (mas info: AQUI)

Luego, con mi CCS v4.112 creo mi programa muy basico (blink ya saben) con su datasheet siempre a la mano. Configurando fusibles y demas... Compilo, todo bien, el pickit2 lo reconoce, programo, ok. Pero no funciona  :D He pasado mas de 5 horas (toda la madrugada) busncaod en google, el foro de CCS, el foro de Microchip, bajando .hex, .asm y compilandolos y leyendo y fumando y NADA! Intento cambiar el programador (pues pensé que tal vez por ahí había alguna falla) al ICD2 que también tengo, pero que para que el ICD2 lo programe se necesita un circuito externo... Posteriormente, reviso conexión y aparentemente todo esta bien... Ya alfinal de todo el bendito problema fue que el PUTO cable que le daba vss (GND, tierra, masa) al PIC estaba defectuoso.. ARGGG!!!

Solucione esto y compilo y todo y: "OHH!! el LED prendio!!!. Pero que pasa? Yo puse que haga toggle cada 100ms... PORQUE NO PARPADEAS BENDITO LED!!!"  :mrgreen: Pues, verán, ese problema ya es del compilador CCS; si, es un bug (Quien lo diría?). Entonces, como tenia otra versión mas actual instalada (la v4.124), compile ahí y, hasta ahora, todo OK!

Así que, sin aburrirlos mas, dejo todo el proyecto. Quise en un principio simular en el proteus pero en su versión 7.8 SP2 (muy actual) no lo soporta.

Por si se les paso algo:
PIC: 12LF1822 @ 32Mhz: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en544839
Compilador: CCS v4.124
Programador: Pickit 2 (Con su propio software programador, pues desde el MPLAB no se puede)

Codigo:
Código: [Seleccionar]
#INCLUDE <12LF1822.h>

#FUSES INTRC_IO               
#FUSES NOWDT                   
#FUSES PUT                     
#FUSES NOMCLR                   
#FUSES PROTECT               
#FUSES NOCPD                 
#FUSES NOBROWNOUT                 
#FUSES NOCLKOUT                 
#FUSES NOIESO                   
#FUSES NOFCMEN                 
#FUSES NOWRT                   
#FUSES PLL_SW             
#FUSES STVREN               
#FUSES BORV25                 
#FUSES NODEBUG               
#FUSES NOLVP               

#USE Delay (Clock = 32 000 000)

#USE FAST_IO(A)

#DEFINE PIN_TEST  PIN_A2

void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_dac(DAC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(T0_internal);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);

   set_tris_a(0b001000);
   output_a(0);
   
   while (true)
   {
      output_toggle(PIN_TEST);
      delay_ms(100);
   }
}

El esquema no es nada del otro mundo: El PIC mismo conectado a vss y vdd con su 104. En RA2 va una R de 220ohm conectada al anodo del LED y pues el catodo a vdd (3.3V eso si ah! suministrado amablemente de mi Pickit2  :mrgreen:). Eso es todo.

Espero no olvidarme de nada más. Ahora si, a dormir  :P
« Última modificación: 30 de Noviembre de 2011, 17:04:52 por jeremylf »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #1 en: 30 de Noviembre de 2011, 08:31:15 »
Hola Jeremy, chevere ver que sigues en los micros, solo una duda, LF significa que funciona a 3.3v? o exactamente a que refiere las siglas? es que me pedi unos samples del 18F4550 pero ya no habia y le chunte al pic18LF4550 y cuando queria ver de que trataba me mandaba el mismo datasheet de la serie F. Ilustrame maestro!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #2 en: 30 de Noviembre de 2011, 15:41:22 »
Asi es, no puedes trabajar a 5V como comunmente se hace: aique ser mas cauteloso.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #3 en: 30 de Noviembre de 2011, 16:38:05 »
Asi es, no puedes trabajar a 5V como comunmente se hace: aique ser mas cauteloso.

noooooooooooooooooooooooooooo  :shock:

menos mal son samples  :o
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #4 en: 30 de Noviembre de 2011, 17:17:34 »
Hahah, si menos mal =D

Bueno, yo sigo probando este PIC. Esta vez con su ESUART:

Código: [Seleccionar]
#INCLUDE <12LF1822.h>

#FUSES INTRC_IO               
#FUSES NOWDT                   
#FUSES PUT                     
#FUSES NOMCLR                   
#FUSES PROTECT               
#FUSES NOCPD                 
#FUSES NOBROWNOUT                 
#FUSES NOCLKOUT                 
#FUSES NOIESO                   
#FUSES NOFCMEN                 
#FUSES NOWRT                   
#FUSES PLL_SW             
#FUSES STVREN               
#FUSES BORV25                 
#FUSES NODEBUG               
#FUSES NOLVP               

#USE Delay (Clock = 32 000 000)
#USE RS232 (Baud = 115200, UART1)

#USE FAST_IO(A)

#BYTE APFCON = 0x11D
#BIT TXCKSEL = APFCON.2
#BIT RXDTSEL = APFCON.7

#DEFINE PIN_TEST  PIN_A2

int1 LLegoDato;
int8 Dato;

void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_dac(DAC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(T0_internal);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);

   TXCKSEL = 1;   // Cambia el hardware TX del eusart del RA0 al RA4.
   RXDTSEL = 1;   // Cambia el hardware RX del eusart del RA1 al RA5.
   
   set_tris_a(0b101000);
   output_a(0);
   getc();  // Para limpiar el buffer rx.
   
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   
   while (true)
   {
      if (LlegoDato == true)
      {
         printf("%c", Dato);
         LlegoDato = false;
      }
   }
}

#INT_RDA
void RX_Int (void)
{   
   Dato = getc();
   LlegoDato = true;
   
}

Al max232 tambien lo alimento con 3.3v (proporcionado por el pickit2) para que en mi entrada rx del pic tenga ese voltaje tambien.

TX -> RA4
RX -> RA5
Estos pines los he configurado de su estado default (RA0 (TX) y RA1 (RX)) a travez del registro APFCON.

Saludos!
« Última modificación: 30 de Noviembre de 2011, 17:31:36 por jeremylf »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #5 en: 30 de Noviembre de 2011, 19:33:00 »
Asi es, no puedes trabajar a 5V como comunmente se hace: aique ser mas cauteloso.

noooooooooooooooooooooooooooo  :shock:

menos mal son samples  :o

y dime esos LF soportan tensiones de 5V como entrada en los pines de lectura digital? si tienes la referencia me podrias alcanzar el link? gracias!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #6 en: 30 de Noviembre de 2011, 20:33:30 »
Aguanten... tengo pic18LF4620 y el datasheet dice:

PIC18F2525/2620(1), PIC18F4525/4620(1),
PIC18F2525/2620T(2), PIC18F4525/4620T(2);
VDD range 4.2V to 5.5V
PIC18LF2525/2620(1), PIC18LF4525/4620(1),
PIC18LF2525/2620T(2), PIC18LF4525/4620T(2);
VDD range 2.0V to 5.5V

Para los pics de jeremylf:

PIC12F1822(1), PIC16F1823(1), PIC12F1822T(2),
PIC16F1823T(2);
VDD range 1.8V to 5.5V
PIC12LF1822(1), PIC16LF1823(1), PIC12LF1822T(2),
PIC16LF1823T(2);
VDD range 1.8V to 3.6V

Y para micro_cadaver

PIC18F2455/2550(1), PIC18F4455/4550(1),
PIC18F2455/2550T(2), PIC18F4455/4550T(2);
VDD range 4.2V to 5.5V
PIC18LF2455/2550(1), PIC18LF4455/4550(1),
PIC18LF2455/2550T(2), PIC18LF4455/4550T(2);
VDD range 2.0V to 5.5V


Asi que a mirar el datasheet
saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #7 en: 01 de Diciembre de 2011, 01:10:49 »
Y para micro_cadaver

PIC18F2455/2550(1), PIC18F4455/4550(1),
PIC18F2455/2550T(2), PIC18F4455/4550T(2);
VDD range 4.2V to 5.5V
PIC18LF2455/2550(1), PIC18LF4455/4550(1),
PIC18LF2455/2550T(2), PIC18LF4455/4550T(2);
VDD range 2.0V to 5.5V

Asi que a mirar el datasheet
saludos

Mire el datashhet y encontre en la página 358 - figura 28-2 una grafica que indica que si uso el pic 18LF4550 a 48MHz, debo usar 5V de alimentacion. Bueno eso quiere decir que el chip lo podre usar con 5V de manera normal.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #8 en: 01 de Diciembre de 2011, 02:13:10 »
Ah mira tu! No sabia eso, gracias.

Al menos, en el PIC12LF1822 es como te mencioné: vdd 3.3v y en sus pines lo mismo. Aqui se ve mejor:

« Última modificación: 01 de Diciembre de 2011, 02:17:09 por jeremylf »

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #9 en: 01 de Diciembre de 2011, 03:29:58 »
Bueno y ahora a lo que queria llegar, usar su DAC (Digital to Analog Converter):

Código: [Seleccionar]

#INCLUDE <12LF1822.h>

#FUSES INTRC_IO              
#FUSES NOWDT                    
#FUSES PUT                    
#FUSES NOMCLR                  
#FUSES PROTECT                
#FUSES NOCPD                  
#FUSES NOBROWNOUT                
#FUSES NOCLKOUT                
#FUSES NOIESO                    
#FUSES NOFCMEN                
#FUSES NOWRT                  
#FUSES PLL_SW              
#FUSES STVREN                
#FUSES BORV25                
#FUSES NODEBUG              
#FUSES NOLVP                

#USE Delay (Clock = 32 000 000)
#USE RS232 (Baud = 115200, UART1)

#USE FAST_IO(A)

#BYTE APFCON = 0x11D
#BIT TXCKSEL = APFCON.2
#BIT RXDTSEL = APFCON.7

#DEFINE PIN_TEST  PIN_A2

int1 LLegoDato, subiendo;
int8 Dato, i;
int16 Tiempo_us;

#ZERO_RAM
void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   //setup_dac(DAC_OFF);
   setup_dac(DAC_VSS_VDD | DAC_OUTPUT);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(T0_internal);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);

   TXCKSEL = 1;   // Cambia el hardware TX del eusart del RA0 al RA4.
   RXDTSEL = 1;   // Cambia el hardware RX del eusart del RA1 al RA5.
  
   set_tris_a(0b101000);
   output_a(0);
   getc();  // Para limpiar el buffer rx.
  
   subiendo = true;
   Tiempo_us = 107;
  
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
  
   while (true)
   {      
      dac_write(i);
      delay_us(Tiempo_us);
      
      if (Subiendo == true)
      {
         i++;
         if (i == 31)
         {
            Subiendo = false;
         }
      }
      else
      {
         i--;
         if (i == 0)
         {
            Subiendo = true;
         }
      }
   }
}

#INT_RDA
void RX_Int (void)
{  
   Dato = getc();
  
   if (Dato == '+') Tiempo_us++;
   else if (Dato == '-') Tiempo_us--;
        
   output_toggle(PIN_TEST);
   printf("%Lu ", Tiempo_us);
}

Imagen (Onda triangular):

VOLTS/DIV: 5V
TIME/DIV:5ms

Este PIC tiene una sola salida para el DAC (por el pin RA0, por eso mutiplexe el eusart), siendo este de 5bits de resolucion (0->31).

Funcionamiento del programa: El PIC empieza emitiendo la señal triangular a una frecuencia de 100hz. A travez del puerto serie, al escribir el simbolo "+" o "-" (sin las comillas), aumentamos o disminuimos, respectivamente, el periodo de esta onda.
« Última modificación: 01 de Diciembre de 2011, 03:45:07 por jeremylf »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #10 en: 01 de Diciembre de 2011, 09:17:11 »
no manyo, esa señal triangular la genera el pic?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #11 en: 01 de Diciembre de 2011, 14:35:43 »
Asi es, tiene DAC ese PIC.

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #12 en: 01 de Diciembre de 2011, 19:31:53 »
tienes que probar el:

Citar
mTouch™ Sensing oscillator module:
- Up to 4 input channels

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #13 en: 01 de Diciembre de 2011, 19:49:06 »
tienes que probar el:

Citar
mTouch™ Sensing oscillator module:
- Up to 4 input channels
Si ya lo hice, solo que todo en protoboard...

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Pequeño pero poderoso: PIC12F/LF1822
« Respuesta #14 en: 01 de Diciembre de 2011, 20:10:22 »
Bueno ahi va con el mTouch.


Mi dedo debe chocar con el pin RA2 para que detecte... Pero bueno, será por el protoboard. Ya en su momento hare las pruebas con su PCB correspondiente  :P

Código: [Seleccionar]
#INCLUDE <12LF1822.h>

#FUSES INTRC_IO              
#FUSES NOWDT                    
#FUSES PUT                    
#FUSES NOMCLR                  
#FUSES PROTECT                
#FUSES NOCPD                  
#FUSES NOBROWNOUT                
#FUSES NOCLKOUT                
#FUSES NOIESO                    
#FUSES NOFCMEN                
#FUSES NOWRT                  
#FUSES PLL_SW              
#FUSES STVREN                
#FUSES BORV25                
#FUSES NODEBUG              
#FUSES NOLVP                

#USE DELAY (CLOCK = 32 000 000)

#USE TOUCHPAD (PIN_A2 = 'A')

#USE FAST_IO(A)

#DEFINE PIN_TEST  PIN_A4

char Touch_tecla;

#ZERO_RAM
void Main (void)
{
   setup_oscillator(OSC_8MHZ | OSC_NORMAL | OSC_PLL_ON);

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_dac(DAC_OFF);
   //setup_dac(DAC_VSS_VDD | DAC_OUTPUT);
   setup_spi(SPI_SS_DISABLED);
   //setup_timer_0(T0_internal);
   //setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC);
  
   set_tris_a(0b001100);
   output_a(0);
  
  TOUCHPAD_STATE(1);            //calibrates, then enters normal state
  
   enable_interrupts(GLOBAL);
  
   while (true)
   {      
      if (touchpad_hit() == true)
      {
         Touch_tecla = TOUCHPAD_GETC();   //will wait until a pin is detected
        
         if (Touch_tecla == 'A')
            output_toggle(PIN_TEST);
      }
   }
}

Saludos!
« Última modificación: 01 de Diciembre de 2011, 20:13:35 por jeremylf »


 

anything