2 µC - unterschiedliches Ergebnis

Fragen oder Tipps & Tricks über Software

Moderatoren: Tim Sasdrich, Sebi

2 µC - unterschiedliches Ergebnis

Beitragvon Max346 » 26.05.2017, 00:56

Hallo liebes Forum!

Für ein Simulationsprojekt benötige ich eine PC Tastatur. Beziehungsweise etliche Tastenkombinationen. Die Tasten möchte ich mit einem µC ersetzen.
Habe dafür eine alte USB Tastatur "geschlachtet", um an die Tastenmatrix heranzukommen. Diese besteht aus 8 Reihen und 16 Spalten.

Nun zum Probelm:
Mit einem Tiny25 und dem folgendem Programm funtioniert das einwandfrei.
Spoiler: show
Code: Alles auswählen
$regfile = "attiny25.dat"
$crystal = 1000000
$hwstack = 10
$swstack = 10
$framesize = 10


'Configs
Config Pinb.3 = Input                                       'Row
Config Pinb.4 = Input                                       'Schalter
Set Portb.4                                                 'Pull up ein
Schalter Alias Pinb.4
Config Pinb.2 = Input                                       'Col

Do

   If Schalter = 0 Then
      Ddrb.2 = 1                                            'Spalte auf OUTPUT
      Portb.2 = Pinb.3                                      'Spalte = Reihe
     Else
      Ddrb.2 = 0                                            'Spalte auf INPUT
   End If

Loop
End



Da ich aber wie gesagt mehr als eine "Taste" benötige, war der nächste Versuch mit dem Mega32. Dieser würde genau passen.
Angepasster Code, theoretisch gleiche Funktion, aber KEIN Ergebnis.

Spoiler: show
Code: Alles auswählen
$regfile = "m32def.dat"
$crystal = 1000000
$hwstack = 10
$swstack = 10
$framesize = 10


'Configs

'Ddra = 0                                                    'Col1 Input - Tristate
'Ddrc = 0                                                    'Col2 Input - Tristate
'Ddrb = 0                                                    'Rows Input - Tristate
'Ddrd = 0                                                    'PinD = Schalter
'Portd = 127                                                 'Pull up ein


Config Pina.0 = Input
Config Pina.1 = Input
Config Pina.2 = Input
Config Pina.3 = Input
Config Pina.4 = Input
Config Pina.5 = Input
Config Pina.6 = Input
Config Pina.7 = Input
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input
Config Pind.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.5 = Input
Config Pind.6 = Input
Config Pind.7 = Input

Set Portd.0
Set Portd.1
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
Set Portd.6



'Konstanten



'Variable
'Dim Spalte As Dword
'Dim Reihe As Byte
'Dim Schalter As Byte

'(
'Aliases
Spalte.0 Alias Pina.0
Spalte.1 Alias Pina.1
Spalte.2 Alias Pina.2
Spalte.3 Alias Pina.3
Spalte.4 Alias Pina.4
Spalte.5 Alias Pina.5
Spalte.6 Alias Pina.6
Spalte.7 Alias Pina.7
Spalte.8 Alias Pinc.7
Spalte.9 Alias Pinc.6
Spalte.10 Alias Pinc.5
Spalte.11 Alias Pinc.4
Spalte.12 Alias Pinc.3
Spalte.13 Alias Pinc.2
Spalte.14 Alias Pinc.1
Spalte.15 Alias Pinc.0
Spalte.17 Alias Pind.7

Reihe.0 Alias Pinb.7
Reihe.1 Alias Pinb.6
Reihe.2 Alias Pinb.5
Reihe.3 Alias Pinb.4
Reihe.4 Alias Pinb.3
Reihe.5 Alias Pinb.2
Reihe.6 Alias Pinb.1
Reihe.7 Alias Pinb.0

Schalter.0 Alias Pind.0
Schalter.1 Alias Pind.1
Schalter.2 Alias Pind.2
Schalter.3 Alias Pind.3
Schalter.4 Alias Pind.4
Schalter.5 Alias Pind.5
Schalter.6 Alias Pind.6
')

'Startwerte



'Beginn Hauptschleife
Do

   If Pind.0 = 0 Then
      Ddra.4 = 1                            'Spalte auf Output
      Porta.4 = Pinb.3                    'Spalte = Reihe
    Else
      Ddra.4 = 0                            'Spalte wieder auf Input
   End If

Loop
End


Bitte helft mir auf die Sprünge, warum das nicht funktioniert!
Es kommt einfach keine "Taste" an.

Mfg Markus
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: 2 µC - unterschiedliches Ergebnis

Beitragvon Tim Sasdrich » 26.05.2017, 02:09

Wenn ich es richtig verstanden habe, soll der µC Tastendrücke an den PC senden? Das Ganze ist eine etwas komplizierte Methode. Du musst herausfinden, welche Spalte gerade gescannt wird, um die entsprechenden Reihen zu betätigen. Alle Tastaturen mit Matrix haben ein Problem, wenn 3 entsprechende Tasten gleichzeitig gedrückt werden: 2 der selben Spalte und 2 der selben Zeile. All diese Tastenkombis kannst du dann nicht verwenden.

Gibt fertige Module, mit dem Bluefruit EZ-Key - 12 Input Bluetooth HID Keyboard Controller habe ich bereits gute Erfahrungen gemacht. Funktioniert am PC sowie (Android-)Smartphone. Das Modul hat 12 Eingänge, deren Funktion du selbst bestimmen kannst. Zudem gibt es eine UART-Schnittstelle, über die man auch die Tastenbetätigungen nach HID-Standard übertragen kann (bis zu 6 gleichzeitig gedrückte Tasten sowie Strg, Alt, Umschalt, ...). Und auch Mausbewegungen sowie die Multimedia-Tasten kann man damit senden. Allerdings kostet das Modul ca. 25 € und du brauchst ja nicht unbedingt Bluetooth. Evtl. gibt es auch ein ähnliches Modul für USB.

Eine günstigere Möglichkeit wäre, den µC das USB-HID-Protokoll emulieren zu lassen. Für BASCOM ist mir da aber bisher nichts bekannt. Es gibt auch µCs, die für USB gedacht sind, mit denen ist das dann noch einfacher.

Man könnte dem PC auch über eine serielle Schnittstelle Informationen senden und auf dem PC per Software zu Tastendrücken umsetzen.


Zu deinem Code:
Du setzt im Else-Teil den Port nicht zurück, es bleibt somit ein Pull-Up aktiv. Allerdings hast du das auch beim kleinen Controller so.
Im 1. Programm wird Pinb.3 als Input gesetzt, im 2. Programm nicht. Allerdings ist Input der Defaultwert. Allerdings setzt du Port C und nutzt ihn nicht. Evtl. falsch verkabelt bzw. Copy/Paste-Fehler?
Dass Port C Probleme macht kann an den Fuse-Bits liegen, da hängt nämlich im Auslieferungszustand die JTAG-Schnittstelle mit drauf, wenn ich mich recht erinnere.
"Der Kluge lernt aus allem und von jedem, der Normale aus seinen Erfahrungen und der Dumme weiß alles besser." - Sokrates (470 - 399 v. Chr.), griechischer Philosoph
Tim Sasdrich
 
Beiträge: 2921
Registriert: 07.01.2009, 14:15
Wohnort: Villingen-Schwenningen

Re: 2 µC - unterschiedliches Ergebnis

Beitragvon topas » 26.05.2017, 03:39

Es hilft zwar niemandem - aber mit Matrixtastaturen kann man auch Musikinstrumente steuern - 20 Finger sind kein Problem. :D
Ist wohl eher eine Frage der Software.
Wenn die Ausgänge der Matrix nicht simultan für andere Dinge genutzt werden, muss man sie auch nicht wieder ständig zu Eingängen machen.
Steuerungen mit Basic kinderleicht wie zu Commodorezeiten aber mit AVRs: pahlbasic
Benutzeravatar
topas
 
Beiträge: 3772
Registriert: 16.08.2010, 12:47
Wohnort: Düsseldorf

Re: 2 µC - unterschiedliches Ergebnis

Beitragvon Max346 » 26.05.2017, 10:51

Bei der Tastatur dürften alle Leitungen hochohmig sein. Und dann wird nach einem Low bei den Reihen gesucht.

Der Unterschied beim Programm für den Mega32 ist, dass alle Reihen und Spalten daran angeschlossen sind. Port A, C und D.7 sind die Spalten, Port B die Reihen.
Am restlichen Port D sind meine Taster.
Beim Tiny hab ich aufgrund der wenigen Ports jeweils nur eine Verbindung zu einer Reihe und einer Spalte.

JTAG ist deaktiviert.
Max346
 
Beiträge: 229
Registriert: 17.05.2010, 14:40
Wohnort: Pottenstein

Re: 2 µC - unterschiedliches Ergebnis

Beitragvon Sebi » 26.05.2017, 11:45

Du kannst, je nach Betriebssystem, Tastatur-Eingaben auch via Software simulieren, so sparst Du Dir den Aufwand mit der extra Hardware. (Oder kannst das Verhalten auch noch einfacher anpassen)
Für Windows sieht das hier vielversprechend aus:
https://stackoverflow.com/questions/2791839/which-is-the-easiest-way-to-simulate-keyboard-and-mouse-on-python
Unter Linux (Ubuntu) habe ich das mal mit xvkbd gemacht.
Sebi
 
Beiträge: 834
Registriert: 10.08.2009, 17:57
Wohnort: Darmstadt

Re: 2 µC - unterschiedliches Ergebnis

Beitragvon alterhase » 26.05.2017, 20:48

Hier sind einige Probleme beim Umstieg vom Tiny auf den Mega beschrieben. klickmich ...vielleicht ist auch deines dabei.

Ich hab mich das letzte Mal vor 10 Jahren mit den AVR´s beschäftigt und kann mich dunkel erinnern, dass da ein Stolperstein bei der Portabfrage ist.
Hab mir deshalb sogar extra die Portarchitektur (Seite 48/318 Datenblatt) herauskopiert. ...aber leider keine Memos dazu gemacht. ...habe wohl gedacht, das sei dann eh logisch.
Löten verbindet ...manchmals. :mrgreen:
73 55
alterhase
 
Beiträge: 11906
Registriert: 14.11.2008, 08:58
Wohnort: Wien/Kapfenberg


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste