TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: cristian_elect en 15 de Mayo de 2008, 14:47:47

Título: AVR en CodeVisionAVR
Publicado por: cristian_elect en 15 de Mayo de 2008, 14:47:47
Ya tengo tiempo el este copilador me parece bastante completo, si alguien quiere pongo mi avances aqui.
Pregunten si quieren.
Título: Re: AVR en CodeVisionAVR
Publicado por: migsantiago en 15 de Mayo de 2008, 16:28:02
Hola y bienvenido

Yo creo que depende de ti si quieres publicar algo. Si quieres publicarlo, talvez hoy y mañana nadie lea tu tema, pero alguien en el futuro mediante una búsqueda puede encontrar tu información y la verá de utilidad.

Eres libre de publicar lo que gustes mientras no infrinjas las reglas del foro.

http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1
Título: Re: AVR en CodeVisionAVR
Publicado por: MiCrOtRoNiC en 15 de Mayo de 2008, 21:42:03
Ya tengo tiempo el este copilador me parece bastante completo, si alguien quiere pongo mi avances aqui.
Pregunten si quieren.


claro tu ayuda sobre el codevision sera de mucha ayuda por lo menos yo me estoy iniciando con el si tienes info o algun tutorial bienvenido sea..... :-)
por cierto sabes como hacer un monitoreo de un dipswitch de 4. :?.es para un secuenciador de luces de 16 efectos que estoy haciendo.. :mrgreen:
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 16 de Mayo de 2008, 23:39:12
Tu secuenciador de luces es del esta en la disco.
Por que tengo algo que avance sobre eso. Pero es con control de intencidad luminica por sonido.
Es a 220Vac con triac.
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 17 de Mayo de 2008, 12:06:49
Aqui un ejemplito en CodeVisionAVR para visualisar el valor capturado del ADC0 en LCD modo bus 4bits.
Los 100ms para que pueda ser visto los valores adc.
Recomiendo simular en proteus.

#include <mega8.h>   
#include <delay.h>
#include <stdio.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD //bit0-RS, bit1-RD, bit2-EN, bit3-Libre, bit4-DB4... ,bit7-DB7.
#endasm
#include <lcd.h>
int resul_adc;
char lcd[16];
void main(void){
DDRD=255;
PORTD=0;
DDRC=0;
PORTD=0;
Inicio_ADC:
ACSR=128;//Desactivado los comparadores
ADCSRA=130;//Convertido activado, divicion del clock entre 4
ADMUX=0x04;//ADC0 Aliniado hacia la derecha
SFIOR=8;//Convercion rapida
lcd_init(16);
lcd_putsf("Valor del convertido");
while(1){
if(PINC.1){
ADCSRA|=64;//set bit 6 start adc
delay_us(10);
while(~ADCSRA.4);//Bucle de termino de convercion .Bit 4 tiene ser igual 1
resul_adc=ADCW;//ADCW registro de 16 bits para codevision

lcd_gotoxy(0,1);
sprintf(lcd,"adc=%4d\n",resul_adc);
lcd_puts(lcd);
delay_ms(100);

}
}
}
Título: Re: AVR en CodeVisionAVR
Publicado por: Micro23 en 17 de Mayo de 2008, 22:58:42
Hola gente
Respecto a este compilador he estado buscando una libreria para utilizar USB por software, pero no puedo encontrar nada por ningun lado, no se si habra alguna?, he encontrado para el compilador GCC, peo no para CodeVision. Lo que se me ocurrio es traducirlas de GCC a CodeVision pero no he comenzado, pero si no me queda otra voy hacer el intento.
Saludos, cualquier ayuda sirve.
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 19 de Mayo de 2008, 12:52:42
Que version de CodeVisionAVR tienes el mio tiene librerias para usb y tiene en su lista micros ATMEL con usb2 incorporados.
No lo e utilisado, pero lo voy a ver. Pero el la revista Elektor hay ejemplos usb con Atmega8.
Título: Re: AVR en CodeVisionAVR
Publicado por: Micro23 en 20 de Mayo de 2008, 12:54:55
Hola cristian yo tengo la version 1.25.4.
Estas seguro que las librerias que decis son para utilizar el USB POR SOFTWARE? o sea para conectividad USB para micros que no tienen implementado el hardrare?
Si tenes algun ejemplo ya sea de la revista elektor o de las librerias que decis seran bienvenidos.
Gracias de todos modos
Saludos
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 24 de Mayo de 2008, 00:01:36
Tengo el proteus 7.2 sp6 no tiene nada nuevo con la sp2.
Sobre detector de proximidad ultrasonico primero tengo que diseñar la parte analogica.
El micro tiene que ser direccionado de angulo estrecho. Tendria que diseñarlo.
O si lo tienes la parte analogica seria facil la programación.
Título: Re: AVR en CodeVisionAVR
Publicado por: LABmouse en 24 de Mayo de 2008, 09:36:41
cristian_elect, gracias por aportar programas de ejemplo para quienes tenemos en la lista de cosas por hacer, aprender ATMEL.

SALUDOS!
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 24 de Mayo de 2008, 22:55:50
En mi ejemplo tube un error era ADC4.
A quien le gusta mas programas esta en el foro sonsivri, tiene que inscribirce.
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 13 de Junio de 2008, 21:13:28
Hola creo no hay novedad. Cualquier pregunta mande a mi correo cristian_elect@hotmail.com.
Hay muchas veces que no me puedo conectar con el servidor de todopic.

Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 08 de Agosto de 2008, 23:29:08
Estoy practicando con el copilador IAR para atmega, este copilador me permiter escojer el formato de salida para depurar
para el proteus isis igual como pcwh en pic.
Cuento esto porque no encotraba como depurar en proteus con otros copiladores solo lo hacia con el avr studio 4 pero este no es grafico.
Lo malo del iar que no tiene librerias como del lcd, retardos y no hay mucha ayuda pero e creado librerias.
El copilador es muy estricto lo que se refiere en lenguaje C asi lo recomiendo para lo que tiene un tiempo programando.
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 13 de Agosto de 2008, 14:16:04
Ejemplo de control de un lcd de 4bit en IAR AVR .Crear lcd.c

/* Codigo para manejar LCD 4bits de 2 lineas 20*2 ó 16*2 soporta para iar o comp
   atible con visionavr y Winavr para ATmega8 */
// Modificar esta dirección por la donde se copie el archivo
#include "C:\Documents and Settings\Rapido\Mis documentos\nuevo avr\delay_iar.h"
#ifdef LCD_PORTB      // E=P0 RS=P1 RW=GND pines 4 al 7 bus de datos
#define PORT_LCD PORTB
#define DDR_LCD DDRB
#define FO 0xf0
#define OF 0x0f
#define D 4
#define R 0
#endif

#ifdef LCD_PORTD
#define PORT_LCD PORTD
#define DDR_LCD DDRD
#define FO 0xf0
#define OF 0x0f
#define D 4
#define R 0
#endif

#ifdef LCD_PORTC   // E pin0 RS pin1 RW a tierra ,pin2 a pin5 bus de datos
#define PORT_LCD PORTC
#define DDR_LCD DDRC
#define FO 0x3c
#define OF 0x03
#define D 2
#define R 2
#endif
/* Modo de cursor y movimiento */
#define INCREMENTA_CURSOR  1
#define DECREMENTA_CURSOR  0
#define DESPLASAMINTO  1
#define NORMAL  0


// LCD modo 4bits P.0=e P.1=rs

void _nop(char a){
  while(a){
  asm("nop\n");
  asm("nop\n");
  asm("nop\n");
  asm("nop\n");
  a-=1;
  }
}

void datos(char t){
  char b;
  DDR_LCD=0xff;
  PORT_LCD|=1; // E bit 0 E=1
  PORT_LCD|=2; // RS=1
  PORT_LCD = PORT_LCD&OF;//  data E=P.0 RS=P.1
  b=(t>>R)&FO;
  PORT_LCD |=b;
  _nop(40);
  PORT_LCD &= 254; // desabilita E
  _nop(10);
  PORT_LCD = PORT_LCD&OF;
  PORT_LCD |= 1; // habilita E
  PORT_LCD |= t<<D; // 3 a data E=P.0 RS=P.1
  _nop(40);
  PORT_LCD &= 254;
};


void control(char a){
  char b;
  DDR_LCD=0xff;
  PORT_LCD &=253; // RS=0
  PORT_LCD = PORT_LCD&OF;// 3 a data E=P.0 RS=P.1
  _nop(2);
  PORT_LCD |= 1; // habilita E
  b=(a>>R)&FO;
  PORT_LCD |= b; // 3 a data E=P.0 RS=P.1
  _nop(255);
  PORT_LCD &= 254; // desabilita E
  _nop(255);
  PORT_LCD = PORT_LCD&OF;
  PORT_LCD |= 1; // habilita E
  PORT_LCD |= a<<D;
  _nop(255);
  PORT_LCD &= 254;
}

void lcd_init(){
  char b[]={2,44,12,6,128},i,a;
   DDR_LCD=0xff; //PORT salida
   PORT_LCD&=0x00; // RS=0
   delay_ms(1);
   control(3);
   delay_ms(5);
   for(i=0;i<=4;i++){
     a=b;
     control(a);
     delay_ms(5);
   }
}

void lcd_putsf(const char *a){
  char b;
   b=*a;
   while(b){
  datos(b);
  delay_ms(2);
  a+=1;
  b=*a;
  }
}
void lcd_put(char *a){
  char b;
  b=*a;
  while(b){
  datos(b);
  delay_ms(2);
  a+=1;
  b=*a;
  }
}
void lcd_clear(){
  control(1);
  delay_ms(15);
}

void lcd_gotoxy(char x,char y){
  if((x<=20)&&(y==0)){
    x=128+x;
    control(x);
    delay_ms(1);
  }
  if((x<=20)&&(y==1)){
    x=192+x;
    control(x);
    delay_ms(1);
  }
}
void lcd_putchar(char a){
   datos(a);
   delay_ms(5);
}
void lcd_cursor_i_d_desplazar(char c,char d){   
/* c=1 incrementa cursor c=0 decrementa cursor ,d=1 desplaza cursor cada vez que escribe dato en negro d=0
   modo normal */

   if((c<2)&&( d<2)){
       c=c<<1;
       d=(c|d)|4;
       control(d);
       delay_ms(1);
   }
}
void lcd_cursor_display(char c,char d){  /* c=1 desplaza visualización c=0 cursor, d=1 deplaza derecha d=0 desplaza
    izquierda */
   if((c<2)&&(d<2)){
       c=c<<3;
       d=d<<2;
       d=(d|c)|16;
       control(d);
       delay_ms(1);
    }
}

Para el retardo hacerlo por separado delay.c o delay.h para iar

#include <iom8.h>
#ifndef CLOCK
#define CLOCK 4
#endif

#ifdef CLOCK
// 1ms a 1MHZ
void delay_1mMHZ(){
 asm(
          "push R17\n"
          "push R18\n"
          "ldi  R17, $03\n"
"WGLOOP0:  ldi  R18, $6C\n"
"WGLOOP1:  dec  R18\n"
          "brne WGLOOP1\n"
          "dec  R17\n"
          "brne WGLOOP0\n"
          "pop R17\n"
          "pop R18\n");
}
// ajuste segun lo definido por el #deine CLOCK N,(N=# entero aproximado)
void delay_1ms(){
  char a,t;
  t=(char)CLOCK;
   for(a=0;a<t;a++)
    delay_1mMHZ();
}
// Delay en ms segun el clock en valores enteros preciciòn 99%
void delay_ms(unsigned int t){
  while(t){
    delay_1ms();
      t-=1;
  }
}
#endif

Ejemplo de programa principal

   #include <iom8.h>
#define CLOCK 8
#define LCD_PORTC
#include "C:\Documents and Settings\Rapido\Mis documentos\nuevo avr\iar_lcd.c"


int main(void){
  char a;
  lcd_init();
  lcd_putsf("hola");
  lcd_gotoxy(0,1);
  lcd_putsf("Modo 6 hilos  ");
}

//el pin RW a tierra.
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 26 de Noviembre de 2008, 16:14:31
Para declarar variabl es eeprom, flash y punteros.
ejemplo:
flash char a[2]; // declara variable a array tipo flash dos elementos tipo char.
char flash *p; // puntero tipo flash, se usa para darle valores a las variables tipo flash
char c; // variable tipo auto
p=a;
para escribir
p*=3; //a[0]=3
p++;
p*=5; //a[1]=5
para leer
p=a;
c=*p; // c=3
p++;
c=*p; // c=5
Lo mismo es con eeprom
ves de flash se pone eeprom.
eeprom char d[2];
char eeprom *p1;
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 26 de Noviembre de 2008, 16:28:26
Hay un programa para grabar ATMEL ya viene con cofiguraciones de fuses ya definidas muy util.
Funciona con avrdude bien con stk200, usbasp etc.
Título: Re: AVR en CodeVisionAVR
Publicado por: IngHafid en 19 de Noviembre de 2010, 16:00:21
Hola buen día. Yo soy de guadalajara y tengo un problema hacerca del manejo de CodeVisionAVR.

tengo que utilizar un LCD EA DOGM163 DE 3x16 con un micro ATMEGA 128, pero las configuraciones de LCD que CodeVision trae no me funcionan.
Alguien me podría ayudar a decirme como configuro el LCD para mostrar algun texto. Ademas nunca habia usado codeVision, voy empezando apenas.

Se los agradeceria muchisimo.

Por su atención, MUCHAS GRACIAS.
Título: Re: AVR en CodeVisionAVR
Publicado por: IngHafid en 19 de Noviembre de 2010, 19:28:38
Hola, como estas? tengo unas dudas acerca de la configuración de un LCD EA DOGM163 de 3 x 16. Podrías ayudarme porfavor? esque nunca había manejado CodeVision. O algún tutorial que me puedas proporcionar porfavor



Aqui un ejemplito en CodeVisionAVR para visualisar el valor capturado del ADC0 en LCD modo bus 4bits.
Los 100ms para que pueda ser visto los valores adc.
Recomiendo simular en proteus.

#include <mega8.h>   
#include <delay.h>
#include <stdio.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD //bit0-RS, bit1-RD, bit2-EN, bit3-Libre, bit4-DB4... ,bit7-DB7.
#endasm
#include <lcd.h>
int resul_adc;
char lcd[16];
void main(void){
DDRD=255;
PORTD=0;
DDRC=0;
PORTD=0;
Inicio_ADC:
ACSR=128;//Desactivado los comparadores
ADCSRA=130;//Convertido activado, divicion del clock entre 4
ADMUX=0x04;//ADC0 Aliniado hacia la derecha
SFIOR=8;//Convercion rapida
lcd_init(16);
lcd_putsf("Valor del convertido");
while(1){
if(PINC.1){
ADCSRA|=64;//set bit 6 start adc
delay_us(10);
while(~ADCSRA.4);//Bucle de termino de convercion .Bit 4 tiene ser igual 1
resul_adc=ADCW;//ADCW registro de 16 bits para codevision

lcd_gotoxy(0,1);
sprintf(lcd,"adc=%4d\n",resul_adc);
lcd_puts(lcd);
delay_ms(100);

}
}
}
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 20 de Noviembre de 2010, 01:52:50
En su hoja de datos dice que compatible con hitachi hd44780 entoces debe funcionar si no es asi debes de crear su programa  para controlar.
Título: Re: AVR en CodeVisionAVR
Publicado por: ferbravo29021 en 16 de Marzo de 2011, 12:35:15
oye cristian elect
tienes acaso algun ejemplo para utilizar el usart de un atmega16 con interrupciones solamente para recepcion de datos en modo full duplex
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 16 de Marzo de 2011, 16:40:47
hay dejo un ejemplo con interrupción en receptor.
Es lo que mas se hace. Ahorra tiempo en vez de esperar a la función getchar() hasta que reciba la información, el micro puede hacer otras funciones.
Título: Pregunta de CodeVisionAVR
Publicado por: marulo en 21 de Agosto de 2011, 12:47:13
Buenos dias, es que estoy tratando de hacer la lectura de un teclado matricial y mostrar el valor en pantalla, por medio de un Atmega16, y pues lo estoy programando en Codevison que me parece mas sencilo, lo simulo en proteus y funciona bn, pero a la hora de quemarlo en el microprocesador , voy  hacer la prueba y no me inicia la LCD (esta es de 2*16), no c si sera que me hace falta poner alguna rutina, pues el programa trae unas librerias (alcd,alcd_ks0073, LCD, LCD4X40, LCDSTK), y no c como mas hacerle..AYUDAAAAAAAAAAAAAAAA....Gracias.....

Aca esta el código...

#include <mega16.h>
#include <delay.h>
#include <stdio.h>

// Alphanumeric LCD functions
#include <alcd.h>

// Declare your global variables here
typedef unsigned char byte;
unsigned char scan_key(void)
{
    while(1){
        PORTB=0X80;
        if (PINB.0)return 13;    //Digito A
        if (PINB.1)return 8;     //Digito B
        if (PINB.2)return 9;     //Digito C
        if (PINB.3)return 10;    //Digito D
        PORTB=0X40;
        if (PINB.0)return 7;     //Digito 3
        if (PINB.1)return 0;    //Digito 4
        if (PINB.2)return 6;     //Digito 9                                 
        if (PINB.3)return 11;    //Digito #                         
        PORTB=0X20;
        if (PINB.0)return 4;     //Digito 2
        if (PINB.1)return 2;     //Digito 5
        if (PINB.2)return 3;     //Digito 8
        if (PINB.3)return 12;    //Digito 0
        PORTB=0X10;
        if (PINB.0)return 1;     //Digito 1
        if (PINB.1)return 5;     //Digito 6                                                                         
        if (PINB.2)return 14;    //Digito 7
        if (PINB.3)return 15;    //Digito *
    };
    delay_ms(20);
}

void main(void)
{
unsigned char i;
PORTB=0x00;
DDRB=0xF0;               //lee teclado

lcd_init(32);

lcd_gotoxy(0,0);
lcd_puts("Conversor AC-AC");

    while(1){
        i=scan_key();
        switch(i){
         case 0:
            lcd_gotoxy(1,1);
            lcd_puts("4");
            break;
           
         case 1:
            lcd_gotoxy(1,1);
            lcd_puts("1");
            break;
           
         case 2:
            lcd_gotoxy(1,1);
            lcd_puts("5");
            break;
           
         case 3:
            lcd_gotoxy(1,1);
            lcd_puts("8");
            break;
           
         case 4:
            lcd_gotoxy(1,1);
            lcd_puts("2");
            break;
           
         case 5:
            lcd_gotoxy(1,1);
            lcd_puts("6");
            break;
           
         case 6:
            lcd_gotoxy(1,1);
            lcd_puts("9");
            break;
           
         case 7:
            lcd_gotoxy(1,1);
            lcd_puts("3");
            break;
           
         case 8:
            lcd_gotoxy(1,1);
            lcd_puts("B");
            break;
           
         case 9:
            lcd_gotoxy(1,1);
            lcd_puts("C");
            break;
           
         case 10:
            lcd_gotoxy(1,1);
            lcd_puts("D");
            break;
           
         case 11:
            lcd_gotoxy(1,1);
            lcd_puts("#");
            break;
           
         case 12:
            lcd_gotoxy(1,1);
            lcd_puts("0");
            break;
           
         case 13:
            lcd_gotoxy(1,1);
            lcd_puts("A");
            break;
           
         case 14:
            lcd_gotoxy(1,1);
            lcd_puts("7");
            break;
           
         case 15:
            lcd_gotoxy(1,1);
            lcd_puts("*");
            break;
           
         default:
            break;
         
        };
    }     
};
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 21 de Agosto de 2011, 23:31:23
Aquí en el foro siempre e facilitado los ejemplos dándolo completo con armado en el simulador para hacer las pruebas mas rápido.
Dando solo el código tengo el trabajo de completarlo.
Las librerías del codeVisionAVR del LCD funcionan bien en la practica debe ser las conexiones.
Título: Re: AVR en CodeVisionAVR
Publicado por: cristian_elect en 07 de Octubre de 2011, 02:10:05
Una respuesta a un pedido.
Un pwm en atmega168 por timer0.
Título: Re: AVR en CodeVisionAVR
Publicado por: foento en 04 de Diciembre de 2012, 16:29:30
Hola amigos soy nuevo en este mundo de la programación de micros;


Pido muy respetuosamente su ayuda ya que tengo el siguiente programa el cual trato de compilar en al AVR y me saca 3 errores

#include <90s2313.h>
// Modulo de funciones alfanumericas del LCD
#asm
.equ __lcd_port=0x18
#endasm
#include <lcd.h>
#include <math.h>
/* [Pin LCD]
1 GND- 9 GND
2 +5V- 10 VCC
3 VLC- Control de contraste del LCD
4 RS - 1 PB0
5 RD - 2 PB1
6 EN - 3 PB2
11 D4 - 5 PB4
12 D5 - 6 PB5
13 D6 - 7 PB6
14 D7 - 8 PB7
*/
#include <delay.h>
// Variables Globales
unsigned char dig[3];
float peso=0,
char palabra;
char mensaje[11]=" 000.00 gr.";
//012345678911
// FUNCIONES
void pantalla_init( void )
{
lcd_init(16); // Inicializa el LCD para 2 lineas y 16 columnas
lcd_clear();
lcd_gotoxy(0,0); // ir a la primera linea del LCD
lcd_putsf("--- BASCULA ---"); // mostrar el mensaje
}
// Funcion para el GRUPO A
float func_grupoA(int palabra)
{
int peso;
peso = 0.0019*pow((float)(palabra),3.0)- 0.1*pow((float)(palabra),2.0)+ 2.0263*(float)(palabra)-
0.0682; //calculo del peso
return(peso);
}
// Funcion para el GRUPO B
float func_grupoB(int palabra)
{
int peso;
peso = 0.3589*(float)(palabra)+6.6144; //calculo del peso
return(peso);
}
void float2int( float pesoF, int &pesoEnt, int &pesoDec )
{
pesoEnt = (int)(pesoF);
pesoDec = (int)((pesoF – (float)(pesoEnt))*100);
return;
}
void separar_dig( int x ) // separa cara digito de un numero entero y los coloca en un vector
{
dig[0]=(unsigned char)((float)(x)/100);
x=x%1000;
dig[1]=(unsigned char)((float)(x)/10);
x=x%100;
dig[2]=(unsigned char)((float)(x));
}
char convert_dig( unsigned char fuente ) //convierte cada elemento de un vector en un numero
{
if (fuente==0) return '0';
else if (fuente==1) return '1';
else if (fuente==2) return '2';
else if (fuente==3) return '3';
else if (fuente==4) return '4';
else if (fuente==5) return '5';
else if (fuente==6) return '6';
else if (fuente==7) return '7';
else if (fuente==8) return '8';
else if (fuente==9) return '9';
}
void mostrar_peso() //muestra en el LCD el peso
{
unsigned char i;
int pesoEnt, pesoDec;
//Usar columnas 1 a 11 de la segunda linea del LCD para el valor del peso
//Convertir float en entero
float2int( peso, pesoEnt, pesoDec );
// asignacion
mensaje[0]=' ';
mensaje[1]=' ';
separar_dig(pesoEnt); // separacion de digitos
for(i=0;i<3;i++) // Valor entero del peso
mensaje[i+2]=convert_dig(dig);
mensaje[5]= '.';
separar_dig(pesoDec); // separacion de digitos
for(i=0;i<2;i++) // Valor decimal del peso
mensaje[i+6]=convert_dig(dig);
mensaje[8]= ' ';
mensaje[9]= 'g';
mensaje[10]= 'r';
mensaje[11]= '.';
lcd_gotoxy(0,1); // ir a la segunda linea del LCD
for( i=0; i<12; i++)
lcd_putchar(mensaje); // mostrar el mensaje
}
void main(void)
{
// Inicicializacion del Puerto B como salida
PORTB=0x00;
DDRB=0xFF;
// Inicicializacion del Puerto B como entrada
DDRD=0x00;
pantalla_init();
while(1)
{
palabra = PIND; //Lee dato proveniente del ADC
if (palabra<25) // Checa el grupo al que pertenece el dato
peso=func_grupoA(palabra);
else
peso=func_grupoB(palabra);
mostrar_peso();
delay_ms(500); // Retardo de 500 ms
};
}

por favor necesito generar el Hex para simular en proteus, gracias