Blog cajón desastre (CBTis 44 / TecNM Teziutlán) https://github.com/maigke ( tiene muy poca aportación)
Mostrando entradas con la etiqueta C. Mostrar todas las entradas
Mostrando entradas con la etiqueta C. Mostrar todas las entradas
sábado, 12 de mayo de 2018
GitHub y algunos programas base para microcontroladores
A continuación coloco el link para mi GitHub, donde están alojados algunos de los códigos que he usado para la materia de microcontroladores en el ITS Teziutlán, todos los programas están en XC8 de Microchip y los proyectos elaborados para MPLABX v4.05, los programas se pueden compilar para los micros PIC18F420, PIC18F4450, PIC18F4520, PIC18F45K50, consulte la carpeta Mylibs en los archivos configx.h
Finalmente, la frecuencia de reloj que se usa es de 4MHz, sin utilizar el preescalamiento, para hacer uso, modifique los archivos configx.h según su conveniencia
Mi GitHub
Un abrazo y gran saludos
jueves, 12 de marzo de 2015
Documentando con Doxygen Cabeceras
/** @file clk.h @code #include@endcode @brief Macros para definir la frecuencia de oscilacion del reloj principal */ #ifndef CLK_H #define CLK_H /** * @name Definitions for MCU Clock Frequency * Adapt the MCU clock frequency in Hz to your target. * Revisa las paginas 37-39 */ #define F_CPU 16000000L ///< Frecuencia de 16MHz #if F_CPU == 16000000L #define ADC_PRESCALER 0x07 /// Patebin link
Etiquetas:
ATmega32u4,
C
Documentando con Doxygen programa Principal
Archivo Principal
/**@mainpage TecladoDriver.c * @brief Imprimir en un display de siete segmentos la tecla presionada por un teclado matricial @section intro Este programa imprime un numero desde un teclado matricial y lo pone en un display de siete segmentos de catodo comun es posible el uso de un display de anodo comun, a traves de una interfaz con un ULN2803 @section Uso Solo se presiona una tecla del matricial y el numero aparece en el display * @author: Miguel Montiel */ #include#include "clk.h" #include "keyb.h" #include "sevseg.h" /** @file TecladoDriver.c @brief Programa que escribe un numero a un display de 7 segmentos @author Miguel Montiel */ int main(void) { unsigned char tecla; _init_Teensyduino_internal_(); vInitKeyPad(); InitSegSeg(); while(1) { //TODO:: Please write your application code tecla = ui8_TestKeyPad(); delay_ms(5); Print(tecla); } }
Etiquetas:
ATmega32u4,
C
jueves, 26 de diciembre de 2013
Compilando en GCC una funcion creada en XFuzzy en Manjaro Linux
XFuzzy es un programa de Open Source desarrollado por el centro Nacional de microelectronica de Sevilla, España. este software permite el desarrollo de sistemas difusos, para su implementación, monitoreo, y simulación con planta, además permite la implementación de código fuente a partir del sistema propuesto
En la imagen se muestra como esta implementado un sistema difuso y su monitorización.
Para generar un fuente a partir del sistema, dar clic en Synthesis -> To C, ahora elige la carpeta donde se van a almacenar los archivos generados que tendrán el mismo nombre del sistema, por ejemplo, para este caso el sistema se denomina example.xfl y los archivos generados se llaman example.c y example.h
Dentro del archivo example.h se encuentra la función que se puede llamar desde lenguaje , esta funcion incluye el nombre del sistema difuso diseñado en XFuzzy seguido de las palabras "Inference Engine", en este caso:
Esta función tiene igual número de parámetros que entradas y salidas tiene el sistema
El código fuente se muestra en la imagen anterior, revise que la salida del sistema se almacena en la variable sal, la cual inicialmente se le asigna un valor de 0.0 por ser una variable de tipo double. notese que se usa paso por referencia.
Para compilar el programa (http://stackoverflow.com/questions/8999975/strange-behaviour-of-gcc-and-math-h) se usan algunos parámetros como son Wall y lm pque sirven para imprimir todas las advertencias que se generan (-Wall) durante la compilación del programa y -lm para el uso de la libreria math.h
En la imagen se aprecian las líneas para compilar el programa mostrado y la forma en que se ejecuta, es importante el orden de los archivos a compilar.
Para este caso se podrá notar la salida del sistema cuando las variables val1=val2 = 50.0 y val3 = 0.4 da el compilador de C un resultado de salida de 0.15 y en la imagen siguiente se muestra la salida del sistema difuso definido en XFuzzy cuando las entradas son 50.0, 50.0, 0.4
Esta portabilidad hace interesante a la herramienta, ya que es posible en cierta medida, colocar este código generado en un sistema embebido como lo es un microcontrolador.
hasta el momento les puedo comentar que en avr-gcc funciona muy bien pero con Pinguino PIC no se puede compilar a causa de que SDCC no permite el paso de estructuras como argumentos de funciones. Esto tambien lo probé al tratar de compilar en SDCC puro con el IDE PIKLAB
A fin de confirmarles el uso de la libreria generada por Xfuzzy en AVR-GCC se usa como IDE el code-blocks en su versión 12.11
y programando un ATmega32u4 (vea los siguientes links http://iemontiel.blogspot.mx/2013/05/mexican-arduino-usb-en-fedora-18.html y http://iemontiel.blogspot.mx/2013/12/teensyduino-en-manjaro.html) con cristal de 16MHz integrado en la tarjeta, es posible su compilación y el empleo de EASYDFU (como supervaca) para enviar la información al microcontrolador.
Vea que es interesante el hecho de que solamente se ocupó el 17.30% del total de la memoria del microcontrolador en cuestión.
En la imagen se muestra como esta implementado un sistema difuso y su monitorización.
Para generar un fuente a partir del sistema, dar clic en Synthesis -> To C, ahora elige la carpeta donde se van a almacenar los archivos generados que tendrán el mismo nombre del sistema, por ejemplo, para este caso el sistema se denomina example.xfl y los archivos generados se llaman example.c y example.h
Dentro del archivo example.h se encuentra la función que se puede llamar desde lenguaje , esta funcion incluye el nombre del sistema difuso diseñado en XFuzzy seguido de las palabras "Inference Engine", en este caso:
exampleInferenceEngine
Esta función tiene igual número de parámetros que entradas y salidas tiene el sistema
El código fuente se muestra en la imagen anterior, revise que la salida del sistema se almacena en la variable sal, la cual inicialmente se le asigna un valor de 0.0 por ser una variable de tipo double. notese que se usa paso por referencia.
Para compilar el programa (http://stackoverflow.com/questions/8999975/strange-behaviour-of-gcc-and-math-h) se usan algunos parámetros como son Wall y lm pque sirven para imprimir todas las advertencias que se generan (-Wall) durante la compilación del programa y -lm para el uso de la libreria math.h
En la imagen se aprecian las líneas para compilar el programa mostrado y la forma en que se ejecuta, es importante el orden de los archivos a compilar.
Para este caso se podrá notar la salida del sistema cuando las variables val1=val2 = 50.0 y val3 = 0.4 da el compilador de C un resultado de salida de 0.15 y en la imagen siguiente se muestra la salida del sistema difuso definido en XFuzzy cuando las entradas son 50.0, 50.0, 0.4
Esta portabilidad hace interesante a la herramienta, ya que es posible en cierta medida, colocar este código generado en un sistema embebido como lo es un microcontrolador.
hasta el momento les puedo comentar que en avr-gcc funciona muy bien pero con Pinguino PIC no se puede compilar a causa de que SDCC no permite el paso de estructuras como argumentos de funciones. Esto tambien lo probé al tratar de compilar en SDCC puro con el IDE PIKLAB
A fin de confirmarles el uso de la libreria generada por Xfuzzy en AVR-GCC se usa como IDE el code-blocks en su versión 12.11
y programando un ATmega32u4 (vea los siguientes links http://iemontiel.blogspot.mx/2013/05/mexican-arduino-usb-en-fedora-18.html y http://iemontiel.blogspot.mx/2013/12/teensyduino-en-manjaro.html) con cristal de 16MHz integrado en la tarjeta, es posible su compilación y el empleo de EASYDFU (como supervaca) para enviar la información al microcontrolador.
Vea que es interesante el hecho de que solamente se ocupó el 17.30% del total de la memoria del microcontrolador en cuestión.
Etiquetas:
ATmega32u4,
C,
fuzzy logic,
linux,
Manajaro,
tec,
teziutlan
sábado, 17 de agosto de 2013
Error al compilar programas con puerto serial en Pinguino X.4
En el programa X.4 viene muchos programas de ejemplo, uno de ellos dentro de la carpeta examples/08.interrupt/Counter.pde.
En este código se usa el contador 3 del microcontrolador pic18F2550, una señal aplicada al pin 10, incrementará el valor del registro 3. y enviara por los pines del puerto serial, el numero que contiene el registro.
Sin embargo, al tratar de compilar este archivo, el X.4 enviará un mensaje de error, donde indica que existe un bit denominado RC1IF que no está definido. El problema está en la línea 98 del archivo x.4/p8/pinguino/core/serial.c
//PIR1bits.RC1IF = 0; // Clear interrupt flag
de acuerdo al datasheet en la página 147 del microcontrolador pic18F2550 el bit del registro PIR1, se denomina RCIF, por lo que es conveniente cambiar esta línea por lo siguiente:
PIR1bits.RCIF = 0; //17 de Agosto de 2013
de acuerdo al data del 2550 Este es el resultado que se obtiene
File: /home/miguel/opt/x.4/examples/08.Interrupt/Counter.pde
compiling... Compilacion completada
code size: 10626 / 24575 bytes (43% used)
1.3107790947 segundos (Tiempo de proceso)
Pinguino not found Is your device connected and/or in bootloader mode ? Pinguino found Bootloader v2.12
Writing ...
Counter.hex successfully uploaded
En este código se usa el contador 3 del microcontrolador pic18F2550, una señal aplicada al pin 10, incrementará el valor del registro 3. y enviara por los pines del puerto serial, el numero que contiene el registro.
Sin embargo, al tratar de compilar este archivo, el X.4 enviará un mensaje de error, donde indica que existe un bit denominado RC1IF que no está definido. El problema está en la línea 98 del archivo x.4/p8/pinguino/core/serial.c
//PIR1bits.RC1IF = 0; // Clear interrupt flag
de acuerdo al datasheet en la página 147 del microcontrolador pic18F2550 el bit del registro PIR1, se denomina RCIF, por lo que es conveniente cambiar esta línea por lo siguiente:
PIR1bits.RCIF = 0; //17 de Agosto de 2013
de acuerdo al data del 2550 Este es el resultado que se obtiene
File: /home/miguel/opt/x.4/examples/08.Interrupt/Counter.pde
compiling... Compilacion completada
code size: 10626 / 24575 bytes (43% used)
1.3107790947 segundos (Tiempo de proceso)
Pinguino not found Is your device connected and/or in bootloader mode ? Pinguino found Bootloader v2.12
Writing ...
Counter.hex successfully uploaded
jueves, 20 de junio de 2013
Uso de pragma config en SDCC 3.3 Fedora 18 x86_64
Bien en F18 las actualizaciones me han dejado fuera a SDCC, ya que la version 3.2 que tiene, no me permite programar los bits de configuración.
#includeComo se verá en el código se encuentra comentada la forma obsoleta que se utilizaba antes de SDCC 3.2 y la actual.#define FOSC 48000000 #include "simple_delay.h" #include "fLCD3bSDCC.h" #include "cabecera.h" /** * 20/jun/2013 * Actualizacion a SDCC 3.3 donde se definen los bits de configuracion * mediante la directiva pragma, debido a que la version existente en * F18 no permite compilar PIC16 con pragma ni con __code char __at ... */ #pragma config PLLDIV = 5, CPUDIV = OSC1_PLL2, USBDIV = 2 #pragma config FOSC = HSPLL_HS, FCMEN = ON, IESO = ON #pragma config PWRT = ON, BOR = ON, BORV = 0, VREGEN = OFF #pragma config WDT = OFF, MCLRE = ON, LPT1OSC = ON #pragma config PBADEN = OFF, CCP2MX = ON #pragma config STVREN = ON, LVP = OFF #pragma config XINST = OFF, DEBUG = OFF /* __code char __at __CONFIG1L CONFIG1L = _PLLDIV_DIVIDE_BY_5__20MHZ_INPUT__1L & _CPUDIV__OSC1_OSC2_SRC___1__96MHZ_PLL_SRC___2__1L & _USBPLL_CLOCK_SRC_FROM_96MHZ_PLL_2_1L; __code char __at __CONFIG1H CONFIG1H = _OSC_HS__HS_PLL__USB_HS_1H & _FCMEN_ON_1H & _IESO_ON_1H; __code char __at __CONFIG2L CONFIG2L = _PUT_ON_2L & _BODEN_ON_2L & _BODENV_4_2V_2L & _VREGEN_ON_2L; __code char __at __CONFIG2H CONFIG2H = _WDT_DISABLED_CONTROLLED_2H & _WDTPS_1_32768_2H; __code char __at __CONFIG3H CONFIG3H = _CCP2MUX_RC1_3H & _PBADEN_PORTB_4_0__CONFIGURED_AS_DIGITAL_I_O_ON_RESET_3H & _LPT1OSC_ON_3H & _MCLRE_MCLR_ON_RE3_OFF_3H; __code char __at __CONFIG4L CONFIG4L = _STVR_ON_4L & _LVP_OFF_4L & _ENHCPU_OFF_4L & _BACKBUG_OFF_4L; __code char __at __CONFIG5L CONFIG5L = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L; __code char __at __CONFIG5H CONFIG5H = _CPB_OFF_5H; __code char __at __CONFIG6L CONFIG6L = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L; __code char __at __CONFIG6H CONFIG6H = _WRTC_OFF_6H & _WRTB_OFF_6H; __code char __at __CONFIG7L CONFIG7L = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L; __code char __at __CONFIG7H CONFIG7H = _EBTRB_OFF_7H; */
sábado, 4 de septiembre de 2010
Función de Retardo en sdcc
Saludos aqui les dejo el código para generar un retardo en SDCC, para el PIC16F819
/* ----------------------------------------------------------------------- */
/* Plantilla generada por Piklab */
#include
/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
typedef unsigned int word;
word at 0x2007 CONFIG = _WDT_OFF & _PWRTE_ON & _INTRC_IO & _MCLR_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_OFF & _DEBUG_OFF & _CCP1_RB2 & _CP_OFF;
void pausa(unsigned int tiempo);
void main() {
pausa(1000);
}
void pausa(unsigned int tiempo)
{
unsigned char i;
unsigned char j;
int temp=0;
for(i=0;i {
for(j=0;j<0x8000;j++)
{
tiempo=+1;
}
}
}
/* ----------------------------------------------------------------------- */
/* Plantilla generada por Piklab */
#include
/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
typedef unsigned int word;
word at 0x2007 CONFIG = _WDT_OFF & _PWRTE_ON & _INTRC_IO & _MCLR_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_OFF & _DEBUG_OFF & _CCP1_RB2 & _CP_OFF;
void pausa(unsigned int tiempo);
void main() {
pausa(1000);
}
void pausa(unsigned int tiempo)
{
unsigned char i;
unsigned char j;
int temp=0;
for(i=0;i
for(j=0;j<0x8000;j++)
{
tiempo=+1;
}
}
}
sábado, 10 de julio de 2010
Zinjal y PSeInt interesante
Saludos a todos, esta ocasion presento a ustedes algo que me encontre en la red, buscando informacion sobre, si existía, un software que pudiera ser capaz de hacer el diagrama de flujo a partir de el codigo fuente, y pues fui a dar con estos dos proyectos de la Universidad Nacional del Litoral en Santa Fe, Argentina, los cuales se me hacen muy interesantes, ya que PSeInt, es un programa que ayuda a los iniciados en programación, específicamente en algoritmia, y el segundo Zinjal es un IDE para lenguaje C/C++ que al igual que el primer proyecto pueden generar diagramas de Flujo a partir de fuente, lo que te da una mejor panorámica, en mi caso, he probado Zinjal usando codigo para CCS y pues si funciona muy bien, aun me falta probar con SDCC y con pic-gcc, pero supongo que no hay ningun problema.
Les dejo los links de las páginas de los autores:
http://zinjai.sourceforge.net/
http://pseint.sourceforge.net/
Les dejo los links de las páginas de los autores:
http://zinjai.sourceforge.net/
http://pseint.sourceforge.net/
martes, 4 de mayo de 2010
DEV-C++ instalacion ThenewBoston
Entre mis suscripciones de Youtubw, encontre este buen tutorial, les dejo el primer video, aclaro, no es mio, pertecene al autor thenewboston, que incluye a multiples tutoriales de programacion muy buenos. (Estan en ingles).
Suscribirse a:
Entradas (Atom)