jueves, 29 de julio de 2010

3.- El oscilador y su configuración. - PIC24FJGB256



Esto micro es muy flexible en cuanto a la parte del reloj, ya que tiene la opción de usar dos xtales externos e incluso alternar el uso de estos durante el programa.
También posee un reloj RC interno de 8Mhz (FRC), el cuál nos permite trabajar el microcontrolador sin necesidad de xtales externos, sin embarco este oscilador no es tan exacto como un xtal, por lo cuál se recomiendo para aplicaciones donde el timing no sea muy importante. Y posee tambien un reloj RC interno lento (LPRC) de 31Khz para el ahorro de energía.
Contien un módulo PLL para aumentar la frecuencia del xtal externo para alcanzar hasta 48Mhz para el módulo USB con un xtal de 4MHz. El PLL está disponible tambien para el reloj RC interno (FRC), sin embargo debido a la baja presición de este no se recomienda para uso en aplicaciones relacionadas con el USB.



En la imagen de arriba se aprecia un diagrama de los osciladores con las posibles opciones de trabajo del módulo del oscilador.
Cabe mencionar que las instrucciones se realizan en 2 ciclos máquina en el datasheet se simboliza con FCY que es igual a Fosc/2. Por lo que, con un reloj de 4Mhz el PLL es capaz de elevar hasta 32Mhz, y teniendo encuenta lo anterior, la velocidad de trabajo del cpu es de 16Mhz es decir 16MIPS.

En la siguiente imagen se muestra un diagrama mas detallado del PLL usando el oscilador primario POSC o el FRC.



Hay 3 registros para la configuración del oscilador:

• OSCCON
• CLKDIV
• OSCTUN

con los cuales se puede selecciónar el reloj asi como las divisiones de frecuencia, etc...

Página 123 datasheet para mas información.

Quizá al principio pueda resultar un poco confuso si nunca se ha trabajado con el PLL. En caso de estar familiarizado con el PIC18F esto es incluso más fácil que el módulo de dicho modelo. Al fin, en nuestro programa todo se reduce a un par de líneas, que una vez entendiendo el funcionamiento, se vuelve casi como respirar :P.

martes, 27 de julio de 2010

2.- Básicos. Regulador de voltaje - PIC24FJGB256

El núcleo de la familia PIC24FJ256GB110 tiene la caracteristica eléctrica de funcionar con un voltaje de 2.5V, por lo que podria pensarse que puede existir un poco de incompatibilidad en nuestros diseños o en diseños donde generalmente usamos voltajes para otros dispositivos digitales de 5V o 3.3V, pero en realidad no es así.

En el caso de trabajar con un diseño utilizando voltajes de 3.3V no presenta mayor reto, ya que simplemente con habilitar el regulador de voltaje interno del micro, podremos alimentar directamente con los 3.3V los pines y estar seguros que el núcleo tendra la alimentación constante de 2.5V.

Ahora, cuando usemos voltajes de 5V o mayores, tendremos que dedicar unos cuantos componentes extras que no representan costos altos y nada de complejidad en su implementación. En mi caso uso el regulador de 5V a 3.3V LM1117IMP-3.3 y el regulador interno del micro para obtener los 2.5V en el núcleo.

La configuración del regulador se realiza mediante las patillas:
-ENVREG-VDDCORE/VCAP



Habilidar regulador interno
.

Entonces, en caso de trabajar con un regulador de 3.3V, habilitamos el regulador interno conectando el PIN ENVREG y todos los pines VDD a los 3.3V. VDDCORE/VCAP se conecta a un capacitor de 10uF a tierra.



Deshabilitar regulador interno.

En caso de tener los 2.5V en nuestro diseño, desabilitamos el regulador interno conectando el PIN ENVREG a tierra y el PIN VDDCORE/VCAP así como todos los pines VDD del micro a los 2.5V.




Algunos pines de este micro pueden soportar voltajes de 5V a pesar de trabajar con 2.5V o 3.3v. Estos se encuentran descritos en el datasheet, y proveen mayor compatibilidad con nuestros diseños.

domingo, 25 de julio de 2010

1.- Conexión Básica. - PIC24FJ

Para esta serie de post sobre los PIC24FJ, quizá vaya omitiendo explicaciones sobre procedimientos usados entre otras cosas, dependiendo de la "simplicidad" de los mismos, ya que esto no busca profundizar en todos los detalles de esta familia de micros ni mucho menos en el lenguaje C ni en el compilador, si no que busca dar información objetiva y concreta para poner en marcha de manera rápida estos dispositivos e incluso generar mas dudas para el lector y así indagar mas en este mundo maravilloso de los microcontroladores.
Antes de empezar con el tema quisiera aclarar que estoy muy lejos de ser experto o dominar totalmente el tema, pero si me gusta compartir los muchos o pocos conocimientos que he adquirido con la ayuda de otros blogs y documentos encontrados en la red, por lo que espero que este blog sea útil para otra gente interesada en la electrónica. Cualquier duda o recomendación, así como correcciones y críticas son bien recibidas.


En el siguiente post describiré el hardware básico para empezar a trabajar con un microcontrolador PIC24FJ, en lo particular para este documento PIC14FJ256GB106, sin embargo se puede trabajar con cualquier microcontrolador de la familia 24FJ256GB110 de 64, 80 y 100 pines. Lo que hay que tener en cuenta es el patillaje dependiendo del dispositivo que se este utilizando, es muy recomendable leer por lo menos los puntos principales en la hoja de datos de esta familia.
A continuación pongo los materiales usados, sin contar los materiales para realizar el pcb para esto. De igual manera pongo el esquematico y el pcb. Trataré de poner los videos de la realización de la placa y la manera de soldar el micro y los componentes superficiales de manera casera. (EN CONSTRUCCIÓN).

Material necesario:

- PIC24FJ256GB106 (Montaje superficial, si no tienes la posibilidad, usar uno con empaquedado DIP de la misma familia como puede ser el PIC24FJ64GB002-I/SP , solo hay que adaptar los registros, aunque recomiendo usar este, ya que de la familia 24 es de los que tienen mas prestaciones.)
- Regulador de 3.3V, en mi caso uso el LM1117IMP-3.3 de National Semiconductor también de montaje superficial. DATASHEET

- Programador compatible con esta familia de micros y que pueda programar ICSP. En mi caso uso el PicKit2 de Microchip.

-Resistencias 10K, 470

- Capacitor 1uF, 33pF, 100nF,100 uF


Para la conexión básica nos basamos en el esquema propuesto en el datasheet de esta familia, la cuál presenta los requerimientos mínimos para poner a volar el microcontrolador.

Como se aprecia en este esquema, todos los pines VDD deben estar conectados a la fuente de alimentación de 2.5V o 3.5V dependiendo de si se tiene habilidado o no el regulador interno que posee el microcontrolador (en otro post se indicará como habilidar o deshabilitar el regulador) y todos los VSS a tierra.

Entre todos los pines VDD y VSS es MUY RECOMENDABLE incluir un capacitor localizado lo mas cerca posible de estos pines. Los valores recomendados para los capacitores del C1 a C6 es de 0.1uF a 20V cerámicos.

Para el C7 se recomienda 10uF a 6.3V de tantalio o cerámico, pero como comente anteriormente, dependerá de la configuración del regulador interno. Este tema lo trataré brevemente en el siguiente post.

Para mas información página 27 del datasheet PIC24FJ256GB110.

..... EN CONSTRUCCIÓN.....

sábado, 5 de junio de 2010

Conexión CDC PIC18F <-> LabView.


En el siguiente documento se detallan algunas funciones y procedimientos para realizar una conexion mediante CDC ( Emulación de puerto serie) con un microcontrolador de la familia 18F con soporte para USB y LabView. Son bienvenidas las observaciones, correciones y/o correciones sugerencias para este documento.


Conexion CDC PIC<->LabView






El hardware utilizado para este ejemplo dispone de 5 pushbuttons conectados en el puerto A (A1..A5) y 8 leds en el puerto B (B0..B7).




#include <18f2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL4,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#define LED1 PIN_B0
#define LED2 PIN_B1
#define LED3 PIN_B2
#define LED4 PIN_B3
#define LED5 PIN_B4
#define LED6 PIN_B5
#define LED7 PIN_B6
#define LED8 PIN_B7

#define LED_ON output_low
#define LED_OFF output_high


#include
#include

void main(void) {

char c;
usb_init();

while (TRUE) {
if (usb_enumerated()) {
if (usb_cdc_kbhit()) {

c=usb_cdc_getc();

if (c=='1') output_toggle(LED1);
if (c=='2') output_toggle(LED2);
if (c=='3') output_toggle(LED3);
if (c=='4') output_toggle(LED4);
if (c=='5') output_toggle(LED5);
if (c=='6') output_toggle(LED6);
if (c=='7') output_toggle(LED7);
if (c=='8') output_toggle(LED8);

}

if (input_STATE(PIN_A5)==0){
delay_ms(800);
printf(usb_cdc_putc,"5\r");
}

if (input_state(PIN_A4)==0){
delay_ms(800);
printf(usb_cdc_putc,"4\r");
}

if (input_state(PIN_A3)==0){
delay_ms(800);
printf(usb_cdc_putc,"3\r");
}

if (input_state(PIN_A2)==0){
delay_ms(800);
printf(usb_cdc_putc,"2\r");
}

if (input_state(PIN_A1)==0){
delay_ms(800);
printf(usb_cdc_putc,"1\r");
}

}
}
}







A continuación un video para complementar el documento...






.

jueves, 3 de junio de 2010

DAQ mediante CDC y LabView



Esta es una aplicación de la conectividad USB, en este caso en particular, usando la emulación de un puerto serie RS232 mediante un microcontrolador PIC18F2550 (Puede usarse cualquiera de esta familia) para la adquisición de datos analógicos usando el convertidor analógico-digital del mismo, y enviando estos datos a la PC y procesarlos mediante LabView.
Con el LabView se pueden realizar una cantidad de cosas impresionantes, y lo mas impresionante es el tiempo de implementación que es muy corto, en cuestión de minutos uno puede obtener una aplicación bastante poderosa.

Para esta aplicación se utilizaron los componentes VISA de labview para realizar la conexión serial de manera rápida pero eficaz, se utiliza un GRAPH CHART para graficar los datos adquiridos, y la función WRITE TO SPREED SHEET para guardar estos datos a una hoja de cálculo de exel.

CLICK AQUÍ PARA VER CÓDIGO [-/+]



//-----------------------------------------------------------------------------------
//
// Mas proyectos en: http://perfectalgorithm.blogspot.com
//
//----------------------------------------------------------------------------------
// Esta obra está bajo una licencia
// Atribución-No comercial-Licenciamiento Recíproco 2.5 México de Creative Commons.
// Para ver una copia de esta licencia, visite:
// http://creativecommons.org/licenses/by-nc-sa/2.5/mx/
// o envie una carta a Creative Commons, 171 Second Street, Suite 300,
// San Francisco, California 94105, USA.
//-----------------------------------------------------------------------------------

#include <18F2550.h>
#device ADC=10
#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)


#include <usb_cdc.h>
#include <lcd1.c> //Cambie por libreria LCD adecuada.
#include <string.h>

#BYTE TRISA = 0x0F92
#BYTE TRISB = 0x0F93
#BYTE PORTA = 0x0F80
#BYTE PORTB = 0x0F81
#BYTE ADCON0 = 0x0FC2
#BYTE ADCON1 = 0x0FC1
#BYTE CMCON = 0x0FB4



char comando[10];
char adc_string[10];
int16 adc_dato;
int len=0;
char c;

void commando();



void main(void) {

LCD_init();
usb_init();

TRISA = 0x0FF;
TRISB = 0x00;
ADCON1 = 0x0F;
CMCON = 0x07;


setup_comparator(NC_NC_NC_NC);
setup_adc_ports(AN0);
setup_adc(vss_vdd);
set_adc_channel(0);
setup_adc(adc_clock_internal);


printf(lcd_putc,"\fPerfectAlgorithm");
len=0;


while (TRUE) {
if (usb_enumerated()) {
if (usb_cdc_kbhit()) {
c=usb_cdc_getc();
Comando[len]=c;
len++;
}
if (len>2) {
commando();
len=0;
}
}
}
}

void envia_dato() {
int i;
read_adc(ADC_START_ONLY);
while (bit_test(ADCON0,1));
adc_dato = read_adc(ADC_READ_ONLY);
sprintf(adc_string,"%Lu",adc_dato);
for(i=0;i<strlen(adc_string)+1;i++) {
usb_cdc_putc(adc_string[i]);
while(!usb_cdc_putready());
}

}

void commando() {

if (Comando[0]=='G') { //----------- GDT
if (comando[1]=='D') {
if (comando[2]=='T') {
envia_dato();
}
}
}

}

CLICK AQUÍ PARA VER DESCARGAR SOURCE LABVIEW/PIC [-/+]



El archivo contiene el Firmware para el PIC (.C para copilador PCW CCS) y SOURCE para LabView v8.6

http://rapidshare.com/files/395453831/Conexion_CDC_con_Labview.rar.html







lunes, 31 de mayo de 2010

Guitar Hero Casero v2.0.

Esta es una actualización del proyecto, ya que se realizo con una guitarra original del juego GUITAR HERO dañada.

Otra actualización fue usar el modo de conexión HID JOYTICK, ya que el anterior se utilizó HID pero en forma de teclado, ya que fue basado en el ejemplo del copilador CCS.
En este se personalizó el descriptor del joytick para tener los botones deseados y tener la funcionalidad al 100% de la guitarra. Para generar el descriptor se utilizó la herramienta ofrecida por www.usb.org


Se remplazó la circuitería interna para adaptar los botones a las entradas del microcontrolador...



El pcb hecho con EAGLE.



El source para PCW CCS y el archivo Descriptor... En otro post explicaré como generar sus descriptores según su necesidad.




Frets On Fire se puede descargar de:
fretsonfire.sourceforge.net

Guitar Hero Casero v1.0.

Este proyecto surgió cuando practicaba con el CCS y la conexión USB, es una guitarra casera hecha con un microcontrolador PIC18F4550 para el juego FREETS ON FIRE con licencia gratuita. esta fue la primera versión de la guitarra.... hecha con cartón.






A continuación la presentación de la guitarra ya que fue para un concurso y una materia.

PRESENTACION

CODIGO .C (PCW CCS)

domingo, 30 de mayo de 2010

Bienvenidos

Bienvenidos a mi blog...

El proposito de crear este blog, es compartir la información y proyectos con todos ustedes con el mismo gusto por la electrónica y la tecnología.

Y espero que este blog y su contenido pueda ser útil para sus desarrollos o tareas, así como otros blogs y sitios dedicados a esto han sido útiles para mi.

Sin mas, espero estar posteando mis proyectos muy pronto, y si te gustaría publicar algun documento o proyecto aqui, con mucho gusto...


contacto:
jonatan.yam@gmail.com

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger