Forum: Compiler & IDEs Anfängerfrage: Wie kann ich Portb und Portd zusammenfassen


von Stefan F. (feissy)


Lesenswert?

hallo, ich möchte wohl gerne 16 leds an meinen atmega32 anschließen. ich 
habe aber nur 8 ausgänge jeweils an portb oder portd wie kann ich die 
beiden ports zusammenfassen, damit ich auch zb. ein lauflicht über alle 
16 leds laufen lassen kann ???
schon mal im voraus danke
mfg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Garnicht, d.h. Du musst die Ports selbst sinnvoll nacheinander 
ansprechen.
Wo ist da das Problem?

von Klugscheisser (Gast)


Lesenswert?

@ Stefan

>wie kann ich die beiden ports zusammenfassen, damit ich auch zb. ein >lauflicht 
über alle 16 leds laufen lassen kann ???

Deine Aufgabe als Programmierer ist genau die umgekehrte. Wie kannst Du 
die Bestandteile eines bestimmten Mikrocontrollers (hier die beiden 
Ports und noch einige Leds zusätzlich) so zusammensetzen, das sich sich 
ein 16 Led Lauflicht ergibt.

Das ist der Unterschied zwischen den Anforderungen eines "Kunden" und 
denen eines Programmierers. Der Kunde sieht 16 Leds die ein Lauflicht 
ergeben. Ob das nun 15 Controller und ein Heinzelmännchen sind weiss er 
nicht und es geht ihn in der Regel auch nichts an. Du bist derjenige der 
es in Materie giessen soll (und die Heinzelmännchen bei der Stange 
halten muss).

Wie einfach das manchmal ist, zeigt sich in Deiner Frage, die ja schon 
die Antwort enthält. Du hast zwei 8 Bit Ports die Du zusammenfassen 
willst. Sieh sie einmal als ein 16 Bit Port, der aus zwei 8 Bit Ports 
zusammengesetzt sind. Dann ergibt sich der Rest von allein.

von Bascomfehler (Gast)


Lesenswert?

>Wo ist da das Problem?

Das Problem ist, er weiß nicht wie man so etwas programmiert.
Also braucht er einen Denkanstoß von einem Spezialisten.
Sonst würder er ja nicht nachfragen.

von Stefan F. (feissy)


Lesenswert?

ja genau so sieht das in der tat aus ;-)
also ich kann ja mal versuchen ob ich das hinbekomme, wenn ich die Ports 
nacheinander schalten lasse mal gucken
trotzdem danke

von Karl H. (kbuchegg)


Lesenswert?

Aber im Grunde ist es sehr einfach.
In deinem Programm machst du dir eine 16-Bit Variable, in der du dein 
Lauflicht realisierst. Wenn es Zeit wird, den Inhalt dieser Variablen 
tatsächlich auszugeben, splittest du die 16 Bit auf die Ports auf, so 
wie du es brauchst.

von lauflichter (Gast)


Lesenswert?

Also wenn's nur darum geht die LEDs nacheinander als Lauflicht 
anzusteuern, braucht's nichtmal eine 16bit Variable, denn der Status 
wird ja durch die Ports selbst realisiert.
Also einfach alle Pins von PortB nacheinander ein/aus schalten und 
danach die von PortD, dazwischen sollte natürlich ein sleep sein, sonst 
sieht man nichts ;-)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Es kommt drauf an, ob die LEDs nacheinander auf die Ports gelegt sind, 
oder kreuzquer (kann manchmal nötig sein, um das Layout einfacher zu 
machen).

Bei einfacher Verdrahtung kommt man zB so zum Lauflicht:
1
#include <avr/io.h>
2
3
void next_led (void)
4
{
5
    static uint16_t leds;
6
7
    // LEDs eins weiter schieben
8
    leds <<= 1;
9
10
    // Alle LEDs sind durch: neu anfangen
11
    if (leds == 0)
12
        leds = 1;
13
14
    // Ausgeben
15
    if (leds & 0xff)
16
        PORTB = leds;
17
    else
18
        PORTD = leds >> 8;
19
}

Johann

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.