atmega8

30
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

Upload: jose-maximo-alvarado-oyola

Post on 02-Feb-2016

2 views

Category:

Documents


0 download

DESCRIPTION

características del Atmega8

TRANSCRIPT

Page 1: ATMEGA8

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

Page 2: ATMEGA8

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

Page 3: ATMEGA8

M.C. Arnoldo Ulises Villalobos Guerra

MICROCONTRLADOR ATMEGA8 ESTRUCTURA INTERNA

Page 4: ATMEGA8

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.

Page 5: ATMEGA8

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

Page 6: ATMEGA8

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.

Page 7: ATMEGA8

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

Page 8: ATMEGA8

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

Page 9: ATMEGA8

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

Page 10: ATMEGA8

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

Page 11: ATMEGA8

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

Page 12: ATMEGA8

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

Page 13: ATMEGA8

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;

Page 14: ATMEGA8

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

Page 15: ATMEGA8

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

Page 16: ATMEGA8

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

Page 17: ATMEGA8

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

Page 18: ATMEGA8

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

Page 19: ATMEGA8

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

Page 20: ATMEGA8

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

Page 21: 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.

Page 22: ATMEGA8

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

Page 23: ATMEGA8

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

Page 24: ATMEGA8

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

Page 25: ATMEGA8

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

Page 26: ATMEGA8

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)

Page 27: ATMEGA8

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

Page 28: ATMEGA8

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

Page 29: ATMEGA8

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

Page 30: ATMEGA8

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