Forum: Mikrocontroller und Digitale Elektronik Ansprechen von mehreren Ports


von Danielle F. (daniellefleck)


Lesenswert?

Hallo alle,

Ganz am Anfang, ich bin Anfängerin und lerne zu Programmieren in meiner 
Lehre.
und zwar steh ich vor folgendem Problem:

Aufgabe ist eine LED Matrix so zu Programmieren das alle LED einmal 
leuchten. Bis dahin alles kein Problem, jetzt die Schwierigkeit:

Eine Schleife zu haben die automatisch alle anpricht, ohne das ich jeden 
Befehl einzeln schreiben muss BSP wie ich es machen würde nur es nicht 
funktioniert:

 for (int a = 0; a <= 3; a++)
        {
          PORTA |= (1 << PB a);
          _delay_ms(500);
        }

so mal eine kleine denkweiße, klar muss ich noch PortD ansteuern.
Wie schaffe ich es nur die Pins PB0-3 durchlaufen zulassen.

Ich hoffe ihr versteht wo mein Problem liegt bzw. was ich meine

LG danielle

von Justus S. (jussa)


Lesenswert?

schau dir mal die Defintion von deinem "PB a" (bzw. halt PB0 etc) an

: Bearbeitet durch User
von Danielle F. (daniellefleck)


Lesenswert?

Justus S. schrieb:
> schau dir mal die Defintion von deinem "PB a" (bzw. halt PB0 etc) an

in wie fern die Definition?

von Justus S. (jussa)


Lesenswert?

na ja, zB PB0 steht ja für irgendwas

bzw

was (und warum) macht denn zB

PORTA = (1 << PB0)

: Bearbeitet durch User
von Danielle F. (daniellefleck)


Angehängte Dateien:

Lesenswert?

ja genau eine Diode wird immer angesteuert mit

PORTA |= (1 << PA0);
PORTD |= (1 << PD3);

dann leuchtet eine LED

von Stefan F. (Gast)


Lesenswert?

Ganz einfach:
1
 for (int a = 0; a <= 3; a++)
2
{
3
    PORTA |= (1 << a);
4
    _delay_ms(500);
5
}

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Wenn Du Dir die Definitionen für PB0, PB1 usw. in den entsprechenden 
Header-Dateien anschaust, dann wirst Du sehen, dass das einfache Zahlen 
von 0 bis 7 sind.

Du wirst also ungefähr dieses hier finden:
1
#define PB0 0
2
#define PB1 1
3
...
4
#define PB7 7

Wenn Du also schreibst:
1
for (int a = 0; a <= 3; a++)
2
{
3
  PORTA |= (1 << a);
4
  _delay_ms(500);
5
}

dann werden nacheinander die Pins PA0, PA1, PA2 und PA3 aktiviert (und 
nicht PB0...PB3, da Du hier ja PORTA und nicht PORTB geschrieben hast).

Das sollte als Denkanstoß reichen ;-)

von Danielle F. (daniellefleck)


Lesenswert?

Licht ist aufgegangen danke!

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.