AVR mit mehr als 26 I/O Ports

Gast #277067
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
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
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!
Gast
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 ;-)
Gast
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
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
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
@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
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?
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
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
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
@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
>>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
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
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
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
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
> 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
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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.