In letzter Zeit führt mein Mikrocontroller kein Programm aus, ich teste den folgenden Code:
#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);
}
}
Ich habe vier verschiedene Controller getestet, sowohl mega32a als auch mega16a. Der Code wird von CodeVisionAVR Evaluation kompiliert und von Atmel Studio 6.1 programmiert (ich habe auch PROGISP ausprobiert). Der Programmierer ist eine originale MK2- und ISP-Programmierung.
Sicherungen:
Interner und externer Uhrenquarz getestet. LED mit 220 Widerstand an einem Pin angeschlossen.
Ein weiterer Testcode:
Wenn ich folgenden Code programmiere:
#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);
}
}
Alle LEDs sind aus, und wenn ich den folgenden Code programmiere:
#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);
}
}
Alle LEDs sind an. Was ist das Problem? Ein weiterer Test:
#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);
}
}
Zweiter Pin von Port B ist auf schwachem Licht und PORTB=0x00;
nach delay_ms(500);
Egal ob: 0x00;
oder0xFF;
Nehmen Sie von dem, was Sie in der letzten Aussage über zwei Codes erklärt haben, einen mit allen LEDs an und andere alle aus, zunächst an, dass diese Bedingungen wahr sind:
Dann liegt das Problem an Ihrer Taktung. Denn der Unterschied Ihrer beiden letzten Codes betrifft hauptsächlich die Anweisung "delay_ms (500)". Dann denke ich, dass das Problem mit der Taktung Ihrer MCU zusammenhängt. Überprüfen Sie zunächst die Häufigkeit Ihres Programms, indem Sie:
Projekt->Konfigurieren->C-Compiler->Taktfrequenz.
und stellen Sie sicher, dass es 8 in Megahertz-Einheit ist.
Ändern Sie nun Ihre MCU-Fuse-Bits in:
NIEDRIG: 0xE4
Hoch: 0xD9
Jetzt erwarten wir, dass Ihr Code gut läuft!
Dzarda
musefianisch
krambo
musefianisch
Tom Tischler
#define xtal
wird überhaupt nichts tun - Sie verwenden es nirgendwo. Auch #defines sind nur in der Datei sichtbar, in der sie definiert sind, und in allen, die die Datei enthalten.<delay.h>
wird nichts sehen, was Sie#define
in Ihrer c-Datei. Sie müssen F_CPU global definieren. Unter der Annahme von GCC können Sie den Befehlszeilenschalter verwenden:-DF_CPU=16000000