mikrocontroller.net

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


Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bascomfehler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan F. (feissy)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht 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.

Autor: lauflichter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>

void next_led (void)
{
    static uint16_t leds;

    // LEDs eins weiter schieben
    leds <<= 1;

    // Alle LEDs sind durch: neu anfangen
    if (leds == 0)
        leds = 1;

    // Ausgeben
    if (leds & 0xff)
        PORTB = leds;
    else
        PORTD = leds >> 8;
}

Johann

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.