PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wer hilft mir eine Tastenmatrix 3X4 am Atmega 8 in Gang zu .



nase
12.10.2007, 20:09
Bin Anfänger , und versuche an meinem Atmega 8 eine 3X4 Tastaturmatrix in Betrieb zu nehmen. Leider bin ich Anfänger mit Bascom und suche eine Hilfe zur Programmierung, allerdings sollte es für mich als Neuling verständlich (einfach) erklärbar sein.

Wäre für Hilfe sehr dankbar.



nase

kolisson
12.10.2007, 23:14
hallo du nase...

ich habe gerade deine frage gelesen und habe mich da an etwas erinnert. also habe ich in mein archiv geklickt und die gewünschten informationen gefunden.

ich hoffe du kannst ein bisserl englisch... und du verstehst was der verfasser meint, dann wirst du diese schaltungsvariante lieben. es ist zwar ein 4x4 ... aber das kannst du ja leicht abwandeln.

der vorteil gegenüber vielen anderen lösungen ist die interruptsteuerung. das heisst, dass der mikro nicht immer schauen muss, ob einer ne taste drückt oder nicht.

falls jedoch einer eine drückt, wird er durch nen interrupt aufgescheucht und versucht rauszufinden, welche taste es war.

hier mal der text des autors, den ich leider namentlich nicht nennen kann:



The third method, an interrupt-driven keypad, offers several benefits. First, using interrupts frees the microcontroller to perform other tasks or to switch into an idling or power-down mode while awaiting the next key closure. Second, using interrupts helps reduce electromagnetic interference produced by continuously scanning the keypad's lines. Figure 1 shows an interrupt-driven keypad implementation that's based on Atmel's AT89C52 version of the popular MCS-51 family of microcontrollers. Here, the rows of a 16-key keypad, S1 through S16, implemented as a 4×4-key matrix connect to the lower nibble (P1.0 to P1.3) of IC1's Port 1. The keypad's columns connect to IC1's Port 1 upper nibble (P1.4 to P1.7) and a network of four diodes (D1 through D4 and a 10-kΩ resistor, R9. The junction of R9 and the diodes' anodes connects to Port Pin 3.2 and generates an interrupt whenever the user presses a key.
Initially, Port 1's lower nibble sits high at logic one, and the upper nibble is grounded at logic zero, applying reverse bias to the diodes and pulling the signal high. Pressing a key applies forward bias to the diode corresponding to that row and causes to go low, generating an external interrupt to the microcontroller. Upon receiving an interrupt and after a 20-msec software-debouncing interval, the microprocessor sequentially reads the row and column lines. Capacitor C1 provides a hardware-based debouncing interval of approximately 25 msec.
In this design, the microcontroller's software returns a binary-formatted input corresponding to the pressed key's number as sensed at Port P1 (P1.0 to P1.3). As the commented assembly-language routine, available here, explains, the software ignores invalid key combinations. Idle and power-down modes available in CHMOS (complementary high-density MOS) versions of the MCS-51 family save power and thus make these microcontrollers ideal choices for battery-operated devices. For example, a 5V, 12-MHz Atmel AT89C52 consumes approximately 25 mA in active mode, 6.5 mA in idle mode, and only 100 µA in power-down mode. Any enabled interrupt can switch the microprocessor from idle to active modes.


und dann die zeichnung. lass dich von dem verwendeten mikrokontroller nicht stören... ports sind ports... int eingänge sind int eingänge!

kolisson
12.10.2007, 23:44
und nochwas...

sollte dein mega8 mal kaputt gehen, kauf keinen neuen.
mitlerweile gibt es den mega88v... der ist eigentlich genauso..... braucht weniger strom und noch ein paar vorteile, die du, wenn du nicht mehr anfäger bist... vielleicht zu schätzen lernst.

gruss

nase
13.10.2007, 15:01
Danke für diese Information und vor allem für deine Mühe, werde versuchen mich da einmal einzuarbeiten. Noch eine Frage? Hat der Mega88v die gleiche Anschlußbelegung , also ist er PIN Kompatible ?

gruß Nase

radbruch
13.10.2007, 15:23
Hallo

Das wäre mein Favorit zum Anschluss einer 3x4-Tastenmatrix an einen ATMega8. Es wird nur ein (ADC-)Pin verwendet:

http://www.avr-asm-tutorial.net/avr_de/keypad/keyboard.html#adc

Gruß

mic

kolisson
13.10.2007, 17:35
ja ja ... der 8er und der 88er sind pinkompatibel.

die interne referenzspannung ist anders... das sollte man beim design beachten. ansonsten nur vorteile.
unter anderem ist beim 88er jeder portpin interruptfähig.
da kannste bezüglich tastatur dann ganz gut mit arbeiten

gruss

nase
14.10.2007, 16:20
Danke ,,, alles schön und gut, aber zum einen kenn ich mich mit assembler nun überhaupt nicht aus, zum anderen habe ich meine 3X4 Tastatur schon an meiner Schaltung angelötet und möchte sie auch so benutzen. Die Lösung mit dem ADC Pin fällt also wegen Assembler aus.


gruß nase

radbruch
14.10.2007, 17:44
Die Lösung mit dem ADC Pin fällt also wegen Assembler aus.

Häää? Was hat denn der ADC mit Assembler zu tun? Es wird gezeigt, wie man eine 3x4-Tastenmatrix beschalten muss damit jeder Tastendruck eine eindeutige Spannung generiert. Diese Spannung wird mit dem ADC gemessen. Das geht in C, Basic und natürlich auch Assembler (was letzlich ja auch bei den "Hochsprachen" erzeugt wird).

Ich hab's selbst noch nicht versucht, aber diese Lösung erscheint mir günstig, weil eben nur ein Pin verwendet wird. Geringer Resourcenverbrauch und geringer Schaltungsaufwand bei ausreichender Funktion. Ich werde berichten, wenn ich's umgesetzt habe.

Gruß

mic

Dirk
14.10.2007, 19:30
Hallo radbruch,

Ich hab's selbst noch nicht versucht, aber diese Lösung erscheint mir günstig, weil eben nur ein Pin verwendet wird.

Das fand ich auch und habe meinem M32 eine 4x4-Tastatur an einem A/D-Wandler spendiert. Funktioniert wunderbar.

Hier meine Schaltung (1%-Metallfilm Widerstände sind zu empfehlen!).

Gruß Dirk

radbruch
14.10.2007, 21:22
Ich komm da nicht weg. Warum lernt man denn Assembler? Damit man vollen Zugriff auf alle Funktionen des Mikrokontrollers hat. "Ich kann den ADC nicht nutzen, weil ich ja in Assembler programmieren will" ist dann doch echt ein Brüller.

nase
14.10.2007, 21:55
Was der ADC mit Assembler zu tuen hat?

Weil der oben dargestellte Link auf ein Assembler Tutorial verweist. Und ich hier auch weniger eine Hardware Lösung , als mehr eine Software Lösung suche.Und zwar eine Lösung in Basic (Bascom) .

Gruß
nase

radbruch
14.10.2007, 23:58
Hallo nase

Bitte entschuldige, ich habe das verwechselt. Du wolltest ja eine bascom-Lösung. Irgendwie bin ich dann auf Assembler gekommen, keine Ahnung, wieso. Sorry.

Schade, dass ich nicht helfen konnte. *grummel*

Gruß

mic