domingo, 8 de enero de 2017

Registros de control de los Puertos

Registros GPIO

Cada uno de los puertos de entrada ó salidas digitales de AVR está asociado con tres (3) registros. Un registro de dirección de datos (DDRx), un registro de pin (PINx) y un registro de puerto (PORTx). Donde x es el puerto A, B, C, etc.

Estos registros cambian el comportamiento de los pines, pueden ser de entrada como de salida.
El ATmega32 tiene 4 puertos de 8 pines cada uno, llamados:

PuertoA(PA) con sus respectivos registros de control DDRA, PORTA y PINA.
PuertoB(PB) con sus respectivos registros de control DDRB, PORTB y PINB.
PuertoC(PC) con sus respectivos registros de control DDRC, PORTC y PINC
PuertoD(PD) con sus respectivos registros de control DDRD, PORTD y PIND

DDRx[Data Dirección Register]
Este registro podrá configurar el puerto o un pin del puerto para que este sea usado como entrada o salida.
IF DDRx =1 THEN
    PORTx = salida

IF DDRx=0 THEN
   PORTx = entrada

Figura1
Ejemplo :
DDRA = 0b11111111; // puerto A se configura como salida
PORTA = 0b11110000; // Establecer los niveles lógicos de los puertos:
DDRB = 0b00000010; // el bit dos del puerto es configurado como salida


 PINX
Este registro PINX mantiene el estado del todos los pines de ese puerto. Lectura del estado de los Bits del puerto.
IF DDRx =1(puerto x configurado como salida) THEN
PINx = este registro x LEE el nivel lógico del bit que esta siendo de salida "expulsando"
IF DDRx=0(puerto x configurado como entrada) THEN
PINx = este registro x LEE el nivel lógico del bit que esta siendo de entrada "entrada"


Figura 2
Ejemplo:
DDRA = 0bx00; // puerto A se configura como entrada
x = PINA; // Lee el contenido del puerto A:
 PORTX
Figura 3
Este registro es usado para dos propósitos:
Primer Propósito
Cuando el puerto es configurado como salida[DDRx=1], el registro PORT controla el estado del pin del puerto(alto o bajo). ESCRIBE ó coloca "1" lógico cuando el estado del bit es alto, ESCRIBE "0" lógico cuando el estado del bit es bajo.
Ejemplo :
DDRA = 0xFF;   // puerto A se configura como salida
PORTA = x;        // variable de salida x se escribe en el puerto A
DDRB = 0bxFF; // puerto B se configura como salida
PORTB =0xFF;  // se escribe FF en el puerto B:
DDRC.0 = 1;     // Pin del puerto C se configura como salida
PORTC.0 =1;    // señal en alto del pin C.0 del puerto C

Segundo Propósito
Cuando algún pin o los pines de AVR [DDRx=0],se han configurado como entradas, solo haci se podrá activar o desactivar los registros internos de PULL-UP(ver figura 4).
Ejemplo :
IF DDRx=0 THEN
PORTx = entrada

  • IF PORTx =1 THEN-->Registro PULL UP= activado

estado por defecto del puerto cambiará a 1, salvo que este conectado a tierra(PULL DOWN activado).

  • IF PORTx =0 THEN-->Registro PULL UP= desactivado

Pin del puerto activado modo Tri stated(alta impedancia)
si el pin esta desconectado y se intentara leer el valor del pin nos daría un valor aleatorio "no predecible"
Ejemplos :
Puerto B como entrada "tri stated"
DDRB = 0x00;                // puerto B como entrada
PORTB = 0x00                //Desabilitar el registro Pull up y hacerlo como "tri state"

Puerto C como entrada, habilitar  PULL-UPS y leer el dato del puerto
DDRC = 0X00;              //Puerto C como entrada
PORTC = 0XFF;            //Habilito todos los PULL -UPS
m= PINC;                      // Leo el dato de los pines del puerto C

La mitad para abajo del puerto A será como salida
La mitad para arriba sel puerto será como entrada, habilitado los Pull-ups
DDRA= 0x0F;
PORTA = 0XF0;

En la figura 4 es una representación de lo explicado anteriormente y en la figura 6 un resumen de las opciones del uso de los 3 registros GPIO

Figura 4
cuando se utilice un ADC, los pines del puerto que esten conectado al chip ADC se deben configurar como entrada "tri stated"

Figura 5

                                                                           Resumen
Figura 6
DDRx = Es un registro de configuración del pin del puerto si es entrada o salida
PORTx = Es un registro para escribir o configurar los registros PULL UP.
PINx = Es un registro de solo lectura de los pines del puerto.
Ejemplo 1:
pondremos todos los puertos como salida

Figura 7


Figura 8

Uso del firmware original de la grabadora USBasp AVR en MX-USBASP (clon chino)

Te vendieron un USBisp pensado que es un USBasp?? Hace 2 meses compré un "USBasp" fui a probarlo y no funcionó....pensé me estafar...