uControl
Mayo 25, 2013, 05:43:19 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Placa de desarrollo SkP32 y algunos ejemplos en C32.  (Leído 3185 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« : Noviembre 21, 2011, 11:17:17 »

SkP32 es una placa desarrollo para PIC32MX3/4 y PIC24 con package TQFP100. Ha sido pensada especialmente para un PIC32, pero gracias a que Microchip mantiene el pinout entre familias, podemos decir que hay seguramente un 95% de compatibilidad para los PIC24. El precursor de la idea ha sido el amigo VelazquezBio, quién plateo y desarrollo una entrenadora para un PIC24, y tomando las mismas bases realizamos éste diseño que mandamos a fabricar (PCB).

Las características de la misma son:

•   Microcontrolador PIC32MX3/4 o PIC24
•   Reguladores de 5.0 y 3.3 V.
•   Alimentación externa o mediante USB.
•   Header con disponibilidad de todos los pines del microcontrolador.
•   Header para UART1 y UART2.
•   Header para I2C1 e I2C2.
•   Header para SPI1 y SPI2.
•   Header para pines I/O RB0-RB7 (8-bits).
•   Header para LCD TFT
•   4 Leds on board con jumpers.
•   2 Switch on board con jumpers.
•   Para PIC con USB, conector mini-USB device
•   Para PIC con USB, USB-A Host con TPS2041B para control sobre corriente.
•   Zócalo para SD Card.
•   Memoria EEPRON SPI (3.3 V).
•   Cristal de 32768 Hz para RTC interno.
•   Header para conexión ISCP.

El esquema de la placa.

Por aquí unas fotos de la que armé en mi caso, el microcontrolador soldado es un PIC32MX360F512L.



La idea es en los siguientes mensajes mostrar algunos ejemplos realizados, un Hola Mundo, control sobre LCD, RTC interno, UART, memoria EEPROM, LCD TFT, Touch, etc...  Wink

Saludos!

* SkP32.jpg (237.01 KB - descargado 1553 veces.)
* SkP32+TFT+LCD4x20.jpg (185.19 KB - descargado 1516 veces.)
En línea

Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #1 : Noviembre 21, 2011, 03:55:16 »

Es una buena idea partir la estructuración de nuestras carpetas de proyectos tomando como base la que utiliza Microchip, de esta manera cuando necesitemos utilizar alguna de las librerías que provee Microchip va a resultar más sencillo. Además, también podemos reunir en una carpeta las librerías que vayamos desarrollando, de esa manera estarán disponibles para cualquier proyecto sin la necesidad de copiar todos los archivos a la carpeta raíz Wink
En base a eso una posible forma puede ser la siguiente:


Ahora, en el proyecto los INCLUDE SEARCH PATH serán:
•   .
•   ..\Microchip\Include
•   ..\Micros-Designs\Include
•   C:\Program Files\Microchip\MPLAB C32\pic32mx\include

Configuración del oscilador:
En este caso el cristal utilizado es uno de 8 MHz, y la idea es utilizar el PLL interno para llevar el Clock del CPU y el Clock de periféricos hasta 80 MHz. Partiendo del datasheet, el “camino” a seguir se muestra en la siguiente figura:


Entonces la configuración de los fuses resulta:
Código:
#pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_2
#pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
#pragma config CP=OFF, BWP=OFF

Adicionalmente configuramos WDT des-habilitado, des-habilitado cambio de clock, des-habilitado monitoreo de clock y protecciones de código des-habilitadas. Existe el documento de ayuda hlpPIC32MXConfigSet en C:\Program Files\Microchip\MPLAB C32\doc para más detalles (+ Manuales de referencia de la familia en particular Wink )
Además de la configuración de Fuses es necesario llamar a una o un par de funciones que ponen al máximo el rendimiento del microcontrolador, en mi caso directamente llamo a la función SYSTEMConfigPerformance(FCY). Pero se puede utilizar por ejemplo SYSTEMConfig (), que permite seleccionar las características a modificar:
SYSTEMConfig (FCY, OPCIONES);
Opciones:
SYS_CFG_WAIT_STATES    
SYS_CFG_PB_BUS        
SYS_CFG_PCACHE          
SYS_CFG_ALL


Bueno, ya con esto un HelloWord puede ser utilizar los Leds y Switch on board  :)

Código:
#include <p32xxxx.h>
#include <plib.h>
// *--------------------------------------------------------------------------------*
// Cristal de 8MHz.-
// SYSCLK = 80 MHz (8MHz Cristal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// FPLLDIV 1:2, PLLMULT x20, PLLODIV 1:1. -> 80MHz
// FPBDIV 1:1 -> 80MHz
#pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_1
#pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
#pragma config CP=OFF, BWP=OFF, PWP=OFF
// *--------------------------------------------------------------------------------*
#include "HardwareProfileSkP32.h"
// *--------------------------------------------------------------------------------*
// *--------------------------------------------------------------------------------*
// *--------------------------------------------------------------------------------*
int main(){

mJTAGPortEnable(0); // JTAG des-habilitado
SYSTEMConfigPerformance(GetSystemClock()); // Activa pre-cache.-

PORTSetPinsDigitalOut(PORT_LED1, PIN_LED1);
PORTSetPinsDigitalOut(PORT_LED3, PIN_LED3);
PORTSetPinsDigitalOut(PORT_LED4, PIN_LED4);
PORTSetPinsDigitalIn(PORT_SW1,PIN_SW1);
PORTSetPinsDigitalIn(PORT_SW2,PIN_SW2);
while(1){
if(PORTReadBits(PORT_SW1,PIN_SW1)==0){
PORTSetBits(PORT_LED1,PIN_LED1);
}else{
PORTClearBits(PORT_LED1,PIN_LED1);
}
if(PORTReadBits(PORT_SW2,PIN_SW2)==0){
PORTSetBits(PORT_LED3,PIN_LED3|PIN_LED4);
}else{
PORTClearBits(PORT_LED3,PIN_LED3|PIN_LED4);
}
}
}
// *--------------------------------------------------------------------------------*

Al igual que en los ejemplos de Microchip, creamos un archivo HardwareProfile.h en donde colocamos un par de definiciones propias de la placa de desarrollo utilizada:

Código:
#define PORT_LED1 IOPORT_B
#define PIN_LED1 BIT_8
#define PORT_LED2 IOPORT_B
#define PIN_LED2 BIT_9
#define PORT_LED3 IOPORT_B
#define PIN_LED3 BIT_10
#define PORT_LED4 IOPORT_B
#define PIN_LED4 BIT_11

#define PORT_SW1 IOPORT_B
#define PIN_SW1 BIT_12
#define PORT_SW2 IOPORT_B
#define PIN_SW2 BIT_13

#define GetSystemClock() (80000000ul) // Hz
#define GetInstructionClock() (GetSystemClock()/1)
#define GetPeripheralClock() (GetSystemClock()/1)

* Estructura.png (7.51 KB - descargado 1445 veces.)
* Oscilador.png (117.67 KB - descargado 1450 veces.)
« Última modificación: Noviembre 21, 2011, 05:38:01 por Suky » En línea

Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #2 : Noviembre 21, 2011, 04:39:42 »

El LCD o el puerto serial son dos de los periféricos más usados, ya que cualquiera de ellos nos permite visualizar resultados o debugger de forma simple durante el desarrollo de un proyecto. En este caso se hace uso de la librería LCDGeneric agregado las definiciones necesarias para utilizarla en C32 y con un microcontrolador trabajando a 80 MHz.

Código:
#if defined (__PIC32MX__)
#include <p32xxxx.h>
#include "TimeDelay.h"
#define __delay_1Cycle() {Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();}
#define __delay_1us() {UINT8 k; for(k=0;k<50;k++){Nop();}}
#define __delay_100us() Delay10us(10)
#define __delay_2ms() DelayMs(2)
#endif


 Grin

Código:
#include <p32xxxx.h>
#include <plib.h>
// *--------------------------------------------------------------------------------*
// Cristal de 8MHz.-
// SYSCLK = 80 MHz (8MHz Cristal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// FPLLDIV 1:2, PLLMULT x20, PLLODIV 1:1. -> 80MHz
// FPBDIV 1:1 -> 80MHz
#pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_1
#pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
#pragma config CP=OFF, BWP=OFF, PWP=OFF
// *--------------------------------------------------------------------------------*
#include "HardwareProfileSkP32.h"
#include "LCDGeneric.h"
// *--------------------------------------------------------------------------------*
const char CharactersCGRAM[16]={0,0,0x0E,0x1F,0x0A,0x0A,0x0A,0x11,
0,0,0,0,0x0E,0x1F,0x0A,0x11};
// *--------------------------------------------------------------------------------*
// Guarda en la CGRAM el caracter en el banco seleccionado.-
// <Caracter> es la dirección de la primer fila del caracter a enviar.-
void vLcdWriteCgram(unsigned char Bank,char Character){
unsigned char AddressBank,i;

AddressBank=0x40+0x08*Bank;
vWriteLCD(AddressBank,0);
// Cargamos los 8 registros.-
for(i=0;i<8;i++){
vWriteLCD(CharactersCGRAM[Character + i],1);
}
vWriteLCD(0x80,0); // Se da por terminada la escritura.-
}

// Incializa Memoria CGRAM.-
void vLcdInitCgram(void){
unsigned char j;

for(j=0;j<2;j++){
vLcdWriteCgram(j,j*8);  
}
}
// *--------------------------------------------------------------------------------*
int main(){

    mJTAGPortEnable(0); // JTAG des-habilitado
SYSTEMConfigPerformance(GetSystemClock()); // Activa pre-cache.-

PORTSetPinsDigitalOut(IOPORT_A, BIT_3); // Backlight del LCD
mPORTASetBits(BIT_3);
vInitLCD();
vLcdInitCgram(); // Incializa Memoria CGRAM.-
vPutrs_LCD("Libreria generica..\nLCD 2x20, 4x20..\nBus 4-bits o 3-pines\npor Suky...");
DelayMs(1000);
vLCD_Putc('\f');
PORTSetPinsDigitalOut(PORT_LED1, PIN_LED1);
PORTSetPinsDigitalOut(PORT_LED3, PIN_LED3);
PORTSetPinsDigitalOut(PORT_LED4, PIN_LED4);
PORTSetPinsDigitalIn(PORT_SW1,PIN_SW1);
PORTSetPinsDigitalIn(PORT_SW2,PIN_SW2);
while(1){
if(PORTReadBits(PORT_SW1,PIN_SW1)==0){
PORTSetBits(PORT_LED1,PIN_LED1);
vGotoxyLCD(1,1);
vPutrs_LCD("SW1:");
vLCD_Putc(1);
}else{
PORTClearBits(PORT_LED1,PIN_LED1);
vGotoxyLCD(1,1);
vPutrs_LCD("SW1:");
vLCD_Putc(0);
}
if(PORTReadBits(PORT_SW2,PIN_SW2)==0){
PORTSetBits(PORT_LED3,PIN_LED3|PIN_LED4);
vGotoxyLCD(1,2);
vPutrs_LCD("SW2:");
vLCD_Putc(1);
}else{
PORTClearBits(PORT_LED3,PIN_LED3|PIN_LED4);
vGotoxyLCD(1,2);
vPutrs_LCD("SW2:");
vLCD_Putc(0);
}
}
}
// *--------------------------------------------------------------------------------*

Adjunto el proyecto completo.


* Imagen2519.jpg (174.16 KB - descargado 1458 veces.)
* SkP32_LCD.rar (84.41 KB - descargado 88 veces.)
En línea

Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #3 : Noviembre 21, 2011, 04:46:30 »

Otro ejemplo sencillo, el uso del RTC interno del microcontrolador (La primera vez en un PIC en mi caso  Grin ). En este caso se configura el RTC interno con la fecha actual, luego se configura para que ocurra una interrupción cada 1 segundo (Se utilizan interrupciones vectorizadas). Con ello leemos la fecha y hora, y lo visualizamos en un LCD:

Código:
#include <p32xxxx.h>
#include <plib.h>
// *---------------------------------------------------------------------------*
// Cristal de 8MHz.-
// SYSCLK = 80 MHz (8MHz Cristal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// FPLLDIV 1:2, PLLMULT x20, PLLODIV 1:1. -> 80MHz
// FPBDIV 1:1 -> 80MHz
#pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_1
#pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
#pragma config CP=OFF, BWP=OFF
// *---------------------------------------------------------------------------*
#include "HardwareProfileSkP32.h"
#include "LCDGeneric.h"
volatile char kbhit_rtc=0;
// *---------------------------------------------------------------------------*
void __ISR(_RTCC_VECTOR, ipl4) RtccIsr(void){

INTClearFlag(INT_RTCC);
kbhit_rtc=1;
}
// *---------------------------------------------------------------------------*
int main(){
rtccTime tm;
rtccDate dt;
char Text[50];


mJTAGPortEnable(0); // JTAG des-habilitado
SYSTEMConfigPerformance(GetSystemClock()); // Activa pre-cache.-

PORTSetPinsDigitalOut(IOPORT_A, BIT_3); // Backlight del LCD
mPORTASetBits(BIT_3);
vInitLCD();

RtccInit();
while(RtccGetClkStat()!=RTCC_CLK_ON);
vPutrs_LCD("\fRTC:\n");

tm.l=0;
tm.sec=0x30;
tm.min=0x44;
tm.hour=0x16;
dt.wday=2;
dt.mday=0x21;
dt.mon=0x11;
dt.year=0x11;

RtccChimeEnable();
RtccSetAlarmRptCount(0);
RtccSetAlarmRpt(RTCC_RPT_SEC); // Cada 1 seg.
RtccAlarmEnable();
RtccSetTimeDate(tm.l, dt.l);

INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
INTEnableInterrupts();
INTSetVectorPriority(INT_RTCC_VECTOR, INT_PRIORITY_LEVEL_4);
INTSetVectorSubPriority(INT_RTCC_VECTOR, INT_SUB_PRIORITY_LEVEL_1);
INTEnable(INT_RTCC, INT_ENABLED);

while(1){
if(kbhit_rtc==1){
kbhit_rtc=0;
RtccGetTimeDate(&tm, &dt);
vGotoxyLCD(1,2);
sprintf(&Text[0],"%02x:%02x:%02x\n%02x/%02x/%02x",tm.hour,tm.min,tm.sec,dt.mday,dt.mon,dt.year);
vPuts_LCD(&Text[0]);
}
}
}
En línea

Tomytun
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 46



« Respuesta #4 : Noviembre 23, 2011, 11:15:22 »

La placa se ve excelente, felicitaciones, ahora lo que veo en la desventaja de usar pic 32 y no 24 es que uno esta si o si atado al c32, aunque de todas formas hay que aprenderlos a usar.
Es solo mi aprecicion sin animos de criticar claro, y si no viviera tan lejos no dudaria en comprar una, por que con esa pinta profesional que tiene  me imagino que la piensan vender o no?

Saludos.
En línea
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #5 : Noviembre 23, 2011, 12:37:24 »

No, vender yo personalmente no tengo intensión. Luego, el tema del compilador, es C. Hay que aprender a trabajar con el entorno MPLAB IDE y la configuración de los módulos, pero después sigue siendo C. (ANSI C   Wink )


Saludos!
En línea

juanphilips
PIC12F
**
Desconectado Desconectado

Mensajes: 163

Sancionado por no cumplir las Reglas del Foro.


« Respuesta #6 : Noviembre 29, 2011, 11:10:19 »

I M P R E S I O N A N T E  !!!!!!!!!    rolleyes2 rolleyes2 bang bang Baba Baba

COmo siembpre suky !!!!

Muy buena la placa

Te queria consultar donde la envias a hacer.
Los componentes los soldastes vos o ya te la entregaron con los componentes montados ??
He estado mirando en tu foro y me gusto una version de tu programador que un forista habia hecho en montaje superficial. Me gustaria hacer una version como esa pero sin tener que usar la planchita. (me tiene loco la planchita  Insultos )
Tengo un pendrive roto y si la hago en doble faz creo que me puede entrar en el espacio del pendrive, asi puedo tener un programador que no ocupa lugar y lo puedo llevar facilmente.
Te agradecerias me respondas por aqui o por MP.
gracias y te felicito nuevamente por lo que estas logrando.
salu2
En línea

Sancionado por no cumplir las Reglas del Foro.
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #7 : Noviembre 29, 2011, 11:18:33 »

Hola! Gracias por los comentarios  Wink La placa la mandamos a realizar a iteadstudio.com, es solo la PCB. Los componentes los suelda cada uno.

Respecto al Pickit2 Clone SMD, AKENAFAB del foro todopic uso uno muy pequeñito y dejo los archivos, habría que revisar los temas al respecto.


Saludos!
En línea

juanphilips
PIC12F
**
Desconectado Desconectado

Mensajes: 163

Sancionado por no cumplir las Reglas del Foro.


« Respuesta #8 : Noviembre 29, 2011, 11:34:12 »

Hola! Gracias por los comentarios  Wink La placa la mandamos a realizar a iteadstudio.com, es solo la PCB. Los componentes los suelda cada uno.

Respecto al Pickit2 Clone SMD, AKENAFAB del foro todopic uso uno muy pequeñito y dejo los archivos, habría que revisar los temas al respecto.


Saludos!


Gracias Suky.
Te digo que si los soldastes a mano tenes un pulso excelente ... todos los componentes alineaditos ..... voy a tener que mejor el pulso ....
...me parece que hoy dejo la bebida....hic ....no mejor mañana  laugh

El que yo te comentaba era el de napalito.
Gracias por el dato del programador de AKENAFAB lo voy a buscar ....
salu2
En línea

Sancionado por no cumplir las Reglas del Foro.
Suky
**----- ^^ ------**
Moderador
dsPIC
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5345


Con Qt...


WWW
« Respuesta #9 : Noviembre 29, 2011, 11:46:15 »

Gracias Suky.
Te digo que si los soldastes a mano tenes un pulso excelente ... todos los componentes alineaditos ..... voy a tener que mejor el pulso ....
...me parece que hoy dejo la bebida....hic ....no mejor mañana  laugh

Avisa si podes dejarla, no se como se hace  laugh laugh

El que yo te comentaba era el de napalito.
Gracias por el dato del programador de AKENAFAB lo voy a buscar ....

Muy linda placa la de napalito! La de Akena, si no recuerdo mal, era más chiquita todavia  shocked Me parece que el proyecto estaba dentro de ¿Qué PICKIT2 debo comprar?
En línea

Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.18 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.098 segundos con 28 consultas. (Pretty URLs adds 0.012s, 3q)
loggkey