PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tastatur/Interrupt



iltis
02.01.2006, 20:49
Hallo,

ich möchte mit Bascom und einem AVR eine Tastatur ansprechen. Ist es irgendwie möglich die GETATKBD-Routine erst zu starten, wenn ein Zeichen kommt?


mfg
Flo

Ratber
02.01.2006, 21:45
Ja,wenn du weißt das eins kommt dann kannste das gezielt starten.

aber ohne Hellseherische fähigkeiten wird das kaum was werden.

Mal nen Tip:

Nimm nen kleinen Controller (zb. 8-Pol Tiny) der einzig und allein die Tastatur bedient und der sich per I2C oder 232 beim "Hauptrechner" meldet.
Damit kommste streßärmer ans Ziel

iltis
02.01.2006, 21:49
Und mit Clock auf Interrupt kommt man auch nicht weiter?


mfg
Flo

Ratber
02.01.2006, 22:01
Ja,das geht natürlich.


Wenn man einwenig in die Historie geht dann ist der alte Tastaturanschluss nix anderes als eine normale Serielle die man im laufe der Zeit nur etwas verkrüppelt hat (Feste Baudrate,Parität usw.).
Die kann unter alten DOS-Verionen auch noch korekt unter Com0 angesprochen werden.
Hier gilt also fast das gleiche wie bei ner gewöhnlichen Seriellen.

iltis
03.01.2006, 11:26
Sorry hab ich aber jetzt noch nicht ganz verstanden. Sobald ein Zeichen kommt, geht doch Clock auf LOW oder? Und das auch mehrmals pro Zeichen.
Und ein Interrupt wird doch bei HIGH ausgelößt oder?
Hab Gestern noch ein bisschen rumprobiert - kann das sein, dass ein / oder ein * am Nummernblock einen anderen ASCII-Code produziert als auf der "normalen" Tastatur?

mfg
Flo

Ratber
03.01.2006, 12:03
Und ein Interrupt wird doch bei HIGH ausgelößt oder?

Das kannst du im MCU-Register mit den Bits 3 und 2 festlegen wie gewünscht.

Int immer solange Low,bei steigender / Fallemder Flanke oder bei jeder Flanke.

Schau ins Datenblatt unter "External Interrupts"

iltis
03.01.2006, 12:58
Hab ich das im Datenblatt jetzt falsch verstanden oder geht das mit Int0 nicht?
Also ich muss dann einstellen, dass er einen Interupt auslöst, wenn er Low geht. Stimmt das?
Aber ich hab keine Ahnung wie ...


mfg
Flo

Ratber
03.01.2006, 13:57
Keine Ahnung ob das bei deinem AVR geht denn du hast ja auch noch nicht verraten welchen du überhaupt nutzt. (Kristallkugel is gerade zur Wartung.Empfang war schlecht). :wink:
Nicht jeder AVR hat nen externen Int.

iltis
03.01.2006, 14:09
Ein Mega8 wär´s sorry!

Ratber
03.01.2006, 14:52
Ja der M8 hat Zwei externe Interupts
Int0 auf D2 und Int auf D3

Entsprechend ist auch das passende Register
MCUCR vorhanden.


Bits 0 und 1 für Int0 und Bits 2 und 3 für Int 1 geben an auf welche Flange bzw, Pegel der Int reagiert.

Wie gesagt steht alles im Daternblatt unter "External Interrupts"

iltis
03.01.2006, 14:56
Schön langsam wird die Fragerei peinlich ...
Das hab ich ja jetzt alles - ich weiß ja nur nicht wie ich diese Register in Bascom setze!


mfg und vielen Dank!
Flo

Ratber
03.01.2006, 15:26
Nun du kannst sie einfach mit ihrem Namen ansprechen.

(Im Zweifelsfalle in der Definitionsdatei nachsehen ob vorhanden)

Also zb. "MCUCR = Wert" wobei "Wert" für den Wert steht den das Register annehmen soll.

Das kann als Zahl (Byte 0-255) ) erfolgen oder auch als Binär (zb. &bxxxxxxxx) oder auch in Hex wenn dir das lieber ist. (zb. &hxx)
Da oft Bits geschaltet werden ist die Binäre Variante sehr beliebt und meiner meinung nach auch Sinvoll.

Bei Änderungen kannst du übrigens auch mit logischen Verknüpfungen arbeiten.(Nur so nebenbei für den hinterkopf)

PS:
Man kann das Register so auch auslesen um zu sehen was gerade Sache ist also "Wert = MCUCR" (Ebenfalls für den Hinterkopf)

iltis
03.01.2006, 16:19
Danke Ratebär! Ich werds mal probieren!

mfg
Flo