Microcontroladores y sistemas embebidos

Unidad 2: Programación C (ATmega)

Ing. Oscar Alonso Rosete Beas

Semana 22 Marzo Rev:3 ciclo 2021-1

oscarrosete.com

oscarrosete.com

Sesiones Previas

Unidad 2. Programación

2.1. Introducción a los lenguajes de programación en microcontroladores.

2.2. Arquitectura y lenguaje de programación Ensamblador.

2.3. Modos de direccionamiento.

2.4. Memoria RAM.

2.5. Lenguaje C.

oscarrosete.com

Agenda

Unidad 3: Recursos de los microcontroladores.

  • 3.1. Puertos paralelo de Entrada/Salida.

  • 3.2. Manejo de Temporización básica y contadores.

  • 3.3. Interrupciones.

  • 3.4. Puertos Seriales.

  • 3.5. Convertidores A-D y D-A.

oscarrosete.com

Competencias de la unidad

  • Identificar los elementos de programación que se utilizan en la implementación de sistemas embebidos con microcontroladores, para conocer la estructura y función de los compiladores, interpretadores, programadores y sus topologías.

 

  • Resumir las características arquitectura de un microcontrolador para comprender su programación en lenguajes de bajo y de alto nivel.

 

  • Realizar Programas en lenguajes de bajo y de alto nivel en aplicaciones de sistemas que muestren las funciones básicas de los microcontroladores.

 

  • Mediante lecturas, investigación documental, exposiciones y prácticas de laboratorio. Con una actitud proactiva, creativa y colaborativa.

oscarrosete.com

ATmega328P en C

oscarrosete.com

+Información

AVR c source (AVRGCC)

Comments

Los comentarios puede tener las siguientes formas:

// [Texto]

 

/*

Texto

Texto continua

*/

oscarrosete.com

Continuación de líneas

Como en lenguaje C, las lineas del codigo fuente pueden continuarse al dejar como el ultimo caracter en  la linea como una diagonal (\).

Decimal (default) 10
Hexadecimal 0x0a
Binario 0b00001000
Octal 077

Constates Enteras en C 

oscarrosete.com

Puedes forzar a una constante a ser Long o unsigned integer agregando una secuencia de uno o mas caracteres al finalizar la constante.

 

U o u para unsigned integer

l o L para Long

Por ejemplo 45U es de tipo unsigned int.

45UL es de tipo unsigned long int

45ull es de tipo unsigned long long int

Tipos de dato enteros

oscarrosete.com

AVR GCC Bits Rango c99 alternate
signed char 8 -128 a127 int8_t
unsigned char 8 0 a 255 uint8_t
short int/short/signed short int/signed short 16 -32768 a 32767
unsigned short int 16 0 a 65535
unsigned int 16 uint16_t
unsigned long 32 uint32_t

También existen: signed int, long int, unsigned long int, long long int, unsigned long long int. Así como tipos de datos alternos presentados en el estandar c99 y disponibles en GCC. u para definir si tiene signo, #_t numero de bits, int para diferenciar entero de decimal.

 

Ejemplo de declaración y definición de variable.

unsigned int bar=42;

Operadores

oscarrosete.com

Operadores bitwise

oscarrosete.com

El operador & (bitwise AND) in C toma 2 números como operandos y realiza la operación AND con cada bit de los 2 números. El resultado de una operación And es 1 si ambos bits son 1.

 

El operador | (bitwise OR) en C toma 2 números como operandos y realiza la operación OR con cada bit de los 2 números. El resultado de la operación es 1 si cualquiera de los bits es 1.

 

El operador ^ (bitwise XOR) en C  realiza la operación XOR con cada bit. El resultado es 1 si los 2 bits son diferentes.

 

El operador ~ (bitwise NOT) en C toma un número y realiza la inversión de todos los bits en el.

Operadores de desplazamiento

oscarrosete.com

El operador << (left shift) en C  hace un desplazamiento a la izquierda de los bits del primer operando, el segundo operando decide la cantidad de espacios a desplazar.

 

El operador>> (right shift) en C  hace un desplazamiento a la derecha de los bits del primer operando, el segundo operando decide la cantidad de espacios a desplazar.

 

Ejemplo

(1<<4)= 0001 0000

 

Palabras clave

De manera similar al lenguaje ensamblador se puede hacer referencia a los registros de los puertos de entradas y salidas haciendo utilizacion de las palabras claves DDR,PIN,PORT.

 

Ejemplos para el ATmega328p:

DDRB,DDRC,DDRD.

PORTB,PORTC,PORTD.

PINB,PINC,PIND

PORTB=2;

PORTC=0b00010000

oscarrosete.com

AVR C

Palabras clave

De manera similar al lenguaje ensamblador se puede hacer referencia a los registros de los puertos de entradas y salidas haciendo utilizacion de las palabras claves DDR,PIN,PORT.

 

Referencia a la posición de los bits específicos del microcontrolador:

PORTB4=5  ;  PINC3, DDRD2;           

Ejemplo:

(1<<PORTB4)=(1<<4)= 0001 0000

DDR2=1 es una operación incorrecta ya que DDR2 es un número, equivalente a escribir 2=1

oscarrosete.com

AVR C

Preprocessor Directives

AVRGCC considera todas las lineas que comienzan con # como su primer caracter una directiva de preprocesamiento.

Para profundizar dar click en la imagen inferior.

oscarrosete.com

AVR C

Setting and clearing bits

Establecer un bit (asignar un 1 lógico):

DDRD = DDRD | (1 << 4);


Vaciar un bit (asignar un 0 lógico):

DDRD &= ~(1<<mySwitch);


Alternar el valor de un bit:

DDRD ^= (1<<mySwitch);


Establecer un conjunto de bits (asignar un 1 lógico):

DDRD = DDRD | (1 << 4)| (1<<3);

oscarrosete.com

Lectura de bits

Lectura de bit individual

status=(PIND & (1<<mySwitch) != 0)

 

Lectura de múltiples bits

if(!(PIND & (1 << PORTD4)) || !(PIND & (1 << PORTD5)) || !(PIND & (1 << PORTD6)) || !(PIND & (1 << PORTD7)))

 

oscarrosete.com

Debouncing

oscarrosete.com

Debouncing

Consideraremos 10 ms de transitorio para eliminar el rebote

oscarrosete.com

Debouncing

Propuesta 1
Detect first edge  from high to low→  do nothing for 10 ms(delay) → read the switch again and if it's low → continue on.
same on button release as long as you see high edge→ 10 ms delay→ read switch, it is high? → Continue on

 

oscarrosete.com

Anatomía del código

oscarrosete.com

oscarrosete.com

+Información

Código de referencia

ATMEL STUDIO DEBUGGING

oscarrosete.com

oscarrosete.com

+Información

ATMEL STUDIO DEBUGGING

ATmega328P Simulación Proteus

oscarrosete.com

ATmega328P Simulación Proteus

oscarrosete.com

oscarrosete.com

ATmega328P Simulación Proteus

oscarrosete.com

ATmega328P Simulación Proteus

ATmega328P Simulación Proteus

oscarrosete.com

oscarrosete.com

ATmega328P Simulación Proteus

Terminals mode

Components mode

oscarrosete.com

ATmega328P Simulación Proteus

Proteus

oscarrosete.com

Simulación de encendido de LED utilizando ATmega328p programado en lenguaje ensamblador.

ATmega328P Simulación Emulare

oscarrosete.com

+Información

Simulación del mismo código en software libre Emulare

Arduino Uno

oscarrosete.com

Relación de pines Arduino Uno/Atmega 328p

oscarrosete.com

Generalidades

Los pins/terminales son cables conectados al microcontrolador.

Son la interfaz del microcontrolador

Los voltajes de los pines son controlados a partir de un "sketch"

oscarrosete.com

Arduino Uno

oscarrosete.com

Los pins/terminales de salida son controlados por el Arduion.

El voltaje es determinado a partir del "sketch"

Otros componentes pueden ser controlados a través de sus salidas.

Arduino Uno

oscarrosete.com

Los pins/terminales de entrada son controlados por otros componentes.

Arduino lee el voltaje en esas terminales

Le permite responder a eventos e información.

Arduino Uno

Digital vs Analógico

 

Algunos pins son únicamente digitales.

  • Lectura digital, salida digital
  • 0 o 5 volts.

Algunos pines pueden ser entradas analógicas

  1. se pueden leer voltajes analógicos en la terminal
  2. Utilizados en sensores analógicos.
  3. Estas terminales están etiquetadas.
  4. Ningún pin puede generar una salida analógica. No cuenta con convertidor Digital-analógico, sin embargo, con PWM se pueden realizar funciones similares.

oscarrosete.com

+Información

ATmega328P (Inside of Arduino Uno)  Tinkercad Simulation

oscarrosete.com

+Información

Made with Slides.com