Traduccion o creacion de manual para microcontroladores AVR

Me refiero al IDE de Visual Studio ya que el instalador integra el "Microsoft Visual Studio 2010 Shell" que básicamente es una serie de archivos para que el Atmel Studio se paresca al Visual Studio. En fin, es como programar en VC++.
 
que tal amigos alguien tiene un tutorial de atmel donde vengan los significados de ciertos comandos como por ejemplo lo que es DDRB en un atmel? los tipo de datos, como definir variables etc es que quiero pasar un codigo de atmel para un pic pero tengo duda en algunas parte del programa,el codigo esta en c pero para atmel, gracias
 
por ejemplo lo que es DDRB en un atmel?

Los registros DDRA, DDRB, DDRC y DDRD,
son los registros de Dirección de Datos y sirven para configurar
cada pin del puerto como entrada (con el valor 0)
o como salida (con el valor 1).

Los registros PORTA, PORTB, PORTC y PORTD,
son los registros de Salida/Modo Eléctrico y
cada bit esta asociados a un pin del puerto.
 
Hola gente ! tengo un problema y necesito ayuda.

Estaba haciendo pruebas con el WAV PLAYER AVR usando el MCU ATMEGA328P y las librerias petit FAT de Elm-Chan y pues a nivel de código todo parece bien , ademas con proteus no hay problema y simula perfecto, pero cuando lo pruebo en tabla de nodos es otra cosa... da muchos errores........
despues de un largo analisis al código , me di cuenta que no es el código....

y que el AVR STUDIO no esta compilando algunas funciones ,, ya rebusque las configuraciones del AVR studio, hasta cargue varias librerias, pero nada..... no compila varias funciones unas de ellas son:
_delay_ms(); y _delay_us(); definidas en <util/delay.h>
he usado el AVR studio en muchas ocasiones, pero es primera vez que me pasa esto.... hasta los proyectos que estaban buenos y ya probados.. si los recompilo me dan problemas..

subire los archivos en proteus y avr studio por si alguien quiere verlos
 

Adjuntos

  • avr_player.rar
    167.4 KB · Visitas: 19
Ya revisaste las directivas de optimizacion, yo una ves casi me ahorcaba porque parecia que el codigo se saltaba ciertas cosas, y despues de mucho batallar resulto ser el nivel de optimizacion y mis tecnicas sucias de programacion jejeje
 
Hola amigo Ajna ,,, ya revise los niveles de optimización. he probado con todos...
Os, O0,O1...etc
no me compila las funciones que usan retardos usando _delay_ms y _delay_us .... intentare cambiar la libreria delay.h

consegui otra versión de la libreria delay.h y no me funciono de todo bien... compilo pero no estaban bien los tiempos.

alguno de ustedes que tenga avr studio y que al compilar las funciones _delay_ms y _delay_us no les de problema.... por favor podrian buscar los archivos delay.h y delay_basic.h y subirlos aca...

se los agradeceria mucho..
 
Última edición por un moderador:
A mi me compiló perfectamente en ATMEL Studio 6, probalo para ver si te funciona. Y probalo en la realidad...el simulador no te sirve para este tipo de pruebas...
 

Adjuntos

  • GccApplication1.rar
    144.9 KB · Visitas: 16
que tal foreros después de estar un tiempo tratando de entender un código de atmel no eh podido entenderlo ya que lo que quiero es pasar el código para usar con el compilador c18 de microchip y ya lo pase tal cual simplemente configurando para el c18 y la simulación no me da igual que con el atmel no se cual sea el problema y no es mucho código lo que quiero pasar :( lo que se hace es una señal de clock, datos y reset para poder controlar un modulo de sonido WTV020-SD, en el código de atmel ya esta funcionando, lo encontré en internet y reduje el código a lo mas simple que es lo que yo necesito, pero ya al tratar de pasarlo a un pic18 con el compilador c18 ya no da igual que con la simulación del atmel16 y lo que quiero lograr es eso para asegurarme de que funcione en el pic18f458.

Este es el codigo de atmel16 con atmel studio 6.0

Código:
#include <avr/io.h>
#include <util/delay.h>


#define DI                  PB0
#define CLK         PB1
#define RST         PB2
#define WTV20_PORT    PORTB

int main(void)
{
    DDRB=0B00000111;
    PORTB=0B00000111;
    
    WTV20_PORT&=~(1<<RST);
    _delay_ms(5);
    WTV20_PORT|=(1<<RST);
    _delay_ms(300);
    
    
    WTV20_PORT&=~(1<<CLK);
    _delay_ms(2);

    int i;
    for ( i=15; i>=0; i--)
    {
        _delay_us(50);
        if(([B]0xFFFE[/B]>>i)&0x0001 >0)   //El dato 0xFFFE es el que se sustituye 
        {                                              //para enviar diferentes comandos de 16 bits
                                                    //el 0xFFFE es el comando play
                     WTV20_PORT|=(1<<DI);
        }
        else
        {
            WTV20_PORT&=~(1<<DI);
        }
        _delay_us(50);
        WTV20_PORT|=(1<<CLK);
        _delay_us(50);
        
        if(i>0)
        WTV20_PORT&=~(1<<DI);
        else
        WTV20_PORT|=(1<<DI);
        _delay_us(50);
        
        if(i>0)
        WTV20_PORT&=~(1<<CLK);
        else
        WTV20_PORT|=(1<<CLK);

    }
    
    _delay_ms(20);
    while(1)
    {
        
    }
}
Ahora con el código para c18 es prácticamente lo mismo, pero no sé porqué no me funciona la simulación,
tal vez sea por los corrimientos de los bits que no es igual que un atmel o no sé la verdad ya estoy sin ideas :(
Código:
#include <P18F458.h>
#include <delays.h>

#pragma config OSC=XT, OSCS=OFF    //Cristal como reloj, apaga reloj interno
#pragma config WDT=OFF            //Apaga WDT
#pragma config PWRT=ON, BOR=ON    //Activa Power On Reset
#pragma config DEBUG=OFF          //Desactiva debug
#pragma config LVP=OFF, STVR=OFF  //No reset overflow stack y patita PB5=I/O

#define DI                 PORTBbits.RB0
#define CLK                PORTBbits.RB1
#define RST            PORTBbits.RB2
#define WTV20_PORT        PORTB

    
void main(void)
{

    int i;

    PORTB=0;
    TRISB=0b11111000;
    PORTB=0b00000111;

    WTV20_PORT&=~(1<<RST);            
    Delay100TCYx(50);            // 5 ms
    WTV20_PORT|=(1<<RST);            
    Delay1KTCYx(300);            // 300 ms



    WTV20_PORT&=~(1<<CLK);
    Delay100TCYx(20);                    //2 ms

    
    for( i=15;i>=0;i--)
    {
        Delay10TCYx(5);                                  //50 us
        if((0xFFFE>>i)&0x0001>0)                   //0xFFFE comando a enviar
        {
            WTV20_PORT|=(1<<DI);
                
                                
        }

        else
        {
            WTV20_PORT&=~(1<<DI);
            
                            
        }
        Delay10TCYx(5);                                    //50 us
        WTV20_PORT|=(1<<CLK);
        Delay10TCYx(5);                                     //50 us            
     
        if(i>0)
        WTV20_PORT&=~(1<<DI);
        else
        WTV20_PORT|=(1<<DI);
        Delay10TCYx(5);                                 //50 us                 
    
        if(i>0)
        WTV20_PORT&=~(1<<CLK);
        else
        WTV20_PORT|=(1<<CLK);
                    
    
    }

    Delay100TCYx(200);                    //20 ms
      while(1)
        {    
    
      }
}
Adjunto la simulación del proteus de código para el atmega16 así como del pic18f458 espero me puedan ayudar gracias.
 

Adjuntos

  • Pininodeaudio.rar
    52.6 KB · Visitas: 18
  • WTV020(1).rar
    45.2 KB · Visitas: 19
Última edición por un moderador:
Atrás
Arriba