Forum: Mikrocontroller und Digitale Elektronik Port "Multiplexer"


von Gernot F. (gernotfrisch)


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...

von Schoasch (Gast)


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

von Christoph Kessler (db1uq) (Gast)


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/1911/m74hc165.pdf

von Alex Trusk (Gast)


Lesenswert?

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

von Gernot F. (gernotfrisch)


Lesenswert?

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

von Alex Trusk (Gast)


Lesenswert?


von Gernot F. (gernotfrisch)


Lesenswert?

kapier ich irgendwie nicht... :(

von Alex Trusk (Gast)


Lesenswert?

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

von Christoph db1uq K. (christoph_kessler)


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.

von Philipp Karbach (Gast)


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.

von Thomas O. (Gast)


Angehängte Dateien:

Lesenswert?

Schau dir das mal an

von Gernot F. (gernotfrisch)


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.

von Bjoern M. (salival)


Lesenswert?

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

gruss, bjoern.

von Philipp Karbach (Gast)


Angehängte Dateien:

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ß

von Gernot F. (gernotfrisch)


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?

von Thomas O. (Gast)


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.

von Bjoern M. (salival)


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.

von Gernot F. (gernotfrisch)


Lesenswert?

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

von Bjoern M. (salival)


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.

von Gernot F. (gernotfrisch)


Angehängte Dateien:

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...

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

X = Zustand egal

^ = steigende Flanke

von Bjoern M. (salival)


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.

von Bjoern M. (salival)


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.

von Bjoern M. (salival)


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.

von Gernot F. (gernotfrisch)


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

von Bjoern M. (salival)


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.

von Gernot F. (gernotfrisch)


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.

von Bjoern M. (salival)


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?

von Gernot F. (gernotfrisch)


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?

von Bjoern M. (salival)


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.

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.