Forum: Mikrocontroller und Digitale Elektronik AVR mit mehr als 26 I/O Ports


von Mario Mauerer (Gast)


Lesenswert?

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

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

alle Megas im PDIP40. ADC Kanäle kann man problemlos als normale IOs
verwenden.

Matthias

von Ralf (Gast)


Lesenswert?

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

von Mario Mauerer (Gast)


Lesenswert?

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!

von Alexander (Gast)


Lesenswert?

bei einem 3-state progger kan er auch drin bleiben

von peter dannegger (Gast)


Lesenswert?

@Ralf

"Das größte, was du im DIL-Gehäuse bekommen kannst, sind 32 IO-Pins"

???

Der ATMega162 hat 35 IOs.


Peter

von Aleksej (Gast)


Lesenswert?

2peter dannegger
Mega8515 hat auch 35 IOs

von KoF (Gast)


Lesenswert?

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

von Manos (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

Man kann auch Tasten und LEDs über den gleichen Port Multiplexen
(Application Note von Atmel: AVR244 oder so ähnlich)

von Mario Mauerer (Gast)


Lesenswert?

Hmmm, Multiplexen...mal googeln, was dat is..
Wie kann denn das funktionieren? Mehrere Taster an einem Port...
cool...

von peter dannegger (Gast)


Lesenswert?

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

von hans dieter (Gast)


Lesenswert?

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.

von Rahul (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

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.

von Mario Mauerer (Gast)


Lesenswert?

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?

von Hannes L. (hannes)


Lesenswert?

Hast du dir denn schon Rahuls Link angesehen???

...

von Mario Mauerer (Gast)


Lesenswert?

Klar! Aber da steht das Prinzip nicht drin erklärt, nur, wie und wo die
Taster angeschlossen sind... ??

von Manuel B. (Gast)


Lesenswert?

(entfernt)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Mario Mauerer (Gast)


Lesenswert?

Ahaa, so geht das! Jetzt is klar!
Cooler Tip und vielen Dank! Das steht im Appnote nämlich net drin....

Dank dir!

von Hannes L. (hannes)


Lesenswert?

Tip am Rande:

Zu den meisten Appnotes gibt es auch noch ein Codebeispiel im
ASM-Format...

...

von Läubi (Gast)


Lesenswert?

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?

von Rahul (Gast)


Lesenswert?

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

von Mario Mauerer (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

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

von Hagen (Gast)


Lesenswert?

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

von mh. (Gast)


Lesenswert?

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.

von Rahul (Gast)


Lesenswert?

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.

von mh. (Gast)


Lesenswert?

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

von Manos (Gast)


Lesenswert?

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

von ,,,, (Gast)


Lesenswert?

> ich suche einen AVR, der mehr als 26 I/O Ports hat

www.atmel.com

von mh. (Gast)


Lesenswert?

> 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

von peter dannegger (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.