mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Porterweiterung SPI konform 74HC165, 74HC589


Autor: Jörg Hermann (dr_coolgood)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Freunde der Porterweiterung,

so trivial wie es immer behauptet wird finde ich es nicht, da die 
Porterweiterung selten im Zusammenspiel mit weiteren SPI Teilnehmern 
betrachtet wird.

Standardbeschaltung aus dem AVR-Tutorial: Schieberegister.
Datenblatt von Philips, Dez. 1990
http://www.datasheetcatalog.org/datasheet/philips/...

Laut Tutorial und Datenblatt muß SCK für das 74HC165 während des Ladens 
high sein.
Durch SPCR CPOL=1 wird SCK im Leerlauf auf high gesetzt und diese 
Bedingung erfüllt.

Frage 1: Laut Datenblatt wird das Register jedoch durch eine 0-1 Flanke 
getaktet?

Frage 2: Nach meinem Verständnis des Datenblattes gibt es eine zweite 
Begründung, warum PL vor Beginn der Übertragung wieder high sein muß: 
Das Durchkommen der SCK Takte wird durch ein PL = 0 verhindert?


Am Anfang von schiebe_eingang wird PL 0 gesetzt, dann wieder auf 1.
Im Betrieb ist der Verlauf 1-0-1 und somit die benötigte Sequenz für das 
Laden und Durchschalten von SCK.
Alle anderen mir bekannten SPI Bausteine benötigen jedoch ein CS = Low 
während der gesamten Übertragung.

Ebenfalls praktisch ist der permanent aktive Ausgang, der die 
Verschaltung mit weiteren SPI Sendern verhindert. Dies kann mit einem 
74HC125 "repariert" werden, der dann das "normale" CS = Low erfordert.

Somit benötige ich für einen voll SPI konformen Betrieb:
- Gesonderte Behandlung des 74HC165 von anderen SPI Teilnehmern
- Einen zusätzlichen Port Pin für PL
- Ein zusätzliches IC um den Ausgang TriState zu bekommen.

Frage 3: Ist dieses Verständnis richtig? Oder übersehe ich etwas?

Mit dem 74HC299 komme ich nicht weiter, es benötigt ebenfalls 
zusätzliche Logik und hat auch einen aktiven Ausgang.
Der 74HC589 sieht besser aus - Ausgang kann mit OE in High Z geschaltet 
werden.
Die restliche Ansteuerung? Beispiel habe ich keine gefunden, er scheint 
nicht beliebt/verbreitet zu sein.

Gibt es das "Traum" Schieberegister:

- Voll SPI Konform, 8 MHz
- Integrierte Pull Up Widerstände an den Eingängen
- Preis idealerweise < 1 Euro


Merci 1000 mal.

Gruß
Jörg

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Laut Tutorial und Datenblatt muß SCK für das 74HC165 während des Ladens
high sein.

In meinem Datenblatt steht was anderes....

74xx165 und 595 passen wunderbar zusammen, lassen sich gemeinsam 
betreiben, also schreiben und lesen gleichzeitig. Wenn ich mich richtig 
erinnere, braucht der 165 einen Chip Selct mit aktiv high, der 595 aktiv 
low. Aber das solltest du schon selbst rausfinden.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt auch noch 74xxx4094 bzw CD4094 als CMOS. Aber "Voll SPI Konform, 8 
MHz" sind die eigentlich alle, da wirst du noch mal das Datenblatt 
wälzen müssen.

Autor: Jörg Hermann (dr_coolgood)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Bensch:
Either the CP or the CE should be HIGH before the LOW-to-HIGH transition 
of PL to prevent shifting the data when PL is activated.
Da im Tutorial der CE auf GND liegt, muß es CP, i. e. SCK sein.
Welches Datenblatt verwendest Du?
Ich fand den Satz auch überraschend, da laut function table das CP beim 
Laden don't care ist.
Wie immer steckt der Teufel im Detail.

Nochmal konkret:
Wie betreibt Ihr einen 74HC165 zusammen mit anderen SPI Bausteinen, die 
auch die MISO Leitung nutzen? Welche Alternativen ausser einem 
zuätzlichen 74HC125 gibt es?

Unter voll SPI konform verstehe ich:
a) Der Ausgang ist im nicht selektierten Zustand High Z damit andere 
senden können.
b) Das CS wird zum Beginn der Übertragung auf 0 gesetzt und am Ende 
wieder auf 1.

Zwei unterschiedliche SPI Senderoutinen für 74HC165 und den Rest der 
Welt?
Klar, NOCH ist Platz im Flash, aber wehret den Anfängen...

Gruß
Jörg

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Laden des HC165 erfolgt asynchron, also ist der Pegel an CP/CE 
schnurz.

Man kann prima gleichzeitig ein Byte vom HC165 einlesen und ein Byte zum 
HC595 ausgeben.

Etwas unschön ist, daß der Ausgang des HC165 nicht tristate ist. Falls 
also noch andere SPI-ICs anzuschließen sind, schalte ich einen 4.7k in 
Reihe.
Ist kein andere Chip enabled, liegen die Daten des HC165 über den 4,7k 
an.
Ist ein anderer Chip adressiert, liegen dessen Daten direkt an.


Peter

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Etwas unschön ist, daß der Ausgang des HC165 nicht tristate ist.

Stimmt leider, gibt aber m.W. keinen anderen.
Da ich ohnehin oft ein oder zwei Gatter brauche, nehme ich gern den 125- 
da ist das Gatter für TS dann mehr oder weniger Abfall- die Lösung mit 
dem Widerstand gefällt mir für professionelle Geräte nicht so gut.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bensch schrieb:
> da ist das Gatter für TS dann mehr oder weniger Abfall- die Lösung mit
> dem Widerstand gefällt mir für professionelle Geräte nicht so gut.
Programmier dir doch einen XL9536 als I/O SPI Slave, da haste die volle 
kontrolle und kannst ggf noch externe Logik mit in den Chip reinziehen, 
5V tollerant ist er auch...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider braucht man noch diverses Programmierequipment und Kenntnisse in 
der Programmierung. Außerdem muss noch die Software installiert werden. 
Und wenn das einer Nachbauen möchte, hat der die gleichen Probleme noch 
mal.

Ich weiß nicht was daran vorteilhaft sein soll. Die Idee kommt ja öfter 
im Forum.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. schrieb:
> Leider braucht man

> noch diverses Programmierequipment und Kenntnisse in
Auch hier gehts mit einem 5 Widerstandsprogrammer los wenn man es den 
möchte.

> der Programmierung.
Naja, man kann wie beim AVR eingach nen fertiges BIT File brennen.

> Außerdem muss noch die Software installiert werden.
Jagut so ist das halt, aber auch nicht komplizierter als bei einem AVR.

> Ich weiß nicht was daran vorteilhaft sein soll. Die Idee kommt ja öfter
Platzersparnis, Flexibilität, man kann die Pins größtenteils so legen 
wies für das Layout am besten ist, und und...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man muß aber auch beachten, daß die meisten CPLDs Stromfresser sind.
Und die XCR3064 sind zwar CMOS, vertragen aber keine 5V als VCC.

Ich nehme daher auch lieber HC165/595.

Bzw. man könnte auch einfach nen weiteren AVR als SPI-Expander nehmen, 
der in Powerdown geht, wenn er nicht selektiert ist.


Peter

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bensch schrieb:
> da ist das Gatter für TS dann mehr oder weniger Abfall- die Lösung mit
> dem Widerstand gefällt mir für professionelle Geräte nicht so gut.
Programmier dir doch einen XL9536 als I/O SPI Slave, da haste die volle
kontrolle und kannst ggf noch externe Logik mit in den Chip reinziehen,
5V tollerant ist er auch...

Wozu? Ich brauch nicht mehr Glue-Logik und die Schieberegister liegen an 
verschiedenen Stellen (auch z.B. auf einem externen Bedienteil mit 
Tastenfeld und Display). Das ist doch gerade der Vorteil von SPI, dass 
ich viele Leitungen spare. Da soll ich dann alles in ein zentrales 
Bauteil packen?
Ein programmierbarer Baustein lohnt nur, wenn er mindestens 4-5 TTLs 
ersetzen kann.

Autor: Jörg Hermann (dr_coolgood)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke für die Antworten.

@Peter: Wie immer sind Deine Vorschläge knapp, knackig und korrekt.

@Läubi: Guter Vorschlag, jedoch sind GAL, FPGA, CPLD Technologien, die 
ich nicht nutze.
Welche der benötigten Werkzeuge sind auf einem Mac lauffähig?

@Bensch: Implizit wollte ich einen kaskadierbare, verteilte Lösung. 
Wobei ich dann mit der Taktfrequenz herunter muß, wenn ich EMV clean 
sein will.
Was den "uneleganten" Widerstand angeht: Atmel selbts zwingt uns zu 
genau dieser Lösung, wenn wir den seriellen Port am mega128 nutzen 
wollen. So schlimm ist es nicht.

Nun bleibt noch der Widerspruch aufzuklären, in welchem SPI Modus 
der74HC595 angesprochen werden soll. Das Tutorial nutzt SPI mode 0, 
Frank Link mode 3...

Grüßlis
Jörg

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nun bleibt noch der Widerspruch aufzuklären, in welchem SPI Modus
der74HC595 angesprochen werden soll. Das Tutorial nutzt SPI mode 0,
Frank Link mode 3...

Hab jetzt keine Software-Unterlagen da. Aber ist doch ganz einfach:
Die Daten werden mit der 1. Flanke rausgeschoben und der 2.Flanke ins SR 
geladen, dann gibt's keine Laufzeitprobleme. Der 595 lädt mit der 
steigenden Flanke, also wäre die erste Flanke (die die Daten 
rausschiebt) fallend und der CLK-Ruhepegel high. Lt. Datenblatt wäre das 
Mode 0.
Aber auch Mode 3 wäre in diesem Fall möglich, da die Daten bereits vor 
der ersten Flanke da sind. Die letzte Entscheidung könnten 
Eingangsregister bringen, die nur in einem dieser beiden Moden laufen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
static void spi_write( u8 bh, u8 bl )    // write 2 bytes
{
  OUT_LOW( LD_INPUT );        // input register: load
  OUT_HIGH( LD_INPUT );        // input register: shift
  SPDR = bh;
  while( !(SPSR & 1<<SPIF) );      // wait until done
  input_ram[0] = SPDR;        // store input value
  SPDR = bl;
  while( !(SPSR & 1<<SPIF) );      // wait until done
  input_ram[1] = SPDR;        // store input value
}

void set_display( u8 bh, u8 bl )
{
  OUT_LOW( LD_DISPLAY );
  spi_write( bh, bl );
  OUT_HIGH( LD_DISPLAY );      // latch display
}

void init_spi( void )
{
  SPCR = 1<<SPR0^1<<MSTR^1<<SPE;    // XTAL / 16
            // SPI-mode 0
            // Master
            // MSB first
  SPSR = 0;          // no double speed
}


Peter

Autor: M. Marienhagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Alternative für eine Porterweiterung mit SPInterface bietet sich 
auch der MAX7301, s. http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3371, 
an.


Gruß,

Maik

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.