problema de prueba del microcontrolador AVR

0

Recientemente, mi microcontrolador no ejecuta ningún programa, estoy probando el siguiente código:

#include <mega32.h>
#include <delay.h>
#define xtal 16000000
void main(void)
{
    DDRA=0xFF;
    DDRB=0xFF;
    DDRC=0xFF;
    DDRD=0xFF;

    while (1)       
    {
        PORTA=0x00;
        PORTB=0x00;
        PORTC=0x00;
        PORTD=0x00;
        delay_ms(500);
        PORTA=0xFF;
        PORTB=0xFF;
        PORTC=0xFF;
        PORTD=0xFF;
        delay_ms(500);
    }
}

He probado cuatro controladores diferentes, tanto mega32a como mega16a. El código es compilado por CodeVisionAVR Evaluation y programado por Atmel Studio 6.1 (también he probado PROGISP). El programador es una programación original MK2 e ISP.

Fusebits:

  • bajo: 0xEF
  • Alto: 0xC9

Reloj de cristal interno y externo probado. LED con 220 \ $ \ Omega \ $ resistencia conectada a un pin.

Otro código de prueba:

Cuando programo el siguiente código:

#include <mega32.h>
#include <delay.h>
void main(void)
{
    DDRA=0xFF;
    DDRB=0xFF;
    while (1)       
    {
        PORTA=0x00;
        PORTB=0x00;
        delay_ms(500);
        PORTA=0xFF;
        PORTB=0xFF;
        delay_ms(500);
    }
}  

Todos los LED están apagados, y cuando programo el siguiente código:

#include <mega32.h>
#include <delay.h>
void main(void)
{
    DDRA=0xFF;
    DDRB=0xFF;
    while (1)       
    {
        PORTA=0xFF;
        PORTB=0xFF;
        delay_ms(500);
        PORTA=0x00;
        PORTB=0x00;
        delay_ms(500);
    }
}

Todos los LED están encendidos. ¿Cuál es el problema? Otra prueba:

#include <mega32.h>
#include <delay.h>
#define xtal 16000000
void main(void)
{
    DDRA=0xFF;
    DDRB=0x01;
    while (1)       
    {
       PORTA=0x00;
       PORTB=0x02;
       delay_ms(500);
       PORTA=0xFF;
       PORTB=0x00;
       delay_ms(500);
    }
}

El segundo pin del puerto B está en condiciones de poca luz y PORTB=0x00; después de delay_ms(500); No importa si es: 0x00; o 0xFF;

    
pregunta musefian

1 respuesta

1

De lo que declaró en la última declaración sobre dos códigos uno con todos los LED encendidos y otro todos apagados, primero asuma que estas condiciones son verdaderas:

  • La programación se realiza sin ningún error y la verificación de los datos con el programador es válida.
  • Has probado diferentes MCU con este problema.
  • Sus MCU no se sobrecalientan y consumen poca corriente. (Sugiero medir el consumo de corriente de MCU. No debe ser cero o cien mili-amperios).

Entonces, el problema se refiere a su reloj. Debido a que la diferencia de sus dos últimos códigos se debe principalmente a la declaración "delay_ms (500)". Entonces creo que el problema se relaciona con la sincronización de su MCU. En primer lugar, compruebe la frecuencia de su programa mediante:

Proyecto- > Configurar- > C-Compiler- > Frecuencia de reloj.

y asegúrese de que sea 8 en la unidad de mega-hertz.

Ahora cambie los fusibles de su MCU a:

BAJO: 0xE4

Alto: 0xD9

¡Ahora esperamos que su código funcione bien!

    
respondido por el HOPE

Lea otras preguntas en las etiquetas