Beiträge von Modulform im Thema „C64 Tastatur auslesen (ATMega16)“

    Dank euch bin ich mittlerweile einen großen Schritt weiter :biggrin: Ich habe mich an zschunky's Lösungsvorschlag gehalten und auch Port C als Eingang definiert und so die Spalten durchgeschaltet. Mittlerweile werden die gedrückten Tasten richtig erkannt und ausgewertet! Der Video-Terminal gibt auch schon die richtigen Zeichen aus, bloß halt in mehrfacher Ausführung, was am Timing bzw. einer bisher fehlenden Wiederholungskontrolle liegt. Da jetzt aber die Tasten richtig erkannt werden kann ich mich in Ruhe um den Rest kümmern :smile:

    Danke noch mal und besten Gruß
    Modulform

    zschunky's Tip mit den alternativen Funktionen war genau richtig, danke! Zumindest hat sich durch einen Test mit 8 LED, einem Steckbrett und Port C herausgestellt, dass ich zuerst das JTAG Interface deaktivieren muss, damit dort rauskommt was ich erwarte.

    Da ich jetzt weiß, dass am Port C passiert was ich erwarte, ist Port A (8bit Eingang) das Sorgenkind. Momentan habe ich die Pins von Port C (Ausgang) mit den entsprechenden Pins von Port A (Eingang) verbunden. Das Programm gibt zunächst auf Port C ein Bitmuster aus (0b00000001), an Port A wird eingelesen und eine LED an Port D soll so oft blinken wie das was an Port A eingelesen wurde. Die LED blinkt allerdings extrem oft, dafür dass ich bloß 0b00000001 erwarte. Wenn ich allerdings nichts einlese sondern einfach direkt etwas als "Blinken" ausgeben lasse, dann funktionierts...an der LED-Steuerung wirds nicht liegen.

    Den ADC auf Port A deaktiviere ich per "ADCSRA = 0x00"...ist das korrekt bzw. sollte das überhaupt nötig sein? Beim ATMega8 hatte ich damit zumindest nie Probleme...

    Besten Gruß
    Modulform

    @Stephan: Ja, das wurde beachtet. Als ich die andere Spalte selektiert habe, habe ich solche Tasten versucht, die zu der Spalte passen würden. Als dann nichts passierte habe ich auch andere Tasten versucht (evtl. falsche Spalte selektiert), aber auch hier kein Erfolg.

    zschunky: Danke für den Tip, ich werde mal nachsehen ob ich die Funktionen extra deaktivieren muss. Bisher habe ich bloß die Datenrichtungsregister entsprechend nach Eingang und Ausgang eingestellt und für den Eingang die internen Pull-Ups aktiviert. Schaltplan werde ich noch nachreichen, bin nur gerade nicht zuhause. Zu der zweiten Sache: Meinst du damit, dass ich garnicht mit einer bestimmten Pegel-Ausgabe arbeiten soll sondern bloß im Datenrichtungsregister den jeweiligen Pin als Eingang (hochohmig) und den Rest als Ausgang definieren soll? Ad hoc steige ich noch nicht ganz dahinter wie mir das weiterhilft, aber ich werde es heute Nachmittag mal detailliert ansehen. Danke!

    Mac Bacon: Guter Plan, so wird's gemacht...damit kann ich erstmal checken ob überhaupt das ankommt was ich erwarten würde.

    Zaadii: Danke für den Tip, sollte ich nicht weiterkommen versuche ich mal eine andere Tastatur. Die, die ich jetzt nutze ist ja auch original vom VIC20. Die ist z.B. insofern anders als die mir bekannten C64er Tastaturen, da sie bloß unter der Leertaste eine Feder hat.

    DANKE in jedem Fall für eure Antworten und Tipps - ich melde mich mit Ergebnissen :wink:

    Modulform

    Hallo zusammen,

    ich möchte per Mikrocontroller eine C64 Tastatur auslesen. Pinouts und das Mapping für die Tasten (-> Matrix) findet man ja im Netz genügend, aber trotzdem scheint mein Ansatz nicht so ganz zu passen. Es geht zunächst mal lediglich darum genau eine Taste gleichzeitig abzufragen. Hier ein paar Verständnisfragen:

    Ich nutze einen ATMega16, da dieser genug IO Pins in angenehmer Lage hat um die 16 Pins der Tastaturmatrix direkt anzusteuern bzw. auszulesen. Wenn ich den Tastaturmatrix-Scan richtig verstehe, dann wird auf dem einen Port per Ausgabe eines Low-Pegels (= 0) auf einem PIN (Rest high = 1) die jeweilige Spalte selektiert und anschließend am anderen Port gelesen und nachgeschaut ob dort auch irgendwo eine 0 anliegt. Falls ja, dann lässt sich über die Matrix und das Mapping bestimmen welche Taste gedrückt wurde. Soweit richtig, oder? Den oben beschriebenen Vorgang wiederholt man dann mit jeder Spalte und fragt jedes Mal wieder die Zeilen ab und ermittelt so die jeweils gedrückte Taste, auch richtig?

    Bei mir ist nun das Problem, dass das für manche Spalten einwandfrei funktioniert und für andere gar nicht. Lege ich z.B. am Spalten-Port 1111 1101 an und prüfe anschließend den Zeilen-Port, so bekomme ich eine sinnvolle Antwort (z.B. 1111 0111). Mache ich exakt das gleiche mit z.B. 1101 1111, dann scheint sich der Zeilen-Port nicht zu ändern (= 1111 1111), egal welche Taste ich drücke.

    Die Tastatur ist von einem VIC20, wurde aber schon in einem VIC20 und C64 getestet und funktioniert tadellos. Die elektrischen Verbindungen zwischen Tastatur-Stecker auf meiner Platine und den Mikrocontroller-Pins habe ich auch auf Durchgang geprüft, alles OK.

    Mache ich da grundsätzlich etwas falsch oder hat jemand eine Idee was da los sein könnte? Der C-Code für den Controller ist sehr überschaubar und die gleichen Routinen führen je nach Ausgabe am Spalten-Port zum Erfolg oder nicht...ich vermute da erstmal keine allzu großen Bugs :wink: Ach ja und die Pull-Ups habe ich am Zeilen-Port eingeschaltet, damit ein undefinierter Pegel auf 1 gezogen wird und nur bei einem tatsächlichen Durchgang zum low-Pegel eine 0 entsteht...auch richtig, oder?

    Danke euch und viele Grüße
    Modulform

    P.S.: Das Ganze soll übrigens nicht auf USB ausgegeben werden (dafür gibts ja Keyrah :wink: ), sondern mal an einem AVR basierten Video Terminal laufen und als Eingabegerät funktionieren.