www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M16C- Key Input Interrupt


Autor: Michael Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende einen M16C/6N0 (M306NaFGTFP). An die Ports
P10.0 -P10.2 sind die Zeilen einer Matrix - Tastatur angeschlossen. Die 
Spalten sind an P0.0 - P0.2.
Die 4. Zeile ist amn P10.5 angeschlossen, da dieser Port KI1 ist wollte 
ich den Key Input Interrupt nutzen.

Ich habe die ungenutzten KI0,KI2,KI3 auf Output gesetzt.
KUPIC = 0x03; hat ein entsprechendes Interruptlevel bekommen.
Die internen Pull-ups der Ports habe ich nicht verwendet da die Zeilen 
über Wiederstände an 5Volt hängen.

Per KUPIC_IR = 1; kann ich den Interrupt auch per Software auslösen, 
aber leider wird durch Tastendruck kein Interrupt
generiert.

Könnte das Problem, daran liegen, dass ich nur eine Spalte
an KI geschaltet ist? (Ich habe natürlich die entsprechende Taste 
gedrückt die den Interrupt auslösen müßte)

Vielleicht verwendet jemand ja die Key Input Interrupts und könnte mir 
die Schaltung und das bisschen Software zeigen .


Vielen Dank Michael

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

beim M16C gibts es im "Funtion select register C" ein Bit PSC_7 für den 
"Key input interrupt disable bit"

Ansonsten ist es egal, welcher /KIx low erhält. Jeder der vier löst den 
Interrupt aus, sofern er als Eingang definiert ist.

Reiner

Autor: Michael Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort, leider kann ich im Datenblatt (M16C / 
6N0 / 6N1 Group) nichts zu diesem Register finden :-( (Aber ich suche 
weiter)


Kann man unterscheiden, welcher KIx den Interrupt ausgelöst hat oder muß 
ich das anschließend "per Hand" überprüfen?

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welcher es war wird nicht gespeichert, Du mußt dann die Leitungen 
abtasten.

Das Register ist bei den alternate functions aufgeführt - kommt direkt 
nach den Portbeschreibungen.

Reiner

Autor: Michael Martin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin wirklich zu dumm das zu finden. Ich habe das pdf mal in den 
Anhang gepackt. Vielleicht habe ich ja auch das falsche Dokument. 
Ansonsten wäre ich unglaublich erleichtert, wenn du mir eine Seitenzahl 
nennen bzw. den kurzen Textabschnitt posten könntest

Gruß Michael

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/*
If the direction register of any of P104 to P107 is set for input and a 
falling edge is input to that port, a key
input interrupt is generated.
*/

Sagt eingentlich aus das es bei Dir gehen müste.
Der M16C6N hat dieses "Funtion select register C" nicht (bin ich von 
ausgegangen, da der M16C80 den hat). Tut mir leid wenn Du da nun 
tagelang nach gegraben hast.


Zusammenfassend:
A  Du hast den Interruptvektor gesetzt
B  Du hast den Interruptlevel angegeben  KUPIC=0x0B (level 3, interrupt 
ein)
C  Du hast eine neg. Flanke an /KI1 Pin P10_1
  und trotzdem löst kein Interrupt aus

Bist Du sicher das Du wirklich den P10_1 wirklich als Eingang(Bedingung 
D) definiert hast?

Wenn A..D erfüllt sind, löst der Interrupt aus

Reiner

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

hast du auch im Startup-File des Compilers den INT-Vector entsprechend 
umgebogen?

Matthias

Autor: Michael Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Matthias,

guter Tipp. Habe ich nämlich nicht gemacht. Aber auch bei
UART (Interrupt 16,17,18,19) habe ich das nicht gemacht und die 
funktionieren trotzdem.

Mit welchem C-Compiler arbeitest du? Dein MPlay hat sicher schon eine 
ziemliche Codegröße.


Gruß GLH

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

mit dem NC30. Ob man die Vektoren bei anderen Compilern auch anpassen 
muß weiß ich nicht. Beim NC30 muß man das aber in jedem Fall in der 
Datei sect30.inc Dort enthält der Vektor sonst nur einen Verweiß auf 
dummy_int und dieser enthält nur ein reit.

Matthias

Autor: Michael Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Matthias,

danke für die Infos. Ich nutze den Tasking M16C Compiler, der bei dem 
Glyn Demoboard dabei ist. Die sect30.inc Datei gibt es da auch und darin 
ist der key_interrupt und alle Uart-Interrupts  umgebogen. Ich probiere 
noch ein wenig rum ,aber werde wohl ohne  Interrupt auskommen.

Gruß GLH

PS: Deine Ansteuerung eines SED1335 klingt sehr interessant, da ich hier 
ein 160x160 Display mit SED1330 rumliegen habe, dass auch noch 
angesteuert werden will.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.