USB oder PS2 Tastatur an PIC anschließen und Ausgabe auf's LCD-Display
Montag, 21. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  Schnittstellen (CCS)  |  USB oder PS2 Tastatur an PIC anschließen und Ausgabe auf's LCD-Display « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: USB oder PS2 Tastatur an PIC anschließen und Ausgabe auf's LCD-Display  (Gelesen 4070 mal)
 
Bernd_Fritz
Newbie
*
Offline Offline

Beiträge: 27


Mein Hobby


Profil anzeigen WWW
« am: Januar 09, 2007, 14:18:38 »

Hallo Zusammen,

ich steuere meine PIC's immer über ein Terminal Programm über die RS232 Schnittstelle an, der große Nachteil ist, ich brauche immer ein PC oder Laptop dazu. Nun habe ich mir gedacht eine USB oder PS2 Tastatur an einen PIC anzuschließen und z.B. eine Ausgabe auf's LCD Display zu programmieren.
Gibt es Beispiele das hier ohne viel Aufwand zu realisieren?

Gruß
Bernd_Fritz
« Letzte Änderung: Januar 09, 2007, 14:47:04 von Bernd_Fritz » Gespeichert

MFG
Bernd Fritz
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Januar 09, 2007, 14:24:04 »

Hallo,


Zitat
Nun habe ich mir gedacht eine USB Tastatur an einen PIC anzuschließen und z.B. eine Ausgabe auf's LCD Display zu programmieren.
Das geht nicht, da die USB-Tastatur ein "Slave" am USB-Bus ist, und der PIC keine Host-Funktion übernehmen kann. Du könntest versuchen, die Tastatur über PS/2 anzusteuern, dabei kann ich dir aber nicht helfen.

Gruß Stefan
Gespeichert

Bernd_Fritz
Newbie
*
Offline Offline

Beiträge: 27


Mein Hobby


Profil anzeigen WWW
« Antworten #2 am: Januar 09, 2007, 14:46:04 »

Hallo,

danke für die Info. Meine Frage wird jetzt um die PS2 Tastatur erweitert.
Gruß
Bernd_Fritz
Gespeichert

MFG
Bernd Fritz
Aleks
Newbie
*
Offline Offline

Beiträge: 48



Profil anzeigen WWW
« Antworten #3 am: Januar 09, 2007, 15:17:24 »

Hallo Bernd Fritz!

Nun ... "PIC PS/2" im google eingeben ...

Gutes Beispiel mit Source Code im Assembler gibt es hier:
http://www.electronic-engineering.ch/microchip/index.html

Gute Erklaerung des Protokols und noetige Schaltung:
http://www.computer-engineering.org/ps2protocol/

PS/2 ist eine einfache serielle Schnittstelle, mit DATA und CLOCK. Beide Signale sind Open Collector, also man kann Schaltungen und Tricks, die bei IIC verwendet werden, anwenden.

Die einzige "Arbeit" besteht darin, die Scan Codes in ASCII Zeichen zu verwandeln. Tastatur schickt Dir sogenannte SCAN CODES, die Du mit Hilfe einer Tabelle in ASCII umwandeln kannst.

Viel Spass!
Gespeichert
Bernd_Fritz
Newbie
*
Offline Offline

Beiträge: 27


Mein Hobby


Profil anzeigen WWW
« Antworten #4 am: Januar 10, 2007, 07:17:15 »

Hallo Zusammen,

erstmals vielen Dank für die Infos. Ich habe beim Google jetzt folgende Interessantes Projekt entdeckt, PS2 Tastatur am PIC18F252. Hier steht alles drin was ich brauche, Schaltplan Eagle, Quellcode in C Programmiert. Ich lasse das Thema noch offen. falls jemand eine noch bessere Lösung kennt. Hier der Link den ich gefunden habe:

http://www.elektronik-forster.de/ps2_pic.html

Gruß Bernd_Fritz
Gespeichert

MFG
Bernd Fritz
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #5 am: Januar 10, 2007, 20:32:59 »

Im Schaltplan sind nicht alle Verbindungen korrekt, z.B. ist der Netzname an der PS/2 Buchse für KBD_DATA N&17, am PIC (RC3) aber N$3.

Wenn Du einen PIC18 verwendest, würde ich keine vier Pins für die PS/2 Schnittstelle verschwenden, sondern lediglich zwei Pins des PICs verwenden (Q2 und Q3 brauchst Du dann auch nicht).

Einen "Quasi-Open-Drain" Ausgang kannst Du mit einem PIC18 sehr einfach erzeugen. Das LAT-Bit für den entsprechenden Pin wird einmalig beim Programmstart auf "0" gesetzt. Um eine "1" zu erzeugen, wird das TRIS-Bit gesetzt (Pullup liefert die "1). Für eine "0" am Ausgang wird das TRIS-Bit gelöscht (der Portpin liefert die "0"). Um Signale von der Tastatur zu lesen, muß das TRIS-Bit natürlich auch gesetzt werden.

Der Code enthält zumindest einen gravierenden Fehler (abgesehen von der nicht vorhandenen Formatierung):

Zitat
Code:
#INT_EXT
VOID interrupt(VOID){

disable_interrupts(INT_EXT);
disable_interrupts(GLOBAL);

PS2_BREAK_DATA = 0;

ps2_getdata();

//delay_ms(50); //Entprellung der Tasten, kann beliebig verändert werden

PS2_DATA_RECEIVED=1;

enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

return;}

Das Deaktivieren von Interrupts in der ISR ist sinnlos, da die PIC Hardware automatisch dafür sorgt (GIE ist schon 0). Das globale Aktivieren von Interrupts (GIE=1) darf niemals in der ISR vorgenommen werden. Anderenfalls kann (und wird es früher oder später) passieren, daß ein Interrupt auftritt, bevor die beim Eintritt in die ISR gesicherten Register zurückgeschrieben worden sind.

Der PIC springt also noch während der Ausführung des Interrupts erneut an den Interruptvektor und die beim Eintritt in die ISR gesicherten Werte werden mit den zum Zeitpunkt der Interruptausführung gültigen Werten überschrieben.

Damit ist ein Fehlverhalten des Nicht-Interrupt Codes vorprogrammiert.   


Viele Grüße

Bernd
Gespeichert

Martin Forster
Newbie
*
Offline Offline

Beiträge: 1


Profil anzeigen WWW
« Antworten #6 am: Februar 20, 2009, 11:56:27 »

Hallo,

endlich nach 2 Jahren finde auch ich diesen Eintrag. Meine Seite elektronik-forster.de heisst nun www.martins-elektronikwelt.tk. Interessanter Beitrag. Zur Erklärung der Schaltpläne: Ich zeichne die Pläne nur zum Verständnis. Netznamen könnten öfter falsch sein. Sollte ich wohl auch mal ändern, da man so die Schematics gut analysieren kann.

Ich verstehe das Interrupt-Problem; habe mich damals wohl nicht genug mit dem CCS Compiler beschäftigt und einfach zur Sicherheit diese Befehle mit reingetan. Jetzt benutze ich ihn nicht mehr. Das enable_interrupts() hat bei mir allerdings zum Glück noch nie Probleme gemacht.  Grinsend

den quasi open drain finde ich ne gute idee. da merk ich mal wieder wie wenig ich eigentlich vom genauen innenleben der pics weiss.  Traurig ich werde das vielleicht mal mit dem neuen SDCC code ausprobieren.

die formatierung ist schon da, es ist nur eine eigene, die ich dann aber irgendwann wieder gelassen habe... Cool

mfg

m.forster
« Letzte Änderung: Februar 20, 2009, 23:22:38 von Martin Forster » Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.039 Sekunden mit 19 Zugriffen.
 
Top! Top!