www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DELAY BEI AVR


Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan..

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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.