74HC595 eingabe einer bitfolge über SERIN

#2146226
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?
#2146261
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 ....
#2146271
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
#2146290
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 ;-)
#2146462
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.

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