4.5
139 röster
Skapat
2009-07-10
Senast ändrat
2009-07-31
Visningar
5 935

Det började med att jag skaffade utrustning för att etsa kretskort och började med att rita och etsa ett enkelt kort med en atmega8 och usb utan att tänka på vad jag skulle ha det till. Sen slog det mig att jag hade en ABC80 liggande i källaren, givetvis måste jag göra om denna ca 30 år gamla datorn till ett tangentbord som funkar med moderna datorer.

Efter ett långt stiltje tänkte jag väcka liv i mitt ABC80-projekt och passa på att ta en lite annan riktning, nämligen att bygga in en lite nyare dator i tangentbordet.

Merparten av delarna jag kommer använda.

Nött skal

Färgen på tangentbordet var ganska nött så jag har redan börjat sandpapprea det, kom gärna med förslag om färg(jag tänger dock inte ge mig på motivlackering)

Kretskort

Kretskortet jag ritat, etsat, förtennat, borrat och lött själv.
Baserat på kopplingsschema från V-USB (http://www.obdev.at/products/vusb/index.html).

Undersida av kretskort

Analysering av kopplingsschema

Jag kunde inte hitta någon dokumentation om kortet på nätet så det vart lite "reverse engineering", jag upptäckte att att den 12-poliga kontakten hade 5V, 0V, 8 datapinnar och 2 som inte var anslutna. Alla datapinnar på tangentbordssidan är buffrade med 7404 vilket innebär att att det enbart skickar signaler. Dessutom var andra änden av sladden ansluten till port A0-A7 på en Z80PIO(en krets som hjälper processorn bearbeta och hantera data från andra enheter).

Ovansida av tangentbordets kretskort

Undersida av tangentbordets kretskort

Kabelmeck

För att få ut bättre kablar för breadboardpillande.

Kopplat

Då var det klart för att börja leta koder.

Leta koder

Olika binära värden visas olika på displayen, så det var bara att börja skriva ner koderna.

Display

Jag använde en lite annan kodning än vad 7-segentsdisplayer brukar ha, jag använde binär kodning med följande värden:
uppe/vänster = 1
uppe/höger = 2
nere/vänster = 4
nere/höger = 8
mitten/vänster = 16
mitten/mitten = 32
mitten/höger = 64
decimal = 128

Jag upptäckte att en pinne gav 1:a när någon av tangenterna(utom caps lock, shift och ctrl) var nertryckta vilket avslöjade att det fanns utrymme för 7-bitars tecken.

Koder

Så det var bara att börja skriva ner koder, jag upptäckte efter några tangenttryckningar att jag kopplat fel då siffertangenterna inte låg i serie(kan inte tänka mig att någon skulle bygga en dator där de inte gör det) så jag flyttade om och provade olika saker och kom efter ett tag fram till att det var en lätt modifierad 7-bitars ASCII som användes.

Gammal lysdiod

Ny lysdiod på plats

En blå(jag ska ju ändå måla om lådan så). Dessvärre lyckades jag ha sönder capslocktangenten, så just nu är lysdioden inte till nån glädje men det lutar åt att jag anluter den till en PWM-utgång på microkontrollern istället.

Kopplad till STK500

Har kopplat tangentbordet till en STK500 för att laborera lite.

Källkod

Har meckat lite källkod och grejat lite(det jag skriver på tangentbordet dumpas ut på serieporten på STK500), börjar nog bli dags att sätta sig in i V-USB nu tror jag...

Kabel inlödd på kortet jag ska använda

Nu ska det vara färdigkopplat, då var det bara att få kretsen att göra vad den ska.
Sen är det lite monteringsdetaljer och målning men det får vänta.

Dags att koda firmware

Nu har jag flyttat grejerna från meckarhörnan till vardagsrummet där jag gärna sitter när jag ska skriva lite mera. Så nu blir den den antagligen långsamma processen att skriva en fungerande firmware så tangentbordet funkar, och funkar på ett vettigt sätt.

Bytt resistor.

Fick inte kontakt med kortet som jag skulle, efter en stunds felsökande upptäckte jag att jag satt fel sorts resistor på ett ställe, den är nu bytt och jag får kontakt med kotet över usb och har kommit så långt att jag får detta i dmesg när jag kopplar in det:
[234164.037539] usb 3-2: new low speed USB device using uhci_hcd and address 18
[234164.209120] usb 3-2: configuration #1 chosen from 1 choice
[234164.228141] input: ornotermes@gmail.com ABC80USB as /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/input/input14
[234164.252592] generic-usb 0003:4242:E131.000A: input,hidraw1: USB HID v1.01 Keyboard [ornotermes@gmail.com ABC80USB] on usb-0000:00:1a.0-2/input0

Montering av kontrollerkort

Montering med skruvar och smältlim, inte det snyggaste men jag har planer på att göra en annan montering senare.

Närbild

USB-kontakt

Med skal

Så ser skalet ut just nu, inte mycket sandpappring kvar innan det är dags att måla det. Funderar på någon mörkgrå eller svart färg, kanske med lite metallic.

Sladden i

Bara att koppla i och köra, eftersom tangentbordet identifieras som en HID-enhet behöves inga särskilda drivrutiner, dessutom kodar jag om teckenkodningen i kretsen så det funkar med vanlig svensk tangentbordslayout.

På skrivbordet

Så då står det på skrivbordet, och alla texter från bild 20 tom den här har jag skrivit på det. Koden tar upp ungefär 1/4 av utrymmet i kretsen så det finns möjlighet att utöka funktionaliteten, jag ska kolla på möjligheten att utöka det med makrofunktioner. Annars har jag väl inte så mycket att säga just nu

Första sandpappringen klar

Det finns lite färgrester kvar men jag tror inte det spelar så stor roll, anledningen till att jag tog bort den gamla färgen är att den var så sprucken och flagig att det skulle kunna påverka ovanliggande lager