www.mikrocontroller.net

Forum: Compiler & IDEs STK500 LED Schleife


Autor: Mangosniper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

vorab gesagt ich hab erst heute angefangen mit dem Ding zu arbeiten und 
mäßige C Kentnisse.
Ich möchte an meinem STK500 bestimmte Led´s im Abstand von 1 Sekunden 
aus und anschalten. Das ganze dann in einer Endlosschleife:

#include <avr/io.h>
int main( void )
{
while(1)
DDRB = (1 << DDB2) | (0 << DDB3);
_wait_ms(1000);
DDRB = (1 << DDB5) | (0 << DDB2);
_wait_ms(1000);
DDRB = (1 << DDB3) | (0 << DDB5);
_wait_ms(1000);
}

Vom Code wird aber lediglich das hier ausgeführt:

#include <avr/io.h>
int main( void )
{
DDRB = (1 << DDB2) | (0 << DDB3);

Kann mir wer sagen wo der Fehler liegt?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mangosniper schrieb:
> Hi,
>
> vorab gesagt ich hab erst heute angefangen mit dem Ding zu arbeiten und
> mäßige C Kentnisse.
> Ich möchte an meinem STK500 bestimmte Led´s im Abstand von 1 Sekunden
> aus und anschalten. Das ganze dann in einer Endlosschleife:
>
> #include <avr/io.h>
> int main( void )
> {
> while(1)
> DDRB = (1 << DDB2) | (0 << DDB3);
> _wait_ms(1000);
> DDRB = (1 << DDB5) | (0 << DDB2);
> _wait_ms(1000);
> DDRB = (1 << DDB3) | (0 << DDB5);
> _wait_ms(1000);
> }

Innerhalb des while(1) liegt nur die unmittelbar nächste Anweisung.

Willst du mehere Anweisungen unter Kontrolle vom while haben, dann musst 
du die Anweisungen zu einem Blockzusammenfassen
#include <avr/io.h>

int main( void )
{
  while(1)
  {
    DDRB = (1 << DDB2) | (0 << DDB3);
    _wait_ms(1000);
    DDRB = (1 << DDB5) | (0 << DDB2);
    _wait_ms(1000);
    DDRB = (1 << DDB3) | (0 << DDB5);
    _wait_ms(1000);
  }
}

PS: man kann einen Portpin nicht mit 0<<DDB3 löschen. Eine 0 kann man 
nach links schieben, sooft man will, sie bleibt immer eine 0

PS2: Du willst mit Sicherheit nicht ständig den Pin von Eingang auf 
Ausgang umkonfigurieren, sondern du willst:
  Einmalig die interessierenden Pins auf Ausgang konfigureieren.
  Durch entsprrechende Zugriffe auf das PORTB Register den auf Ausgang
  konfigurierten Pin von 0 auf 1 bzw. umgekehrt schalten.

Autor: Mangosniper (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
zu
#include <avr/io.h>

int main( void )
{
  while(1)
  {
    DDRB = (1 << DDB2) | (0 << DDB3);
    _wait_ms(1000);
    DDRB = (1 << DDB5) | (0 << DDB2);
    _wait_ms(1000);
    DDRB = (1 << DDB3) | (0 << DDB5);
    _wait_ms(1000);
  }
}

Hier wird mir ein Fehler beim Compilieren mit der Makefile angezeigt (s. 
Screenshot im Anhang)

Zu PS: Wie gesagt^^ "vorab gesagt ich hab erst heute angefangen mit dem 
Ding zu arbeiten und mäßige C Kentnisse."

Ich werd das Kapitel mal wiederholen.

Zu PS2: exakt

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fehlermeldung besagt, dass die Funktion _wait_ms() unbekannt ist. 
Das stimmt auch.

Lies dir die folgenden Abschnitte zur Funktion _delay_ms() mal durch und 
ändere deine Source entsprechend.
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
http://www.nongnu.org/avr-libc/user-manual/group__...

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRB ist das "data direction register of port B" und nicht der Port 
selbst. Man kann natürlich mit der Umschaltung von Ein- auf Ausgang 
ebenfalls Pegeländerungen hervorrufen, das ist meist aber nicht 
beabsichtigt.

Autor: Mangosniper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke das Problem hab ich mittlerweile gelöst.

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.