Por decir algo ©
Resumen microcontroladores, microcontroladores, lo de mayor esencia.
Microcontrolador (uC): Circuito integrado programable capaz de llevar a cabo una determinada tarea. Es como una computadora más chiquita que puede hacer l o que un programa indique, dentro de sus limitaciones físicas.
En un solo integrado tienen CPU, ALU , Flash o ROM, RAM, puertos y diversos periféricos.
Diagrama de bloques de un microcontrolador(no es necesario aprednerse este diagrama)
Ejemplos uC. Existenn en televisores LCD, reproductores dvds, impresoras, celulares,
cámaras digitales, etc.
Por decir algo ©
AVR. Son productos de Atmel que tienen distintas características.
Mas menos memoria, Capacidades ISP (in system programming), Puertos E/S de mas o de menos, Interfaces de comunicación RS232 e I2C, módulos generadores de onda PWM. Cuentan usualmente con un set de 130 instrucciones Estan diseñados para un trabajo optimo con lenguaje C
Arquitectura de los uC
Antes ean Von Neumman, ahora usan arquitectura Harvard. La diferencia es que con Harvard en una memoria se almacenan datos, en la otra el programa. Asi el CPU lee la siguiente instrucción mientras ejecuta una.
Arquitectura Harvard de un microcontrolador Instrucciones RISC Reduce Instruction Set computer, significa que tienen instrucciones peladas de saberse para que los vergas programen en ensamblador. CISC (Complex Instruction Set Computer) Instruccines bien cabronas de manejar en ensamblador y por eso se le saca la vuelta usando compilador de alto nivel (a programar en C)
Caracteristicas tons de los AVR (familia Atmel, los que se usan pu es)
Tecnologia CMOS porque consume menos energía. Memoria Flash o ROM, la de datos siempre es SRAM, EEPROM internas Puertos E/S bidireccionales, manipulables pin por pin Timer ’s de alta precisión, muy usado generar ondas PWM(Pulse Width Modulation) útil para controlar velocidad de motor DC. WatchDog (perrote) Monitorea que el AVR este funcionando correctamente y no se cuelgue, es decir si se traba el micro (blue screen) el perrote lo reinicia. ISP (In System Programming). Permite programarlos utilizando interface serial Fuses y Lock bits, sirven para decirle que oscilador usara o si el código se ejecutara después de programarse. Conversores Analogico-digital (ADC)
Por decir algo ©
USART (Universal synchronous asynchronous receiver/transmitter) Para comunicarse mediante los protocolos RS232 (lo soporta la pc, otro uC, etc) Módulo comparador analógico Módulo CAN, facilita la conexión en una red LAN. Módulo USB, se sabe
Clasificación de los AVR
Los megaAVR (los que usamos)
Conocidos como ATmegas Son de 8 bits Tienen 130 instrucciones, pueden llegar a velocidades de 20 MIPS(millones de instrucciones por segundo). Su RAM puede alojar hasta 4 kb (por eso el TJuino se pone sus moños cuando le cargas programas pesados y usais muchas variables)
Por decir algo ©
Para mas especificaciones irse al que se uso Atmega644p
Programadores del uC (no se si venga pero lo básico )
Hay un chingo de programadores e interfaces. Para el LiSANDRA (con la chingadera que no se soldo) se usa el que trae AVR studio, para el Tjuino se usa avr dude, ambos interface USB. Si le interesa ver http://www.cursomicros.com/avr/programadores/interfaces-de-programacion.html
Compiladores Codigo maquina: :020000020000FC :1000000012E01EBF1FEF1DBF36D0F0E0E8E15BD06D
Ensamblador:
Por decir algo © ;-------------definiciones eincludes-----------------------------.INCLUDE "m644pdef.inc" ;-------------init PORTS------------------------------------------sbi DDRC,PORTC4 ;Configuracion del Bit 4 como salida next: sbi PINC, PORTC4 instruccion ;sbi PORTC, PORTC4 ;cbi PORTC, PORTC4
;Usar PINC para conmutar el pin 4, 1 sola
//escribir 0 //escribir 1
;ldi R24, 0x03 //Poner un valor inmediato al registro ;out PORTC, R24 //El valor del registro escribirlo en otro registro rcall delay jmp next ;-------------------------------------------------------------------delay: ; Generated by delay loop calculator ; at http://www.bretmulvey.com/avrdelay.html ; ; Delay 1 600 000 cycles ; 200ms at 8.0 MHz ldi r18, 9 ldi r19, 30 ldi r20, 229 L1: dec r20 brne L1 dec r19 brne L1 dec r18 brne L1 nop ret
Alto nivel (C) #include
void Pause(void); void nop(void); int main(void) { DDRA = 0x01; TCCR0A = 0x00; TCCR0B = (0x03); //Fin de la configuraci DDRA = (PORTA1 | PORTA2); PORTA = PORTA1; PINA = PORTA2; while(1) { /* encender bit 0 */ PORTA = PORTA1; PINA = 0x01; Pause();
// Prototipo de funci
// PA0 salida de se
//Bit 0 y Bit 1 como salida //Escribir 1 en el bit 0 //Conmutar el bit 1 // Loop forever
// Conmutar pin PA0 // Delay de 2499.55 us
Por decir algo © /* apagar bit 0 */ PORTA &= ~PORTA1; } }
void Pause(void) { GTCCR = (1 <
// Resetaer prescaler // Cargar registro TCNT0 // Limpiar flag de desbordamiento del
while((TIFR0&(1 <
void nop(void) { asm volatile("nop"); }
//Instruccion nop de ensamblador
http://www.atmel.com/Images/doc8453.pdf
Por decir algo ©
Arquitectura interna del AVR
Si se quiere ser moto, hay que saberle usar todos los recursos a los micros, pero como a risas le vale verga pues solo veamos que rollo con el chiken. AtmegaXX8 y AtmegaXX4, (XX es los kBytes de memoria flash que tienen), luego tienen
una pinchi letra
V opera bajo voltaje P tecnológica picoPower (consumiendo menos power) A (la de las 4 fantasticas uff)
Caracteristicas mayormente aplicada al atmega que se uso
Tiene las 131 instrucciones, había dicho 130, le dejamos 130 pa que pelear. Tienen 32 registros de trabajo de 8 bits cada uno (R0 a R31) El reloj si queremos correr a 20 MIPS pues se usa uno de 20MHz Tiene 2 Timers de 8 bits(el que usamos), luego se detalla
Por decir algo ©
Tiene 1 timer de 16 bits Timer1. Opera como contador, temporizador, generador de 2 canales de ondas PWM y no se detalla porque nos vale monga El conversor ADC de 10 bits hasta 8 canales de entrada Tiene 2 USART Opera con voltajes entre 1.8V y 5.5v a mayor frecuencia, pues mayor consumo de energía. (20MHz entre 4.5 y 5V) Tiene un Oscilador RC interno configurable como oscilador principal, es decir se le puede programar la frecuencia del CPU. Tiene 6 modos sleep, como el snorlax. Tiene 1 circuito BOD(detector de bajo nivel voltaje) Tiene su perrote Tiene 4 puertos E/S del A al D Su flash tiene un Boot Loader (este permite que el uC se pueda auto-programar sin necesidad de un programador externo, asi es como le chinga el arduino)
Diagrama de pines de los ATmegaXX4 en encapsulado PDIP( se mira mas chingon que el otro encapsulado que esta en el modle, porque esta a color)
Por decir algo ©
Diagrama de bloques de los megaAVR
Es a groso modo el pinchi diagrama, el que concreta para el atmega644p, está en modle y es una pinchi hueva aprendérselo.
CPU, ejecutar las instrucciones de programa, usa una ALU ( C Za B) Memoria FLASH, almacena las instrucciones del programa, se puede reprogramar un chingo de veces hasta que de las nailon (por hasta 10 000 veces) RAM, aloja las variables que procesa la CPU, y se sabía que tipo es. CP, el contador de programa pues indica cual será la siguiente instrucción a ejecutarse. Pila o Stack, segmento en la RAM para guardar el valor del CP y también variables temporales del programa (si es necesario). Periféricos, Timer0, USART, WATCHDOG, Conversores, …… Los puertos pues se ve se siente AVR
ATmega644yy
Memoria FLASH
Memoria RAM
Memoria EEPROM
Pines de E/S
64 K
4K
2K
32
En los AVR las instrucciones de programa son de 16 ó de 32 bits. Pero siendo la gran mayoría de 16 bits, podemos decir que un AVR de N bytes de memoria FLASH puede almacenar hasta N/2 instrucciones de código ensamblador. El boot loader y sección de aplicación
Se puede escribir en la flash incluso en tiempo de ejecución, para la auto-programacion la flash esta dividida en :
Por decir algo ©
Sección de aplicación, destinada a almacenar el programa ejecutado habitualmente Boot loader, almacena código que es pequeño programa para cargar el programa
del AVR en la sección de aplicación. (es como la bios que carga el so) La Sección de Boot Loader siempre se ubica al final de la memoria FLAH pero su tamaño varía de acuerdo con el AVR y con la configuración establecida por los fuses BOOTSZ1 y BOOTSZ0. Memoria SRAM, es de 4 kBytes.
Espacio de la Memoria RAM del megaAVR. Stack, Guarda el valor del contador de programa cuando se ha saltado a una subrutina o
salta a un vector de interrupción, también se usa cuando los registros (32) no son suficientes. Crece y decrece en tiempo de ejecución, se encuentra en la RAM. Registros de trabajo y punteros X, Y , Z
Los registros tienen los datos que el CPU accesa más inmediato. (es mas rápido ir a un registro que direccionar a la RAM).
Por decir algo ©
Los registros los usa la ALU para las operaciones como se debe. Importante, los primeros 16 registros no admiten instrucción ldi (cargar valor inmediato a registro). Registros del R26 al R31, pueden trabajar con punteros de 16 bits.
Los Registros de Trabajo de los AVR. Los punteros X (R27yR26),Y (R29yR28),Z (R31yR30) pues como se dijo son de 16 bits, conforman el direccionamiento indirecto más potente, útil para mover grandes bloques de datos. Luego de esto hay un chingo de registros y fuses que ni se vieron ni se verán.
Por decir algo ©
Puertos de los AVR
Ahí se conectan leds por ejemplo, se tienen 4 de 8 bits cada uno. Los pines tienen nombres compuestos ejemplo PC4 ADC4/SDA/PCINT12. Significa que tienen funciones multiplexadas. Ejemplo el pin PC4 ademas de ser pin digital, puede funcionar como canal 4 del conversor analógico digital ADC4, como línea serial de datos SDA o como pin de interrupción por cambio de estado PCINT12. Cuando se controlan con PORTx, PINx y DDRx, se usan como E/S generales. Los pines pierden su función cuando un módulo lo utiliza, ejemplo los que usa el USART. Pin de salida voltaje llega a Vcc, pin de entrada soporta desde 0.5V Corriente pin puede llegar a 20mA hasta picos de 40mA. La suma de corriente suministrada o recibida de los pines no debe ser mayor a 100mA
Resistencias de Pull-up
En sus puertos los uC tienen transistores que funcionan como resistencias de pull-up (resistencias en los pines de salida para asegurar que esa esa señal no quede en un estado flotante). Los pull-ups se pueden habilitar pin por pin, únicamente para pines de entradas (en salida quedan deshabilitados).
Por decir algo ©
Su configuración de los puertos.
Cuando los pines trabajan como entradas y salidas generales su control descansa principalmente en los Registros de E/S MCUCR, DDRx, PORTx y PINx, donde x puede ser A, B, C o D. Del registro MCUCR solo interviene el pin PUD, cuya función es deshabilitar las pullups(resistencias en los pines de salida para asegurar que esa esa señal no quede en un estado flotante) de todos los pines cuando PUD = 1. Si PUD = 0, la habilitación de las pull-ups todavía requiere de cierta configuración por parte de los registros DDRx, PORTx y PINx. Cada puerto tiene sus correspondientes registros DDRx, PORTx y PINx, ejemplo el puerto C. DDRC
PINC
PORTC
DDC7
DDC6
DDC5
DDC4
DDC3
DDC2
DDC1
DDC0
PINC7
PINC6
PINC5
PINC4
PINC3
PINC2
PINC1
PINC0
PORTC7
PORTC6
PORTC5
PORTC4
PORTC3
PORTC2
PORTC1
PORTC0
El registro PORTx es para escribir datos en los pines del puerto x que están configurados como salida. Ése es su uso habitual. Sin embargo, escribir en los bits de PORTx cuyos pines estén configurados como entradas significa activar o desactivar las pull-ups de dichos pines. Ésta es la segunda función de PORTx. Leer el registro PORTx solo significa obtener el último valor que se escribió en este registro.
El registro PINx es para leer el estado de los pines del puerto x, sin importar si los pines están configurados como entradas o como salidas. La función alternativa de este registro es para conmutar el estado de los pines configurados como salidas cuando se escribe un 1 en su bit correspondiente de PINx.
El registro DDRx(Data Direction Register = Registro de Dirección de Datos) es para configurar la dirección del puerto x, es decir, para establecer cuáles pines serán entradas y cuáles serán salidas. Después de un reset todos los puertos inician con sus pines configurados como entradas, pero se pueden reconfigurar en cualquier punto del programa.
Si se escribe un 0 en un bit de DDRx, entonces el pin correspondiente en el puerto x será de entrada y si se escribe un 1, el pin será de salida. 0 → entrada 1 → salida
Por decir algo ©
Por ejemplo, si escribimos el valor 11110000 en DDRC, entonces los cuatro pines menos significativos (PC0-PC3) serán entradas digitales y los cuatro pines más significativos (PC4-PC7) serán de salida. Si escribimos 11111111 en DDRC, todos los pines del puerto C serán de salida, y si escribimos 00000000 en DDRC todo el puerto C será de entrada. La asignación de lo expuesto es lo siguiente: DDRA = 0xFF; // 0xFF = 0b11111111 DDRB = 0x00; // 0x00 = 0b00000000
Luego podremos leer y escribir en los puertos mediante PORTA y PINB, así. unsigned char regval; PORTA = 0x73; // Escribir 0b01110011 en el puerto A regval = PINB; // Leer puerto B
Ahora sabemos que puede existir configuración entrada, salida o mixta pero también existe el pin PUD, para habilitar las resistencias de pull-up y conseguir hasta un tercer estado para saber más, tendremos que valernos de una tabla para no enredarnos. Caso
Bit en DDRx
Bit en PORTx
Bit PUD (en MCUCR)
Dirección de Pin
Pullup
1
0
0
X
Entrada
No
2
0
1
0
Entrada
SÍ
3
0
1
1
Entrada
No
4 5
1 1
0 1
X X
Salida Salida
No No
Estado de Pin
Tri-Estado (Alta impedancia) Alto, debido a la pull-up. Tri-Estado (Alta impedancia) Bajo (0 lógico) Alto (1 lógico)
Si escribimos en PINx o si leemos de PORTx.
Casos 4 y 5. Son los más simples. Si un pin está configurado como salida, de ningún modo tendrá pull-up y su estado de salida será 1 ó 0 lógico, dependiendo del valor escrito en su respectivo bit de PORTx. Caso 1. Si un pin está configurado como entrada y su bit respectivo en PORTx vale 0, el pin tampoco tendrá pull-up y su estado será de alta impedancia. Caso 2. Si un pin está configurado como entrada y su bit respectivo en PORTx vale 1, el pin tendrá pull-up y su estado se leerá como 1 lógico (por la pull-up), siempre que el bit PUD del registro MCUCR valga 0. Caso 3. Raramente se suele poner PUD a 1, pero si se hace, se deshabilitarán las pull-ups de todos los pines. Por tanto los pines de entrada serán siempre de alta impedancia.
Por decir algo ©
Por decir algo ©