PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eine Tätigkeit aller x minuten ausführen mit AVR LAB



super-robman
31.07.2011, 21:52
Hallo,

ich versuche dem AVR lab beizubringen eine Diode regelmäßig blinken zu lassen, aber habe irgendwie keinen Erfolg. Ich habe es mit einfachen Programmen versucht und mit schwierigeren aber immer blinkt sie nur 1 mal und dann startet der Mikrochip neu. Und wenn ich ISR(TIMER0_OVF_vect) versuche zu benutzen beschwert das AVR Studio sich schon, dass es mehrere Definitionen davon gibt und die sich überschneiden. Einfache Codeschnipsel wie:


#include <avr/io.h>
#include "avrlab.h"
#include "gpio.h"
#include <avr/interrupt.h>
#include <util/delay.h>

int main(void)
{

AvrLabInit();
PortB.DataDirection.Bit3 = DataDirectionOutput;
PortB.Output.Bit3 = 0;

int time;
time=1800; // Wie weit soll Zähler zählen
int time2;
time2=3600; // Wie weit soll Zähler zählen

while (1)
{
TCNT1H=0; // Timer Daten Register Timer1 High auf 0 Setzen
TCNT1L=0; // Timer Daten Register Timer1 Low auf 0 Setzen

TCCR1B |= (1<<CS12)|(1<<CS10); // Timer Starten mit Vorteiler 1024

while(TCNT1<time) // Solange Das Register bis 3600 gezählt hat.
{
PortB.Output.Bit3 = 1;
}
while(TCNT1<time2) // Solange Das Register bis 3600 gezählt hat.
{
PortB.Output.Bit3 = 0;
}

}
return 0;
AvrLabPoll();
}

Lassen die Diode einmal aufblinken und dann startet der Mikrochip neu. Weiß jemand eine Rat dazu?

Vielen Dank.

Grüße

Robert

drew
01.08.2011, 11:47
Hallo,
zunächst: ich kenne das AVR Lab nicht, nehme aber an, dass AvrLabPoll(); nach dem return schon so stimmt.

Dein Problem hört sich für mich nach einem Watchdog an, den Du triggern solltest. Schau mal Deine Fuses durch.
oder:
Beim Einschalten der LED fließt so viel Strom, daß die Spannung zusammen bricht. Bau mal Deine LED ab und prüfe den Ausgang mit einem Multimeter.

Drew

Hubert.G
01.08.2011, 13:10
Ich habe so ein AVR-Lab, allerdings kann ich mir dir Benutzerdefinierte Software nicht herunterladen, das *.zip File ist leer.
Wenn es heute Abend funktioniert werde ich das mal testen.

super-robman
08.08.2011, 14:07
Hallo,

danke für Eure Bemühungen. Ich habe es einfach mit einer Schleife gelöst, welche den Chip beschäftigt hält für eine bestimmte Zeit. Das Problem mit dem Timer werde ich später nochmal angehen (vielleicht mit einem anderen Board).

Viele Grüße

Robert

Hubert.G
08.08.2011, 15:36
Ich habe leider keine Beschreibung für dieses gesamte Programm. Es wird über die SW der Watchdog eingeschalten, darum muss auch das AvrLabPoll(); alle 40msec aufgerufen werden.
Wenn das nicht geschieht, dann wird ein Reset ausgelöst.