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

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

Desconectado cristian_elect

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: AVR en CodeVisionAVR
« Respuesta #1 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
« Última modificación: 15 de Mayo de 2008, 22:21:57 por migsantiago »

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: AVR en CodeVisionAVR
« Respuesta #2 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:
« Última modificación: 15 de Mayo de 2008, 21:44:28 por MiCrOtRoNiC »

Desconectado cristian_elect

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

Desconectado cristian_elect

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

}
}
}

Desconectado Micro23

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 226
Re: AVR en CodeVisionAVR
« Respuesta #5 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.
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado cristian_elect

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

Desconectado Micro23

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 226
Re: AVR en CodeVisionAVR
« Respuesta #7 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
El pesimista se queja del viento
El optimista espera que cambie
El realista ajusta las velas

Desconectado cristian_elect

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

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: AVR en CodeVisionAVR
« Respuesta #9 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!

Desconectado cristian_elect

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

Desconectado cristian_elect

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

« Última modificación: 13 de Junio de 2008, 22:24:18 por migsantiago »

Desconectado cristian_elect

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

Desconectado cristian_elect

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

Desconectado cristian_elect

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


 

anything