AVR mit mehr als 26 I/O Ports

Gast #277067
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
Gast #277069
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
Gast #277075
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
Gast #277078
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
Gast #277079
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.
Gast #277080
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).
Gast #277082
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?
#277086
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.
Gast #277090
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...).
Gast #277091
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
Gast #277092
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...
Gast #277093
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
Gast #277094
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.
Gast #277095
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.
Gast #277096
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 ;)
Gast #277097
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 --
      |    |
Gast #277099
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
Gast #277100
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren