domingo, 5 de noviembre de 2017

Programador

En esta serie de ejemplos se realizaran de manera teórica - práctica, se usaran las siguientes herramientas:
  • Circuito Grabador de AVR USBASP---> Link de Descarga, Yo tengo instalado en mi laptop Window8.1 y para poder instalarlo he seguido videos de youtube para que el driver pueda ser reconocido por mi Sistema Operativo.
  • sinaprog 2.1 se va a usar par poder grabar el code al micro y tambien borrarlo si es que se desea y mas cosas.
  • Flowcode V6 para realizar diagrama de Flujos , he usado el programa FlowCode, aquí el Link de descarga.
  • Editor de código--> se usará el Atmel Studio7
Se está usando un Atmega 32A. En argumentos se puso lo siguiente --->avrdude -c usbasp -B 2.0 -p ATMEGA32 -U flash:w:"$(ProjectDir)Debug\$(ItemFileName) .hex":a, tener en cuenta que si se pone ATMEGA32A saldrá error.De lo contrario si es que sale todo bien, saldrá el siguiente mensaje cada vez que le demos click en USBasp avrdude.exe: set SCK frequency to 375000 Hz
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e9502
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: set SCK frequency to 375000 Hz
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: reading input file "D:\Blog de avr\Codigos\led parpadeante\AssemblerApplication1\AssemblerApplication1\Debug\main .hex"
avrdude.exe: error opening D:\Blog de avr\Codigos\led parpadeante\AssemblerApplication1\AssemblerApplication1\Debug\main .hex: No such file or directory

avrdude.exe: input file D:\Blog de avr\Codigos\led parpadeante\AssemblerApplication1\AssemblerApplication1\Debug\main .hex auto detected as invalid format
avrdude.exe: can't open input file D:\Blog de avr\Codigos\led parpadeante\AssemblerApplication1\AssemblerApplication1\Debug\main .hex: No such file or directory
avrdude.exe: read from file 'D:\Blog de avr\Codigos\led parpadeante\AssemblerApplication1\AssemblerApplication1\Debug\main .hex' failed
avrdude.exe: safemode: Fuses OK
avrdude.exe done. Thank you.
el procedimiento esta detallado en este Blogspot.
  • Para instalar XFeatures - Beta y poder visualizar mejor el código:Se abrirá una ventana con las extensiones y actualizaciones disponibles, como se observa ahy bastantes herramientas que se pueden instalar.
Por ejemplo ahy una herramienta que te permite mejorar la visualización del código y comentarios, llamada XFeatures - Beta:
Antes de Instalar la Aplicación

Después de instalar la aplicación

EJEMPLOS BÁSICOS - LED


                                                          PARPADEO DE UN LED

 * trabajando con bits.c
 *El bit 7 del registro DDRC está  configurado como salida
 *parpadeo del bit 7 del puerto c cada 200 ms.
 * Created: 26/05/2017 11:01:29 a.m.
 * Author : EDWARD
 */

#include <avr/io.h>
#define F_CPU 8000000UL// Frecuencia de clock que se va a usar-8MHz.
#include <util/delay.h>

int main(void)
{
   DDRC|=0b10000000;// DDRC=DDRC| (1<<PC7), PC7=7, Bit PC7 configurado como salida
   PORTC=PORTC&~((1<<PC7)|(1<<PC6)|(1<<PC5)|(1<<PC4)|(1<<PC3)|(1<<PC2)|(1<<PC1)|(1<<PC0));
   //configuración inicial estado 0 lógico de los 8 bits.
    while (1)
    {
PORTC|=(0b10000000);// PORTC|=(1<<7), PORTC=PORTC|(1<<PC7), 1 lógico en bit PC7.
_delay_ms(200);//retardo de 200 ms
PORTC&=~(0b10000000);//PORTC&=~(1<<7),PORTC=PORTC&~(1<<PC7),0 lógico en bit PC7.
_delay_ms(200);//retardo de 200 ms
return(0);
    }
}



Parpadeo de Led



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...