Hallo Tobi,
Bei Deiner Variante benötige ich aber noch Treiberbausteine.
Bei 22 LEDs ist das je nach Methode ein relativ großer Bauteil
/ Kosten Aufwand.
die ebenso einfache wie wirkungsvolle Methode, den Bauteilaufwand auf ein Minimum zu beschränken, heißt Multiplexen.
Wenigstens _einen_ Treiberbaustein brauchst Du sowieso. Du kannst nicht 22 LEDs direkt an den µC anschließen. Es stimmt zwar, daß die Pins vieler Controller 20 mA sinken können, aber es gibt darüberhinaus Beschränkungen für den Strom bzgl. Ports und bzgl. des ganzen Chips (Details siehe Datenblätter). 22 gleichzeitig anne LEDs = 440 mA. Das schafft kein Controller.
Wenn Du Deine unverständliche Multiplex-Abneigung überwindest, wirst Du damit belohnt, mit nur einem einzigen Treiberbaustein auszukommen. 24 LEDs kannst Du bestens 8x3-gemultiplext ansteuern (8 Zeilen, 3 Spalten). Ein 8-fach-Treiber-IC steht z. B. mit dem ULN2803 zur Verfügung (8 Eingänge TTL-Pegel, 8 Ausgänge max. 50V / 500mA, Gehäuse 18pol. PDIP). Das kannst Du direkt an einen als Ausgang geschalteten 8-Bit-Port Deines µCs hängen. Mit drei Transistoren BC338 o. ä. selektierst Du die Spalten. Fertig ist die LED-Geschichte.
Nun zu den Tasten. 32 der 34 Tasten ordnest Du in einer 8x4-Matrix an (8 Zeilen, 4 Spalten). Die 8 Zeilen werden mit dem LED-Ausgangs-Port von oben bedient. Die vier Spaltenleitungen gehen an vier als Eingang geschaltete IO-Pins.
Die beiden übrigen Taster gehen separat an zwei weitere IO-Pins.
Die RS232-Schnittstelle benötigt minimum zwei Pins (TxD, RxD). Wenn Du Handshaking machen willst, sollte das in der Bedarfsplanung mit zwei weiteren Pins berücksichtigt werden.
Somit haben wir folgende Bilanz:
8 Out-Pins gemeinsam für LEDs-Zeilen + Tastenmatrix-Zeilen
3 Out-Pins für die LEDs-Spalten-Select-Transistoren
4 In-Pins für die Tastenmatrix-Spalten
2 In-Pins für zwei Tasten
4 Pins für RS232
21 Pins total.
Nun noch zur Sache mit dem ADC. Leider schreibst Du nicht, was für Anforderungen an die Genauigkeit (wieviele Bits) gestellt werden. Wenn 10 Bit ausreichen, bietet sich an, einen µC mit integriertem ADC zu verwenden. Ansonsten mußt Du einen externen ADC-Baustein einsetzen, z. B. den LTC1290 (8 Kanäle, 12 Bit).
Ein µC, der alle Anforderungen erfüllt, wäre der ATmega8535 aus der AVR-Familie von ATMEL. Den gibts im 40pol-DIP-Gehäuse. Er verfügt über 8 KByte Flash-Memory, 512 Bytes SRAM, Hardware-UART und max. 32 IO-Pins, die ausreichen sollten (21 digitale + 8 für den ADC macht zusammen 29). Unter den vielen Mitgliedern der PIC-Familie solltest Du mindestens einen gleichwertigen Vertreter finden können.
ich stehe mal wieder vor der schweren Entscheidung einen µC
auswählen zu müssen und kann mich einfach nicht entscheiden.
Das hört sich so an, als ob Du schon Erfahrungen mit µCs hast, aber Deine Fragen lassen ehrlich gesagt eher darauf schließen, daß Du noch Anfänger bist.
Und nein: Bei Anordnung der Tasten in einer Tastenmatrix kannst Du selbstverständlich den Status jeder einzelnen Taste korrekt erfassen, unabhängig davon, wieviele gerade gleichzeitig niedergedrückt sind. Das beeinflußt sich nichts gegenseitig. Als Abfrageintervall für die Tasten reichen 20 ms – also 50 Abfragen pro Sekunde – völlig aus, ohne daß der Benutzer den Hauch einer Reaktionsverzögerung spürt. Die Multiplex-Frequenz für die LED’s muß jedoch um einiges höher sein, damit kein Flackern mehr erkennbar ist.
treiben kann. Es wären dan evtl. zwei PIC16F77. Der externe
Schaltungsaufwand wär eben sehr gering und billig wärs auch
Der Glaube, ein Problem am besten mit mehreren µCs lösen zu können, ist – sorry – typisches Anfängerdenken. Mach Dich davon frei. Mehrere µCs müssen notwendigerweise untereinander Daten austauschen, und auch, wenn Du meinst, daß das Protokoll ja „nur ganz einfach“ sein muß: vergiß es! Wie die Erfahrung lehrt, hat sich die praktische Umsetzung nämlich stets als „doch viel komplizierter als gedacht“ herausgestellt, und deshalb kann ich Dir bei diesem Weg jede Menge Frust prophezeihen. An Verdrahtungsaufwand würdest Du dabei letztlich garnichts sparen, dürftest Dich aber völlig unnötigerweise damit herumschlagen, ein Inter-µC-Kommunikationsprotokoll zu entwerfen, zu implementieren und solange zu testen, bis es auch funktioniert.
Die Erweiterung von Ports für den Fall, daß man mehr davon braucht, als ein µC zur Verfügung stellt, ist ein Standardproblem in der µC-Technik, für das es zuverlässige, bewährte Standard-Lösungen gibt, mit Multiplex-Verfahren an erster Stelle.
Gruß
Martin