Seite 2 von 6

Re: Telefon mit 4x4 Matrix

Verfasst: Mo 11. Feb 2013, 19:27
von Bussard
"Na denn mal Butter zu die Fische" :/ , wie man in manchen Gegenden so sagt.

Habe im Herbst mal eine Matrixtastatur von dx.com bestellt und in i-net nach Beispielen gesucht. Im Quelltext sind eine Anschlußvariante und der für 3 Matrixanordnungen gültige Tasten-String angegeben (bei der 12- Tasten-Variante von dx wird einfach die letzte Spalte ignoriert/weggelassen).
Auch die Ansteuerports sind frei wählbar, es müssen aber für die BASCOM-Routine alle Tastenanschlüsse an einem Port liegen. Aufpassen bei PC6 (Reset), den nicht verwenden!
Entscheidend für die Tastenzuordnung ist der String "Asciichars".
Um es leichter zu haben, habe ich zu Testzwecken den Tastencode auf ein LCD-Display ausgegeben.

Gruß Bussard


'######################################################################################
'ATMEGA8 Universalplatine von Bussard
'Ansteuerung LCD-Display 2x16 Zeichen an Port C (Pin 0 bis 5, Pin 6= /Reset frei)
'Keyboard an Port D
'
' Quellen: mikrokontroller.net, halvar.at
' erstellt am : 12.10.2012
' letzte Änderung: 17.10.2012
'
'##### Init ###################################################

$regfile = "m48def.dat"
$crystal = 1000000 'Werkseinstellung

'LCD am Port C
Config Lcd = 16 * 2 '2 x 16 Zeichen Display (1602A weiß auf blau)
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Waitms 200
Cls
Cursor Off
'oder auch Cursor On, Blink


'Keyboard 0..9, *, #
Dim Keycode As Byte
Dim Asciichars As String * 16

'dx.com #117718 (3x4 Matrix Pin1 an PD6, Pin7 an PD0), (4x4 Matrix #117720)
Asciichars = "147*2580369#ABCD"
'Asciichars = "123 456 789 *0# " 'Conrad.de Matrix nach Halvar.at

Config Kbd = Portd , Debounce = 20 , Delay = 10 ' Tastatur an Port D0 bis D6 angeschlossen


'Variablen
Dim Bt As Byte
Dim S As String * 2
Dim Taste As String * 2


'##### Main ##################################################


Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hallo Bussard_BB" 'String auf Display anzeigen

Waitms 500

Do
Keycode = Getkbd()
  If Keycode <> 16 Then ' 16 = KEINE Taste gedrückt
  Keycode = Keycode + 1
  Locate 2 , 1
  Lcd " "
  Locate 2 , 1
  Lcd "Code " ; Keycode
  Locate 2 , 9
  Taste = Mid(asciichars , Keycode , 1)

  'Lcd "Taste" ; Chr(34) ; Mid(asciichars , Keycode , 1) ; Chr(34)
  Lcd "Taste" ; Chr(34) ; Taste ; Chr(34)
  Waitms 200
  End If

Loop

'##########################################################################


End

Re: Telefon mit 4x4 Matrix

Verfasst: Do 14. Feb 2013, 14:31
von Haenigser
Irgendetwas scheint an den Tastaturen der analogen Telefone anders zu sein. Ich habe jetzt diverse Schaltungen bzw. Programmcodes ausprobiert und nie das gewünschte Ergebnis erhalten.

Zum Beispiel der einfache Code aus der AVR Hilfe:
Wenn keine Taste gedrückt wird, soll hier 16 ausgegeben werden, bei Tastendruck ein entsprechend anderer Wert. Ich bekomme allerdings nur den Wert 15 angezeigt - egal ob Taste gedrückt oder nicht (und keine Taste klemmt ;) ).

Ich verwende zum Programmieren Bascom-AVR, den "mySmartUSB light", zusammen mit dem Pollin-Board + Adapter fürs Steckbrett. Den Code bzw. die Schaltung aus der Bascom Hilfe habe ich mit einem ATmega88 verwendet. Liegt hier vielleicht der Fehler? Einen ATmega48 habe ich momentan nicht hier.

Re: Telefon mit 4x4 Matrix

Verfasst: Do 14. Feb 2013, 16:46
von stonewood
Hast Du mal mit nem Multimeter nachgemessen? Am besten natürlich nicht am Atmel, nicht daß der irgendwas stört. Wenn keine Taste gedrückt ist sollte nichts verbunden sein, also alles hochohmig. Wenn eine Taste gedrückt ist sollten 2 Drähte niedrigohmig sein (also z.b. PB0 - PB4 in der Schaltung von Bussard unten). Eventuell funktioniert Deine Matrix ja nicht?

Übrigens müssen die 'Kämme' auf die die Tasten drücken sauber sein, wenn da Schmutz drauf ist kann das als ein Tastendruck gewertet werden.

Der Code von Bussard ist für einen atmega48 ($regfile = "m48def.dat"), das mußt Du natürlich je nach Prozessor ändern, außerdem dann eventuell die Pins die der mega48 hat und Deiner nicht.

Re: Telefon mit 4x4 Matrix

Verfasst: Do 14. Feb 2013, 18:02
von Bussard
Haenigser hat geschrieben:Ich bekomme allerdings nur den Wert 15 angezeigt - egal ob Taste gedrückt oder nicht
Hast Du ein Display angeschlossen oder wie bekommst Du den Code angezeigt?

Wenn Du keine Tastatur angeschlossen hast, muß jedenfalls 16 kommen. Es sein denn, Du spielst das Ganze nur mit dem Bascom-Simulator durch, dann kommt 15 (siehe http://halvar.at/elektronik/kleiner_bas ... astenfeld/ ).
Ob Atmega48 oder 88 oder 8 oder 168, spielt hier keine Rolle, ist vornehmlich die Speichergröße, welche die Typen unterscheidet. Zum Programmieren muß, wie stonewood schreibt, eben der passende Chip in den Einstellungen von Bascom oder gleich hier im Basic-File angegeben sein.

Gruß Bussard

Re: Telefon mit 4x4 Matrix

Verfasst: Do 14. Feb 2013, 20:18
von Haenigser
Bussard hat geschrieben:Wenn Du keine Tastatur angeschlossen hast, muß jedenfalls 16 kommen. Es sein denn, Du spielst das Ganze nur mit dem Bascom-Simulator durch, dann kommt 15
Tütüütüüü... :ops:
Hab den Bascom-Simulator genutzt. Ich dachte der reagiert auch auf die Tastatur, oder doch nicht?

Re: Telefon mit 4x4 Matrix

Verfasst: Do 14. Feb 2013, 21:54
von Bussard
:p .
Das Leben ist hart, dafür real.

Gruß Bussard

Re: Telefon mit 4x4 Matrix

Verfasst: Fr 15. Feb 2013, 13:01
von Haenigser
So, da ich denke, dass ich hier ohne Display nicht weiterkomme, habe ich erstmal eins bestellt.

Re: Telefon mit 4x4 Matrix

Verfasst: So 24. Feb 2013, 00:20
von Haenigser
@ Bussard:

Läuft... Vielen Dank!
Bild

Jetzt kann ich mich ans Schloss ranmachen. :-)

Re: Telefon mit 4x4 Matrix

Verfasst: So 24. Feb 2013, 00:36
von Haenigser
Hier noch die Steckerbelegung der Tastatur:

1: Spalte 1 -> PD0
2: Spalte 2 -> PD1
3: Zeile 1 -> PD4
4: Zeile 2 -> PD5
5: Zeile 3 -> PD6
6: Zeile 4 -> PD7
7: Spalte 4 -> PD3
8: Spalte 3 -> PD2

Re: Telefon mit 4x4 Matrix

Verfasst: So 24. Feb 2013, 06:33
von Bussard
Super!
Mit Display und Steckbrett wird auch der Rest der Schaltung leichter.

Gruß Bussard