www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Port "Multiplexer"


Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt's eine möglichkeit z.B. 2 Taster a 5 Schlater an einem Port
anzuschließen? Mir gehen mit dem Display ganz stark die pins aus...

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2 Taster und 5 Schalter sollten sich ja locker an einem Port ausgehen.
Aber hast du schon mal was von IO-Expander gehört?

mfg Schoasch

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier gilt das digitale Hebelgesetz, was nicht parallel geht muss man
seriell machen. Ein 8Bit-Schieberegister parallel zu seriell z.B
74HC165:
http://www.st.com/stonline/products/literature/ds/...

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wer mehr auf analog steht, baut mit den tastern/schaltern nen
r2r-dac auf und wertet die spannung aus.

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der parallel->analog wandler: braucht der dann ein Quarz-oszillator,
damit beide den gleichen Takt haben - oder wie geht das? Ist das
kompliziert?

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kapier ich irgendwie nicht... :(

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit hauruck ohne sich ein bisschen grundwissen anzueignen klappts halt
nicht.

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Schiebetakt muß ein Portbit des AVR zu Fuß erzeugen, mit sbi und
cbi. Dann braucht man einen Load-Impuls und einen Dateneingang, also
drei Portbits am AVR insgesamt um 8 oder 16 oder mehr Schalter seriell
abzufragen.

Autor: Philipp Karbach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die analogvariante sollte auch einfach sein! mit den tastern
verschiedene spannungsteiler schalten und dann an den ADC gehen und die
je nach spannung eine funktion ausführen.

Autor: Thomas O. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir das mal an

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah super. Das kapier ich. Da brauch ich also 8 bits + 1 bit für jeden
erweiterten Port.
Evtl kann ich mit einem Baustein mit 2 bits auch 4 ports ansprechen...
Muss ich mir mal überlegen. Das scheint eine gute idee zu sein.

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit 74HC165 brauchst du nur insg 3 Pins am Controller fuer egal wieviele
Erweiterungen... aber gut, mach du mal :)

gruss, bjoern.

Autor: Philipp Karbach (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hab gerade mal die analogvariante getestet, das geht sehr schön! Also
wenn du schnell was machen willst ist das eine gute sache!Hoffe dass
ich keinen fehler in der zeichnung hab aber bei mir gehts so :). viel
spaß

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[quote]
Mit 74HC165 brauchst du nur insg 3 Pins am Controller fuer egal
wieviele
Erweiterungen... aber gut, mach du mal :)
[/quote]

OK. Gibt's irgendwo ein stückerl Code, das zeigt, wie's geht? Das
vermisse ich ab und an in den Tutorials. Da sind oft schöne
Bauanleitungen und viiiiel Theorie, wie was wann wo ansteht, statt dass
man einfach noch 5 Zeilen Code dazuschreibt.
Ich find' kein Kommtar ist so informativ wie Code.

Aber gut: ich mach's mit einem 74HC165 - und wenn's das Letzte ist,
was ich mach.
PS: Wer überlegt sich eigentlich immer diese schönen Namen für die
Bauteile?

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schieberegister haben aber den großen Nachteil das man immer eine
komplette Reihe durchschieben muss wenn man ein einzelnes Bit geändert
werden soll und wenns ne große Erweiterung werden dann muss man gleich
32mal oder mehr Bits durchschieben. Beim Latch ändere ich nur ein Bit
meines Registers ab und gebe es an das Latch weiter.

Ohne mir jetzt das Bauteil angeschaut zu haben, funktionieren
Schieberegister so man gibt auf eine Leitung ein Bit aus z.b. 0 dann
taktet man die Taktleitung kurz an dann wird die 0 reingeschoben, dann
legt man das nächste Bit auf den Eingang z.b. 1 und taktet wieder die
Taktleitung an. Dann hat man 01 im Schieberegister drin, mit dem 3ten
Pin wird man warscheinlich das ganze auf der parallelel Seite ausgeben.

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas
Er will Taster/Schalter einlesen, nichts ausgeben...

@Gernot
Mach dich mal schlau, wie SPI (Serial Peripheral Interface)
funktioniert. Im Grunde ist das 2 im Controller eingebaute
Schieberegister. Dazu steht was im Datenblatt mit Codebeispiel, wenn
ich nicht irre. Ansonsten gibt es auch einen Artikel hier im Wiki, der
aber nicht besonders viel hergibt. Eine weiter Informationsquelle
koennte google sein...
Wenn du wegen jeder Kleinigkeit hier im Forum nachfragst, wirst du
schon bald nichtmehr ernst genommen. Sei ein bisschen
selbststaendiger.

gruss, bjoern.

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.kronosrobotics.com/an140/DAN140.shtml
Hab's schon gefunden. Ich hab's jetzt auch kapiert. Super, danke!

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ja nicht boes gemeint, aber zB ein Schieberegister anzusteuern ist
keine grosse Kunst. OK, wenn man nicht erklaert bekommt wie es
funktioniert, wirds schwer, aber wiegesagt erstmal google oder
Forensuche benutzen und sich selber Gedanken machen. Wenn dann noch
Fragen sind, kannst du die ja auch gerne stellen. Aber wenn es
offensichtlich ist, dass dir grade was neues eingefallen ist und du es
dir erklaeren lassen willst, ohne dich selber anzustrengen, dann fallen
die Antworten auch dementsprechend aus.

Musst nicht alles woertlich nehmen, aber ich finde es ist eine schoene
Lektuere und zeigt mal, wie "die andere Seite" Fragen wahrnimmt.
http://www.lugbz.org/documents/smart-questions_de.html

gruss, bjoern.

Autor: Gernot Frisch (gernotfrisch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Handbuch für den Chip finde ich diese Tabelle:
FUNCTION TABLE:
SH/LD CLK CLKINH
L     X   X     Parallel load
H     H   X     No change
H     X   H     No change
H     L   ^     Shift*
H     ^   L     Shift*

ich verstehe nicht ganz, was X und ^ (Pfeil nach oben) bedeutet. Auch
bin ich davon ausgegangen, dass ich nur 3 Pins brauche (SH/LD, CLK,
SER).
Ich hab mal ein Stück code angehängt, wie ich glaube, dass es
funktionieren könnte.
Sorry, ich will nicht nerven...

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
X = Zustand egal

^ = steigende Flanke

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CLKINH ist sowas wie ein Chipselect. Falls du verschiede SPI-Bausteine
am SPI-Bus hast, kannst damit auswaehlen, mit welchem du kommunizieren
willst. Dazu kommt noch, dass es active-low ist. Also bei HIGH-Pegel an
diesem Pin schert es sich nicht drum, was an CLK passiert und taktet die
Bits nicht durch. Ist es LOW, dann wird der CLK-Eingang aktiv und taktet
bei jeder steigenden Flanke den Inhalt des Puffers durch. Den Puffer
fuellt man vorher natuerlich mit LD, aber das hast du ja schon
verstanden.
CLK und CLKINH kann man in diesem speziellen Fall auch tauschen, da die
Funktion ueber ein AND-Gatter(eigentlich NAND) realisiert ist.

Wenn du nur einen Baustein, oder mehrere kaskadiert, also einer taktet
durch den anderen durch, bis es am Controller angekommen ist, am
SPI-Bus angeschlossen hast, kannst du CLKINH auch einfach fest auf GND
legen und hast nur noch 3 Leitungen uebrig.

gruss, bjoern.

PS: warum rede ich vom SPI-Bus? Man kann den Baustein entweder in
Software ansprechen, so wie du es realisiert, oder in Hardware, dann
kuemmert sich der Controller selber um den Takt und das einlesen und
schieben der Bits und gibt dir nach 8Bits bescheid dass du ein ganzes
Byte auf einmal bequem aus dem Puffer des Controllers auslesen kannst.

Die Softwareloesung hat einen schoenen Lerneffekt und ist flexibler,
die Hardwareloesung ist schneller und bequemer.

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, vertan. Der Baustein hat noch einen andern Pin als Chipselect. S/P
heisst der. Also ist das mit CLKINH hinfaellig im Bezug auf diesen
Punkt.

gruss, bjoern.

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch ein Nachtrag(erst denken, dann schreiben). Bei dem Baustein ist
LOAD und Chipselect das gleiche. Dh er laed den Zustand automatisch in
den Puffer, sobald er ausgewaehlt wird. Eigentlich gar nicht so dumm,
sonst braeuchte man ja auch 4 Pins...

Am besten guckst du dir den Schaltplan aus dem "Porterweiterung mit
SPI" Artikel nochmal an. Daraus ergibt sich eigentlich was was ist.
Was MOSI MISO SS SCK ist, kannst du aus dem Datenblatt des Controllers
rausfinden.

gruss, bjoern.

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super. Vielen Dank.
[quote]
Den Puffer fuellt man vorher natuerlich mit LD, aber das hast du ja
schon verstanden.
[/quote]
...weil ich das, wohin ich lesen will mit 0 vorbelege? Kann sein, dass
ich das nicht verstanden hab, sondern zufällig "richtig" :/

Jetzt hab' ich noch eine Frage:
Bei mir setze ich den CLK bei jedem Takt 1.0.1.0... Kapiert der 74HC165
die Geschwindigkeit, oder soll ich auf ein "rückbestätigungs"-Signal
achten? "while(PINxx&yy){;} *pData |= PINzz; "

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>...weil ich das, wohin ich lesen will mit 0 vorbelege? Kann sein,
>dass ich das nicht verstanden hab, sondern zufällig "richtig" :/
Mach mich nicht schwach :(
Ich dachte der grobe Ablauf waere klar...
1. S/H 0->1    (chip wird ausgewaehlt/der aktuelle zustand
"gelatched")
2. Qh auslesen (eigentlich muesste das LSB jetzt schon da anliegen,
                bin mir aber nicht ganz sicher -> ausprobieren)
3. CLOCK 0->1  (Bits eins weiter schieben)
4. Qh auslesen (sollte jetzt das 2.Bit sein)
5. CLOCK 0->1
.
.
.

Wie schnell, langsam oder ungleichmaessig der Clock ist sollte egal
sein. Im Datenblatt findet man die Zeiten, die der Chip braucht, bis
nach der steigenden Flanke die Daten stabil am Ausgang anliegen. Aber
je nach Ausfuehrung(LS, HC, F, ALS, ...) ist das verdammt schnell...

gruss, bjoern.

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Alles klar. Ich hab nur Deine Worte nicht verstanden. Die
Vorgehensweise schon. Sorry, dass ich so nerv', aber ich meine das
war's auch schon. Den Rest hab' ich schon zusammen.

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab mich kompliziert ausgedrueckt und dabei die Haelfte noch
verwurschtelt, weil ich das Datenblatt nur ueberflogen hatte.
Software-SPI wirst du jetzt wohl ohne Probleme hinbekommen. Trau dich
aber ruhig mal an Hardware-SPI ran. Damit gehts viel schneller, als die
Pins selber wackeln zu lassen. Code dazu gibts wiegesagt im Datenblatt
und die Einstellungen fuer CPOL und CPHA stehen im
Porterweiterungs-Artikel.

gruss, bjoern.

PS: Hast du eigentlich die Schieberegister schon da, oder programmierst
du ins Blaue?

Autor: Gernot Frisch (gernotfrisch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Datenblatt? In meinem ist kein Code :(
Ich hab' gerade 5 Stück beim Conrad gekauft. Der SPI ist der gleiche
wie mein ISP - macht aber nix, oder?

Autor: Bjoern M. (salival)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Welches Datenblatt? In meinem ist kein Code :(
Datenblatt zum Controller... Da ist ein Beispiel fuer Master/senden und
Slave/empfangen drin. Du brauchst aber Master/empfangen. Also musst du
beides wohl oder uebel miteinander verquicken. Viel Erfolg.
Ansonsten bleib halt bei der Softwareloesung.

>Der SPI ist der gleiche wie mein ISP - macht aber nix, oder?
Versuch macht kluch. Kommt auf deinen ISP-Adapter an. Wenns ein
vernueftiger ist, kann er drangesteckt bleiben, ansonsten musst du ihn
abziehen.

gruss, bjoern.

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.