Mach 3 Tangentbordsemulator

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Mach 3 Tangentbordsemulator

Inlägg av hato »

För att förenkla min manöverpanel tänkte jag använda en tangenbordsemulator för att sicka signalerna via USB i stället för parallelt till I/O kortet.
Eftersom jag har jobbat med inbyggdasystem i många år så tänkte jag att detta snor man snabbt ihop med en Arduino Micro o funktionen
"Keyboard.write()". Men här är det problem.
Jag emulerar Jog (piltangenterna + PgUp/PgDn ) samt Cycle Start, Feed hold och Stop. Enligt en asciitabell så blir det 0xD7, 0xD8, 0xD9, 0xDA, 0x1F, 0x20, 0x13. Detta fungerar på följande sätt:
Om jog mode står i Step så funkar X, Y, Z.
(Om jog mode står i Cont så fungerar inte jog alls!)
Cycle Start fungerar ej
Feed hold fungerar alltid
Stop fungerar ej
Här blir man fundersam varför funkar det i Step o inte i Jog-mod?
Feed hold är ju ascii 0x20 (space) vilket är 8 bitars ascii
När jag letar på nätet så talar en del om att det finn IMB PC scan code vilket är två 8 bitars ord efter varandra.
Vilket skulle vara:

PgUp (00,73) (0x00,0x49) PgDn (00,81) (0x00,0x51)
UpArrw (00,72) (0x00,0x48) DnArrw (00,80) (0x00,0x50)
LftArrw (00,75) (0x00,0x4b) RtArrw (00,77) (0x00,0x4d)

Har nu testat med att skicka ex 0x00, 0x4d för att köra högerpil.
Fungerar inte alls!

Har någon en aning om vad som kan vara problemet?
Förr i tiden när man körde RS232 kunde man köra med en linjelyssnare men hur "lyssnar" man på en USB-port?
Skulle vilja se vad det är för skillnad på signalen när man trycker högerpil på tangenbordet resp. skickar "högerpil" från arduinokortet.

HJÄLP!!!!!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
H.O
Inlägg: 5917
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Mach 3 Tangentbordsemulator

Inlägg av H.O »

Nu har jag ingen aning om hur Keyboard.write() fungerar på en Arduino men måste du inte skicka en kod för KeyDown och en för KeyUp? Hur vet Mach annars när den ska sluta jogga?

Så min gissning:
* Feedhold fungerar för att det är en "ren" tangent och den "triggar" på KeyDown, det spelar ingen roll när "tangenten" släpps.
* Jog fungerar i Step-läge av samma anledning, så fort "tangenten" trycks ner joggas axeln ett "steg", det spelar ingen roll när tangenten släpps. Man kan tänka sig att den borde BÖRJA jogga i Cont-läge också för att sedan aldrig stoppa men tack och lov gjorde den inte det.
* Cycle Start och Cycle Stop fungerar inte för att det är en ALT+Tangentkombination, hur skickar du det?

EDIT: Om du ändrar Cycle Start och Stop till enkla knapptryckningar i Mach3 istället så kan du ju i alla fall verifiera hurvida du har ett problem med Alt+tangent.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Mach 3 Tangentbordsemulator

Inlägg av blueint »

Tips: Mät vad slags signal ett "riktigt" tangentbord skickar.

Ska du lyssna på USB så beror svårighetsgraden på vilken hastighet som används. 12 Mbps kräver i princip en ASIC, FPGA, eller CPLD. 1,5 Mbps kan hanteras med en MCU och lite smart programmering.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

Keyboard.write() skickar ett 8-bitars tecken, ex Keyboard.write(0x20) skickar Space
Mycket riktigt Feed Hold är en ren 8-bitarskod (se ex ovan) emedan Cycle Start och Stop är Alt-R resp. Alt-S
viket skulle vara ALT-R (0x00,0x13) och ALT-S (0x00,0x1a) dvs. jag skickar två tecken.Det fungerade ej.
Det är forttfarade skumt att jog fungerar i Step o ej i Cont.
jag har skrivit programmet så att om jag håller kvar joysticken så repiteras tecknet precis som på ett tangentbord.
"Om du ändrar Cycle Start och Stop till enkla knapptryckningar ....", vet inte hur jag ändra detta Config - Systemhotkeys?
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

Finns det inte någon programvara så att man kan lyssna på USB-porten, när det gäller tangenbord så är det ju ganska långsam komunikation?
H.O
Inlägg: 5917
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Mach 3 Tangentbordsemulator

Inlägg av H.O »

Jag tycker inte det är skumt alls.
När du säger att du skickar två tecken så är det ju det som är problemet, du skickar ALT följt av S - var för sig - du skickar inte ALT i kombination med S, t.ex.
Varför jog funkar i Step men inte i Cont är som sagt för att den går på KeyDown och KeyUp-eventet, det har inget med repeterhastigheten att göra.

För att ändra Hotkeys för de knappar som inte finns i meny editerar du .set filen med hjälp av t.ex MachScreen.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

ok, jag skickar två tecken efter varandra, hur skall jag annars göra?
Jag kan ju endast skicka ett åttabitarstecken i taget viket tangentbordet också gör?
H.O
Inlägg: 5917
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Mach 3 Tangentbordsemulator

Inlägg av H.O »

Jag har noll koll på Arduino men jag Googlade Arduino KeyBoard.write och såg då att det finns en funktion som heter KeyBoard.Press, prova att använda den istället, något i stil med:

Kod: Markera allt

KeyBoard.Press(KEY_LEFT_ALT)
KeyBoard.Press('s')
Delay(100)
KeyBoard.ReleaseAll()
Notera att jag inte kollat upp konstanten altKey, den kan heta något annat.

EDIT: KEY_LEFT_ALT heter den visst, enligt denna sidan.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Mach 3 Tangentbordsemulator

Inlägg av sodjan »

> När jag letar på nätet så talar en del om att det finn IMB PC scan code vilket är två 8 bitars ord efter varandra.
> Vilket skulle vara:

Posta gärna (nej alltid) källorna till det som du säger att du har läst.
Det finns ingen möjlighet att verifiera att du har läst rätt... :-)

> ...när det gäller tangenbord så är det ju ganska långsam komunikation?

Ointressant när det gäller att lyssna på USB, det har ju ett helt egen
ganska komplext protokoll som kräver speciell utrustning för "avlyssning".

> ...viket skulle vara ALT-R (0x00,0x13) och ALT-S (0x00,0x1a)

Var har du hittad det ? Varför just Null som första tecken ?
Det stämmer inte med någon scan-code info jag har hittat.

> ok, jag skickar två tecken efter varandra, hur skall jag annars göra?
> Jag kan ju endast skicka ett åttabitarstecken i taget viket tangentbordet också gör?

Helt rätt, det finns inga enskilda "alt" tecken som det lät i ett annat inlägg.
Alt-prylarna är en PC-specifik sak som inte har något med ASCII att göra.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

Kör MachScreen view - hotkeys, men hur editerar man?
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

Hittade denna asciitabell http://www.jimprice.com/jim-asc.shtml
Har redan testad med med "Keyboard.press(xxx)" enlig dig H.O. fungerar ej.
Något skumt, om jag går till inställningar - hotkeys, klickar på ex Y++, trycker på PageUp så blir scancode = 33 vilket är ok.
Om jag på nytt gör en config på hotkeys för Y++ och för min Y-joystik uppåt så genererar den även scancode 33, men att jogga Cont. mode fungerar fortfarande ej.
H.O
Inlägg: 5917
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Mach 3 Tangentbordsemulator

Inlägg av H.O »

Det känns som att prata för döva öron.
Det ÄR rätt ScanCode för själva tangenten eftersom det fungerar med Step-jog men i Cont-jog så är det annorlunda. Det funkar inte med repeat utan med KeyDown/KeyUp - hur man gör det med Arduino vet jag inte. Det verkade som sagt som att KeyBoard.Press() var nyckeln men tydligen inte.

Du får ursäkta min uppriktighet men jag vet att det är så här för jag har gjort exakt det du försöker med en X-keys Matrix Board och jag var tvungen att specifikt programmera in att den skulle skicka keyDown när man tryckte ner knappen och sedan VÄNTA med att skicka KeyUp tills man släppte - annars skickade den KeyDown direkt följt av KeyUp. Med dina resultat som grund är jag tämligen säker på att din Arduino-kod gör exakt det, alltså skickar KeyDown/KeyUp direkt efter varandra vilket är anledningen till att det fungerar i Step men inte i Jog. Exakt HUR det skickas vet jag inte.

EDIT: Samma sak med dina ALT+S etc kombinationer. ALT måste vara "nedtryckt" när 'S' skickas annars fungerar det såklart inte. Återigen, exakt HUR ett tangentbord gör detta vet jag inte.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

Tja döv är jag kanske inte men fattar desto sämre. :roll:
Men efter ditt förtydligande så förstår jag vad du menar.
Skall testa enligt dina anvisningar.
En sak som förbryllar mig.
Ett tangentbord sänder ju samma tecken vare sig jag kör i step eller count-mode och det fungerar ju alltid.
Därför trodde jag om jag efterliknade ett tangenbord så skulle detta fungera? :humm:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Mach 3 Tangentbordsemulator

Inlägg av sodjan »

Jag tror att det råder ett missförstånd kring "Alt-tecken" och scan codes.

Det finns (när det gäller tangentbord och scan-codes) inga "Alt-tecken".

Alt är en egen tangent som har sina egna scan-codes för "press" och "release".
D.v.s att scan-coden "Alt-pressed" skickas redan då Alt trycks ner, inte då *nästa* tangent trycks!
Sen är det upp till mottagaren att tolka den andra tangenten annorlunda då den vet att Alt även är "pressed".

Så t.ex om man trycker "Alt-A" :

Alt-pressed : 0x38
A-pressed : 0x1E
Alt-released : 0x38 + 0x80 = 0xB8
A-released : 0x1E + 0x80 = 0x9E

(0x80 läggs till för att göra en "pressed" scan code till en "released".)

Alltså, det finns inga speciella scan-codes för "Alt-A" o.s.v.
hato
Inlägg: 140
Blev medlem: 1 februari 2007, 20:22:36
Ort: Alingsås

Re: Mach 3 Tangentbordsemulator

Inlägg av hato »

OK,om jag förstått det hela rätt så scancode och ascii är helt skilda saker.
Testade nu Cycle Start Alt-R

Skickar då 0x38 samt 0x13 vid knapptryckning
Skickar sedan 0xB8 samt 0x93 när knappen släpps.
Fungerar ej, gör jag fel?
Skriv svar