STK500 LED Schleife

Gast #1451931
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?
#1451940
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
1
#include <avr/io.h>
2

3
int main( void )
4
{
5
  while(1)
6
  {
7
    DDRB = (1 << DDB2) | (0 << DDB3);
8
    _wait_ms(1000);
9
    DDRB = (1 << DDB5) | (0 << DDB2);
10
    _wait_ms(1000);
11
    DDRB = (1 << DDB3) | (0 << DDB5);
12
    _wait_ms(1000);
13
  }
14
}

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.
Gast #1451955
zu
1
#include <avr/io.h>
2

3
int main( void )
4
{
5
  while(1)
6
  {
7
    DDRB = (1 << DDB2) | (0 << DDB3);
8
    _wait_ms(1000);
9
    DDRB = (1 << DDB5) | (0 << DDB2);
10
    _wait_ms(1000);
11
    DDRB = (1 << DDB3) | (0 << DDB5);
12
    _wait_ms(1000);
13
  }
14
}

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
Angehängte Dateien:
Gast #1454277
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.