TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: denos2000 en 16 de Julio de 2005, 14:41:00

Título: tutorial de c para ATMEGA8
Publicado por: denos2000 en 16 de Julio de 2005, 14:41:00
Buenas:

Escribía para preguntar si alguien tiene algun manual de c para usar con el atmel atmega8.

P.D.

Si alguien sabe en c como usar el LCD por favo r que me lo diga.

Gracias.Chica
Título: RE: tutorial de c para ATMEGA8
Publicado por: XiOR en 21 de Julio de 2005, 17:22:00
Hola, te puedo recomendar lo siguiente:

1. Documentación en inglés de la libc del GNU C para AVR (distribución WinAVR):
http://www.xior.org/Doc/ThirdParty/avr-libc-user-manual-1.0.4.pdf.
Incluye librerías de floating point, strings, enteros largos, etc., etc..

2. Compilador WinAVR (con la libc mencionada arriba): http://www.xior.org/Soft/AVRDevTools_Win32/WinAVR-20050214-install.exe

3. Entorno integrado en Español con manejo de proyecto, compilación con una sóla tecla y coloreo de sintaxis: http://www.xior.org/Soft/AVRDevTools_Win32/AvrSide_esp.zip
Antes tenés que bajarte el entorno con el instalador en inglés y pisar el exe. El instalador de la versión base es: http://www.xior.org/Soft/AVRDevTools_Win32/setup_en.exe

Para programar LCDs, FAT, I2C, etc. te recomiendo buscar las librerías AVRLib Procyon, no recuerdo el link pero aparecen el Google.  Son muy completas y están bajo licencia GNU.

Un programa incial en C para el ATMega8 que inicializa un LED y manda un string por la UART lo podés bajar de: http://www.xior.org/Soft/AVRFirmware/XiOR.0107.Test.20050620.zip

Firmware preeliminar de PID y control de motores con PWM para ATMega8, todo en C (WinAVR): http://www.xior.org/Soft/DocRelatedSoftware/XiOR.N-Platform.SpeedControlIntro.Soft.20050324.zip

Y ¡el tutorial en Español de este último firmware con toda la parte matemática está en: http://www.xior.org/Doc/PapersAndWorks/XiOR.N-Platform.SpeedControlIntro.ESP.20050324.pdf!

Saludos,
Julián
www.xior.org
Título: RE: tutorial de c para ATMEGA8
Publicado por: Luis_Chogi en 01 de Diciembre de 2005, 21:41:00
Hola, espero ya tengas resuelto tu problema..

Te comento que yo tengo un programa para manejo de LCD ya que fui a un curso y me lo proporcionaron aunque no se casi nada de estos micros pero lo comparto para quien le sirva.

Saludos y tengo mas programas si los quieren escriban al foro y con gusto los comparto.Divertido
Título: RE: tutorial de c para ATMEGA8
Publicado por: Luis_Chogi en 01 de Diciembre de 2005, 21:46:00
Aqui el programa que mencione anteriormente

#include <./lcd.h>
#include <./timers.h>
#include <avr/io.h>

extern unsigned int bf;//busy flag

/****************************************************
Rutina de encendido/apagado de la linea de control E
****************************************************/
void toggle(void){
   sbi(PORTB,PB7);
   //delay(2);no requerido
   cbi(PORTB,PB7);
}

/****************************************************
Rutina de inicializacion del LCD
****************************************************/
void LCDini(void){

   delay(30);
   PORTD=0x30;
   toggle();
   delay(10);

   PORTD=0x30;
   toggle();
   delay(10);

   PORTD=0x20;//bus 4 bits
   toggle();//***** 1 ****
   delay(10);

   PORTD=0x20;//bus 4bits
   toggle();//***** 2 ****
   //delay(10);
   PORTD=0x80;// 2 LINEAS, 5X7 PUNTOS
   toggle();
   LCDbusy();//delay(10);

   PORTD=0x00;//display on, cursor off
   toggle();//***** 3 ****
   //delay(10);
   PORTD=0xC0;//blink off 0x0E
   toggle();
   LCDbusy();//delay(10);

   PORTD=0x00;
   toggle();//***** 4 ****
   //delay(10);
   PORTD=0x10;// display clear
   toggle();
   LCDbusy();//delay(10);

   PORTD=0x00;
   toggle();//***** 5 *****
   //delay(10);
   PORTD=0x60;// display entry
   toggle();//funciona co LCDhome()
   LCDbusy();//delay(10);//y no con LCDclear()

}

/****************************************************
Escribe un caracter en el display
****************************************************/
void LCDwrite(unsigned char dato){//escribe un caracter al lcd
   volatile unsigned char tmp2;

   tmp2=dato;
   tmp2=tmp2&0xF0;//nibble alto
   dato=(dato&0x0F)<<4;//nibble bajo
   sbi(PORTB,PB6);
   PORTD=tmp2;
   toggle();
   PORTD=dato;
   toggle();
   bf=LCDbusy();//delay(8);
   cbi(PORTB,PB6);
}

/****************************************************
Escribe una cadena de tamaño size con retardo de
milisegundos entre la escritura de cada caracter
****************************************************/
void LCDputs(unsigned const char *msg, unsigned char size,unsigned int ms){
   volatile unsigned char i;
   for(i=0;i<size;i++){
        LCDwrite(*(msg+i));
      delay(ms);
   }
}

/****************************************************
Fija la direccion de escritura en el display
****************************************************/
void LCDaddr(unsigned char addr){
   volatile unsigned char tmp2;
   tmp2=addr;
   tmp2=tmp2&0xF0;//nibble alto
   addr=(addr&0x0F)<<4;//nibble bajo

   PORTD=tmp2|0x80;
   toggle();
   //delay(8);
   PORTD=addr;
   toggle();
   LCDbusy();//delay(8);
}

/****************************************************
Limpieza del display, y regresa a la posicion cero de
memoria, de manera manual encender el cursor y el
display mediante LCDcontrol();
****************************************************/
void LCDclear(void){
   PORTD=0x00;
   toggle();
   //delay(8);
   PORTD=0x10;
   toggle();
   LCDbusy();//delay(8);
}

/****************************************************
Cursor en posicion home
****************************************************/
void LCDhome(void){
//manda cursor a home, la ram no se afecta,
//endender el display, cursor manualmente
   PORTD=0x00;
   toggle();
   //delay(8);
   PORTD=0x20;
   toggle();
   LCDbusy();//delay(8);
}

/****************************************************
lee busy flag, regresa el valor de la direccion RAM
del display
****************************************************/
unsigned char LCDbusy(void){
   unsigned char busy,tmp;
   sbi(PORTB,PB0); //enciende R/W
   cbi(PORTB,PB6); //apaga RS
   DDRD = 0x0F;//cambia las salidas por entradas
   do{
      cbi(PORTB,PB7);
      delay(2);
      sbi(PORTB,PB7);
      busy = PIND;//lee puerto
      delay(2);
      cbi(PORTB,PB7);
      busy = busy&0xF0;//parte alta

      sbi(PORTB,PB7);
      delay(2);
      tmp = PIND;//lee puerto
      cbi(PORTB,PB7);
      tmp = (tmp&0xF0)>>4;//parte baja
      busy=busy||tmp;//byte completo
      tmp=busy&0x80;//enmascara BF
   }while((tmp&0x80)==0x80);
   bf=busy&0x7F;//limpia bf de direccion
   cbi(PORTB,PB0); //apaga R/W
   DDRD = 0xF0; //cambia las entradas por salidas
   return(busy);
Título: RE: tutorial de c para ATMEGA8
Publicado por: nipicopo412 en 08 de Diciembre de 2005, 20:21:00
hola a todos soy nuevo en esto y ando buscando ejemplos de como leer sensores en una placa XiOR 0107 (atmega8) programada en C
salu2 y gracias.
les cuento q estoy usando el AVRSide y el Megaload