-
-
Erfahrener Benutzer
Roboter Experte
LEDs Blinken statt einfach zu leuchten.
#include <avr/io.h>
int main(void)
{
DDRA=0xff;
PORTA=0xff;
DDRB=0xff;
PORTB=0x0;
DDRC=0xff;
PORTC=0x0;
DDRD=0xff;
PORTD=0x0;
DDRE=0xff;
PORTE=0x0;
DDRF=0xff;
PORTF=0x0;
DDRG=0xff;
PORTG=0x0;
for (; {}
}
Normalerweise sollte dies Programm einfach durchlaufen und die LEDs an Port A zum leuchten bringen und dann in der Endlosschleife bleiben. Allerdings blinken die LEDs die ganze zeit woran kann das liegen? Ich könnte mir vorstellen das das Programm immer wieder von vorne gestartet wird anstatt in der endlosschleife zu bleiben aber warum?
-
Erfahrener Benutzer
Roboter Experte
Ich würde statt
for(;;){}
while(1){}
probieren.
Eine For - Schleife ist eigentlich keine Endlosschleife.
-
Erfahrener Benutzer
Roboter Experte
eigentlich hast du recht, aber for(;{} dürfte schon das gleiche bewirken wie while(1){}, denn normalerweise gibt man bei for-Schleifen noch Bedingungen an, wenn man die allerdings wie oben gezeigt weglässt, hat man auch eine Endlosschleife
berichtigt mich, wenn ich falsch liege
Edit: denkt euch meine for-Schleife wie die vorherigen, der Smilie ist ungewollt...
-
Erfahrener Benutzer
Roboter Experte
wit der while schleife blinkts immer noch ....
-
Erfahrener Benutzer
Roboter Experte
vielleicht ist der Grund ja eher in der Hardware zu suchen...
oder, was mir grad eingefallen ist, mit welchem µC arbeitest du?
vielleicht ist da ja der Watchdog standartmäßig an und wenn man ihn nicht regelmäßig auf 0 setzt, löst er einen Reset aus...
-
Erfahrener Benutzer
Roboter Experte
Mit einem ATmega128 16AI ... wie kann ich den Watchdog denn aus machen?
-
Erfahrener Benutzer
Roboter Experte
ich hab im Datenblatt für einen ATMEGA8 nachgeschaut und folgendes herausgefunden:
To disable an enabled Watchdog Timer, the following procedure must be followed:
1. In the same operation, write a logic one to WDCE and WDE. A logic one must be written to WDE even though it is set to one before the disable operation starts.
2. Within the next four clock cycles, write a logic 0 to WDE. This disables the Watchdog.
WDE und WDCE sind Bits im WatchDogTimerControlRegister WDTCR
allerdings ist das vielleicht beim 128er anders...musst mal im Datenblatt nachschauen
-
Neuer Benutzer
Öfters hier
Meine Vermutung :
for(;{}
while(1){}
werden vom Compiler weg-optimiert...
wie wäre es mit:
while(1) asm volatile("nop");
dann NOPed er die ganze Zeit.
Ich hätte ein ähnliches Problem als ich in Assembler programmiert habe...
Als das Programm durchgelaufen ist hat sich mein AVR immer resetted - dadurch führte er das programm immer wieder aus...
-
Erfahrener Benutzer
Roboter Experte
Bei mir gibt es nur WDTON ... naja werd mal das datenblatt durchsuchen
-
Erfahrener Benutzer
Roboter Experte
Genau daran lags ... danke ... und du hast damit auch noch gleich ein anderes problem im Elektronikforum von mir gelöst die pins tuns jetzt normal ...
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen