Forum: Mikrocontroller und Digitale Elektronik 74HC595 eingabe einer bitfolge über SERIN


von Christian S. (schalli1990)


Lesenswert?

Hi,
ich hab einen 74HC595 und an den Ausgängen eine 7-Segmentanzeige
ich weiß aber nich wie ich am SERIN eine Bitfolge eingeben kann.
könnt ihr mir helfen?

MfG


Schalli

von Magnus M. (magnetus) Benutzerseite


Lesenswert?


von Christian S. (schalli1990)


Lesenswert?

Ja danke das hab ich mir schon durchgelesen und ich hab auch verstanden 
wie das teil funktioniert, ich weiß nur nich wie ich eine Bitfolge über 
SERIN schicken kann, mit c-programmierung. Also der reine Quellcode.

MfG


Schalli

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

willst du das denn per SPI ansteuern, oder willst du beliebige Ports 
nutzen?

wenn ich hier im Forum nach "Porterweiterung 595" suche, kommen 147 
Threads, die das alle behandeln. da werden bestimmt auch Code-Beispiele 
dabei sein, welche mit dem 595 irgendwelche 7-Segment-Anzeigen 
ansteuern, denn ich nehme an daß du nicht nur wissen möchtest wie man da 
Daten reintaktet, sondern wier man die Daten so aufbereitet bekommt, daß 
da auch die richtigen Segmente zum richtigen Zeitpunkt aufleuchten?

von Christian S. (schalli1990)


Lesenswert?

Ja ich möchte es mit beliebigen ports ansteuern,

Wegstaben Verbuchsler schrieb:
> denn ich nehme an daß du nicht nur wissen möchtest wie man da
> Daten reintaktet, sondern wier man die Daten so aufbereitet bekommt, daß
> da auch die richtigen Segmente zum richtigen Zeitpunkt aufleuchten

Ja genau das würde ich gerne wissen.

von Christian S. (schalli1990)


Lesenswert?

ich hab mir mal die relevanten durchgelsen ,war aber für mich denke ich 
nich wirklich was dabei.
hast du denn ne idee?

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

welche der 147 Threads hast du denn bsiher schon durchgestöbert, und bei 
welcher Fragestellung hängst du?

Die Antwort ob SPI oder nicht hast du dir und mir auch noch nicht 
beantwortet.


Auch ist von dir nicht genannt worden, welche Segmente du wie ansteuern 
möchtest. Da solltest du dir vorher Gedanken drüber machen.

"Meistens" ist es halt so, daß du z.B. bei Übergabe einer "0" in einer 
Schieberegister-7-Segment-Emuations-Ausgabe-Routine auch die 
entsprechenden Segmente ansteuern möchtest (Segment a,b,c,d,e,f), so daß 
dir folgendes dargestellt wird:

 -
| |
| |
 -

Desgleichen auch für die "anderen Ziffern" 1..9.

Was du mit der Eingabe sonstiger Übergabe-Werte machst, bleibt erst mal 
dir überlassen, z.B. könnte ja die Eingabe von 17 folgendes dargestellt 
werden (3 Striche) etc.

-
-
-

Insgesamt könnte man bei 7 Segmenten 2^7 "Symbole" darstellen (oder gar 
8 wenn du den Dezimalpunkt hast und mit rechnest, dann natürlich 2^8). 
Ob du das machen möchtest weißt nur du, oder ob du nur "0" .. "9" 
darstellen möchtest.


PS: Du könntest dir z.B. auch ein "7-Segment Lauflicht" bauen, bei dem 
folgende Segmente nacheinander aufleuchten: a,b,c,d,e,f,DP. Das würde 
die Software-Ansteuerung natürlich deutlich vereinfachen ....

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Noch ein Hinweis zu deiner ursprünglichen Frage "weiß aber nich wie ich 
am SERIN eine Bitfolge eingeben kann"

"rein technisch" ist es recht einfach:

wiederhole so oft wieviele Bits du schieben möchtest
   lege das einzuschiebende Bit an SER an
   mache einmal "ritsch-ratsch" bei SCK  (0-1-0)

wenn alles reingeschoben ist:
   mache einmal "ritsch-ratsch" bei RCK  (0-1-0)

Wenn du das im "Bit-Bang-Modus" machst (also nicht-SPI) mußt du alles 
"händisch" machen, ansonsten übernimmt dir SPI einen Teil der Arbeit

von Christian S. (schalli1990)


Lesenswert?

also ich will das nicht über spi machen sondern über beliebige ports,
wie ich das reinlogisch mache das ich in SERIN eine Bitfolge eintakten 
kann weiß ich, dass was ich nicht weiß ist wie ich das in einem c-Code 
umsetzte.

von Christian S. (schalli1990)


Angehängte Dateien:

Lesenswert?

hier is ma ein teil des schaltplanes

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

> was ich nicht weiß ist wie ich das in einem c-Code umsetzte.

Welche Segmentwe willst du denn wie ansteuern, d.h. WAS möchtest du denn 
darstellen? (frug ich um 15.04.2011 12:26)

NAchtrag: Hohoho, es gibt sogar einen Schaltplan .... ich schrrubbel 
hier schon 1 Stunde an der Glaskugel rum, na das macht doch die Sache 
etwas transparenter ;-)

von Christian S. (schalli1990)


Lesenswert?

ich würde dir auch den ganzen schaltplan zeigen aber der passt nich aufs 
bild idee ist eig. nen simplen taschenrechner zu basteln der erstam plus 
und minus rechnen kann, also will ich einfach zahlen darstellen.

und zur probe, wollte ich eig mal eine zahle z.b. 3 darstellen

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

wieviele Segmente willst du den anschließen?

Möglicherweise mußt du ja auch das Symbol "-" darstellen wollen (bei 
negativen Zahlen)

von Achim M. (minifloat)


Lesenswert?

Ich zitier mich ungern selbst, dennoch:
Beitrag "Re: 7-Segmentanzeige"
mfg mf

von Christian S. (schalli1990)


Lesenswert?

also ich will am ende 8 segmente an 8 595 anschließen, und das mit dem 
minus will ich auch machen.

von Christian S. (schalli1990)


Lesenswert?

wenn du willst kann ich dir den kompletten schaltplan ma hochladen?
is ne eagle schaltplan

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

zum einen hab ich kein Eagle, zum anderen erlaubt dem Vernehmen nach 
Eagle auch den Export nach png,jpg oder pdf, was jeder dann lesen 
könnte.

Wichtig sind eigentlich nur die Verschaltungen der Schieberegister mit 
deinem Controller, d.h. welches Bit des Controllers ist an welcher 
Leitung der Schieberegister-Sache angeschlossen? Die Kaskadierung von 
einem 595 auf das nächste 595 ist ja "selbsterklärend"

Hier mal ein paar initiale Definitions-Schnipsel, wie das bei mir 
aussieht:

// Nutzung der folgenden Leitungen:
// Port B5 = SHIFT_Data    =   SER [74595 Pin 14]
// Port B7 = SHIFT_Clock   =   SCK [74595 Pin 11]
// Port B6 = SHIFT_Strobe  =   RCK [75595 Pin 12]


#define SHIFT_DATA  5      // Port PB5
#define SHIFT_CLOCK  7      // Port PB7
#define SHIFT_STROBE  6      // Port PB6


DDRB  |=  (1<<SHIFT_DATA)  |
          (1<<SHIFT_CLOCK) |
          (1<<SHIFT_STROBE);       // setzt Port-Pin als Ausgänge fest

PORTB &= ~((1<<SHIFT_DATA)  |
           (1<<SHIFT_CLOCK) |
           (1<<SHIFT_STROBE));     // setze Port-Pin auf Low-Pegel

//   PORTB &=  (1<<SHIFT_DATA);     // 0 auf Datenleitung ausgeben
//   PORTB |=  (1<<SHIFT_DATA);     // 1 auf Datenleitung  ausgeben

// 0-1-0 an Clock schiebt das an Data stehende Bit um eine 
Registerstelle weiter
//                  // 0 steht eh schon initial an
//  PORTB |=  (1<<SHIFT_CLOCK);   // kurzer 1 Impuls
//  PORTB &= ~(1<<SHIFT_CLOCK);   // und wieder auf 0 zurück setzen

// 0-1-0 an Strobe   überträgt die eingeschobenen Daten nach draußen
//                  // 0 steht eh schon initial an
//  PORTB |=  (1<<SHIFT_STROBE);   // kurzer 1 Impuls
//  PORTB &= ~(1<<SHIFT_STROBE);   // und wieder auf 0 zurück setzen


Das ist jetzt mal aus einem Tiny2313. Pass das mal bezüglich der 
Definitionen auf dein Mega8 an, und ergänze mal um die von dir 
anscheinend auch noch genutzte "Gate" Leitung.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Noch ein Hinweis: Wenn du die 7-Segemnt-Anzeigen direkt mit dem 595 
ansteuerst, wirst du eventuell Strom-Probleme bekommen (der 595 kann 
vielleicht nicht genug liefern). Du solltest also schon wissen, wieviel 
Strom deine Segmente brauchen ...

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.