Forum: Compiler & IDEs 4 Siebensegmentanzeigen über decoder 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.


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 ;)

von Matthias R. (recki)


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)) ???

von Ballermann (Gast)


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

von Ballermann (Gast)


Lesenswert?

Das war schon mal falsch von mir. So passt es:
1
PORTA&=0xF0;        //Löschen der unteren 4 Bits
oder
1
PORTA&=~(0x0F);        //Löschen der unteren 4 Bits

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.