NKC Forum
Registrieren | FAQ | Suche | Wer ist online? | Mitgliederliste | Heutige Beiträge | Kalender | Einloggen



Autor Thema: Maus
smed
Stammgast
**
ID # 114


  Erstellt am 03. Januar 2026 18:43 (#1)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hi,
dies ist ein einfaches Maus-Testprogramm. Es fällt auf, dass die Auflösung der Maus nicht besonders hoch ist - man muss also ganz schön schieben wenn man die Maus über den Bildschirm bewegen will. Im Testprogramm verwende ich eine einfache dynamische Beschleunigung, aber viel hilft das auch nicht.

Skalieren kann man auch noch über ein command line argument also 'file 3' für 3x Skalierung, das fühlt sich schon besser an, aber noch nicht optimal.

Wieviel DPI haben denn PS/2 Mäuse ? Kann man die Auflösung (DPI) der MAUS Baugruppe im TangNano erhöhen ?

file.68k

gruss
smed

#include <stdio.h>
#include "../../nkc_common/nkc/nkc.h"

int main(int argc, char* argv[]) {

int min_x = 999;
int min_y = 999;
int max_x = -999;
int max_y = -999;

int scaleFactor = 1;

if (argc > 0) {scaleFactor = atoi(argv[1]); }
printf("scale factor: %i\n", scaleFactor);

int mouse_pos_x = 256;
int mouse_pos_y = 128;

static int16_t dx = 0;
static int16_t dy = 0;
int mouse_keys = 0;

int dyn_step[10] = {0, 1, 4, 8, 13, 19, 26, 34, 43, 54};

gp_clearscreen();

int dx_sign = 1;
int dy_sign = 1;

while (!mouse_keys) {

mouse_keys = gp_get_mouse(&dx, &dy);

//record min, max
if (dx < min_x) {min_x = dx;}
if (dy < min_y) {min_y = dy;}
if (dx > max_x) {max_x = dx;}
if (dy > max_y) {max_y = dy;}

//keep sign
dx_sign = 1; if (dx < 0) {dx_sign = -1;}
dy_sign = 1; if (dy < 0) {dy_sign = -1;}

//calc non-linear acceleration
int delta_x = (dx_sign * dyn_step[abs(dx)] * scaleFactor);
int delta_y = (dy_sign * dyn_step[abs(dy)] * scaleFactor);

//smallest resolution always 1 for 1 pixel accuracy clicking
if (dx == 1) {delta_x = 1;}
if (dy == 1) {delta_y = 1;}
if (dx == -1) {delta_x = -1;}
if (dy == -1) {delta_y = -1;}

//new mouse pos
mouse_pos_x += delta_x;
mouse_pos_y += delta_y;

//scrible
gp_moveto(mouse_pos_x, mouse_pos_y);
gp_cmd(0b10101000); //vector, 1 pixel, direction: EastEast

//spider plot
gp_moveto(400, 150);
gp_drawto(400 + (delta_x*2), 150 + (delta_y*2));

//min max values
gp_cursor_off();
gp_setcurxy(0,4);
iprintf("min_x %i\r\n", min_x);
iprintf("max_x %i\r\n", max_x);
iprintf("min_y %i\r\n", min_y);
iprintf("max_y %i\r\n", max_y);
}

return 0;
}


-----------------------
NKC'ler seit 1984 (Pause zw. 1988-2017)
CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k und eine FPGA-GDP.

NKC - OpenSource since 1983

Beiträge: 299 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert
andi
Fühlt sich wie zu Hause
***
ID # 213


  Erstellt am 04. Januar 2026 11:30 (#2)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hallo Smed,
Wegen der Msus - es gibt Kommandos um die Auflösung (counts/mm) zu erhöhen. Ich lass das aktuell am Defaultwert der Maus (wahrscheinlich der niedrigste Wert).
Siehe https://isdaman.com/alsos/hardware/mouse/ps2interface.htm
Von der SW aus kann man das aktuell nicht umschalten.
Ich kann allerdings bei der Maus-init Sequenz (im VHDL) die Auflösung erhöhen. Das wär relativ einfach.
Ich denke allerdings auch darüber nach dem Maus-interface einen low-level PS2 Mode zu verpassen. Dann muss die SW via Interrupt die Mouse-events auswerten, kann dann aber auch mit dieser kommunizieren und die Auflösung umschalten.

Beiträge: 420 | Mitglied seit: Mai 2021 | IP-Adresse: nicht gespeichert
smed
Stammgast
**
ID # 114


  Erstellt am 04. Januar 2026 16:19 (#3)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hi Andi,
thanks, mit den Infos werde ich mal mit den verschiedenen Optionen zur Sampelrate und Auflösung in PS2Mouse.vhd experimentieren - ich werde berichten.

Gruss
smed

-----------------------
NKC'ler seit 1984 (Pause zw. 1988-2017)
CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k und eine FPGA-GDP.

NKC - OpenSource since 1983

Beiträge: 299 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert
andi
Fühlt sich wie zu Hause
***
ID # 213


  Erstellt am 04. Januar 2026 17:17 (#4)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hallo Smed,
Die Auflösung der Maus kannst du ganz einfach im VHDL Code umstellen. Siehe folgende Zeilen:
https://github.com/avg67/nkc/blob/main/tang_nano_20k/NKC_68k16_Z80/VHDL/vhdl/rtl/PS2Mouse.vhd#L126
Wegen der Werte fürchte ich du musst etwas experimentieren (beschreibung der Parameter siehe Link oben)
Die Init- Statemachine sendet beim Startup den Inhalt des Mouse_Init_ARRAY_c an die Maus

Beiträge: 420 | Mitglied seit: Mai 2021 | IP-Adresse: nicht gespeichert
andi
Fühlt sich wie zu Hause
***
ID # 213


  Erstellt am 05. Januar 2026 22:12 (#5)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hallo,

ich hab einen Update bei der Maus eingecheckt der diese (zumindest bei mir) deutlich beschleunigt.
Hab die Auflösung auf 8 count/mm und die Samplerate auf 100 Samples/s gesetzt, sowie das 2:1 Scaling eingeschaltet
https://github.com/avg67/nkc/blob/main/tang_nano_20k/NKC_68k16_Z80/VHDL/vhdl/rtl/PS2Mouse.vhd#L124
68k SOC-FPGA-Files hab ich upgedated

Beiträge: 420 | Mitglied seit: Mai 2021 | IP-Adresse: nicht gespeichert
smed
Stammgast
**
ID # 114


  Erstellt am 06. Januar 2026 17:27 (#6)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hi,
Danke, die neuen Maus configs sind gut.

Mein ge-updatetes Mauskritzelprogramm, nun in Hi-res:
file.68k -dynamische Beschleunigung kommt später, erst mal gut genug.

Gruss
smed

-----------------------
NKC'ler seit 1984 (Pause zw. 1988-2017)
CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k und eine FPGA-GDP.

NKC - OpenSource since 1983

Beiträge: 299 | Mitglied seit: Januar 2011 | IP-Adresse: nicht gespeichert



| https://nkcforum.de | Boardregeln | Datenschutzerklärung


Tritanium Bulletin Board 1.8
© 2010–2021 Tritanium Scripts


Seite in 0,047983 Sekunden erstellt
15 Dateien verarbeitet
gzip Komprimierung eingeschaltet
2203,95 KiB Speichernutzung