Está en la página 1de 10

Curso Introductorio de

Programación en C
Para Microcontroladores
De la familia AVR-Atmel

Sergio De León
Instituto Tecnológico de Cd. Madero
Cd. Madero Tamaulipas
Programas Necesarios
► AVR Studio 4
 IDE Suite de Programación
 Depuración / Debugging
 Programador

► WINAVR
 avr-gcc Compilador-Linker de C y C++
 avr-libc Librerías y Macros
 avrdude Programador
► AVRLib
 Rutinas pre-codificadas (Funciones)
►Drivers para dispositivos Internos y Externos
 Internos: Registros, USART, Timers, ADC.
 Externos: Memorias, Sistemas FAT, GPS,

LCD, Discos PATA, Servos, Encoders.

► WINAVR
 avr-gcc Compilador-Linker de C y C++
 avr-libc Librerías y Macros
 avrdude Programador
Opciones del Compilador
► Velocidad
 No hay que olvidar que varia en cada proyecto
► Optimizaciones
 Métodos para disminuir el tamaño de nuestro código
► Carpetas
 Al utilizar librerías y códigos por separado, las
definiciones pueden estar en otras carpetas
► Archivos anexos
 Cuando se utilizan códigos anexos para agregar
funciones, se le debe de indicar al compilador que
dichos archivos, se compilen también
Variables

► Detalles
 Tipo volatile
►Cuando existe la posibilidad de que
la variable sea modificada por otro
proceso. Solo declara asi aquellas
variables que sean modificadas por
interrupciones o procesos ajenos al
procesador (como timers, resultados
de convertidores, buffers de
transmision serial, etc).
► Detalles
 Otro tipo de declaración
►uint8_t
►uint16_t
►uint32_t
►uint64_t
►int8_t
►int16_t
►int32_t
►int64_t
Manejo de Bits
► Seutiliza mucho el manejo de bits por medio de
funciones lógicas, entre números de 8 bits.
 Ejemplos:
► //pin 2 es salida
► DDRB |= (1 << 2);
► //Seleccionar el canal 1 del ADC
► ADMUX |= ( (1<<MUX1) | (0<<MUX0) );
► //Activar interrupciones RxD/TxD
► outb( UCSR0B, BV(RXCIE0)|BV(TXCIE0) );
► //Poniendo a 1 la salida 0 del Puerto D
► sbi(PORTD,PD0);
Casting
► Se realiza para cambiar de variables. Ejemplo:

 volatile float fases[3],alfa, beta;


 float coeficientesalfa[3]= {1, -0.5, -0.5};
 float coeficientesbeta[3]= {0, 0.866, -0.866};
 volatile unsigned char alfacorrido, betacorrido, i;
 alfa = 0;
 beta = 0;
 for(i=0; i<3; i++)
 {
 alfa += fases[i] * coeficientesalfa[i];
 }
 for(i=0; i<3; i++)
 {
 beta += fases[i] * coeficientesbeta[i];
 }
 alfacorrido = (unsigned char) ( alfa + 128 );
 betacorrido = (unsigned char) ( beta + 128 );
AVR-libc
► Librerías
incluidas con winavr para hacernos
más sencilla la vida, aunque no siempre =).

 Librerías y definiciones útiles:


►#include <util/delay.h>
►#include <avr/interrupt.h>
►#include <math.h>
►#include <avr/io.h> (Obligatoria)
AVRLib
► Forma de intergrarlo a nuestro proyecto
 1) Copia los archivos .h relevantes al proyecto

 2) Inclúyelos con #include en todo archivo .c que los necesite.


 (Usa “ ” y no < > ya que son cabeceras locales, no del sistema)

 3) Copia los archivos .c con el código que permite las facilidades


que se mencionan en los archivos .h

 4) Agrega esos archivos .c en la lista de archivos a compilar.

 5) Revisa los archivos .c y cambia por los registros correctos para


tu microcontrolador.

También podría gustarte