Forum: Gesperrte Threads 4 Siebensegmentanzeigen multiplexen


von Matthias R. (recki)


Lesenswert?

Hallo,

ich bin noch ein Anfänger und brauche ein wenig Hilfe.

Ich möchte 4 Siebensegmentanzeigen über eine Decoder an einem Port des
Avr128 multiplexen.
Das ansteuern ohne multiplexen über mehr pins ist ja keine große Kunst.

Kann mir in C jemand ein verständliches beispiel geben wie ich das am
sinnvollsten anstzellen so das ich später über eine variable auch noch
die Anzeige ändern kann?

Die Schaltung ist nicht das problem ich habe mir es so vorgestellt das
ich über die ersten 4 Bit die Zahlen steuer und über Bit 5-8 die
Transitoren fürs ein und aus schalten der 4 Anzeigen.

Das größte problem liegt darin wie steuer ich am einfachsten nur die 4
Bits an die ich brauche ohne die anderen zu beeinflussen. Da ich das
ganze 2 mal brauche könnte ich auch die ansteuerung der Anzeigen und der
Spannungssteuerung über 2 getrennte Ports machen da hab ich aber soweit
ich das sehe das selbe problem weil ich die 2x4 Anzeigen ja getrennt
steuern will.

Wäre nett wenn ein paar gute Antworten und Vorschläge kommen am besten
auch Beispiel in C die ich auf mein vorhaben dann anpassen kann.

: Verschoben durch Moderator
von Harald W. (wilhelms)


Lesenswert?

Matthias R. schrieb:

> Ich möchte 4 Siebensegmentanzeigen multiplexen.
> Da ich das ganze 2 mal brauche...

...brauchst Du das Ganze trotzdem nicht 2 mal posten.
Gruss
Harald

von Matthias R. (recki)


Lesenswert?

Ja das stimmt aber da ich neu bin wusste ich nicht wohin ich es am 
besten schreib. Hab einen auch wieder rausgenommen ;-)

Sry

Ne antwort mit nen bissle Hilfe wär nur schönen :D

von Peter D. (peda)


Lesenswert?

Matthias R. schrieb:
> Ja das stimmt aber da ich neu bin wusste ich nicht wohin ich es am
> besten schreib.

Jedenfalls nicht in die Codesammlung.

"Forum: Codesammlung
Wenn ihr eigene Programme oder Anleitungen geschrieben habt könnt ihr 
sie hier posten. Fragen werden gelöscht!"


Peter

von MaWin (Gast)


Lesenswert?

>  am besten auch Beispiel in C

// PORTB initialisiert für LEDs
int wert; // darzustellende Zahl
int digit=0; // aktuelle Stelle
int ten[]={1,10,100,1000};
while(1)
{
  PORTB=((wert/ten[digit])%10)|(16<<digit);
  digit=(digit+1)&3;
  ... was anderes sinnvolles tun
  _delay_ms(10);
}

irgendwelche Fragen ?

von Matthias R. (recki)


Lesenswert?

Hmm Fragen ist gut.
Wie gesagt ich bin Anfänger das was in der Endlosschleife steht ist für 
mich fast alles nur Bahnhof nen paar Ängerfanger kommentare wären da 
gut.

von Chris (Gast)


Lesenswert?

Das Prinzip findest Du hier: AVR-Tutorial: 7-Segment-Anzeige

Wenn Du nun statt dem direkten Ansteuern der Segmente unbedingt einen 
Decoder verwenden willst, dann kannst Du das natürlich auch tun.

Programmieren musst Du es schon selbst. So etwas zählt zu den 
Grundlagen. Wenn Du dazu noch nicht in der Lage bist, arbeite Dich 
langsam dort hin. Lese dir den Artikel durch und stelle danach ggf. 
konkrete Fragen, aber bitte nichts mehr nach dem Motto "Hab das und das 
vor, brauche den Code dafür (denn ich bin faul)".

von Matthias R. (recki)


Lesenswert?

Ja ich will ja auch kein feritgen Code und beschäftigt und gesucht habe 
ich auch schon viel nur in dem AVR-Tutorial: 7-Segment-Anzeige ist alles 
in Assembler beschrieben. Die Grund funktion verstehe ich ja auch nur 
mein Problem liegt wie gesagt in dem beschreiben von nur 4 Bits ohne die 
anderen zu ändern.

von Chris (Gast)


Lesenswert?

Matthias R. schrieb:
> Die Grund funktion verstehe ich ja auch nur
> mein Problem liegt wie gesagt in dem beschreiben von nur 4 Bits ohne die
> anderen zu ändern.
Du meinst das Setzen von einzelnen Bits bzw. Pins eines Ports?
Dann solltest Du dich mal mit dem Thema Bitmanipulation 
auseinandersetzen. Das funktioniert mittels UND-Verknüpfung.

von Matthias R. (recki)


Lesenswert?

Hmm ja das stimmt wohl werd ich mir nochmals angucken ob ichs versteh :D

kann mir jemand zu diesen zeilen etwas mehr erläutern?

#define  W_CS(x)    {CS=0x00;CS|=_BV(x);}  // Steuerport Reset,Display 
über Transistor auswählen.
#define W_DISP(x)  (DISP |= _BV(x))    // Segment einschalten
#define zahl1      (W_DISP(1))

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Matthias R. schrieb:
>> Ja das stimmt aber da ich neu bin wusste ich nicht wohin ich es am
>> besten schreib.
>
> Jedenfalls nicht in die Codesammlung.

Da es ja mittlerweile noch einen weiteren Thread dazu gibt, schieb'
ich den hier nach "gesperrt".

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.