atmega8
DESCRIPTION
características del Atmega8TRANSCRIPT
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 ALGUNAS CARACTERISTICAS
• ARQUITECTURA RISC
• 8KBYTES DE MEMORIA FLASH
• 32 REGISTROS DE • PROPOSITO GENERAL
• 512BYTES DE MEMORIA EEPROM
• 1KBYTE DE MEMORIA SRAM
• 3 CANALES DE PWM
• 8 CANALES DE ADC
• 2 RELOJ/CONTADOR DE 8 BITS
• 1 RELOJ/CONTADOR DE 16 BITS
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 ALGUNAS DEFINICIONES
• RISC: Reduced Instruction Set Computer.
• MEMORIA FLASH: Memoria de tipo eeprom que permite que múltiples posiciones de memoria sean escritas o borradas en una misma operación de programación mediante impulsos eléctricos. Es en ésta memoria en donde se guardará nuestro programa.
• REGISTROS DE PROPOSITO GENERAL: Memoria de alta velocidad que almacena valores para ser usados en operaciones matemáticas dentro del microcontrolador (alu).
• MEMORIA SRAM: Memoria ram estática en donde se pueden guardar datos, valores. Cuando se desenergiza el micro. Se pierden estos valores.
• MEMORIA EEPROM: Memoria del micro en donde podemos guardar datos los cuales no se perderán al desenergizar el micro.
• PUERTO: Conjunto de terminales para el envío y recepción de datos.
• ADC: convertidor analógico digital
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 ESTRUCTURA INTERNA
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 INICIALIZACION DE PUERTOS
EL MICROCONTROLADOR ATMEGA8 TIENE TRES PUERTOS:• PORTB: BIDIRECCIONAL DE 8 TERMINALES (PB0-PB7)• PORTC: BIDIRECCIONAL DE 7 TERMINALES (PC0-PC6)• PORTD: BIDIRECCIONAL DE 8 TERMINALES (PD0-PD7)
LAS TERMINALES DE LOS PUERTOS SON BIDIRECIONALES , POR LO QUE ÉSTAS SE PUEDEN CONFIGURAR COMO ENTRADA O COMO SALIDA. LA CONFIGURACIÓN DEPENDERÁ DE NUESTRAS NECESIDADES DE HARDWARE.
DATA DIRECTION REGISTER (DDRX): Registro especial usado para poner los pines del puerto especificado como entrada (0) o como salida(1) .
DATA REGISTER (PORTX): Registro especial usado para escribir un dato de salida en el puerto especificado.
INPUT PIN ADDRESS (PINX): Registro especial usado para leer los datos de entrada del puerto especificado.
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 INICIALIZACION DE PUERTOS
DDRB=0XAC; // INICIALIZA PB7,PB5,PB3,PB2 COMO SALIDA
// Y PB6,PB4,PB1,PB0 COMO ENTRADA
DDRB=0XF0; // INICIALIZA PB7-PB4 COMO SALIDA// Y PB3-PB0 COMO ENTRADA
SE DESEA HACER UN PROGRAMA PARA INCREMENTAR UN DISPLAY DE 7 SEGMENTOS CONECTADO AL PUERTO B, CADA VEZ QUE SE PULSE UN BOTON CONECTADO AL PD3.
¿ CÚAL SERÁ LA INICIALIZACIÓN DE LOS PUERTOS?
DDRB=0XFF; DDRB=0X7F; DDRB=0XFE;
DDRD=0X00; DDRD=0XA7; DDRD=0XF7;
DDRB7
DDRB6
DDRB5
DDRB4
DDRB3
DDRB2
DDRB1
DDRB0
1 0 1 0 1 1 0 0
DDRB7
DDRB6
DDRB5
DDRB4
DDRB3
DDRB2
DDRB1
DDRB0
1 1 1 1 0 0 0 0
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 RESISTENCIS DE PULL-UP
La resistencia de pull up tiene la función de asegurar que la señal de entrada no quede en estado flotante, además de evitar un corto circuito. El Atmega8 como la mayoría de los microcontroladores tienen esta resistencia de pull up interna.
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 RESISTENCIS DE PULL-UP
EN EL DATA REGISTER (PORTX) SE ACTIVAN LAS RESISTENCIAS DE PULL UP, SI SE FIJA UN UNO LÓGICO EN EL PORTXn ENTONCES SE ACTIVARÁ LA RESISTENCIA DE PULL UP EN ESE PIN.
SI EL PIN ESTA CONFIGURADO COMO SALIDA, ENTONCES EL ESTADO QUE LE PONGAMOS A PORTXn SERÁ LA INICIALIZACIÓN DE ÉSTE(PXn).
DDRB7
DDRB6
DDRB5
DDRB4
DDRB3
DDRB2
DDRB1
DDRB0
0 0 0 0 0 0 0 0
DDRB=0X00; // INICIALIZA PB7-PB0 COMO ENTRADA
PORTB=0XFF; // ACTIVA TODAS LAS RESISTENCIAS DE PULL UP DEL PUERTO B
PORTB7
PORTB6
PORTB5
PORTB4
PORTB3
PORTB2
PORTB1
PORTB0
1 1 1 1 1 1 1 1
M.C. Arnoldo Ulises Villalobos Guerra
DDRB=0XF0;PORTB=0XAC;
// PB7 salida estado inicial 1// PB6 salida estado inicial 0// PB5 salida estado inicial 1// PB4 salida estado inicial 0//PB3 entrada pull up activada//PB2 entrada pull up activada//PB1 entrada pull up desactivada//PB0 entrada pull up desactivada
Se desea conectar leds al puerto B para una rotación secuencial a la derecha o la izquierda según el estado lógico de PD7 (botón conectado en el PD7), se requiere activar la resistencia interna de pull-up de este pin. Realice la inicialización del problema.
PORTB7
PORTB6
PORTB5
PORTB4
PORTB3
PORTB2
PORTB1
PORTB0
1 0 1 0 1 1 0 0
DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0
1 1 1 1 0 0 0 0
MICROCONTRLADOR ATMEGA8 RESISTENCIS DE PULL-UP
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 DECLARACION DE VARIABLES
unsigned char x; //variable x char sin signo //inicializada con 0
signed Int var1=0x0080; // variable var1 tipo// entero con signo // inicializada con
// 80 hex. o 128 decimal.
signed char a=20,b=30; // a y b con signo tipo char a inicia con 20unsigned char c=7,d=0b01100111,e; // b inicia con 30
//c, d y e sin signo tipo char c inicia con 7// d inicia con 103// e inicia con cero
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 OPERACIONES ARITMETICAS Y LOGICAS
unsigned char a=10,b=47, var1,var2;
Var1=b/a;Var2=b%a;
// después de las operaciones anteriores var1 será igual a 4 y var2=7
Var1= a&b;
var2=var2 <<(3);
0 0 0 0 1 0 1 0
0 0 1 0 1 1 1 1
0 0 0 0 1 0 1 0
0 0 0 0 0 1 1 1
0 0 1 1 1 0 0 0
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 ENMASCARAMIENTOS
Los enmascaramientos son útiles para la manipulación de bits individuamente.
Enmascaramiento con AND: 1.- Se utiliza para poner en cero los bits deseados. (sin alterar los otros)2.-También es útil para “averiguar” el valor del bit en una posición
0 0 1 0 1 1 1 1
1 1 1 1 1 1 1 0
0 0 1 0 1 1 1 0
Dato1
Mascara
resultado
Supongamos que dato1 =47 y queremos poner en cero el bit menos significativo (LSB) sin alterar los otros bits. Entonces la mascara será 11111110
dato1=dato1&0xFE;
Si se quiere poner en cero los 4 bits mas significativos , entonces la mascara será 0X0F
Y=Y&0x0F ;
Cual será la mascara si se desea poner el bit0 y el bit4 en cero?
0 1 1 0 1 1 0 1
0 0 0 0 1 1 1 1
0 0 0 0 1 1 0 1
Y
Mascara
resultado
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 ENMASCARAMIENTOS
Supongamos que queremos “averiguar” si el bit 2 de una variable esta en cero. La mascara tiene que ser 00000100
0 0 1 0 1 1 1 1
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0
0 0 1 0 1 0 1 1
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0
Supongamos que queremos “averiguar” si el bit5 y el bit7 de una variable esta en cero. La mascara tiene que ser 10100000
0 0 1 0 1 0 1 1
1 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 1 0 0 1 00
1 1
1 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
Note que cuando el resultado es cero, el bit o los bits a “averiguar” son cero. Por lo tanto, la instrucción en C puede ser:
If(var1&0xA0=0) ; // se desea saber si el bit5 y el bit7 están en cero
Note que cuando el resultado es igual a la mascara, el bit o los bits a “averiguar” son unos Por lo tanto, la instrucción en C puede ser:
If(dato1&0x08=8); //se desea saber si el bit3 del dato1 esta en 1
M.C. Arnoldo Ulises Villalobos Guerra
Enmascaramiento con OR:1.- Se utiliza para poner en uno los bits deseados.(sin alterar los otros)
MICROCONTRLADOR ATMEGA8 ENMASCARAMIENTOS
Si se quiere poner en uno el bit 4 , entonces la mascara será 0X10
1 0 1 0 1 0 1 1
0 0 0 1 0 0 0 0
1 0 1 1 1 0 1 1
1 0 1 1 1 0 1 1
0 0 0 1 0 0 0 0
1 0 1 1 1 0 1 1
De tal manera si se desea poner en uno los bit 3 y 6 la mascara será 01001000 y la operación una OR
dato3=dato30x48;
M.C. Arnoldo Ulises Villalobos Guerra
PRACTICA #1DIVIDIR DOS NUMEROS DE 4 BITS, PARA ELLO SE USARA EL PUERTO B, LOS 4 LSB SERÁ El DIVIDENDO LOS 4 MSB SERÁ EL DIVISOR. EL RESULTADO SE MOSTRARÁ EN LEDS CONECTADOS AL PUERTO D, EL COCIENTE EN LOS LSB Y EL RESIDUO EN LOS MSB.
MICROCONTRLADOR ATMEGA8 PRACTICA #1
M.C. Arnoldo Ulises Villalobos Guerra
#include <mega8.h>unsigned char var1,var2,var3,var4;void main(void)DDRB=0x00; //PUERTO B COMO ENTRADAPORTB=0xFF; //ACTIVA LAS RESISTENCIAS DE PULL-UPDDRD=0xFF; //PUERTO D COMO SALIDAPORTD=0x00; //INICIA EL PUERTO D CON CEROSwhile (1) var1=PINB; //lee el puerto B y lo guarda en var1 var2=var1&0xF0; //los bits LSB de var1 los pone en cero var2=var2>>(4); //hace un corrimiento de 4 bits a la derecha var1=var1&0x0F; //pone en cero los bits MSB var3=var1/var2; //cociente de la división lo guarda en var3 var4=var1%var2; //residuo lo guarda en var4 var4=var4<<(4); //corrimiento a la izquierda de 4 bits var4=var4|var3; //en la parte alta el resido y en la parte baja el cociente PORTD=var4; ;
MICROCONTRLADOR ATMEGA8 PRACTICA #1
M.C. Arnoldo Ulises Villalobos Guerra
EXPLICACIÓN DE PROGRAMA
Lo primero que tenemos que hacer es leer el puerto B y guardar ese dato en una variable, es por eso que la primera línea es: var1=PINB;En este caso la instrucción es leer el puerto B y guarda el dato en var1Supongamos que queremos dividir 10/3 entonces la combinación binaria en el puerto B será 00111010. Por lo que tenemos que dar esa combinación con el DIP SWITCH.
La variable “var1” entonces tiene el dato 0x3A. Pero tenemos que separar el divisor y el dividendo. La separación del divisor se realiza con las dos siguientes instrucciones del programa.
var2=var1&0XF0;
var2=var2>>(4); var2=divisor
0 0 1 1 1 0 1 0
Dividendo=10Divisor=3
PB0PB7
0 0 1 1 1 0 1 0
1 1 1 1 0 0 0 0 &0 0 1 1 0 0 0 0var2
var1
0X0F
0 0 0 0 0 0 1 1
MICROCONTRLADOR ATMEGA8 PRACTICA #1
M.C. Arnoldo Ulises Villalobos Guerra
El dividendo se obtiene haciendo ceros la parte mas alta de la variable var1.
var1=var1&0x0F;
Las siguientes instrucciones es para obtener el cociente y el residuo
var3=var1/var2; //cociente de la división lo guarda en var3var4=var1%var2; //residuo lo guarda en var4Después de estas instrucciones var3=3 y var4=1 porque 10/3=3 y sobra 1
Por ultimo tenemos que juntar el resultado (cociente y residuo) en una variable. Hay que recordar que el residuo se desea tenerlos en los MSB entonces haremos un corrimiento a la izquierda de 4 bits
var4=var4<<(4);
0 0 1 1 1 0 1 0
0 0 0 0 1 1 1 1 &0 0 0 0 1 0 1 0var1
var1
0X0F
Var1=dividendo
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
var4
var3 cociente
residuo
0 0 0 0 0 0 0 1
0 0 0 1 0 0 0 0
var4
Var4 después del corrimiento
MICROCONTRLADOR ATMEGA8 PRACTICA #1
M.C. Arnoldo Ulises Villalobos Guerra
Nada mas nos queda realizar una OR para unir en una sola variable el resultado
var4=var4|var3;
Para finalizar solo tenemos que mandar el resultado al puerto D
PORTD=var4;
0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 1
var4
var3 OR
0 0 0 1 0 0 1 1
cocienteresiduo
var4
MICROCONTRLADOR ATMEGA8 PRACTICA #1
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PRIMER PROYECTO
Es hora de realizar nuestro primer proyecto . En primer lugar abra el codevision avr
Una vez abierto hay que crear un nuevo proyecto
Seleccionamos project y ok
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PRIMER PROYECTO
Nos abrirá una ventana en donde nos pregunta que si queremos usar el asistente, le indicamos que si.
Una vez abierto el asistente buscamos nuestro microcontrolador ATmega8
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PRIMER PROYECTO
El asistente es de gran ayuda, pues es donde configuramos varias cosas. En esta primera practica solo tenemos que configurar los puertos. El puerto B lo configuraremos como entrada (con resistencia de pull-up) y el puerto D como salidas.
Configuración de los pines puerto B como entrada y pull-up activada
Configuración del puerto D como salida y valores iníciales en Cero.
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PRIMER PROYECTO
A continuación seleccionamos la pestaña “project information” y le damos un nombre, si queremos podemos poner la versión , comentario y compañía. Y para finalizar la creación de nuestro proyecto seleccionamos “file” Generar, Salvar Y Salir.
Se abrirá una ventana en donde escogeremos el folder destino e introduciremos el nombre . En mi caso observe que he creado una carpeta llamada practicas
Nos saldrán dos ventanas más, solo hay que poner el mismo nombre
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PRIMER PROYECTO
Primero declaramos nuestras variables.
El programa lo escribiremos en la parte inferior dentro del while
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PRIMER PROYECTO
A continuación lo compilamos
Nos saldrá una ventana de información , si no hay errores ni advertencias el proyecto esta finalizado, y podremos grabar nuestro microcontrolador ATmega8 con nuestro primer programa
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PROGRANMACION DEL MICROCONTROLADOR
Cuando compilamos los programas y no aparecen errores ni advertencias el codevision avr nos genera unas carpetas y archivos . Pues el archivo que utilizaremos Para programar se encuentra dentro de la carpeta Exe en donde fue guardado el proyecto.
En mi caso yo guarde el proyecto en una carpeta llamada practicas, pues en esa carpeta es donde se encuentra la carpeta Exe y dentro de ella el archivo que nos interesa con la extensión .hex . A mi proyecto le llame p1, por lo tanto, el archivo que utilizaré para programar el micro será p1.hex
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PROGRANMACION DEL MICROCONTROLADOR
Para pasar el programa al micro conectamos el programador al protoboard y unimos las terminales correspondientes del programador y el microcontrolador. Entre el reset y VCC debe de llevar una resistencia de 10k Ω
PROGRAMADOR
RST
MOSI
MISO
SCKVCC
GND
10KΩ
Una vez hecho lo anterior conectamos el programador al computador por medio del cable USB(si es la primera vez hay que instalar el driver)
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PROGRANMACION DEL MICROCONTROLADOR
El software que utilizaremos para pasar la información de la computadora al programador y de éste al micro se llama AVR Burn-O-Mat
1.- Ejecutar “AVR Burn-O-Mat.exe”Seleccionas el micro y buscamos el archivo a grabar
2,-Después seleccionamos settings y a continuación AVRDUDE
MICROCONTRLADOR ATMEGA8 PROGRANMACION DEL MICROCONTROLADOR
3.- Localiza estos archivos en tu compu. :
avrdude.exe avrdude.conf
(Estos archivos se crearon cuando se instalo el winavr) OJO si no los encuentras te puedes apoyar en la herramienta de busqueda de windows
DESPUES CIERRAS TODO EL BURN Y LO VUELVES A ABRIR4.-Después seleccionas el programador usbasp y port usb
5.- clik OK
Para buscar los archivos
NOTA: esta configuración de opciones (pasos del 2 al 5) solo se hace la primera vez. Después no es necesario hacerla, pues el programa guarda esta información.
M.C. Arnoldo Ulises Villalobos Guerra
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 PROGRANMACION DEL MICROCONTROLADOR
6.- y para programar nuestro microcontrolador Atmega8 seleccionamos WRITE
Si todo sale bien nos aparecerá esta ventana
M.C. Arnoldo Ulises Villalobos Guerra
MICROCONTRLADOR ATMEGA8 REFERENCIAS
REFERENCIAS:
Infante S. David. Notas del curso programación en c de losMicrocontroladores ATMEL. Instituto tecnológico de Morelia.Versión 8.10
Steven f. Barrett and daniel J. PackAtmel AVR microcontroller primer: programming and interfacing
Dhananjay V. GadreProgramming and Customizing the avr Microcontroller
http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_en.html