domingo, 20 de marzo de 2016

COPYPASTE (p24fj128ga010)

Configuración UART más interrupción:

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

COPYPASTE (p24fj128ga010)

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

  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. }

COPYPASTE (PIC24FJ128GA010)

Esta sección de mi BLOG es simple, pequeños programas plantilla para cualquier integrado. Copielo, peguelo, compilelo y transfieralo. (tecnica del jugar aprendiendo)

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

viernes, 4 de marzo de 2016

RTOS (Programa sencillo)

Saludos les dejo un programa interesante y muy sencillo de comprender la lógica de RTOS/CCS Pic.
#include <18F452.h>
#FUSES XT
#FUSES NOWDT
#FUSES PROTECT
#use delay(clock=4M)
#use RTOS(timer=0,minor_cycle=1ms) 
#include <lcd.c>

// DEFINICIONES DE PIN A USAR PARA LOS SEMAFOROS

#define ON   PIN_A0
#define A2   PIN_B0
#define V2   PIN_B1
#define R3   PIN_B2
#define A3   PIN_B3
#define V3   PIN_B4
#define R4   PIN_B5
#define A4   PIN_B6
#define V4   PIN_B7
#define R1   PIN_C4
#define A1   PIN_C5
#define V1   PIN_C6
#define R2   PIN_C7

// TAREAS 

#task (rate=1ms,max=1ms)
void INICIO();

#task (rate=1ms,max=1ms,enabled=false)
void ROJO1();

#task (rate=10s,max=1ms,enabled=false)  
void AMARILLO1();

#task (rate=2s,max=1ms,enabled=false)  
void VERDE1();

#task (rate=6s,max=1ms,enabled=false)  
void AMARILLO12();



void main()

  setup_timer_0(RTCC_INTERNAL| RTCC_DIV_1);
  rtos_run();
}

void INICIO()
{
   if(input(ON))   
   rtos_enable(ROJO1);   
}

void ROJO1()
{
rtos_disable(INICIO);
output_low(A1);
output_high(R1);
rtos_disable(ROJO1);
rtos_enable(AMARILLO1); 
}

void AMARILLO1()
{
output_low(R1);
output_high(A1);
rtos_disable(AMARILLO1);   
rtos_enable(VERDE1);
}

void VERDE1()
{
output_low(A1);
output_high(V1);
rtos_disable(VERDE1);
rtos_enable(AMARILLO12);
}

void AMARILLO12()
{
output_low(V1);
output_high(A1);
rtos_disable(AMARILLO12);  
rtos_enable(ROJO1);
}


/*
SEGUNDO SEMAFORO
*/

¿Por q FREERTOS?


¿Sabías?

  • FreeRTOS se descarga cada 260 segundos (en promedio).
  • FreeRTOS vino arriba en la clase en los estudios de mercado de sistemas embebidos EETimes 2011, 2012, 2013, 2014 y 2015 en dos categorías: Actualmente, el RTOS kernel está utilizando, y el núcleo RTOS siendo considerado para el próximo proyecto!
  • FreeRTOS ofrece menores riesgos del proyecto y un coste total de propiedad más bajoque las alternativas comerciales debido a que:
    • Está totalmente compatible y documentado.
    • La mayoría de las personas toman productos al mercado sin tener que ponerse en contacto con nosotros, pero con la total tranquilidad de que podrían optar por cambiar a uso comercial totalmente indemnizada (con soporte dedicado) en cualquier momento.
  • Algunos puertos FreeRTOS Nunca deshabilitar completamente las interrupciones .
  • Como control de calidad estrictos, y para eliminar toda ambigüedad titularidad de la PI, código oficial FreeRTOS se separa de contribuciones de la comunidad .
  • FreeRTOS tiene un modo de garrapatas menos a apoyar directamente a aplicaciones de baja potencia .
  • FreeRTOS se descargó> 113000 veces en 2014.
  • FreeRTOS está diseñado para ser simple y fácil de usar: sólo 3 archivos de origen que son comunes a todos los puertos RTOS, y el archivo de fuente específica de un microcontrolador son obligatorias, y su API está diseñado para ser simple e intuitivo.
  • El puerto RL78 puede crear tareas 13, 2 colas y los temporizadores de software 4 en menos de 4 Kbytes de RAM!

¿Por qué elegir FreeRTOS?

. "Es probablemente seguro decir en este punto que FreeRTOS pasa por más" revisión por pares "que cualquier otro RTOS disponible en el planeta lo he utilizado en varios proyectos - uno de los cuales era un entorno multiprocesador que utiliza más de 64 procesadores y . necesaria para hacer funcionar de forma fiable durante meses El núcleo RTOS tuvo un buen desempeño Tome FreeRTOS para dar una vuelta ".. - John Westmoreland
FreeRTOS es una opción libre de riesgo, proporcionando el mejor de los mundos: FreeRTOS es verdaderamente libre y apoyado , incluso cuando se utiliza en aplicaciones comerciales. La licencia de código abierto FreeRTOS no plantea ningún riesgo para su software propietario. Usted puede tomar un producto al mercado utilizando FreeRTOS sin ni siquiera hablar con nosotros, y mucho menos pagar ningún cargo, y miles de personas hacer precisamente eso. Si, en cualquier momento, que le gustaría recibir copia de seguridad adicional, o si su equipo legal requiere garantías adicionales por escrito o indemnización, entonces hay una sencilla ruta de actualización comercial de bajo costo. Su tranquilidad viene con el conocimiento que se puede optar por tomar la ruta comercial en cualquier momento que elija.
Aquí hay algunas razones por FreeRTOS es una buena opción para su próxima aplicación - FreeRTOS ...
  • Proporciona una solución única e independiente para muchas arquitecturas diferentes y herramientas de desarrollo.
  • Se sabe que es fiable. La confianza está asegurada por las actividades realizadas por el proyecto hermano SafeRTOS.
  • Es rico en características y aún en fase de desarrollo activo continuo.
  • Tiene un mínimo de ROM, RAM y el procesamiento de arriba. Típicamente, una imagen binaria kernel RTOS estará en la región de 6K a 12K bytes.
  • Es muy simple - el núcleo del núcleo RTOS está contenida en sólo 3 archivos C . La mayoría de los muchos archivos incluidos en el archivo de descarga .zip se refieren únicamente a las numerosas aplicaciones de demostración.
  • Es verdaderamente libre para su uso en aplicaciones comerciales (ver condiciones de la licenciapara más detalles).
  • Viene con una portabilidad, desarrollo de la plataforma, o el servicio de desarrollo de aplicaciones si se requiere.
  • Está bien establecida con una gran base de usuarios y cada vez mayor.
  • Contiene un ejemplo pre-configurado para cada puerto. No hay necesidad de encontrar la manera de configurar un proyecto - sólo tiene que descargar y compilar!
  • Tiene una excelente, vigilados y activo libre foro de soporte .
  • Tiene la seguridad de que el soporte comercial es si se requiere disponibles.
  • Proporciona una amplia documentación.
  • Es muy escalable, simple y fácil de usar.
  • FreeRTOS ofrece una alternativa más pequeña y más fácil el procesamiento en tiempo real para aplicaciones en las que eCOS, Linux embebido (o Linux de Tiempo Real) e incluso uCLinux no caben, no son apropiados o no están disponibles.

FreeRTOS lista de correo de anuncios

Puede mantenerse al día con anuncios FreeRTOS muy ocasionales conectándose a la lista de correo FreeRTOS. Los correos electrónicos son poco frecuentes y mantenerse cortas. Respetamos su privacidad, por lo que no proporcionan direcciones de correo electrónico de terceros. Cada correo electrónico enviado contiene instrucciones para cancelar la suscripción.
NUEVO: Usted también puede ahora seguir FreeRTOS en Twitter para las notificaciones instantáneas.