como empezar a programar en avr

hola que tal soy nuevo en la comunidad, soy aficionado de la electronica, y quisiera adentrarme en la programacion de avr's cuento con una tarjeta programadora y me gustaria empezar a iniciar proyectos con un atmega32 ya que es el que venia con la tarjeta, pero nose por donde empezar, me gustaria me recomendaran un tutorial o manual donde encontrar informacion sobre software (tengo el avr studio 4) me lo baje ;), tambien sobre los lcd de 2x16, ojala me puedan ayudar, gracias, saludos!!
 
En este foro hay algunos manuales y datos puestos que pueden servirte de ayuda.

Personalmente, yo empezaría por instalarme el WinAVR, gratuito, para programar con el AVRStudio 4.

Tampoco estaría mal que comentases o pusieras más información sobre que tarjeta tienes y cómo lo haces para programar el micro.

Si no se te da mal el inglés, en www.avrfreaks.net encotrarás mucha información.

Y si tienes más dudas específicas, siempre puedes preguntar por aquí, que hay algunos que trabajamos y conocemos estos micros.
 
hola, gracias por la respuesta, seguiré informandome y buscando manuales de ayuda, aun que como decia, soy nuevo y nunca he programado un micro, cuento con una tarjeta de mikroelektronika (easy avr4), a penas estoy leyendo el manual para poder hacer las configuraciones necesarias para trabajar en ella. Lo primero que quiero hacer es trabajar con la programacion para luego empezar a meterle la informacion al micro y hacerlo tal vez visible en un lcd 2x16, ufff.... espero que sea tan facil como lo escribi...
saludos!

Bien pues ya he empezado a hallar información, aqui mismo. hay gente que ha querido hacer un manual de avr, es bueno para los que empezamos (como yo), me decidi a trabajar con el lenguaje ASM, hace algun tiempo (mucho) realice algunos programas en c, pero no sé si sea lo mismo trabajar "avr c", asi que creo q esa es la razon por la que trabajaré con asm.

He visto ya algunos ejemplos de codigos, los entiendo al 50% ya que no comprendo bien lo de las subrutinas y ciclos, lo de los registros voy avanzando, he leido sobre PORTx, DDRx y PINx, les recuerdo que me interesa leer pines, estoy trabajando en ello.
otra de las razones para trabajar con asm, es que consegui el datasheet del atmega32 en español, si alguiel lo quiere, lo pondre en pdf.

Y bueno si alguien me puede ayudar con un codigo algo asi como un "hola mundo" para empezar a trabajar con el lcd 2x16, se lo agradeceria.

He programado ya el atmega con un programa que halle aqui, una suma de hexadecimales, y me funciona bien, gracias a la matriz de leds que trae la tarjeta puede ver los pines que funcionan, bueno queda esa pequeña peticion, gracias.
 
Si no es mucha molestia... poner el enlace donde se encuentre la informacion tecnica de tu tarjeta.
Necesito saber como viene conectado la pantalla al AVR para configurar una rutina que tengo que te posteare consecuentemente.
Explicarte el funcionamiento de la pantalla, es un poco complicado de principio, ya que seguramente estara operando en modo de 4 bits, y hay que darle parametros de inicialización, adicionalmente que requiere tiempos muertos para que la pantalla procese los comandos.
Te anexo un documento con informacion de esa pantalla y leas a que me refiero. Para suerte lo tengo en español.
Salu2!
 

Adjuntos

  • display.pdf
    142.3 KB · Visitas: 161
Si gracias, de pelos!!, mira tengo en pdf el manual de la tarjeta (no encuentro como adjuntarlo, asi que dejo el enlace): http://www.mikroe.com/pdf/easyavr4_manual.pdf

Si de hecho he visto que la tarjeta tiene la opcion de hacer de 4 y 8 bits, eso se me ha complicado un poco entenderlo, y ademas que casi todos los ejemplos que he visto por aqui son mandados a otro puerto, (la tarjeta ocupa unicamente el puerto A para y dos del pto D para uso del lcd 2x16.
agradesco la informacion del LCD. le dare una leida para comprender mejor esta parte y ojala posteriormente me puedan apoyar con las subrutinas, saludos!
 
Este codigo corresponde para los AVR.

Esta hecho para trabajar en modo de 4 bits y asi usar un solo puerto para control y datos.

Ahora a ti te toca estudiar el codigo porque si no me regañan los programadores si te doy todo hechesito y listo. Encontre otro post donde hablan del display. Te recomiendo que lo busques. Dan tambien unos codigos en C.

Ahi donde dice direccion del puerto, debes de poner la direccion fisica del puerto donde esta conectado, al parecer es el puerto A, no recuerdo bien cual puerto era cuando ojie tu manual.

Saludetes

Código:
LDI R18, $35
STS $D0, R18        ;LOCALIDAD DE LA DIRECCION DEL PUERTO LCD 


; envia a pantalla un par de digitos hexagesimales, R20 es el registro con el par de digitos, Z el puerto
printdig2hex:
 PUSH R16
 PUSH R28
 PUSH R29
 PUSH R30
 PUSH R31
 push R20
 push R20
 LDI R16,$00
 lsr R20
 lsr R20
 lsr R20
 lsr R20
 PUSH R30
 PUSH R31
 LDI ZL, LOW(TABLAASCCI) ;EL COMPILADOR HACE UN CORRIMENTO LOGICO A LA LEFT
 LDI ZH, HIGH(TABLAASCCI)
 CLC
 ROL R30
 ROL R31	
 ADD R30,R20
 ADC R31,R16
 LPM R20,Z	
 POP R31
 POP R30
 RCALL wdata
 pop R20
 andi R20,$0f
 PUSH R30
 PUSH R31
 LDI ZL, LOW(TABLAASCCI) ;EL COMPILADOR HACE UN CORRIMENTO LOGICO A LA LEFT
 LDI ZH, HIGH(TABLAASCCI)
 CLC
 ROL R30
 ROL R31
 ADD R30,R20
 ADC R31,R16
 LPM R20,Z	
 POP R31
 POP R30
 RCALL wdata
 pop R20
 POP R31
 POP R30
 POP R29
 POP R28
 POP R16
 ret

; envia a pantalla un par de digitos decimales, R20 es el registro con el par de digitos, Z el puerto
printdig2dec:
 push R20
 push R20
 lsr R20
 lsr R20
 lsr R20
 lsr R20
 ori R20,$30
 RCALL wdata
 pop R20
 andi R20,$0f
 ori R20,$30
 RCALL wdata
 pop R20
 ret


; posiciona el cursor en una localidad de la pantalla, R20 es el registro con la localidad en pantalla y Z el puerto donde esta el display
setposchar:
 push R20
 ORI R20,$80
 RCALL wcom
 pop R20
 ret


; inicializa la pantalla con envio de 4 bits, Z la localidad del a pantalla
pantallaset:
 push R20
 push R21
 push R22
 LDI R21, $04
 RCALL retarshort
 LDI R20,$00
 st Z,R20
 RCALL retarshort
 LDI R20,$20
 ST Z, R20
 RCALL retarshort
 ADD R20, R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 LDI R20,$80
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 LDI R20,$00
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 LDI R20,$60
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 LDI R20,$00
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 ; 0f = cursor + blink   0e = cursor  0c = no cursor
 LDI R20,$E0
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 POP R22
 POP R21
 POP R20
 ret

; borra el display y pone el cursor en la posicion 0, Z la localidad de la pantalla
borradisp:
 push R20
 push R21
 push R22

 LDI R20, $00
 LDI R21, $04
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 LDI R20, $10
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20, R21
 ST Z, R20
 RCALL retarshort
 LDI R20,$00
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20, R21
 ST Z, R20
 RCALL retarshort
 LDI R20, $20
 ST Z, R20
 RCALL retarshort
 add R20, R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 POP R22
 POP R21
 POP R20
 ret

; escribe un caracter en la pantallla, R20 el caracter, Z la localidad dela pantalla
wdata:
 push R20
 push R21
 push R22
 PUSH R20
 push R20

 LDI R21, $04
 LDI R20, $01
 ST Z, R20
 POP R20
 
 andi R20,$f0
 ORI R20, $01 
 ST Z, R20
 RCALL retarshort
 add R20, R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 pop R20         
 LSL R20
 LSL R20
 LSL R20
 LSL R20
 andI R20,$f0
 ORI R20,$01 
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 POP R22
 POP R21
 POP R20
 ret

; envia un comando a la pantalla matricial, R20 el comando, Z la localidad dela pantalla
wcom:
 push R20
 push R21
 push R22
 PUSH R20
 push R20
 
 LDI R21, $04
 LDI R20, $00
 ST Z, R20
 POP R20
 
 andi R20,$f0
 ST Z, R20
 RCALL retarshort
 add R20, R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 pop R20         
 LSL R20
 LSL R20
 LSL R20
 LSL R20
 andI R20,$f0
 ST Z, R20
 RCALL retarshort
 add R20,R21
 ST Z, R20
 RCALL retarshort
 sub R20,R21
 ST Z, R20
 RCALL retarshort
 POP R22
 POP R21
 POP R20
 ret           
           

 
retarshort:
 push R25
 LDI R25,$2F
 retb:
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  DEC R25
  BRNE retb
 pop R25
 ret        

TABLAASCCI:

	.DB "0123456789ABCDEF"
 
ok muchas gracias por ese codigo, super! ahora empezare a estudiarlo.. y espero pronto tener respuesta en el lcd, gracias y seguire aqui dando mis avances en avr.
gracias tambien por la informacion del display ahora si ya comprendi mejor su funcionamiento. Saludos!

hola de nuevo, pues ya he hechado a andar el lcd 2x16, con un programa en C, ( a penas empiezo a entender C). Bien empece a trabajar en asm. con ejemplos que encontren en la red, y algunos aqui, he comprendido ciertas instrucciones aun me cuesta trabajo manipular el lcd.

Quisiera saber si alguien ha trabajado ya con este reloj (DS1307) y que me pueda orientar hacia la programacion para hecharlo a funcionar, he estado trabajando con lenguaje asm, pero los codigos que he encontrado en la red,todos estan en C, y bueno empiezo a entender un poco de C, aun no estoy muy adentrado.
Ojala alguien tenga informacion de como hacerle, gracias, saludos !!

Aqui pondre un ejemplo que encontre parece bueno, hay q saber un poco de ingles, pero se entiende, yo soy nuevo y hay cosas q no entiendo del programa, asi que sigo solicitando su apoyo, gracias.
El ejemplo que pongo es precisamente un ATMEGA32 (con el mismo que intento trabajar), con un DS1307, y un sensor de temperatura, en lo personal me interesa trabajar con el DS1307 y el LCD 2x16, les dejo el enlace para que le hechen un vistaso y me digan si el codigo es correcto y porque hay 3, hay que meter los 3 en un *.hex o que onda?.. saludos!!

aqui esta el enlace...Calendar Digital-RAS | Analog To Digital Converter | Electricity
 
que tal, bueno la verdad no lo entendi al 100, y bueno tengo que considerar que me resulto mas efeciente el otro programa, ya que puedo mostrar exclusivamente el texto que necesito en la pantalla.
Ahora estoy trabajando con los botones, para mostrar tambien texto en la pantalla algo asi como un menu...
opcion 1...
pantalla {fecha}
opcion 2...
pantalla {hora}
opcion3...
pantalla {datos} (x cosa),
pero me surge una duda, debere leer todos los pines que voy a usar para ver si algun boton esta presionado o solo debere configurar para x puerto como entrada, y cuando se presione el pushboton manda a la pantalla(seria mas simple)....
 
Tal vez les sirva un ejemplito que tengo en mi blog. El codigo seria bien simple:

Código:
#include <mega8.h>
#include <delay.h> // Esta se agrega para poder usar el retraso de tiempo
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here

DDRB=0xFF;
PORTB=0x00;

// LCD module initialization

lcd_init(16); //Si es mas grande de 16 caracteres Cambiar el 16 por los 20 o 40 o lo que sea.

while (1) {

      lcd_clear();               //borra la pantalla
      lcd_putsf("Atmega8 LCD");  //Escribe un primer texto
      delay_ms(500);            //Espera 1/2 segundo
      lcd_clear();               //borra la pantalla
      lcd_putsf("Otro texto");   //Escribe un segundo texto
      delay_ms(500);            //Espera 1/2 segundo
      };
}

Si nunca han trabajado con Codevision AVR tal vez necesiten hecharle una mirada a los primeros post.
 
Atrás
Arriba