Hallo Leute! ich hab voll den Bock geschossen ... jetzt geht's drum am Besten mit keinen oder wenig Hardware-Änderungen die Sache auszubügeln. Vielleicht hat ja jemand von euch eine zündende Idee :) Ihr seht vier HEX-Code-Schalter die ich am ATMega mit 8 Pins abfragen möchte. Nur leider brücken sich die Schalter gegenseitig durch. (Der Gedanke war über SW_ARRAY_S1, S2, S3, S4 die Schalter nacheinander mit Spannung zu beaufschlagen und den Status über SW_ARRAY_BIN0 - BIN3 abzufragen) Die Möglichkeit die mir eingefallen wäre, jedem Pin vor dem zusammenführen an BIN0 - BIN3 eine Diode zu spendieren, das gefällt aber meinem Layout vom Platz garnicht. Habt ihr eine Idee?
Oder habt ihr generell eine gute Möglichkeit die 4 Code-Switch mit 8 Pins einfach abzufragen?
Vor jeden Schalter, also 1, 2, 4, 8, deiner Kodierer muß eine Diode. Das nennt sich n-Key Rollover.
:
Bearbeitet durch User
Dir bleibt wohl wirklich keine andere Möglichkeit als die Ausgänge der Codierer mit Dioden gegeneinander zu entkoppeln. Alternativ könntest Du die Ausgänge mit 2 Stück 8 Bit Schieberegistern abfragen und die Schalterstellungen seriell einlesen. Das bedeutet natürlich auch mehr Platzbedarf, spart aber auch Portleitungen.
TomTom schrieb: > eine Diode zu spendieren, das gefällt aber > meinem Layout vom Platz garnicht. Alternative wären 2 8bit-Schieberegister. Dann braucht man sogar viel weniger Pins. Georg
S1, S2, S3 und S4 nacheinander jeweils einen als Ausgang schalten, die anderen als Eingang ohne Pullup. Über Bin0 ... Bin3 den jeweils aktiven Hexschalter abfragen. Reine Softwarelösung.
Reinhard R. schrieb: > S1, S2, S3 und S4 nacheinander jeweils einen als Ausgang schalten, > die > anderen als Eingang ohne Pullup. Über Bin0 ... Bin3 den jeweils aktiven > Hexschalter abfragen. Reine Softwarelösung. Geht doch nicht weil irgendein auf 15 gesetzter Schalter alle vier Leitungen zusammen verbindet. Das verhindert die unabhängige Auslesung aller anderen Schalter am Bus.
:
Bearbeitet durch User
TomTom schrieb: > Die Möglichkeit die mir eingefallen wäre, jedem Pin vor dem > zusammenführen an BIN0 - BIN3 eine Diode zu spendieren, das gefällt aber > meinem Layout vom Platz garnicht. Ach komm, die 16 Stück TS4148C im 0603 Gehäuse sollten sich noch unterbringen lassen.
SOD323 passen quasi fast direkt unten an die Pins der Hexdrehschalter. Dioden gibt es in ganz klein mittlerweile. auch verfügbar. Wenn das Layout jetzt schon fertig ist, dann würd ich sowas bestellen und mit draufsetzen (gebastelt, aber was hilfts) https://www.reichelt.de/BA-BAY-BB-Dioden/BAT-43WS/3/index.html?ACTION=3&GROUPID=2988&ARTICLE=95208&SEARCH=sod323&START=0&OFFSET=16& Ich hab hier auch welche in doppelt oder dreifach (SOD666?) von NXP als Array.
Gerhard O. schrieb: > Geht doch nicht weil irgendein auf 15 gesetzter Schalter alle vier > Leitungen zusammen verbindet. Das verhindert die unabhängige Auslesung > aller anderen Schalter am Bus. Hast recht, war ein Schnellschuss am frühen Morgen :-( Ist mir dann kurz danach auch aufgefallen, konnte es aber nicht eher korrigieren wegen Handy/Internetverbot während der Arbeitszeit. Jetzt ist Mittagspause, da darf ich :-)
georg schrieb: > TomTom schrieb: >> eine Diode zu spendieren, das gefällt aber >> meinem Layout vom Platz garnicht. > > Alternative wären 2 8bit-Schieberegister. Dann braucht man sogar viel > weniger Pins. > > Georg Oder I2C Portexpander...
Dann denke ich werden es die Dioden, da bin ich etwas flexibler, was dem Platz am Layout angeht. Kann aber gerade froh sein wenn ich die 16 Stück in einem SOD523 Gehäuse unterbringe. Expander denke ich fällt raus. die 8 Pins hab ich ja, der Platz ist nur so ne Sache ;) Danke!
Mal angenommen ich wähle den "einfachen Weg": Das könnte Probleme mit dem Low-Pegel beim AtMega88 bei 3,3V geben, oder? Selbst wenn ich Schottky-Dioden verwende und den gemeinsamen Pin der Codeswitch der Reihe nach zum Auswerten auf 0V ziehe, liegen am Controller trotzdem noch bis zu 0,4 - 0,6V an und das reicht nicht für einen richtig definiertes Low?
@TomTom (Gast) >Selbst wenn ich Schottky-Dioden verwende und den gemeinsamen Pin der >Codeswitch der Reihe nach zum Auswerten auf 0V ziehe, liegen am >Controller trotzdem noch bis zu 0,4 - 0,6V an und das reicht nicht für >einen richtig definiertes Low? Aber sicher, denn die AVRs sind CMOS, da ist LOW <= 0,3*VCC ~ 1V
Bin gerade etwas verunsichert, die 1V würden mir schon gefallen, nur im Datenblatt finde ich das hier (siehe Bild), da ist von 0,1 - 0,3V ohne dem *VCC die rede ... Oder ist es generell vernünftiger die Dioden umzudrehen, Pull-Ups auf GND und die Codeswitch mit VCC anzufahren?
TomTom schrieb: > und das reicht nicht für > einen richtig definiertes Low? Verstehe ich nicht. Du hast den Kenntnisstand, daß es einen erlaubten Spannungsbereich gibt, schaust aber nicht einfach ins Datenblatt unter "DC Characteristics".
0.3 * V_CC, also 30% von VCC. Ich ziehe meine obige Anmerkung zurück.
Ah, jetzt versteh ich die Zeile im Datenblatt, war irgendwie voll auf die 0,3V ohne *VCC aus, sry
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.