Autor Tema: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD  (Leído 91641 veces)

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

Desconectado manwenwe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2211
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #15 en: 22 de Noviembre de 2011, 16:56:50 »
Te refieres a que el controlador es PMP y tú utilizas un bridge SPI-PMP? La verdad es que va bastante bien :o Renderizas BMP o JPG?

saludo!

Exactamente, SPI a 10 MHz, no soporta más el MCP23S17  :undecided: ... Y es BMP


Saludos

Jejeje ya decía yo: pensaba que habías "overclokeado" el micro jejeje. El jpg es bastante más duro para el PIC32MX. Si el controlador gráfico lo descomprime directamente de una flash (SD, MMC)... si que va más rapidillo.

De todas formas lo del bridge este parece una muy buena idea sobre todo cuando faltan GPIOs. No sabía ni que Microchip vendía de estos.

Enhorabuena por el proyecto en general: Nunca bajas el listón Suky!!!

Saludos.
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado EdoNork

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 616
    • ElektroQuark
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #16 en: 23 de Noviembre de 2011, 04:56:13 »
Suky: ¿Te importa compartir el BOM de la placa?
Gracias.
Mi blog sobre electrónica y cosillas afines: www.elektroquark.com
EQVideo en Youtube
El foro de KiCad en castellano.
Mi librería para KiCad ¡AQUÍ!

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #17 en: 23 de Noviembre de 2011, 06:03:15 »
Excelente Suky! Gracias.

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #18 en: 23 de Noviembre de 2011, 09:46:20 »
Felicitaciones Suky!! Excelente trabajo....  :-/


Saludos

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #19 en: 23 de Noviembre de 2011, 10:19:42 »
Excelente!!!!!!
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplos en MPLAB C32 (ADC a 1 Msps)
« Respuesta #20 en: 24 de Noviembre de 2011, 17:46:16 »
Módulo ADC a 1 Msps



Gracias por los comentarios  ;-)

En este caso dejo un ejemplo que configura el módulo ADC para que trabaje a 1 Msps y configura para que interrumpa cada 16 muestras:

Código: C
  1. #include <p32xxxx.h>
  2. #include <plib.h>
  3. // *-------------------------------------------------------------------------*
  4. // Cristal de 8MHz.-
  5. // SYSCLK = 80 MHz (8MHz Cristal/ FPLLIDIV * FPLLMUL / FPLLODIV)
  6. // FPLLDIV 1:2, PLLMULT x20, PLLODIV 1:1. -> 80MHz
  7. // FPBDIV 1:1 -> 80MHz
  8. #pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_1
  9. #pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
  10. #pragma config CP=OFF, BWP=OFF
  11. // *-------------------------------------------------------------------------*
  12. #include "HardwareProfileSkP32.h"
  13. // *-------------------------------------------------------------------------*
  14. void vConfigADC(void);
  15. // *-------------------------------------------------------------------------*
  16. void __ISR(_ADC_VECTOR,ipl4) ISR_ADC(void){
  17.         INTClearFlag(INT_AD1);
  18.         PORTToggleBits(PORT_LED1,PIN_LED1);
  19. }
  20. // *-------------------------------------------------------------------------*
  21. // *-------------------------------------------------------------------------*
  22. int main(){
  23.        
  24.         mJTAGPortEnable(0);                                                     // JTAG des-habilitado
  25.         SYSTEMConfigPerformance(GetSystemClock());      // Activa pre-cache.-
  26.         DelayMs(100);
  27.        
  28.         vConfigADC();
  29.         PORTSetPinsDigitalOut(PORT_LED1, PIN_LED1);
  30.         PORTSetBits(PORT_LED1,PIN_LED1);
  31.        
  32.         INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
  33.         INTEnableInterrupts();
  34.         while(1){
  35.                 DelayMs(300);
  36.                 PORTToggleBits(PORT_LED3,PIN_LED3);
  37.         }
  38. }
  39. // *-------------------------------------------------------------------------*
  40. void vConfigADC(void){
  41.        
  42.         AD1CON1=0;                                      // Off
  43.         AD1CON1bits.SIDL=0;                     // Encendido en modo IDLE
  44.         AD1CON1bits.FORM=0;                     // Data Output Format: Entero 16-bits
  45.         AD1CON1bits.SSRC=7;                     // Auto-conversion
  46.         AD1CON1bits.CLRASAM=0;          // Operacion Normal
  47.         AD1CON1bits.ASAM=1;                     // Comenzar muestreo inmediantamente completada la conversion
  48.        
  49.         AD1CON2bits.VCFG=0;                     // Vdd/Vss
  50.         AD1CON2bits.OFFCAL=0;           // Apagada calibracion de offset
  51.         AD1CON2bits.CSCNA=0;            // Scan off
  52.         AD1CON2bits.SMPI=0b1111;                        // Interrupcion por cada 16 conversiones
  53.         AD1CON2bits.BUFM=0;                     // Buffer 16-bits
  54.         AD1CON2bits.ALTS=0;                     // Usar siempre MUXA
  55.            
  56.         AD1CON3bits.ADRC=0;                     // ADC Clock desde PBCLK
  57.         AD1CON3bits.SAMC=1;             // Auto Sample Time = 1*Tad            
  58.         AD1CON3bits.ADCS=2;                 // Tad = TPB • 2 • (ADCS<7:0> + 1) = 75ns (13Mhz) (minimo 65ns)
  59.                                                                 // Tc=13*Tad =  1us (1MHz)
  60.        
  61.         AD1CHSbits.CH0SA=0;                     // MUXA +ve -> CH0
  62.         AD1CHSbits.CH0NA=0;                     // MUXA -ve -> Vr-
  63.        
  64.         AD1PCFG=0xFFFF;
  65.         AD1PCFGbits.PCFG0 = 0;          // AN0 as Analog
  66.         AD1CON1bits.ADON = 1;           // Encender modulo
  67.        
  68.         INTSetVectorPriority(INT_ADC_VECTOR, INT_PRIORITY_LEVEL_4);
  69.         INTSetVectorSubPriority(INT_ADC_VECTOR, INT_SUB_PRIORITY_LEVEL_1);
  70.         INTClearFlag(INT_AD1);      
  71.         INTEnable(INT_AD1, INT_ENABLED);
  72.                        
  73. }

Saludos!
« Última modificación: 24 de Noviembre de 2011, 22:02:26 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #21 en: 24 de Noviembre de 2011, 18:02:30 »
las 16 muestras supongo que las guardara en algun registro no? o solo guarda la ultima?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #22 en: 24 de Noviembre de 2011, 18:49:20 »
las 16 muestras supongo que las guardara en algun registro no? o solo guarda la ultima?

 :roll: Hay que darle una revisada al datasheet  ;-) Los PIC32 tienen varias opciones, entre una de ellas un buffer de 16 posiciones y 16-bits. En la interrupción podes leerlo con result = ReadADC10(x), donde x puede ser un valor entre 0 y 15.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #23 en: 24 de Noviembre de 2011, 19:23:05 »
ya, pero para ke voy a buscar en el datasheet pudiendomelo decir tu  :D es mas comodo, algo asi creo haber leido en los dspic33ep creo que incluso se podia poner un sampleo automatico y va actualizando los registros, cuando te interese lees el que necesites, es bastante practico.

Lo unico que no me gusta es que solo puedes leer 3.3v maximo (si, ya se el tema de divisores y etc..) pero se tiene mas margen de error que con un ADC de 5V

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #24 en: 24 de Noviembre de 2011, 20:15:51 »
ya, pero para ke voy a buscar en el datasheet pudiendomelo decir tu  :D es mas comodo,...

Si, he visto ese aspecto en algunos hilos :mrgreen: Pero no lo hagas cuando das una respuesta  :D

... algo asi creo haber leido en los dspic33ep creo que incluso se podia poner un sampleo automatico y va actualizando los registros, cuando te interese lees el que necesites, es bastante practico.

Si, desde los PIC24 se implementan esas características. Además muestreo simultaneo o muestreo secuencial, etc...


Lo unico que no me gusta es que solo puedes leer 3.3v maximo (si, ya se el tema de divisores y etc..) pero se tiene mas margen de error que con un ADC de 5V

Sin palabras...


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #25 en: 24 de Noviembre de 2011, 21:24:19 »
sin palabras?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #26 en: 24 de Noviembre de 2011, 22:18:29 »
Touch Screen y algoritmo de calibración (Driver AD7843/XPT2046)


Para el control del touch screen en algún momento deje la librería por aquí, para un PIC32 mucho no hay que cambiar, solo asegurarse de cumplir el mínimo periodo del clock (__delay_CLK_ADS7843()). Comentar además que el driver XPT2046 también es compatible  ;-)

Respecto al algoritmo de calibración, el aplicado es el detallado en la nota de aplicación AN-1021 de Analog. La forma de implementarlo es la siguiente: (Hay otros, solo hay que dar una búsqueda por Google  ;-) )

Código: C
  1. #include "LCDTFT.h"
  2. #include "ADS7843.h"
  3.  
  4. typedef struct{
  5.     double  kx1;
  6.     double  kx2;
  7.     double  kx3;
  8.     double  ky1;
  9.     double  ky2;
  10.     double  ky3;
  11. }DATA_CALIBRACION;
  12. // *---------------------------------------------------------------------------------------------------------------------*
  13. void vAdquirirPuntosTouch(TOUCH_DATA *DataTouch, TOUCH_DATA *DataLCD, unsigned char N){
  14.         char k;
  15.        
  16.         vLCDTFTFillScreen(ColorWhite);
  17.     for(k=0;k<N;k++){
  18.         vLCDTFTCircle(DataLCD->x,DataLCD->y,3,1,ColorBlack);
  19.         while(ADS7843_PIN_IRQ==1);
  20.         vTestTouchPanel(DataTouch);
  21.         DelayMs(500);
  22.         vLCDTFTCircle(DataLCD->x,DataLCD->y,3,1,ColorWhite);
  23.         DataTouch++;
  24.         DataLCD++;
  25.     }
  26. }
  27. // http://www.analog.com/static/imported-files/application_notes/AN-1021.pdf
  28. void vCalibrarTouch(DATA_CALIBRACION *Coef,TOUCH_DATA *DataTouch, TOUCH_DATA *DataLCD, unsigned char N){
  29.     double a[3],b[3],c[3],d[3],k;
  30.     int i;
  31.    
  32.     if(N<3){
  33.         return;
  34.     }else{
  35.         if(N==3){
  36.             for(i=0;i<N;i++){
  37.                 a[i]=(double)(DataTouch->x);
  38.                 b[i]=(double)(DataTouch->y);
  39.                 c[i]=(double)(DataLCD->x);
  40.                 d[i]=(double)(DataLCD->y);
  41.                 DataTouch++;
  42.                 DataLCD++;
  43.             }
  44.         }else{
  45.             for(i=0;i<3;i++){
  46.                 a[i]=0;
  47.                 b[i]=0;
  48.                 c[i]=0;
  49.                 d[i]=0;
  50.             }
  51.             for(i=0; i<N; i++){  //AN-1021  Application Note Rev. 0 | Page 10 of 12
  52.                 a[2]=a[2]+(double)(DataTouch->x);
  53.                 b[2]=b[2]+(double)(DataTouch->y);
  54.                 c[2]=c[2]+(double)(DataLCD->x);
  55.                 d[2]=d[2]+(double)(DataLCD->y);
  56.                 a[0]=a[0]+(double)(DataTouch->x)*(double)(DataTouch->x);
  57.                 a[1]=a[1]+(double)(DataTouch->x)*(double)(DataTouch->y);
  58.                 b[0]=a[1];
  59.                 b[1]=b[1]+(double)(DataTouch->y)*(double)(DataTouch->y);
  60.                 c[0]=c[0]+(double)(DataTouch->x)*(double)(DataLCD->x);
  61.                 c[1]=c[1]+(double)(DataTouch->y)*(double)(DataLCD->x);
  62.                 d[0]=d[0]+(double)(DataTouch->x)*(double)(DataLCD->y);
  63.                 d[1]=d[1]+(double)(DataTouch->y)*(double)(DataLCD->y);
  64.                 DataTouch++;
  65.                 DataLCD++;
  66.             }
  67.             a[0]=a[0]/a[2];
  68.             a[1]=a[1]/b[2];  
  69.             b[0]=b[0]/a[2];
  70.             b[1]=b[1]/b[2];  
  71.             c[0]=c[0]/a[2];
  72.             c[1]=c[1]/b[2];
  73.             d[0]=d[0]/a[2];
  74.             d[1]=d[1]/b[2];
  75.             a[2]=a[2]/N;
  76.             b[2]=b[2]/N;
  77.             c[2]=c[2]/N;
  78.             d[2]=d[2]/N;        
  79.         }
  80.         k=(a[0]-a[2])*(b[1]-b[2])-(a[1]-a[2])*(b[0]-b[2]);
  81.         Coef->kx1=((c[0]-c[2])*(b[1]-b[2])-(c[1]-c[2])*(b[0]-b[2]))/k;
  82.         Coef->kx2=((c[1]-c[2])*(a[0]-a[2])-(c[0]-c[2])*(a[1]-a[2]))/k;
  83.         Coef->kx3=(b[0]*(a[2]*c[1]-a[1]*c[2])+b[1]*(a[0]*c[2]-a[2]*c[0])+b[2]*(a[1]*c[0]-a[0]*c[1]))/k;
  84.         Coef->ky1=((d[0]-d[2])*(b[1]-b[2])-(d[1]-d[2])*(b[0]-b[2]))/k;
  85.         Coef->ky2=((d[1]-d[2])*(a[0]-a[2])-(d[0]-d[2])*(a[1]-a[2]))/k;
  86.         Coef->ky3=(b[0]*(a[2]*d[1]-a[1]*d[2])+b[1]*(a[0]*d[2]-a[2]*d[0])+b[2]*(a[1]*d[0]-a[0]*d[1]))/k;
  87.     }
  88. }
  89. void vPuntosTouch2LCD(DATA_CALIBRACION *Coef,TOUCH_DATA *DataTouch, TOUCH_DATA *DataLCD){
  90.  
  91.     DataLCD->x=Coef->kx1*DataTouch->x+Coef->kx2*DataTouch->y+Coef->kx3;
  92.     DataLCD->y=Coef->ky1*DataTouch->x+Coef->ky2*DataTouch->y+Coef->ky3;
  93. }

Con ello dentro del main se puede implementar de la siguiente manera:

Código: C
  1. #include <p32xxxx.h>
  2. #include <plib.h>
  3. // *-------------------------------------------------------------------------*
  4. // Cristal de 8MHz.-
  5. // SYSCLK = 80 MHz (8MHz Cristal/ FPLLIDIV * FPLLMUL / FPLLODIV)
  6. // FPLLDIV 1:2, PLLMULT x20, PLLODIV 1:1. -> 80MHz
  7. // FPBDIV 1:1 -> 80MHz
  8. #pragma config FPLLODIV=DIV_1, FPLLIDIV=DIV_2, FPLLMUL=MUL_20, FPBDIV=DIV_1
  9. #pragma config FWDTEN=OFF, FCKSM=CSDCMD, POSCMOD=XT, FNOSC=PRIPLL
  10. #pragma config CP=OFF, BWP=OFF
  11. // *-------------------------------------------------------------------------*
  12. #include "HardwareProfileSkP32.h"
  13. #include "TouchCalibracion.h"
  14. // *-------------------------------------------------------------------------*
  15. TOUCH_DATA TouchData;
  16.  
  17. DATA_CALIBRACION CoefTouch2LCD;
  18. void vCalibracionTouch(void);
  19. // *-------------------------------------------------------------------------*
  20. int main(){
  21.         TOUCH_DATA Temp;
  22.        
  23.         mJTAGPortEnable(0);                                                     // JTAG des-habilitado
  24.         SYSTEMConfigPerformance(GetSystemClock());      // Activa pre-cache.-
  25.         DelayMs(100);
  26.        
  27.         PORTSetPinsDigitalOut(IOPORT_D, BIT_1);         // Backlight del TFT
  28.         mPORTDSetBits(BIT_1);
  29.         vLCDTFTInit(); 
  30.         vInitADS7843();
  31.        
  32.         vCalibracionTouch();
  33.  
  34.         vLCDTFTFillScreen(Color_White);
  35.  
  36.         while(1){
  37.                 if(ADS7843_PIN_IRQ==0){
  38.                         vTestTouchPanel(&Temp);
  39.                         vPuntosTouch2LCD(&CoefTouch2LCD,&Temp,&TouchData);  
  40.                         vLCDTFTPoint(TouchData.x,TouchData.y, Color_Black);
  41.                         DelayMs(2);
  42.                 }
  43.         }
  44. }
  45. // *-------------------------------------------------------------------------*
  46. void vCalibracionTouch(void){
  47.         TOUCH_DATA DatosTouch[9], DatosLCD[9];
  48.        
  49.         DatosLCD[0].x=25;
  50.     DatosLCD[0].y=25;
  51.    
  52.     DatosLCD[1].x=120;
  53.     DatosLCD[1].y=25;
  54.    
  55.     DatosLCD[2].x=214;
  56.     DatosLCD[2].y=25;
  57.      
  58.     DatosLCD[3].x=25;
  59.     DatosLCD[3].y=160;
  60.    
  61.     DatosLCD[4].x=120;
  62.     DatosLCD[4].y=160;  
  63.    
  64.     DatosLCD[5].x=214;
  65.     DatosLCD[5].y=160;
  66.    
  67.     DatosLCD[6].x=25;
  68.     DatosLCD[6].y=294;
  69.    
  70.     DatosLCD[7].x=120;
  71.     DatosLCD[7].y=294;
  72.    
  73.     DatosLCD[8].x=214;
  74.     DatosLCD[8].y=294;
  75.    
  76.     vAdquirirPuntosTouch(&DatosTouch[0],&DatosLCD[0],9);
  77.     vCalibrarTouch(&CoefTouch2LCD,&DatosTouch[0],&DatosLCD[0],9);
  78. }

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Placa de desarrollo SkP32 [ Reproductor AVI ]
« Respuesta #27 en: 26 de Noviembre de 2011, 14:10:12 »
Hola a todos! Por aquí traigo un proyecto lindo para encarar, un reproductor de vídeos AVI  :) Toda la info la pueden encontrar por aquí: http://www.exploringpic32.com/

Un vídeo de la función de reproducción (sin audio) adaptada a la placa SkP32 y la librería propia del LCD TFT usado:



Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4917
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #28 en: 26 de Noviembre de 2011, 14:18:50 »
 :mrgreen: que chulo te quedo eso Genio Suky

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Ejemplos en MPLAB C32. Placa de desarrollo SkP32 xD
« Respuesta #29 en: 27 de Noviembre de 2011, 02:18:36 »
muy interesante!