En multimeter med seriellt gränsnitt kräver ingen intilliigens alls av tal hård och mjukvaran, då formatet oftast är siffrona rätt upp och ner.
Nöjer man sej med att bara få något som kan läsa "ett tre nio" så duger en Atmel eller PIC som kan klocka ett eprom med siffrrorna inbrända som adresserbara wav-sekvenser.
Ska man satsa på något lite mer allsidigt verktyg som klarar fler instrumentsamtidigt, kunna göra egen prioritering vad som ska läsas mm, det är först då en RPI möjligen är motiverad.
Även en värdestyrd oscillator som kan följa typ +/- 0-1999 går köra på samma PIC-kapsel som kan mata fram wav-siffror, men få multimetrar har någon nämnvärd samplingsfrekvens på A/D och snabbt seriellt snitt. Rent praktisk måst man lösa hur man får tonmässigt tillräcklig dynamik och hur man ska hantera visning av långsamt svepande värden som skiftar polaritet eller om multimetern auto-skiftar mätområde, men det är säkert lösbart med lite tanke.
Mina talsyntes-regler är en slags pseudo assembler-kod för att göra exekveringen så effektiv som möjligt. Den styr dels rena fonetiska regler för svenska språket dels om bokstavssekvensen typ om Datum eller Tel nyligen lästs så ska efterföljade siffror läsas på särskilt sätt, där även DTMF ingår som möjlghet. Praktiskt med DTMF om man vill ringa ett telefon-nummer, då det räcker att hålla upp telefonluren i närheten av högtalaren.
Slutliga reglerna är inte självstående utan ett resultat av flera regler och är stort oläsbara om man inte kan assembler men grundrelerna är så enkla som möjligt för att kräva så lite processorkraft som möjligt.
Fonetikregler för svenska språket implementerades så enkelt som möjligt. Man kommer rätt längt om man kan hantera undantagen typ de olika sje-ljuden, dubbelkonsonater inklusive typ "ck" och splitta vissa längre konsonant-kombinationer. Sedan tillkommer vissa uttalsregler som skiljer sej från den vanliga texten, såsom längd på paus mellan ord, egen-namn, matematiska utryck, och enheter, i synnerhet förkortningar typ mm & kg och & samt uttal av sifferkombinationer enligt regler som tidigare nämnts.
För de ljud ord som inte hanteras av dessa undantag skapades en lista på alla uttalbara bokstavskombinationer på en, två och tre bostäver. Alla kombinationer på tre bokstäver som kunde hanteras av att sätta samman kombinationer av de kortare listorna på en eller två bokstäver ströks. Även sådant som var fullständigt outtalbart ströks. Samma sak med listan på två bokstäver, kunde en sträng göras uttalbar med de enskilda bokstävernas fonetik så ströks dubbelbokstäverna och ersattes med dubbla pekare till kombinationen av enkel-ljud. För bättre fonetik fanns tillläggen om fallande eller stigande volym och hastighet den enskilda strängen skulla uttalas med, men bara om nödvändigt för att uttalet skulle bli hyggligt. Slutligen styckades ljudbanken upp i en mängd sub-delar där där dubblet-ljud ströks och ersattes med pekare till lämligt alternativt ljudstump. Ett enskilt ljud är typiskt vara mellan 100-300 byte långt. Slutligen gjordes en manuell fin-editering av varje ljud-stump så att de kunde sammanfogas med varandra utan hack eller klick.
Själva ljudbanken blev på detta sättet kort. Det är nödvändigt för att kunna hålla allt ständigt inladdat i grafikminnet och snabbt hittas via enkla pekare. Det hade blivit för slött att dynamiskt ladda in ljud genom att läsa in filer från hårddisken på en 286:a.
Har du god språk/ljud-känsla så kan du med ovanstående rätt enkelt skriva dina egna syntes-regler i passande dator-språk.
Så här ser några delar av programkoden/syntax-uppbygnaden ut:
Kod: Markera allt
;___________________________________________________
; Spy at keybord whitout any software knows about it.
; INT9
;___________________________________________________
IN AL,060
CMP AL,0E0
JAE EXIT_INT9
MOV AH,AL
AND AL,07F
L1:
PUSH CS
POP ES
XOR DI,DI
MOV CX,SCAN_LEN
REPNE SCASB
L2:
JNE EXIT_INT9
L1:
CMP AH,AL
JNE RET_INT9
SET_TKN:
MOV CL,3
DEC DI
AND DX,0840 ;DH CAPS DL R ALT
OR DH,DH
JNE>L3
DEC CX
OR DL,DL
JE>L0
CMP DI,CX
JA>L0
L1:
OR BL,BL
JNE>L4
INC CX
L0:
OR BL,BL
JE>L4
L3:
ADD DI,SCAN_LEN
L4:
LOOP L3
L7:
ES MOV AL,[DI]
L8:
TILL_KEY_BUF:
MOV DI,01C
MOV BX,[DI]
MOV [BX],AX
CMP BL,03C
JNE>L0
MOV BX,DI
L0:
INC BX
INC BX
CMP BX,[01A]
JE>L9
L0:
MOV [DI],BX
L9:
RET_INT9:
IN AL,061
MOV AH,AL
OR AL,080
OUT 061,AL
MOV AL,AH
OUT 061,AL
MOV AL,020
OUT 020,AL
POPA
POP ES
POP DS
IRET
;_____________________________________________
;Read size of number sekvens bigger then 99
HUNDRAUT: ;A number in AL
;_____________________________________________
L9:
OR AL,AL
JE>L4
L1:
CMP AL,200
JB>L1
SUB AL,100
PUSH AX
MOV AL,'2'
CALL AL_UT
POP AX
L1:
CMP AL,100
JB>L1
SUB AL,100
PUSH AX
MOV AL,110
CALL AL_UT
POP AX
OR AL,AL
JE RET
L1:
CMP AL,19
JBE>L1
XOR AH,AH
PUSH CX
MOV CL,10
DIV CL
POP CX
ADD AL,110
CALL AL_UT
MOV AL,AH
JMP>L2
RET
L1:
CMP AL,9
JBE>L4
ADD AL,42
L2:
OR AL,AL
JE RET
L4:
ADD AL,'0'
;__________________________________________
AL_UT: ;Numberic in AL, if AL=0FF => Sign in AH
;__________________________________________
MOV B[ASCII_FL],RET_
CALL AL_UT2
CMP VERSAL_FL,081
JNE>L0
PUSH AX
PUSH CX
CALL TON_KORT
POP CX
POP AX
L0:
ASCII_FL:
NOP
ASCII_UT:
PUSH AX
MOV AL,120 ;ASCII
CALL AL_UT2
POP AX
XOR AH,AH
JMP HUNDRAUT
RET
Detta är bara ett litet stycke av all kod som behövs för att plocka ihop en någorlunda välljudande eller åtminstone förståelig ljudstream.
Den som kollar lite närmare ser att det finns självmodifierande kod. Betyder mycket för exekveringseffektiviteten på en 286:a men är närmast ett fult ord när man har överflöd på processor-resurser. Det finn även kod som förefaller omotiverad men det är för att försäkar sej att vissa exekveringar sker från jämna adresser, vilket kan spara en klockcykel eller två.
Hur skall en person som är blind kunna koppla ihop något ..?
Ja man kan undra. Det gjorde jag också första gången jag gjorde kundbesök med mitt tal-program. Programmet var utvecklat i samråd med en synskadad kompis men det fanns situationer som man inte tänkt på från början. En inköpare av handikapp-hjälpmedel hade åsikter om programfunktionen och ville träffa mej.
Inköparen satt på ett större landstings-kontor och skulle själv vara synskadad, det var ungefär vad jag visste när jag kom till kontoret. Efter lite letande hittar jag hans kontors-cell men det var ingen där. Går tillbaka till receptionen och frågar efter honom.
Efter en stund kommer en person och går i rätt rask takt, svänger runt en korridorshörna, passerar förbi receptionen och utan att stanna säjer att jag kan hänga på honom då han är på väg till kontoret.
Jag pratar med honom på vägen och frågar om han är rätt kille, då den jag skulle träffa var synskadad. Jodå försäkrar han, han är helt blind. Utan tvekan svängar han in på sitt kontor och sätter sej vid datorn och ber mej sätta mej jämte.
Här ska du få
se, sa han till mej, började knappa på vanligt tangentbord och startade ett bokföringsprogram, öppnade en klient, och startade konto-upplägg där det fanns popup-menyer som inte fungerade på rätt sätt med mitt program.
Eller det var vad denne handikappskonsulent iallafall sa till mej. Jag satt som ett fullständigt frågetecken, hade inte en aning om vad som hände för bildskärmen var kol-svart och jag var förlorad redan efter uppstarten av dator-programmet.
Total-blinda är hopplösa att dator-supporta för det är jag som är handikappad när de "visar". Blotta åsynen av någon som hackar på ett vanligt tangentbord framför en avslagen bildskärm är frustrerande.
Numera finns punktdisplaer men tror detta var ca 1990 då det inte ens fanns någon dator på alla kontor.
Den synskadade inköparen, det var ett av hans många knep, det var ren taktik att gå hastigt förbi receptionen då han slapp leta efter mej, och när jag tvingades gå lite raskare så hörde han väl var han hade mej trots att andra personer rörde sej samtidigt i korridorena. Otrolig förmåga att ändå inte gå på mötande folk eller föremål. Att känna igen vilken av arbetskamrater som råkade kom in på hans kontor var också imponerande men enligt honom var det enkelt att identifiera hur fotstegen lät.
Många synskadade har upptränad fingertopps-känsla för att snabbt kunna läsa punkt-text och om bara intresset finns kan man säkert koppla ihop relativt komplicerade kretsar på ett kopplingsdäck.
Ett problem som är lätt att tänka är att många komponeter är symetriska i formen, 1N4148 t.ex. och tråd-motstånd är färgkodade men tror åtminstone på denna nivån är det inga problem.
Har själv mycket samma situation då jag handlöder prototyper baserade på 0402 SMD eller ännu mindre. Då finns ingen märkning på komponenterna och de är komplicerade att verifiera mätvärde på då de är så små. Då måste man hålla ordning på sortimentaskar, kan bara ha en komponent framme i taget för inlödning osv.