STK500 LED Schleife

Gast #1451931
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?
#1451940
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
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
Lesenswert?

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
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren