Microcontroladores
Unidad I. Arquitectura de computadoras
Facultad de Ingeniería/Campus Mexicali
Ing. Oscar Alonso Rosete Beas
Sesion 14 Rev:2 ciclo 2020-1
04/17/2020
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
Extraído de https://gcc.gnu.org/wiki/avr-gcc
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
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
- se pueden leer voltajes analógicos en la terminal
- Utilizados en sensores analógicos.
- Estas terminales están etiquetadas.
- 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
Copy of Atmega328p c 1
By oscar_rosete
Copy of Atmega328p c 1
- 232