Está en la página 1de 10

Inicio Artculos Electrnica Informtica C para PIC Simuladores CAD Eagle Programas Acerca

Mis Primeros pasos con el 18F4550



Introduccin Etapa Osciladora Conociendo el PiN1 MCLR PORTx vs LATx Mdulo CAD o ADC (I) Mdulo CAD o ADC (II) Primera Prctica: PiCUSB USB CDC (I) USB CDC (II) Monitorear el puerto COM virtual Detectando el HOST (I) Detectando el HOST (II) Primera Aplicacin CDC Conociendo al SnoopyPRO mpusbapi.dll (I) mpusbapi.dll (II) mpusbapi.dll (III) mpusbapi.dll (parte 4) mpusbapi.dll (parte 5) mpusbapi.dll (Primera Aplicacin) Agradecimientos y Mritos Correspondientes

Introduccin:
Mis Primeros pasos son una serie de artculos que describen la introduccin al mundo de los uC-PIC 18F de Microchip, a travs del 18F4550. el enfoque est orientado a aprender desde cero de alguien (el autor) que viene de conocer y utilizar la serie uC-PIC 16F e intenta conocer poco a poco las nuevas funcionalidades, caractersticas y mdulos que ofrece la serie 18F. se empieza hablando sobre el aspecto fsico y analogas con el uC-PIC 16F877, particularidades en pines, para despus entrar hablar, sobre el mdulo convertidor analgico digital (ADC) y el mdulo estrella de 18F4550 como lo es Bus Serial Universal (USB), donde se hace un estudio paso a paso para hacer las primeras transmisiones, basndose en las libreras que provee el compilador de C de CCS. como nota adicional, quisiera decir que esta serie de artculos de mis primeros pasos con el 18F4550, fu escrita hace mas de 2 aos por lo que las ideas expresadas en sus contenidos pueden estar estar obsoletas o fuera de carril. He querido dejar casi intacto esta serie de artculos desde su origen, ya que la intencin es mirar con la perspectiva de un novato la introduccin a los 18F tal como yo lo hice cuando tuve en mis manos el primer 18F. el enfoque de estos artculos, fu usando una redaccin un poco coloquial, mis excusas para aquellos que sientan que no hay una redaccin propia de un artculo.

Configurando la Etapa Osciladora mediante los bits de Configuracin (Fuses)


Lo primero que hice fue adaptar mi programador para este PIC, mi programador es por puerto paralelo y lo use en conjuncin con el winpic800 de Sisco, para poder grabar el 18F4550. -Lo segundo, meterme de cabeza en la datasheet a ver que cosas nuevas trae este seor, respecto al anterior 16F877 (del cual vengo) y uff! si que trae una montaa de caractersticas (features), en la pgina 4 de 39632c.pdf aparece el diagrama de los pines

Pinout del 18F4550

ya sabemos que el 18F4550 posee 40 pines, bien y por lo que se ve en la imagen, tiene cierta similitud con el 16F877 (la misma ubicacin del pin vdd, vss, mclr entre otros) el siguiente paso es saber como trabaja la configuracin del oscilador, en verdad a primera vista con el diagrama del clock que aparece en la Pg. 26, parece complicado, pero no es tan difcil, si se ve como si fuera el juego del laberinto, se pueden activar los bits de los registros necesarios y as configurar el oscilador para el cristal que usemos y el tiempo del ciclo de instruccin. En la pgina de PicMana de Diego (RedPic) hay un artculo llamado:Consiguiendo 4 Mhz para los 48 Mhz necesarios en los PICs con USB 2.0, siguiendo las instrucciones podemos configurar el CPU del 18F4550 a 48Mhz con solo seleccionar los word configuration correctos. como yo tengo un cristal de 4MHZ, lo usar para poner a trabajar el CPU a 48MHZ, y porque 48 MHZ? claro! si se puede llegar hasta ah, entonces a trabajar al mximo! segn la eleccin de mi cristal dibuj el camino a tomar para que la etapa del oscilador tenga 48Mhz a la entrada del cpu, partiendo de los 4MHZ que le entran

Configuracin del modulo oscilador de 4MHz a 48Mhz

esto es necesario porque lo primero que debemos tomar en cuenta son los fuses que se van a usar y la configuracin del oscilador forma parte de ello

para colocar el fuse de configuration y ya que es la primera vez, tomar prestado de la que he visto en ex_usb_serial2.c que trae de ejemplo del compilador PCWH de CCS
1 2 ... 3 //configure a 20MHz crystal to operate at 48MHz 4 #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN 5 #use delay(clock=48000000) 6 ...

esto hay que analizarlo, hay algunos conocidos y otros nuevos (que se van a explicar), as que vayamos a la pgina 288 de la datasheet y al archivo cabecera 18F4550.h HSPLL: para cristales >4MHZ usando el PLL, en el cdigo ejemplo como XTAL=4MHZ -> se cambiar a XTPLL

MCLR: significa que el pin 1 cumplir la funcin de Master CLeaR (y como arranca el PIC cuando no hay MCLR?) USBDIV: significa que el clock del usb se tomar del PLL/2, para nuestro cdigo es irrelevante, ya que no usaremos el mdulo USB, pero lo dejaremos (o es 1 es 0) PLL5: significa que el PLL prescaler dividir en 5 la frecuencia del cristal, si uso el cristal de 4MHZ no habr falta dividir por lo que se usar PLL1 CPUDIV1: el PLL postscaler decide la divisin en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejaremos como est. VREGEN: habilita el regulador de 3.3 volts que usa el mdulo USB, no lo usaremos por los momentos, se cambiar por NOVREGEN existen mas fuses para configurar, y habra que determinar como el compilador configura el resto si miran el la pgina 288, notaran que existe mas de un configuration word (especficamente 7), no como en 16F877 que haba solo uno. bueno, nuestro fuse quedar as:
1 2 #fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN

ahora viene escribir un cdigo sencillo para poner arrancar el PIC, el programita lo que va a hacer es, encender y apagar el PORTB en intervalos de 1 seg. y para ello hay que averiguar como est configurado por defecto cada pin, me refiero a esto, ya que he manejado un poco el 16F877 y por ejemplo el pin RB3 siempre hay que configurarlo en el fuse si se va a utilizar como i/o digital

al

mirar

la

pgina

293

nos

encontramos

otro

fuse:

PBADEN: PORTB A/D Enable bit Cmo!?, el portb tiene funciones de entrada analgica?, pues sip, as que tambin hay que meter esa opcin en el fuse. Vamos hacer una prueba, vamos a dejar tal cual qued nuestro fuse, para ver como lo hace el compilador y lo sabremos cuando carguemos el .hex en el winpic800 vamos a escribir este cdigo en lenguaje C de CCS (para facilitar el aprendizaje pero sigo con el dilema si lo hago en C en asm, para conocer mejor al micro) y el simulador ser el MPLAB-

SIM, que podemos hacer, hasta la fecha en que escrib esto el proteus todava no trae el 18F4550
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

// cdigo ejemplo para hacer funcionar por primera vez al PIC18F4550 mediante encendido // y apagado de 8 leds conectado al PORTB en intervalos de 1 Seg // 16-Dic-2006 #include <18f4550.h> //archivo de cabecera #fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN // el fuse que configuramos anteriormente #use delay(clock=48000000) // el clock que tendremos a la entrada del CPU void main() { set_tris_a(0x0); // configura los puertos como salidas set_tris_b(0x0); set_tris_c(0x0); set_tris_d(0x0); set_tris_e(0x0); //---------------------------------disable_interrupts(global); disable_interrupts(int_timer1); disable_interrupts(int_rda); disable_interrupts(int_ext); disable_interrupts(int_ext1); disable_interrupts(int_ext2); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(FALSE); setup_psp(PSP_DISABLED); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); port_b_pullups(FALSE); //--------------------------output_a (0); // saca un nivel bajo de salida en los puertos output_c (0); output_d (0); output_e (0); while(1){ output_b (0); // saca un nivel bajo en el portb delay_ms(1000); // retardo de 1 Seg output_b (0xff); // saca un nivel alto en el portb delay_ms(1000); // retardo de 1 Seg } }

las lineas que estn delimitadas, las saqu del cdigo _rtc.c que escribi RedPic, en estas lineas se desactivan otros modulos, como por ejemplo el CAD, SPI, PSP, las interrupciones y las resistencias de amarre que estn en el PORTB, para este PIC hay que averiguar como estn configurados por defectos cada pin y all veremos si hace falta habilitar deshabilitar ciertos modulos (esto se aplica tambin para los fuses) Esto ltimo lo digo porque el simulador es una cosa y el funcionamiento real es otra, en el caso de los fuses, nosotros podemos determinar la configuracin porque el winpic800 nos lo dir, pero en el caso de los mdulos activados o desactivados por defecto, no siempre el simulador acertar, as que para estar seguros es mejor escribir las configuraciones en el programa. (esperemos que con esas sea suficiente) bueno, compilemos y simulemos a ver que tal.

Compilacin de salida del MPLAB

que bien nos compil exitosamente, vamos a cargar el MPLAB-SIM y abrimos tambin la ventana de los SFR, para ir viendo como estn los registros que nos interesa y los que nos pueden interferir. nota: se me pas por alto, con los pasos que indica el wizard crean el proyecto para el cdigo que estamos probando y despus configuran la frecuencia del CPU (los fuses no hacen falta configurarlo, porque el MPLAB los carga del que ya habamos programado) vamos a ver como qued el configuration bits

Bits de Configuracin en MPLAB

epa! aqu dice que el portb tiene algunas entradas analgicas, vamos a ver que dice el temp18.lst (el listado que genera el compilador)
1 Configuration Fuses: 2 Word 1: 0220 XTPLL NOIESO NOFCMEN PLL1 CPUDIV1 USBDIV 3 Word 2: 1E1E BROWNOUT NOWDT BORV20 PUT WDT32768 NOVREGEN RESERVED 4 Word 3: 8300 PBADEN CCP2C1 MCLR NOLPT1OSC RESERVED 5 Word 4: 0081 STVREN NODEBUG NOLVP NOXINST NOICPRT RESERVED 6 Word 5: C00F NOPROTECT NOCPD NOCPB

7 8

Word Word

6: E00F 7: 400F

NOWRT NOWRTD NOWRTC NOWRTB NOEBTR NOEBTRB

efectivamente est la opcin PBADEN, pues ya comprobamos que se debe colocar NOPBADEN en fuse, si es que queremos que RB[4-0] funcione como salida digital. el fuses quedar:
1 2 #fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN

compilamos y vemos nuevamente la ventana configuration bits

Bits de Configuracin Corregido

ahora si nos aparece los pines RB[4-0] como i/o digitales. Si por ejemplo simulamos con la opcin PBADEN, vern como en el portb no habr problemas, har lo que el cdigo le dice, pero cuando vayamos a probar el PIC, no ser as. Se dan cuenta? hay que estar pendiente de esos detallitos que nos pueden causar dolor de alma. viendo los registros PORTB y uno nuevo, el LAT., vern que cambiarn de estado:

Simulacin Mplab

Tiempo en Mplab-SIM

en la ventana stopwatch, se observa que por cada lnea ejecutada ocurren mas de un ciclo de reloj, esto es tpico del C, si queremos ver que ocurre en cada ciclo, nada mas carguemos Disassembly Lisa y veremos el cdigo en C con su correspondiente asm

Listado en Ensamblador

una vez ya simulado y verificado, viene la parte crtica, y es la de programar el PIC, montarlo en el protoboard y rezar para que funcione, podemos llegar a 2 resultados:

-Que si funciona y realmente nos llena de alegra y podemos dar el siguiente paso

Que no funciona y hay que volver a revisar todo nuevamente :-s la segunda opcin es la frecuente y que no nos gusta mucho, pero es la que nos d el conocimiento. Manos a la obra!