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...
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
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
und wer mehr auf analog steht, baut mit den tastern/schaltern nen r2r-dac auf und wertet die spannung aus.
Der parallel->analog wandler: braucht der dann ein Quarz-oszillator, damit beide den gleichen Takt haben - oder wie geht das? Ist das kompliziert?
mit hauruck ohne sich ein bisschen grundwissen anzueignen klappts halt nicht.
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.
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.
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.
Mit 74HC165 brauchst du nur insg 3 Pins am Controller fuer egal wieviele Erweiterungen... aber gut, mach du mal :) gruss, bjoern.
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ß
[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?
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.
@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.
http://www.kronosrobotics.com/an140/DAN140.shtml Hab's schon gefunden. Ich hab's jetzt auch kapiert. Super, danke!
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.
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...
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.
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.
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.
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; "
>...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.
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.
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?
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?
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.