Hallo zusammen, ich suche einen AVR, der mehr als 26 I/O Ports hat... Besser wären mehr als 30 I/O Ports... Bedingung: er muss ein DIP-Gehäuse haben, also nix SMD. Kann man bei den 40-pinnern die AD/C-Eingänge als I/O-Ports gebrauchen? Schon, oder? Was könnt ihr mir so empfehlen? Sollte von Bascom unterstützt werden. Herzliche Grüsse Mario
Hi alle Megas im PDIP40. ADC Kanäle kann man problemlos als normale IOs verwenden. Matthias
Kommt halt drauf an, was du unter IO-Port verstehst. Willst du 30 freie Pins haben, neben denen, auf denen die serielle Schnittstelle usw. liegen, oder meinst du insgesamt 30 IO-Pins? Das größte, was du im DIL-Gehäuse bekommen kannst, sind 32 IO-Pins, inklusive Doppelbelegung wie AD-Wandler, Schnittstelle usw. Bleibt dir nur: 1. Doch auf SMD und einen größeren AVR --> z.B. der 640, der sollte genug Ports haben, das ist ein 100-Pinner grins 2. Weitere IO-Ports über Schieberegister dranbauen Ralf
Jo, hab was gefunden... Z.B. den Mega 16. Die Schnittstelle brauch ich net, ich nehm den Chip immer raus und progge extern. Ok, Danke für die Hilfe!
@Ralf "Das größte, was du im DIL-Gehäuse bekommen kannst, sind 32 IO-Pins" ??? Der ATMega162 hat 35 IOs. Peter
sonst wirklich serielle schieberigister benutzen. zur not kann man sich nochmal schnell die aktuelle ct besorgen. dort im ct-bot projekt wird es auch so gemacht ;-)
Ist auch immer die Frage, was willst Du an die 30 I/O's dranhängen... Tasten kann man Multiplexen (z.B. 12 Tasten 7 Leitungen, 16 Tasten 8 Leitungen), gleiches könnte für eine LED-Matrix als Ausgabe gelten... Vielleicht kämst Du dann sogar mit einem 28Pin aus... Manos
Man kann auch Tasten und LEDs über den gleichen Port Multiplexen (Application Note von Atmel: AVR244 oder so ähnlich)
Hmmm, Multiplexen...mal googeln, was dat is.. Wie kann denn das funktionieren? Mehrere Taster an einem Port... cool...
Rupfe mal ne PC-Tastatur auf. Der Chip da drin hat keine 102 Anschlüsse und kann trotzdem alle 102 Tasten abfragen. Drückst Du allerding mehrere Tasten gleichzeitig, kann er das nicht mehr erkennen. Die Sondertasten fragt er daher einzeln ab, damit z.B. Strg+Alt+Entf geht. Ohne Dioden kann man in einer Matrix nur 2 Tasten gleichzeitig eindeutig erkennen. Peter
mit den tastern kann man mit ein paar widerständen und auch an digitalen ios pro port-pin zwei tasten anschließen. im prinzip ist das dann eine kreuz-schaltung in der jeder port-pin die anderen mit einer spannung versorgt und die taster dann über die dioden den dann leiten. mit einem adc-kanal kannst du auch noch mehr anschließen, wenn du einen DAC mit den tastern und widerständen baust.
@Peter: Warum sollte er mehrere gleichzeitig betätigte Tasten nicht erkennen? Es ist nur ein Timing-Problem, da man dazu die Zeilen und Spalten einzeln durchtickern muß, und nicht alle gleichzeitig abfragen kann(ApplicationNote AVR243).
kombinierte Tastatur und LED-Matrix: AVR242 als PDF zu finden unter: http://www.atmel.com/dyn/resources/prod_documents/DOC1231.PDF Warum Atmel sonen dämlichen Dateinamen verwendet ist mir ein Rätsel.
Hmm, hab jetzt mal gegoogelt, aber irgendwie find ich net, wie man das Ganze mit Tastern macht... Man baut eine Matrix auf, aber wie erkennt man denn nun, welcher Taster in der Matrix gedrückt wird?
Klar! Aber da steht das Prinzip nicht drin erklärt, nur, wie und wo die Taster angeschlossen sind... ??
Ist ganz simpel Das sei die Matrix PIN0 PIN1 PIN2 PIN3 PORT7 1 2 3 F PORT6 4 5 6 E PORT5 7 8 9 D PORT4 A 0 B C Du schickst zb an PORT7 eine 1 rein. Ist eine der Tasten '1', '2', '3' oder 'F' gedrueckt, dann siehst Du entsprechend an PIN0, PIN1, PIN2 oder PIN3 diese 1, ansonsten sind die 0. Danach gibst Du PORT7 wieder auf 0 und belegst PORT6 mit einer 1. Siehst du an PIN0 diese 1, dann war die Taste '4' gedrueckt bei PIN1 die '5' usw. Danach waehlst du die naechste Zeile mittels PORT5 aus, usw. Im Grunde setzt Du eine ganze Zeile unter Strom und siehst nach an welcher Spalte der Strom wieder rauskommt. Am Kreuzungs- punkt Zeile/Spalte muss dann die Taste gedrueckt sein.
Ahaa, so geht das! Jetzt is klar! Cooler Tip und vielen Dank! Das steht im Appnote nämlich net drin.... Dank dir!
Tip am Rande: Zu den meisten Appnotes gibt es auch noch ein Codebeispiel im ASM-Format... ...
Könnte man nicht auch mit einem Encoder für die Zeilen und einem Decoder für die Spalten nicht sogar mit 4 Pins auskommen können?
Wenn man es mit Schieberegister und anderen Logik-Bausteinen realisiert, kann man so ziemlich jeden Controller benutzen, und fast jedes Problem in der Richtung lösen... Wenn man aber nicht mal fähig ist, den "parametric table" auf atmel.com lesen bzw. verstehen zu können, benutzt man einen Intel-Core für eine Fussgängerampel (die man auch mit einem Zebrastreifen umd Kreisverkehr ersetzen könnte...).
Hmm, aber wenn ich nun z.B. mehr als 2 Tasten in einer Spalte drücke, dann krieg ich ja einen kurzen, wenn ich net mit Dioden abriegle. Aber wenn ich nun 2 Tasten in einer Spalte gleichzeitig drücke und in einer der Zeile mit gedrückter Taste eine weitere Taste drücke, die direkt daneben liegt, dann stimmts auch nicht mehr... Was kann man da machen? Damit man mehrere beliebige Tasten einer gemultiplexten Tastatur gleichzeitig drücken kann?? Herzlichen Gruss Mario
@Hannes: Nicht nur, dass in den AppNotes Asm-Beispiele sind, es sind auch Programmablaufpläne dabei. Dann sind die meisten Problem ("zwei Tasten gleichzeitig drücken" etc) auch meist schon behandelt, oder? Irgendwie scheine ich mir eine andere AppNote als Mario angeguckt zu haben...
>>Warum sollte er mehrere gleichzeitig betätigte Tasten nicht >> erkennen? Es ist nur ein Timing-Problem, da man dazu die Zeilen >> und Spalten.... Sehe ich genauso. Und wenn man es cleverer macht so fragt man erstmal Spaltenweise/Zeilenweise ab und falls es Tasterkollisonen gibt fragt man nochmals selektiv nur die betroffenen Spalten/Zeilen einzeln ab. Wozu ist den dann der High-Z State und die DDRs im AVR dann noch gut ? Gruß Hagen
Tut doch nicht so erwachsen! Wenn ich jetzt nicht vollkommen daneben liege, testet das Atmel-Beispiel nur auf eine Taste. Zumindest der Ablaufplan auf Seite neun. Oder was übersehe ich hier? Und bei der Frage, wie man "clever" abfragt ob die 4 gedrückt ist, wenn 1, 2 und 5 gedrückt sind, müsst Ihr mir auch mal auf die Sprünge helfen.
Zum Ablauf: Die einfache Variante ist, einen Port auf Eingang zu stellen und die Pull-Ups einzuschalten. Der andere Port wird als Ausgang geschaltet und auf Masse gezogen. Jede gedrückte Taste führt zu einem Low-Pegel an einem Eingang. Dann vertauscht man die Funktionen der beiden Ports, und stellt so die zweite Koordinate der gedrückten Taste(n) fest. Dadurch kann es zu "Phantom-Tasten" kommen (siehe AppNote). Um die zu verhindern, wird nicht der gesamte Port zum Ausgang gemacht, sondern immer nur ein Pin (und der dann auf Low gelegt). Dadurch kann man bei den Eingängen feststellen, ob mehr als nur eine Taste gedrückt wurde. Das erfordert natürlich etwas mehr Zeit, dafür ist es sicherer. Die Quick'n'dirty-Methode hat meist zur Folge, dass die Taste mit der höheren Priorität "gewinnt". Das ist die, die als letzte positiv überprüft wird.
Dass ich einzel durchtesten kann, war mir schon klar. Dass man damit mehr rauskriegt als mit zeilen- und spaltenweisem Test auch. P0 P1 | | P7 -- 1 -- 2 -- | | P6 -- 4 -- 5 -- | | Angenommen, 1, 2 und 5 sind gedrückt. Dann messe ich durch: P0 -> P1, P6, P7 P1 -> P1, P6, P7 P6 -> P1, P2, P7 P7 -> P1, P2, P6 Also: Wie schließe ich jetzt auf den Zustand von Schalter 4? Ich glaube auch, Du hast eine andere AppNote als ich ;)
Ich würde versuchen erstmal alles auf Eingang (P0 und P1 mit Pullup) zu setzen. Anschließend P7 als Ausgang auf Low. Dann sehe ich an P0 und P1 ob sie High oder Low sind (in deinem Fall beide Low). Anschließend P7 wieder Eingang und P6 als Ausgang auf Low. Wieder P0 und P1 checken und da sollte dann P1 auf Low sein und P0 immer noch High, da hier keine Verbindung geschlossen wurde. P0 P1 | | P7 -- 1 -- 2 -- | | P6 -- 4 -- 5 -- | |
> Anschließend P7 wieder Eingang und P6 als Ausgang auf Low. Wieder > P0 und P1 checken und da sollte dann P1 auf Low sein und P0 immer > noch High, da hier keine Verbindung geschlossen wurde. Doch, wurde sie. Die Verbindung geht von P6 zu 5. Der schließt eine Verbindung zur Senkrechten von P1. Von dort schließt 2 die Verbindung zur Waagerechten von P7. Von dort schließt 1 die Verbindung zur Senkrechten von P0. P0 wird low. Oder etwa nicht? P0 P1 1| |2 P7 ---+----+--- | | P6 --------+--- 4| |5 Ich korrigiere meine Tabelle nochmal, inhaltlich bleibt sie gleich. P0 -> P1, P6, P7 P1 -> P0, P6, P7 P6 -> P0, P1, P7 P7 -> P0, P1, P6
Also ohne Dioden kann man nur max 2 Tasten sicher erkennen. Bei 3 oder mehr Tasten können Pseudotasten entstehen: P00 P01 P02 | | | P10 -- p -- -- t -- | | | P11 -- t -- -- t -- | | | P12 -- -- -- -- | | | Ohne Dioden ist durch die 3 Tasten (t) auch P00 mit P10 verbunden und es scheint die Pseudotaste (p) gedrückt zu sein Mit Dioden (eine je Taste) kann man unbegrenzt gleichzeitige Tasten erkennen. Hier mal ein Beispiel für das Auslesen und Entprellen: http://www.mikrocontroller.net/forum/read-4-20511.html#new Peter
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.