Autor Tema: dsPIC Curso Basico con C30  (Leído 349988 veces)

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: dsPIC Curso Basico con C30
« Respuesta #165 en: 04 de Abril de 2010, 12:16:43 »
En http://www.microchip.com/dspic encontrarás una infinidad de documentos y códigos descargables.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: dsPIC Curso Basico con C30
« Respuesta #166 en: 04 de Abril de 2010, 12:18:58 »
listo mig, le doy una mirada

gracias por el link.
.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: dsPIC Curso Basico con C30
« Respuesta #167 en: 04 de Abril de 2010, 13:29:07 »
Aquí están todos los manuales de referencia de los dispositivos de 16-bits.

Explican en general el funcionamiento de cada modulo y por lo general tienen algo de código en assembler y C30.


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

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Curso Basico C30 - PIC24FJ128GA010
« Respuesta #168 en: 05 de Abril de 2010, 15:31:07 »
Dejo algunos ejemplos simples para el PIC24FJ128GA010  ;-)


Titilar leds, modificación y utilización de delays en libpic30.h
Código: C
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
  4. _CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
  5.  
  6. #define FCY 10000000UL
  7. #include <libpic30.h>
  8.  
  9. /* ** Modificando en libpic30.h ** */
  10. /*
  11. #if !defined(FCY)
  12.         extern void __delay_ms(unsigned long);
  13.         extern void __delay_us(unsigned long);
  14. #else
  15.         #define __delay_ms(d) __delay32( (unsigned long long) (d)*(FCY)/1000)
  16.         #define __delay_us(d) __delay32( (unsigned long long) (d)*(FCY)/1000000)
  17.         #define __delay_s(d) __delay32( (unsigned long) (d)*(FCY))
  18. #endif
  19. */
  20.  
  21.  
  22. int main (int argc, char * argv[]){
  23.        
  24.        
  25.         TRISF=0xFFF3;
  26.        
  27.         LATFbits.LATF2=0;
  28.         LATFbits.LATF3=0;
  29.        
  30.         while(1){
  31.                 LATFbits.LATF2=0;
  32.                 __delay_ms(500);
  33.                 LATFbits.LATF2=1;
  34.                 __delay_ms(500);
  35.         }
  36.  
  37. }

Configuración de timer 2y3 para formar timer de 32-bits, más interrupción:

Código: C
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
  4. _CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
  5.  
  6. /*#define FCY 20000000UL
  7. #include <libpic30.h>*/
  8.  
  9. #include <timer.h>
  10. /* ***************************************************************** */
  11. void __attribute__((__interrupt__, __shadow__)) _T3Interrupt(void){
  12.                
  13.         LATDbits.LATD8=~LATDbits.LATD8; // Cambiamos de estado pin F2.-
  14.         _T3IF = 0; //Borramos flag.
  15. }
  16.  
  17.  
  18. int main (int argc, char * argv[]){
  19.        
  20.        
  21.         TRISD=0xF0FF;
  22.        
  23.         OpenTimer23(T23_ON & T2_IDLE_STOP & T2_GATE_OFF & T2_PS_1_1 & T2_SOURCE_INT,0x004C4B40);
  24.  
  25.         ConfigIntTimer23(T3_INT_PRIOR_1 &  T3_INT_ON);
  26.  
  27.         WriteTimer23(0x00);
  28.        
  29.         while(1){
  30.         }
  31.  
  32. }


Configuración UART más interrupción:

Código: C
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
  4. _CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
  5.  
  6. #include <uart.h>
  7.  
  8. char DataUART;
  9. char KbhitUART;
  10.  
  11.  
  12. /* ** *********************************************************************************** ** */
  13. // Definciones para calculo de Baud Rate.-
  14. #define FCY 10000000  // MHz
  15. #define BAUDRATE 9600
  16. #define BRGHigh 1
  17. #if BRGHigh
  18.         #define BRGVAL ((FCY/BAUDRATE)/4)-1
  19.          
  20. #else
  21.         #define BRGVAL ((FCY/BAUDRATE)/16)-1
  22. #endif
  23.  
  24. //__attribute__ ((__section__ (".text"), __space__(prog)))
  25. const char Texto[]= "Probando comunicación serial...\r\nPIC24FJ128GA010  xD ...\r\n"; 
  26. /* ** *********************************************************************************** ** */
  27. void __attribute__((__interrupt__, __shadow__)) _U2RXInterrupt(void){
  28.                
  29.         DataUART=getcUART2();
  30.         KbhitUART=1;
  31.         _U2RXIF=0; // Borramos flag.
  32. }
  33. /* ** *********************************************************************************** ** */
  34. int main (int argc, char * argv[]){
  35.  
  36.         /* ** Utilizando las funciones definidas en C30 ** */
  37.         OpenUART2(UART_EN & UART_IDLE_STOP & UART_IrDA_DISABLE & UART_MODE_SIMPLEX &
  38.                         UART_UEN_00 & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_UXRX_IDLE_ONE &
  39.                 UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_BRGH_FOUR & UART_1STOPBIT,
  40.                         0xFFFF & UART_IrDA_POL_INV_ZERO & UART_SYNC_BREAK_DISABLED &
  41.                         UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR,
  42.                         BRGVAL);
  43.                        
  44.         ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR1 & UART_TX_INT_DIS & UART_TX_INT_PR0 );
  45.        
  46.        
  47.         /*U2MODEbits.USIDL=1; // Al pasar al modo Sleep, apagar modulo.
  48.         U2MODEbits.IREN=0; // Codificacion/decodificacion IrDA deshabilitado.
  49.         U2MODEbits.RTSMD=1; // RTS en modo simple.
  50.         U2MODEbits.UEN=0b00; // Tx/Rx habilitado, CTS/RTS deshabilitados.
  51.         U2MODEbits.WAKE=0; // Wake-up deshabilitado.
  52.         U2MODEbits.LPBACK=0; // Modo LoopBack deshabilitado.
  53.         U2MODEbits.ABAUD=0; // Auto-Baud rate deshabilitado.
  54.         U2MODEbits.RXINV=0; // Modo normal de pin RX, en reposo = 1.
  55.         U2MODEbits.BRGH=BRGHigh; // Mode seleccionado en define.-
  56.         U2MODEbits.PDSEL=0b00; // 8 bits- sin paridad.
  57.         U2MODEbits.STSEL=0; // 1 bit de Stop.
  58.  
  59.         U2STAbits.UTXISEL1=1; // Interrupcion por transimision no usada.
  60.         U2STAbits.UTXISEL0=1; // Interrupcion por transimision no usada.
  61.         U2STAbits.UTXINV=0; // Pin Tx en reposo igual a 1.
  62.         U2STAbits.UTXBRK=0; // Break deshabilitado.
  63.         U2STAbits.URXISEL=0b00; // Interrumpir cuando se recibe un caracter.
  64.         U2STAbits.ADDEN=0; // Auto-Address deshabilitado.
  65.         U2STAbits.OERR=0; // Borramos bits de error por overflow.
  66.        
  67.         U2BRG =BRGVAL;  // Baud Rate determinado en defines.
  68.  
  69.         IPC7bits.U2RXIP=0b01; // Fijamos nivel de prioridad.
  70.         IFS1bits.U2RXIF=0; // Borramos flag.
  71.         IEC1bits.U2RXIE=1; // habilitamos interrupcion por recepción.
  72.  
  73.         U2MODEbits.UARTEN=1;// Encendemos modulo.
  74.         U2STAbits.UTXEN=1; // Transmision habilitada.*/
  75.  
  76.        
  77.  
  78.  
  79.         KbhitUART=0;
  80.         putsUART2(Texto);
  81.        
  82.         while(1){
  83.                 if(KbhitUART==1){
  84.                         KbhitUART=0;
  85.                         putcUART2(DataUART);
  86.                 }
  87.         }
  88. }

Para probarlos arme una PICCard para la MultiBoardPicTrainer de Felixls  :-)


Si alguien necesita el PCB me avisa  ;-)

Saludos!

No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: dsPIC Curso Basico con C30
« Respuesta #169 en: 05 de Abril de 2010, 15:33:25 »
Excelente aportación Suky, muchas gracias.

Deberías proteger esa PCB tan chula contra el óxido.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Curso Basico C30 - PIC24FJ128GA010
« Respuesta #170 en: 05 de Abril de 2010, 16:12:45 »
Dejo algunos ejemplos simples para el PIC24FJ128GA010  ;-)


Titilar leds, modificación y utilización de delays en libpic30.h
Código: C
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
  4. _CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
  5.  
  6. #define FCY 10000000UL
  7. #include <libpic30.h>
  8.  
  9. /* ** Modificando en libpic30.h ** */
  10. /*
  11. #if !defined(FCY)
  12.         extern void __delay_ms(unsigned long);
  13.         extern void __delay_us(unsigned long);
  14. #else
  15.         #define __delay_ms(d) __delay32( (unsigned long long) (d)*(FCY)/1000)
  16.         #define __delay_us(d) __delay32( (unsigned long long) (d)*(FCY)/1000000)
  17.         #define __delay_s(d) __delay32( (unsigned long) (d)*(FCY))
  18. #endif
  19. */
  20.  
  21.  
  22. int main (int argc, char * argv[]){
  23.        
  24.        
  25.         TRISF=0xFFF3;
  26.        
  27.         LATFbits.LATF2=0;
  28.         LATFbits.LATF3=0;
  29.        
  30.         while(1){
  31.                 LATFbits.LATF2=0;
  32.                 __delay_ms(500);
  33.                 LATFbits.LATF2=1;
  34.                 __delay_ms(500);
  35.         }
  36.  
  37. }

Configuración de timer 2y3 para formar timer de 32-bits, más interrupción:

Código: C
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
  4. _CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
  5.  
  6. /*#define FCY 20000000UL
  7. #include <libpic30.h>*/
  8.  
  9. #include <timer.h>
  10. /* ***************************************************************** */
  11. void __attribute__((__interrupt__, __shadow__)) _T3Interrupt(void){
  12.                
  13.         LATDbits.LATD8=~LATDbits.LATD8; // Cambiamos de estado pin F2.-
  14.         _T3IF = 0; //Borramos flag.
  15. }
  16.  
  17.  
  18. int main (int argc, char * argv[]){
  19.        
  20.        
  21.         TRISD=0xF0FF;
  22.        
  23.         OpenTimer23(T23_ON & T2_IDLE_STOP & T2_GATE_OFF & T2_PS_1_1 & T2_SOURCE_INT,0x004C4B40);
  24.  
  25.         ConfigIntTimer23(T3_INT_PRIOR_1 &  T3_INT_ON);
  26.  
  27.         WriteTimer23(0x00);
  28.        
  29.         while(1){
  30.         }
  31.  
  32. }


Configuración UART más interrupción:

Código: C
  1. #include <p24fj128ga010.h>
  2.  
  3. _CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
  4. _CONFIG2( FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_HS );
  5.  
  6. #include <uart.h>
  7.  
  8. char DataUART;
  9. char KbhitUART;
  10.  
  11.  
  12. /* ** *********************************************************************************** ** */
  13. // Definciones para calculo de Baud Rate.-
  14. #define FCY 10000000  // MHz
  15. #define BAUDRATE 9600
  16. #define BRGHigh 1
  17. #if BRGHigh
  18.         #define BRGVAL ((FCY/BAUDRATE)/4)-1
  19.          
  20. #else
  21.         #define BRGVAL ((FCY/BAUDRATE)/16)-1
  22. #endif
  23.  
  24. //__attribute__ ((__section__ (".text"), __space__(prog)))
  25. const char Texto[]= "Probando comunicación serial...\r\nPIC24FJ128GA010  xD ...\r\n"; 
  26. /* ** *********************************************************************************** ** */
  27. void __attribute__((__interrupt__, __shadow__)) _U2RXInterrupt(void){
  28.                
  29.         DataUART=getcUART2();
  30.         KbhitUART=1;
  31.         _U2RXIF=0; // Borramos flag.
  32. }
  33. /* ** *********************************************************************************** ** */
  34. int main (int argc, char * argv[]){
  35.  
  36.         /* ** Utilizando las funciones definidas en C30 ** */
  37.         OpenUART2(UART_EN & UART_IDLE_STOP & UART_IrDA_DISABLE & UART_MODE_SIMPLEX &
  38.                         UART_UEN_00 & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_UXRX_IDLE_ONE &
  39.                 UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_BRGH_FOUR & UART_1STOPBIT,
  40.                         0xFFFF & UART_IrDA_POL_INV_ZERO & UART_SYNC_BREAK_DISABLED &
  41.                         UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR,
  42.                         BRGVAL);
  43.                        
  44.         ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR1 & UART_TX_INT_DIS & UART_TX_INT_PR0 );
  45.        
  46.        
  47.         /*U2MODEbits.USIDL=1; // Al pasar al modo Sleep, apagar modulo.
  48.         U2MODEbits.IREN=0; // Codificacion/decodificacion IrDA deshabilitado.
  49.         U2MODEbits.RTSMD=1; // RTS en modo simple.
  50.         U2MODEbits.UEN=0b00; // Tx/Rx habilitado, CTS/RTS deshabilitados.
  51.         U2MODEbits.WAKE=0; // Wake-up deshabilitado.
  52.         U2MODEbits.LPBACK=0; // Modo LoopBack deshabilitado.
  53.         U2MODEbits.ABAUD=0; // Auto-Baud rate deshabilitado.
  54.         U2MODEbits.RXINV=0; // Modo normal de pin RX, en reposo = 1.
  55.         U2MODEbits.BRGH=BRGHigh; // Mode seleccionado en define.-
  56.         U2MODEbits.PDSEL=0b00; // 8 bits- sin paridad.
  57.         U2MODEbits.STSEL=0; // 1 bit de Stop.
  58.  
  59.         U2STAbits.UTXISEL1=1; // Interrupcion por transimision no usada.
  60.         U2STAbits.UTXISEL0=1; // Interrupcion por transimision no usada.
  61.         U2STAbits.UTXINV=0; // Pin Tx en reposo igual a 1.
  62.         U2STAbits.UTXBRK=0; // Break deshabilitado.
  63.         U2STAbits.URXISEL=0b00; // Interrumpir cuando se recibe un caracter.
  64.         U2STAbits.ADDEN=0; // Auto-Address deshabilitado.
  65.         U2STAbits.OERR=0; // Borramos bits de error por overflow.
  66.        
  67.         U2BRG =BRGVAL;  // Baud Rate determinado en defines.
  68.  
  69.         IPC7bits.U2RXIP=0b01; // Fijamos nivel de prioridad.
  70.         IFS1bits.U2RXIF=0; // Borramos flag.
  71.         IEC1bits.U2RXIE=1; // habilitamos interrupcion por recepción.
  72.  
  73.         U2MODEbits.UARTEN=1;// Encendemos modulo.
  74.         U2STAbits.UTXEN=1; // Transmision habilitada.*/
  75.  
  76.        
  77.  
  78.  
  79.         KbhitUART=0;
  80.         putsUART2(Texto);
  81.        
  82.         while(1){
  83.                 if(KbhitUART==1){
  84.                         KbhitUART=0;
  85.                         putcUART2(DataUART);
  86.                 }
  87.         }
  88. }

Para probarlos arme una PICCard para la MultiBoardPicTrainer de Felixls  :-)


Si alguien necesita el PCB me avisa  ;-)

Saludos!



Sobre esa PCB y con adaptadores no podremos trabajar con los PIC32?? :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Curso Basico C30 - PIC24FJ128GA010
« Respuesta #171 en: 05 de Abril de 2010, 18:04:57 »
Excelente aportación Suky, muchas gracias.

Deberías proteger esa PCB tan chula contra el óxido.

Si, ya le he puesto protección....  ;-)

Sobre esa PCB y con adaptadores no podremos trabajar con los PIC32?? :shock: :shock:

Falta lugar como para colocarle los conectores ethernet/chip PHY, USB host, ect... Si solo se quisiera colocar un conector USB Host creo que sobraría espacio en un PIC32 64 pines.


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

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: dsPIC Curso Basico con C30
« Respuesta #172 en: 05 de Abril de 2010, 18:05:20 »
justo la librería de retardos que andaba buscando, la podes dejar por acá por favor, querido amigo suky?

ese micro es de 100pines :shock: que bien manejas la plancha, a ver si algún día pillo la maña para sacar esos tqfp.

esa misma librería de retardos servirá para C18, porque contar ciclos a veces enreda :D

saludos
.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: dsPIC Curso Basico con C30
« Respuesta #173 en: 05 de Abril de 2010, 18:36:05 »
justo la librería de retardos que andaba buscando, la podes dejar por acá por favor, querido amigo suky?

ese micro es de 100pines :shock: que bien manejas la plancha, a ver si algún día pillo la maña para sacar esos tqfp.

esa misma librería de retardos servirá para C18, porque contar ciclos a veces enreda :D

saludos

La librería esta en C:\Archivos de programa\Microchip\MPLAB C30\support\generic\h, pero adjunto la que modifique para que funcione bien a 40 MIPS (PIC24H)

Pero solo funciona en C30, busque la que indico Santiago en otro post, pero en el Microchip Solutions que tengo dice que es solo para C32  :?

No se olviden que por aquí deje una librería para LCD en C30 más ejemplos  ;-)


Saludos!


No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: dsPIC Curso Basico con C30
« Respuesta #174 en: 05 de Abril de 2010, 18:43:56 »
Supuestamente la librería TimeDelay.c funciona para cualquier PIC según su contenido...

C:\Microchip Solutions\Microchip\Common

Código: [Seleccionar]
File Name:       TimeDelay.c
Dependencies:    None
Processor:       PIC18/PIC24/dsPIC30/dsPIC33/PIC32
Compiler:        C30 v3.12
Company:         Microchip Technology, Inc.

Tiene un par de includes...

Código: [Seleccionar]
#if defined(__PIC32MX__)
#include <plib.h>
#endif
#include "HardwareProfile.h"
#include "TimeDelay.h"

... los cuáles se encuentran dentro de la Microchip Applications Library.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: dsPIC Curso Basico con C30
« Respuesta #175 en: 05 de Abril de 2010, 18:45:47 »
Supuestamente la librería TimeDelay.c funciona para cualquier PIC según su contenido...

C:\Microchip Solutions\Microchip\Common

Código: [Seleccionar]
File Name:       TimeDelay.c
Dependencies:    None
Processor:       PIC18/PIC24/dsPIC30/dsPIC33/PIC32
Compiler:        C30 v3.12
Company:         Microchip Technology, Inc.

Tiene un par de includes...

Código: [Seleccionar]
#if defined(__PIC32MX__)
#include <plib.h>
#endif
#include "HardwareProfile.h"
#include "TimeDelay.h"

... los cuáles se encuentran dentro de la Microchip Applications Library.

Voy a bajar la última versión, pues como digo, la que tengo no la tiene  :roll:

Edit: Bajando....78 MB....
« Última modificación: 05 de Abril de 2010, 18:50:47 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: dsPIC Curso Basico con C30
« Respuesta #176 en: 05 de Abril de 2010, 18:46:57 »
OK, nos avisas si funciona. No la he probado por ahora.  :mrgreen:

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: dsPIC Curso Basico con C30
« Respuesta #177 en: 05 de Abril de 2010, 20:29:50 »
Si funciona, aunque no la utilizaría para hacer nada que necesite un error menor al 10% !  :mrgreen:

Para usarla de forma sencilla hay que copiar los archivos TimeDelay.c, TimeDelay.h y HardwareProfile.h a la carpeta del proyecto o colocarlos en una carpeta especifica y agregarlos al proyecto:




Y listo:

Código: C
  1. #include "TimeDelay.h"
  2.  
  3. int main (int argc, char * argv[]){
  4.  
  5.         Delay10us(5);  // 50us
  6.         DelayMs(10);


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

Desconectado niuton

  • PIC10
  • *
  • Mensajes: 21
comparadores para PWM
« Respuesta #178 en: 16 de Junio de 2010, 05:44:52 »
Hola a todos, ahora que tengo otro poco de tiempo he seguido con el dspic30F3013 y estoy intentando de generar una señal PWM de 50Hz con la ayuda de los comparadores. El comparador activa una interrupción cuando se cumple la condición con el TIMER y la patilla OCx la coloca a 5v o 0v de forma automática. pero quería saber si es posible utilizar la patilla OCx para el ADC y sólo usar la interrupción del comparador sin que se utilice la patilla OCx como salida.

bueno espero que me hayan entendido.

Otra duda, yo uso C30 y quería cambiar el estado de pin RB2-RB4 de alto a bajo de forma secuencial, pero no quería utilizar los if ni nada por el estilo, vamos que quería usar una función parecida a bit_set en CCS, que le indique el puerto y se valla incrementando el bit a cambiar. lo que se me a ocurrido es utilizar BSET en ASM

i=0;
ASM("BSET LATB, i")
i++;

pero no me deja me da error, solo se puede poner numeros, ¿se os ocurre alguna forma?.

Un saludo
« Última modificación: 16 de Junio de 2010, 08:39:14 por niuton »

Desconectado ElEspañolito

  • PIC10
  • *
  • Mensajes: 6
Re: dsPIC Curso Basico con C30
« Respuesta #179 en: 09 de Junio de 2011, 20:33:25 »
Buenas,

estoy utilizando las funciones que elaboró en su día Renatox para el envio de datos por la UART getcom y sendcom. La cuestión es que las simulo (utilizo MPLAB) y mirando los tiempos con el Stopwatch me tarda 3ms en enviar un simple float. Teoricamente tengo la UART configurada a 9600 (micro a 30MIPS) y utilizo los pines alternativos para la UART1. Cuelgo codigo de inicializacion de la UART y de la función (que en principio, lo único que he hecho es cambiar el nombre).

Código: [Seleccionar]
void config_UART(void) {
U1MODE=0x2420;
U1STA=0x8000;
BAUD=9600;
U1BRG=(1875000/BAUD)-1;
}

void SendUART(unsigned int k, char *p) { 
for(;k;--k) {
while(BusyUART1());
putcUART1(*p);
p++;
  }

Hay algo mal o es que no simula bien los envios por este canal??

gracias, saludos


 

anything