Está en la página 1de 9

INFORME - TALLER N° 1

SISTEMAS EMBEBIDOS

Descripción breve
Programación y montaje de:
Visualización de secuencias con Leds implementado con el microcontrolador Atmega328

Jairo Nicolas Espinosa Lombana – Luis Fernando Payares Genes


T00030815 – T00038248 nos permita cambiar entre

INTRODUCCION. las dos secuencias.

El contenido de este taller utilizaremos MATERIALES.

el ATmega328p que es un chip  Arduino uno con cable


microcontrolador creado por Atmel y USB(DIP incluido).
pertenece a la serie megaAVR utilizados  Adaptador o fuente 5V -1A
en las placas de Arduino uno. Con la  1 Cristal cuarzo 16MHz.
ayuda de las bases aprendidas en clases  2 Condensadores 20pF.
realizaremos un programa con el fin de  6 leds con resistencias
generar dos secuencias sin la ayuda de 220Ω.
ningún tipo de librería de arduino. Estas
 1 pulsador.
secuencias serán mostradas en 6 leds
 1 resistencia 10KΩ.
colocados en el montaje junto con el
 Protoboard
microcontrolador.

OBJETIVOS.
MARCO TEORICO.
 Implementar un código de
Atmega328: Microcontrolador de alto
manera exitosa sin la
desempeño Atmega328P de 8 bits, con
utilización de las librerías de
arquitectura RISC. El Atmega328P en
arduino.
formato DIP es utilizado en el Arduino
 Diseñar un código el cual
Uno R3. Posee características como: 32
nos permita crear 2
KB de memoria flash; con la capacidad
secuencias para 6 leds que
de leer-mientras escribe, 1 KB de
cuenten con un delay de
memoria EEPROM, 2 KB de SRAM, 23
300mS.
líneas de E/S de propósito general, 32
 Implementar de manera
registros de proceso general, tres
correcta un pulsador, que
temporizadores flexibles/contadores
con modo de comparación, 011000

interrupciones internas y externas, 001100

programador de modo USART, una 000110


000011
interface serial orientada a byte de 2
3. Again, use a 300mS delay between
cables, SPI e I2C, 6 canales 10-bit
values. This sequence keeps going on
Conversor A/D, "watchdog timer"
until the user push the button. At that
programable con oscilador interno, y
moment, the sequence goes back to
cinco modos de ahorro de energía
the initial sequence.
seleccionables por software. El
dispositivo opera entre 1.8 y 5.5 voltios.
ESPECIFICACIONES TÉCNICAS.
Su arquitectura le permite ejecutar
instrucciones en un solo ciclo de reloj,  131 instrucciones de gran
alcanzando una potencia de 1 MIP. alcance
 El chip multiplicador de 2
tiempos
PLANTEAMIENTO DEL PROBLEMA.  Número de pines: 28/32
1. Connect a push-button and 6 leds (with  Max I / O Pins: 23 ➢ SPI: 2
resistors) to the microcontroller.  UART: 1 ➢ ADC: 8 canales,
Create and download a program to the
resolución de 10 bits
microcontroller that perform the
 Comparadores analógicos: 1
following sequence with the leds:
 Flash (Kbytes): 32
100001
 EEPROM (Kbytes): 1
0 1 0 0 11
000110  SRAM (Kbytes): 2
001001  Temperatura Rango: -40 a 85 °
100000 C
2. Use a 300mS delay between values.  Atmega328 PINOUT
This sequence keeps going on until the
user push the button. At that moment,
the sequence change to the following:
10000

1
IMAGEN DEL PROTOTIPO

Figura 1. Atmega328 PINOUT,


tomado de:
https://naylampmechatronics.co
m/atmel/111-atmega328.html

DESARROLLO.

Mediante clases presenciales se nos CODIGO DEL PROYECTO

instruyó para que fuéramos capaces de // TALLER 1


realizar un programa, basado en las // SECUENCIA DE LEDS
especificaciones planteadas en el ACCIONADO POR PULSADOR

(planteamiento del problema), luego de // Estudiantes: LUIS FERNANDO


PAYARES
tener listo el programa se utilizaron los
// JAIRO ESPINOSA
(materiales) que fueron montados en
// UNIVERSIDAD TECNOLOGICA
una protoboard, para verificar que el
DE BOLIVAR
programa cumpliera con los resultados
esperados.
#include <avr/io.h> // Libreria
Permitida Puerto y pines
#include <util/delay.h> // Libreria
Permitida Delay

2
/******** DECLARACION DE PORTC= 0B00100001; // Se le
VARIABLES ********/ indica al controlador encender los
leds de acuerdo a la configuracion
int secu; // Indicador de Secuencia
(0-> Sec 1 ; 1-> Sec2) _delay_ms (300); // Delay de
300ms
}
else{ // Sino (al presionar
void setup() {
pulsador...)
secu=1; // secu=1 ->
/************* CONFIGURACION SECUENCIA 2
PINES *************/
break; // // Se corta la
DDRC= 0B00111111; // PC0-5 secuencia y sale del ciclo while
Salidas para continuar a la secuencia #2

DDRD= 0B00000100; // PD2 }


Entrada Pulsador
if ( PIND & (1<<PD2) ){
PORTD |= (1<<PD2); // Activacion
secu=0;
de Resistencia Pull-Up
PORTC= 0B00010010;
secu=0; // Indicador para
iniciar en SECUENCIA 1 _delay_ms (300);
} }
else{
void loop() { secu=1;
break;
/********** SECUENCIA 1 **********/ }
while(secu==0){ // Condición y if ( PIND & (1<<PD2) ){
repetición Para SECUENCIA 1
secu=0;
if ( PIND & (1<<PD2) ){ // Este
PORTC= 0B00001100;
condicional entra a funcionar
cuando no se presiona en _delay_ms (300);
interruptor en el circuito
}
secu=0; // La variable se
mantiene para seguir mostrando la else{
secuencia #1 secu=1;
break;

3
} break; // Se corta la
secuencia y sale del ciclo while
if ( PIND & (1<<PD2) ){
para continuar a la secuencia #1
PORTC= 0B00010010;
}
_delay_ms (300);
if ( PIND & (1<<PD2) ){
}
secu=1;
else{
PORTC= 0B00011000;
secu=1;
_delay_ms (300);
break;
}
}
else{
}
secu=0;
break;
/********** SECUENCIA 2 **********/
}
while (secu==1){ // Condición y
if ( PIND & (1<<PD2) ){
repetición Para SECUENCIA 2
secu=1;
if ( PIND & (1<<PD2) ){ // Este
condicional entra a funcionar PORTC= 0B00001100;
cuando no se presiona en
_delay_ms (300);
interruptor en el circuito
}
secu=1; // La variable se
mantiene para seguir mostrando la else{
secuencia #2
secu=0;
PORTC= 0B00110000; // Se
le indica al controlador encender break;
los leds de acuerdo a la }
configuracion
if ( PIND & (1<<PD2) ){
_delay_ms (300); // Delay de
300ms secu=1;

} PORTC= 0B00000110;

else{ // Sino (al presionar _delay_ms (300);


pulsador...) }
secu=0; // secu=0 -> else{
SECUENCIA 1
secu=0;

4
break; if ( PIND & (1<<PD2) ){
} secu=1;
if ( PIND & (1<<PD2) ){ PORTC= 0B00011000;
secu=1; _delay_ms (300);
PORTC= 0B00000011; }
_delay_ms (300); else{
} secu=0;
else{ break;
secu=0; }
break; }
} }
if ( PIND & (1<<PD2) ){
secu=1; CONCLUSIONES.
PORTC= 0B00000110;
 Pudimos lograr los objetivos
_delay_ms (300);
descritos de este informe.
}
 En el momento de realizar el
else{ código de programación, tuvimos
secu=0; en cuenta los siguientes aspectos:
break; no utilizar librerías de Arduino y
} realizar el código en lenguaje C
if ( PIND & (1<<PD2) ){ para el entorno de Arduino.
secu=1;  El montaje del circuito en físico se
PORTC= 0B00001100; realizó en protoboard, teniendo en
_delay_ms (300); cuenta que se usaría el Atmega328
} fuera de la placa (hardware)
else{ Arduino Uno. Siendo así debimos

secu=0; agregar: Cristal de cuarzo con

break; capacitores a tierra, resistencia en

} el pin de reset del

5
microcontrolador y cables para la se describía en el diagrama de
interconexión de componentes. Al conexiones). Corregimos esto, y de
momento de montar el circuito, nuevo editamos el código de
accidentalmente se colocaron los programación y nuevamente todo
leds de forma contraria. A esto y funcionó correctamente, como se
siguiendo el diagrama de esperaba.
conexiones para este montaje, solo  Entendimos que la diferencia entre
pasamos el lado de las resistencias usar las interrupciones y no tener
que iba tierra, a positivo (5V), el necesidad de condicionar todo el
cual funciono, pero no programa, hace que sea más lento,
correctamente. La secuencia no se ya que el programa se hace más
visualizaba como se pedía. Por largo y le resta optimización al
consiguiente, se editó el código de sistema.
programación cambiando los ceros
por unos y unos por ceros en los
“PORTC” que se encuentran dentro
de los bucles, el cual hizo que la REFERENCIAS:
secuencia se visualizara
ATMEGA 328:
correctamente. Al analizar el
montaje en físico nuevamente, http://ww1.microchip.com/downloads/

notamos que los leds estaban en/DeviceDoc/Atmel-7810-Automotive-

conectados incorrectamente y que Microcontrollers-

los terminales de las resistencias si ATmega328P_Datasheet.pdf

iban a tierra (como originalmente

También podría gustarte