Autor Tema: AVR en CodeVisionAVR  (Leído 23776 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: AVR en CodeVisionAVR
« Respuesta #15 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.

Desconectado IngHafid

  • PIC10
  • *
  • Mensajes: 2
Re: AVR en CodeVisionAVR
« Respuesta #16 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.

Desconectado IngHafid

  • PIC10
  • *
  • Mensajes: 2
Re: AVR en CodeVisionAVR
« Respuesta #17 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);

}
}
}

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: AVR en CodeVisionAVR
« Respuesta #18 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.

Desconectado ferbravo29021

  • PIC10
  • *
  • Mensajes: 1
Re: AVR en CodeVisionAVR
« Respuesta #19 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

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: AVR en CodeVisionAVR
« Respuesta #20 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.

Desconectado marulo

  • PIC10
  • *
  • Mensajes: 25
Pregunta de CodeVisionAVR
« Respuesta #21 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;
         
        };
    }     
};

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: AVR en CodeVisionAVR
« Respuesta #22 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.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: AVR en CodeVisionAVR
« Respuesta #23 en: 07 de Octubre de 2011, 02:10:05 »
Una respuesta a un pedido.
Un pwm en atmega168 por timer0.

Desconectado foento

  • PIC10
  • *
  • Mensajes: 1
Re: AVR en CodeVisionAVR
« Respuesta #24 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


 

anything