Forum: Mikrocontroller und Digitale Elektronik DELAY BEI AVR


von Ingo L. (grobian)


Lesenswert?

Warum wird mir hier die DEALY Funktion nicht ausgeführt. bzw stoppt??

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
int i;
int feld[10] = {1,2,4,8,16,32,64,128};

DDRA = 0xff;

nochmal:
{
for(i=0; i<8 ; i++)
PORTA = feld[i];

_delay_ms(200);

}
goto nochmal;
}

von Peter D. (peda)


Lesenswert?

Ingo Laabs wrote:
> Warum wird mir hier die DEALY Funktion nicht ausgeführt. bzw stoppt??

Wie kommst Du darauf?

Hast Du ein Speicher-Oszi angeschlossen, um zu sehen, wie nach 200ms 
alle 8 Bitmuster µs-schnell durchrauschen?

Mit nem Analog-Oszi wirst Du es nicht sehen.


Peter

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

200ms is wahrscheinlich zuviel. Probier's mal mit zwei mal 100ms. Und 
nimm das "goto" da raus das ist ja graueneregend.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die wird bestimmt ausgeführt, nur nicht zu dem von dir erwarteten 
Zeitpunkt im Programmablauf ;-)

Probiere mal

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
  int i;
  int feld[10] = {1,2,4,8,16,32,64,128};

  DDRA = 0xff;

  nochmal:
  {
    for(i=0; i<8 ; i++)
    {
      PORTA = feld[i];
      _delay_ms(200);
    }
  }
  goto nochmal;
}

von Ingo L. (grobian)


Lesenswert?

ich habe mit dem oszi gemessen. der port 0 steht auf high und die 
anderen stehen alle auf null. nehme ich das delay raus funktioniert die 
sache.

GOTO ist nur zu testzwecken drinne..ist mein zweiter tag in C :-)
dauert noch ein wenig
G Ingo

von Ingo L. (grobian)


Lesenswert?

Hallo Stefan..

es funktioniert..danke.....niederknie :-)
aber warum ging es nicht ohne klammern??

von Εrnst B. (ernst)


Lesenswert?

Dann schau dir den Tip von Stefan an, und mach die geschweiften Klammern 
um den for-Schleifenbody.

So wie's jetzt ist läuft deine Schleife zuerst von 0-7 durch, OHNE 
Delay, und führt DANACH ein einziges Delay mit 200ms aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.