4 Siebensegmentanzeigen über decoder multiplexen

OP #2395532
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.


PS.: sry für den Eintrag in der Codesammlung kann ihn leider nur nicht 
mehr selber löschen weiß jetzt auch das er eher hier hin gehört ;)
OP #2395583
Lesenswert?

Ich habe nen beispiel zum multiplexen gefunden

nur ich versteh leider nicht alles was gemacht wird


#define CS      PORTE    // Steuerleitungen
#define DISP    PORTA    // Datenleitungen

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

Kann mir jemand das besser kommentieren was gemacht wird ?

#define  W_CS(x)    {CS=0x00;CS|=_BV(x);} ???
#define W_DISP(x)  (DISP |= _BV(x)) ???
Gast #2395672
Lesenswert?

Matthias R. schrieb:
> Kann mir jemand das besser kommentieren was gemacht wird ?
>
> #define  W_CS(x)    {CS=0x00;CS|=_BV(x);} ???
> #define W_DISP(x)  (DISP |= _BV(x)) ???

_BV ist ein Makro. Dahinter steht nur ein Bitshift.

Matthias R. schrieb:
> 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?

Suche mal hier im Forum. Ohne selbst gesucht zu haben kann ich Dir 
sagen...das gibts schon (mindestens 3-10 mal)!

Matthias R. schrieb:
> 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 kann ich Dir das Tutorial hier empfehlen (Stichwort: 
Bitmanipulation).
1
PORTA&=0x0F;        //Löschen der unteren 4 Bits
2
PORTA|=(Zahl&0x0F); //Setzen der Zahl auf PORT (nur die unteren Bits)
3
PORTA|=(1<<4);      //1 verschoben um 4 = 0b00010000 also 1. Segment an

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