Archive for the ‘elektronik’ Category

Antik datorteknik, flytta filer över nätet

11/01/2022

I föregående inlägg visade jag hur jag kan använda en simulerad magnetbandstation för att flytta filer mellan min PDP11/70 och den Raspberry Pi som kör emuleringen. Systemet är något omständligt men det fungerar i princip till belåtenhet. Systemet kunde t.ex. användas till att flytta över källkoden till en lite trevligare editor till PDP11 och därefter kompilera den. Resultatet skulle vara en lite bekvämare arbetsmiljö.

Jag kan utan problem köra min PDP11 också från min ”huvuddator” d.v.s. bordsdatorn. Jag ansluter via SSH d.v.s. en krypterad dataförbindelse till Raspberry Pi och använder samma fönster till att logga in mig på PDP11. Detta betyder att jag kan jobba vid min stora bildskärm med ett ensamt terminalfönster in till PDP11. Om jag vill flytta data direkt från huvuddatorn till PDP11 utan att behöva logga in på Raspberry Pi för att fixa magnetbandet, hur gör jag då?

Det faktum att jag kan koppla upp mig till PDP11 via en SSH förbindelse till Raspberry Pi betyder självklart att jag har en fungerande nätverksförbindelse. Jag kan också kontrollera om min PDP11 syns på nätverket med hjälp av verktyget ”ping”:

ping 192.168.0.xxx

där 192.168.0.xxx är PDP11:ns IP-adress. PDP11 har en egen IP-adress trots att den kör ”inom” Raspberry Pi d.v.s. all dess IP trafik routas via Raspberry Pi. Om PDP11 svarar på en ping så betyder detta att nätverksförbindelsen i princip fungerar. PDP11 känner till kommandot ftp d.v.s. det borde vara möjligt att flytta filer direkt mellan huvuddatorn och PDP11 utan att Raspberry Pi behöver delta i operationen. En intressant detalj är att jag inte kan pinga PDP11 från Raspberry Pi d.v.s. det kort på vilket både Raspberry Pi och PDP11 kör. Däremot kan jag pinga PDP11 från min bordsdator som sitter på samma nätverk som Raspberry Pi. Problemet går att åtgärda men så långt har jag inte ännu hunnit.

En ftp server på min huvuddator

Jag började med att installera en ftp server på min huvuddator. Det finns ett antal varianter för Linux och jag valde att installera en server som heter VSFTPD. Jag kör Linux Mint som stöder denna ftp-server. Installationen gick behändigt med:

sudo apt update

Detta kommando uppdaterar Linux Mint katalog över tillgängliga applikationer.

sudo apt install -y vsftpd

Installation av ftp-servern från kommandoraden. Jag kunde likaväl ha använt ett grafiskt verktyg.

Konfiguration av servern görs i filen /etc/vsftpd.conf

sudo nano /etc/vsftpd.conf

Det lönar sig att googla på vsftpd om man behöver information om konfigurationen. Jag måste installera och konfigurera som superuser ”root” eftersom jag installerar vsftpd för alla användare på maskinen och konfigurationsfilerna i /etc är skrivskyddade eftersom jag inte vill att en eventuell besökare skall kunna gå in och konfigurera min maskin. För att jag skall kunna flytta filer från måste jag åtminstone editera /etc/vsftpd.conf så att jag tillåter skrivning till min katalog på deNeb. Detta kan jag göra genom att sätta write_enable=YES . Denna modifikation behövs om jag vill flytta filer från PDP11 till deNeb.

Flytta filer till/från PDP11

Min PDP11 representerar tidsperioden 1970 till slutet av 1990-talet. I praktiken betyder detta att de programverktyg jag har tillgång till kör i en textterminal inte i ett modernt grafiskt fönster som på min huvuddator. Det visar sig dock att man mycket bekvämt kan flytta filer mellan datorer direkt från kommandoraden på PDP11 utan att detta egentligen är komplicerat.

PTF-inloggning till min huvuddator från PDP11

Jag kopplar upp till min huvuddator ”deNeb” från PDP11. Situationen är intressant genom att det terminalfönster i vilket PDP11 kör finns på deNeb men är kopplad över en ssh-förbindelse. PDP11 kör alltså på Raspberry Pi men terminalfönstret finns på deNeb vilket man kan se i fönstrets rubrik.

Jag jobbar alltså i PDP11 och lägger upp en ftp-förbindelse till deNeb. Steg för steg gör jag:

ftp deNeb

Jag ger mitt användarnamn och password till deNeb för att släppas in i maskinen. Inloggningen är avklarad då jag får svaret ”230 Login successful”.

ftp>

Datorn kommer visa ftp> på varje rad för att indikera att jag har en aktiv ftp-förbindelse. I kommandona nedan är denna indikator bortlämnad. tex. följande kommando nedan kommer att i terminalen vara: ftp>cd Prog/PDP11 men användaren skriver endast cd Prog/PDP11 .

Jag ger nu ett kommando till ftp-servern att jag vill flytta mig till katalogen Prog/PDP11 på datorn deNeb från vilken jag vill hämta en textfil.

cd Prog/PDP11

Svaret blir ”250 Directory successfully changed”. Jag listar nu innehållet (ls) i katalogen dit jag flyttade mig på deNeb.

ls

Katalogen innehåller endast en fil med namnet deNeb.txt. Jag kan nu flytta filen från deNeb till PDP11 där jag kör mitt ftp-program med kommandor ”get”.

get deNeb.txt

… 226 Transfer complete.

Jag har nu flyttat filen till PDP11 och jag kan undersöka vad jag fick. Först går jag ut ur PDP11 med kommandot ctrl-D.

cat deNeb.txt
Resultatet blir:

This text document is moved from the Linux computer ”deNeb” to the emulated PDP11.

Filens innehåll är korrekt. Vi kan ladda in filen i texteditorn ”vi” och göra en liten förändring. Vi ändrar texten till: This text document is moved from PDP11 to ”deNeb”. Jag byter namn på filen till PDP11.txt så att jag kan verifiera att jag faktiskt har flyttat filen tillbaka till PDP11.

Vi kan nu flytta den modifierade filen tillbaka till deNeb genom att på nytt starta ftp på PDP11. Vi flyttar oss till katalogen Prog/PDP11 och använder ”put” för att flytta filen från PDP11 till deNeb.

Jag kan kontrollera vad jag har i min lokala katalog på PDP11 inifrån ftp-programmet genom att ge normala UNIX-kommandon som inleds med ”!”.

!ls
hello hello.c

På PDP11 har jag endast två filer i min arbetskatalog d.v.s. ett ”Hello world!” c-program och samma program i kompilerad körbar form.

Jag flyttar filen PDP11.txt till deNeb med ftpkommandot put PDP11.txt . Jag kan nu i ett annat terminalfönster kontrollera att filen faktiskt levererades korrekt.

Efter kommandot på PDP11 ser vi att vi har fått en ny fil på deNeb d.v.s. överflyttning i båda riktningarna lyckas utan problem.

Det är igen intressant att se hur jag utan större problem kan kommunicera mellan min huvuddator deNeb och en 30 år gammal UNIX. Det finns klara fördelar av att operativsystemen är nära besläktade. Jag tror inte att det hade varit riktigt lika enkelt att idag försöka sätta upp en förbindelse mellan PDP11 och t.ex. Windows 3.1 från 1992 …

Att ladda program på en PDP11

05/01/2022

1970-talets datorer var ofta försedda med en frontpanel med mängder av strömbrytare samt blinkande lampor. Frontpanelen var inte kosmetisk utan tanken var att användaren började med att knappa in en handfull maskininstruktioner i maskinens minne, instruktioner vars uppgift var att ladda in ett större mera avancerat laddarprogram från t.ex. hålremsa. Från hålremsa kunde man ladda in ett enkelt operativsystem eller t.ex. en Basic tolk som kunde användas till att skriva riktiga program. Det var teoretiskt, inte praktiskt, möjligt att knappa in t.ex hela tolken via frontpanelen men chansen att man gjorde något fel var så stor att det inte var något alternativ. En användbar Basic krävde någonstans mellan 4000 och 8000 instruktioner d.v.s. kanske 15000 strömbrytare måste flippas utan fel för att det skulle fungera.

Bilden är tagen från: https://obsolescence.wixsite.com/obsolescence/pidp-11-overview

Man använde oftast hålremsa för att ladda program. Hålremsa är som namnet säger en ungefär 25 mm bred pappersremsa ofta många meter lång med hål stansade tvärs över remsan. Varje stansad hålrad representerade ett tecken i binär form. Det själv inmatade programmets uppgift var alltså att läsa av hålkombinationer från en hålremsläsare och successivt mata in resultatet i minnet. Då hela remsan hade lästs matade man in en startadress från frontpanelen och tryckte på ”kör”.

En hålremsläsare är enkel att bygga själv men att bygga en hålremsstans kräver redan en del mekaniskt kunnande men inte oöverkomligt sådant. Jag tittade lite på möjligheten att bygga upp hålremsan på A4-papper i form av t.ex. en JPG bild. Man kunde då t.ex. i stället för att stansa hålremsa skriva ut program eller data i hexadecimal form, papper som kunde mappas in och sedan läsas av PDP11 via en simulerad hålkortsläsare som skulle använda OCR (Optical Code Recognition) för att återskapa innehållet i binär form för laddning till PDP11. Jag skrev på skoj ett program som dumpade data till printer i ett standardiserat format och använde därefter programmet Tesseract för att återskapa mina data. Programmet Tesseract fungerar mycket väl då man låter det läsa text skrivet på ett språk för vilket Tesseract tränats. Resultatet blev inte speciellt bra då programmet skulle läsa i princip slumpmässiga data. Felkorrigeringen bygger tydligen åtminstone delvis på att den inlästa texten matchas mot ordlistor/meningar/grammatik så att enstaka fel elimineras. Då programmet inte kunde matcha inlästa data mot en språklig databank dök det upp förvånande mycket fel kanske 1-5% av de inlästa tecknen blev fel d.v.s. systemet fungerar inte utan hjälp av mera avancerad felkontroll. Här uppfattade jag att jag hamnade i en återvändsgränd och lät bli att gå vidare.

Av en slump hittade jag efter en del googlande ett enkelt alternativ till att ladda in program till PDP11. Vi har alla sett video/film från gårdagens data center där det finns kylskåpsstora databanspelare som kontinuerligt körs/stoppas/snabbspolas. Databanspelarna var länge det huvudsakliga mediet på vilket data kunde lagras. En svindyr hårskiva rymde kanske 5 Mbyte medan ett magnetband hade nästan oändlig kapacitet sett ur den tidens perspektiv. Magnetbandets nackdel var att man då man skulle ladda in ett program måste man hitta bandet, korrekt mata in bandet i bandstationen och därefter ange vilket ”block” man ville läsa. Systemet var långsamt men blixtsnabbt jämfört med andra system t.ex. hålremsa.

Det visade sig att det fanns en fungerande simulerad bandstation som fungerar på följande sätt:

Jag skapar en katalog /home/pi/bsdtapes på Raspberry Pi där emulatorn körs. Om jag lagrar ett simulerat magnetband tq0tape.tap i denna katalog så kan jag på PDP11 som på den gamla goda tiden aktivera bandstationen och läsa bandet.

För att aktivera bandstationen i PDP11 måste man i BSD 2.11 startfilen definiera att en bandstation finns tillgänglig.

cd /opt/pidp11/systems/211bsd

Gör en kopia på initialiseringsfilen boot.ini:

sudo cp boot.ini boot.ini.backup

Editera boot.ini så att det efter set tq enabled kommer en ny rad:

attach tq0 /home/pi/bsdtapes/tq0tape.tap

Då PDP11 BSD 2.11 startar så vet systemet var det hittar bandet för bandstationen.

Processen beskrivs nedan:

Att läsa program/data från magnetband

Om jag vill flytta data eller program till PDP11 så måste jag först skapa ett läsbart magnetband d.v.s. en fil som binärt ser ut som de data vi får ut från magnetstationen.

Vi börjar med att putsa bort eventuella gamla magnetband i katalogen. Jag har en underkatalog i vilken jag sparar mina magnetband.

sudo rm tq0tape.tap tq0tape.tar

Antag att jag vill flytta en fil minFil.txt till PDP11. Jag börjar med att komprimera/packa ihop filen till en tar-fil. Filändelsen tar står för tape archive! Systemet används fortfarande i Unix/Linux maskiner även om det är många år sedan man hade en riktig bandstation att jobba mot. Resultatet blir helt enkelt en datafil.

tar cvf tq0tape.tar minFil.txt

Vi har nu ett bandarkiv tq0tape.tar som innehåller filen minFil.txt. Filen är inte ännu läsbar av PDP11 utan vi måste skriva om arkivfilen till ett simulerat magnetband. Vi gör detta med hjälp av ett enkelt Perlprogram tapadd.pl och resultatet blir en fil tq0tape.tap .

./tapadd.pl tq0tape.tar tq0tape.tap

Jag kan nu läsa bandet från PDP11 på följande sätt under förutsättning att jag har lagt till bandstationen till 211BSD :

Starta PDP11/70 under simh. Det verkar vara nödvändigt att starta om 211BSD mellan olika band. Jag har inte analyserat vad detta beror på … kanske i framtiden. Logga in på PDP11 och gå till den katalog dit du vill ha dina data. Spola tillbaka magnetbandet och läs innehållet i form av en tar-fil.:

mt rewind
tar xv

Resultatet blir att de filer som fanns på bandet lagras under dut usprungliga namnet i arbetskatalogen. Systemet fungerar förvånande bra.

Att flytta data från PDP11 via magnetband

Systemet är i princip detsamma som det ovan beskrivna men i omvänd ordning. Vi börjar med att skapa ett bandarkiv som skrivs direkt till ”magnetbandet” utan att gå över en lokal fil. Systemet är alltså:

Spola tillbaka bandet.

mt rewind

Vi antar att vi vill flytta hela arbetskatalogen till Raspberry Pi. Vi ”tarrar” då ihop hela katalogen och lägger resultatet på bandet:

tar cv .

Notera att punkten efter tar cv betyder den aktuella katalogens innehåll. Jag kunde byta ut punkten mot t.ex. hello.c varvid endast filen hello.c skulle skrivas till band.

Det vi tarrade ihop finns nu på ”magnetband” i filen tq0tape.tap på Raspberry Pi (detta kallas magi)! Vi kan nu läsa bandet på raspberry pi med hjälp av hjälp programmet tapcat.pl . Vi börjar med att konvertera magnetbandet till ett normalt Unix bandarkiv:

./tapcat.pl tq0tapes.tap > tq0tapes.tar

Vi skapade nu ett Unix bandarkiv tq0tape.tar i arbetskatalogen. Bandarkivet kan nu öppnas med:

tar xvf tq0tapes.tar

Efter detta tar kommando finns hela arkivets innehåll i arbetskatalogen där kommandot kördes.

Slutkommentar

Det är rätt intressant att jag kan använda Unixens ”tar” verktyg på en maskin från 1970-talet. Alternativt kan man säga att det är rätt fantastiskt att 1970-talets programverktyg som skapades för att hantera data-/programarkiv på magnetband fortfarande används aktivt idag trots att forntidens bandstationer har försvunnit helt och man hittar dem endast på olika tekniska muséer.

Jag kan nu hämta ett ”magnetband” d.v.s. kopiera en magnetbandsfil från min underkatalog mytapes till filen tq0tapes.tap och därefter ladda innehållet på PDP11.

Ett ännu enklare sätt att överföra filer är att använda ftp (file transfer protocol) d.v.s. vi använder nätverket för överföring utan att ha något behov av att någon bandstation på vägen. Mera om ftp i nästa artikel.

Länkar

Filtransfer via magnetband: https://github.com/rricharz/pidp11-2.11bsd/blob/master/Tape.pdf

Program tagna från https://github.com/rricharz/pidp11-2.11bsd/

Programmet tapadd.pl:

#!/usr/bin/perl -w
use strict;
if(@ARGV != 1) {
print STDERR ”Usage: $0 <filename>\n”;
exit(1);
}
add_file($ARGV[0], 512);
end_file();
end_file();
sub end_file {
print ”\x00\x00\x00\x00”;
}
sub add_file {
my($filename, $blocksize) = @_;
my($block, $bytes_read, $length);
open(FILE, $filename) || die(”Can’t open $filename: $!”);
while($bytes_read = read(FILE, $block, $blocksize)) {
if($bytes_read < $blocksize) {
$block .= ”\x00” x ($blocksize – $bytes_read);
$bytes_read = $blocksize;
}
$length = pack(”V”, $bytes_read);
print $length, $block, $length;
}
close(FILE);
}

Programmet tapcat.pl:

#!/usr/bin/perl -w
use strict;
use vars qw($filename $filenum);
if(@ARGV != 2) {
printf STDERR ”Usage: $0 <tape file> <file number>\n”;
exit(1);
}
$filename = $ARGV[0];
$filenum = $ARGV[1];
open(INPUT, $filename) || die(”Can’t open $filename: $!”);
while($filenum–) {
readfile(0);
}
readfile(1);
exit(0);
sub readfile {
my($print) = @_;
my($block);
while(defined($block = readblock())) {
if($print) {
print $block;
}
}
}
sub readblock {
my($blocksize, $bs2, $block);
read(INPUT, $blocksize, 4);
$blocksize = unpack(”V”, $blocksize);
return undef unless $blocksize;
read(INPUT, $block, $blocksize);
read(INPUT, $bs2, 4);
$bs2 = unpack(”V”, $bs2);
$blocksize == $bs2 || die(”Invalid tape format”);
return $block;

}

Att köra en PDP11 dator från 1970-talet

05/01/2022

Jag har under en tid bekantat mig med en emulerad/simulerad PDP11 minidator från mitten av 1970-talet. PDP11 datorn var mycket populär innan IBM PC:n slog igenom och i praktiken sopade bort konkurrenterna mot slutet av 1980-talet då minidatorn PDP11 redan hade kring tjugo år på nacken. Konstruktionen kom att kopieras på olika håll bl.a. tillverkade man kopior i Sovjetunionen t.ex. Electronica 60 som jag tittade på i slutet av 1980-talet som alternativ för kontroll av mätsystem för export till Sovjetunionen. Jag jobbade aldrig med en rysk dator eftersom det visade sig att vi kunde kringgå exportrestriktionerna genom att byta ut en HP 9836 dator baserad på Motorola 68000 processor, som omfattades av amerikanska restriktioner, mot en standad 8 MHz långsam första generationens PC 8088. Jag kommer inte ihåg vilken tillverkares PC vi använde men detta är inte viktigt eftersom de olika PC:na var lika som bär. Lösningen var säkerligen bra eftersom Electronica 60 torde ha haft en hel del problem med pålitligheten. Det skulle dock ha varit roligt att ha fått konkret erfarenhet av dåtidens PDP11.

Den PDP11 jag skriver om är en emulerad PDP11/70 från ungefär 1975 som hörde till den tidsperiodens tungviktare använd som laboratoriepersondator. Datorn kunde köra UNIX och den orkade med flera användare eftersom en PDP11/70 med max minne på 4 MByte kunde stöda flera samtidiga användare. Användarna har under 2.11BSD Unix tillgång till något mer än 300 kByte minne vilket på den tiden var mycket. En PC som lanserades ett antal år senare kunde ha 64 kB – 256 kB (-640kB) för användare och operativsystem. Eftersom det normalt inte fanns något grafiskt användargränssnitt så var minnesbehovet litet och det gick att skriva stora program i 300 kByte. Dagens persondatorers behov av ett stort minne 2000-4000 ggr större än PDP11:ns är en följd av den mycket sofistikerade grafiken som kräver väldigt mycket minne utan att egentligen ge annat mervärde än bling bling. Samma kommentar gäller själva processorn som klockades på några megaherz. Moderna datorer kör med en klocka som tickar igen kanske 1000 ggr snabbare. Det intressanta är dock att då man håller sig till en text-terminal och använder kommandoraden så känns maskinen väldigt OK.

Hur emuleras en antik dator

Redan på slutet av 1960-talet d.v.s. för mer än 50 år sedan skrevs den första emulatorn MIMIC som bl.a. användes för testning och utveckling av nya datorkonstruktioner. 1993 startades projektet simH för att bevara minnet av ålderdomlig hårdvara och program. Den första generationens hårdvara höll snabbt på att försvinna och mängder av data som lagrats på magnetband riskerade att förstöras tex. 1960-talets data från månprojektet. Programmet simH emulerar en mängd gamla datorer bl.a.:

  • Data General Nova, Eclipse
  • Digital Equipment Corporation PDP-1, PDP-4, PDP-7, PDP-8, PDP-9, PDP-10, PDP-11, PDP-15 (and UC15), VAX11/780, VAX3900
  • GRI Corporation GRI-909, GRI-99
  • IBM 1401, 1620, 7090/7094, System 3
  • Interdata (Perkin-Elmer) 16b and 32b systems
  • Hewlett-Packard 2114, 2115, 2116, 2100, 21MX, 1000, 3000
  • Honeywell H316/H516
  • MITS Altair 8800, 8080 only
  • Royal-Mcbee LGP-30, LGP-21
  • Scientific Data Systems SDS 940
  • Xerox Data Systems Sigma 32b systems

Listan är inte fullständig.

Det är intressant att konkret se hur extremt mycket mera processorkapacitet vi har tillgång till idag, nästan gratis, än för femtio år sedan. En PDP11/70 kostade med fullt utbyggt minne mer än en högklassig ny personbil medan min på en Raspberry Pi emulerad PDP11/70 med maximalt minne en mängd operativsystem etc. kostar kanske 50E (500 SEK). Min emulerade maskin kör dessutom ungefär dubbelt snabbare än orginalet. Min Raspberry Pi har en kapacitet där RAM-minnet är 1000 ggr större än orginalet. Massminnet (skivminnet) är kanske 10000 ggr större och processorns hastighet är kanske 1200 ggr högre än orginalets. Ordlängden i PDP11 var 16 bitar medan en Raspberry Pi kör med ordlängden 64 bitar d.v.s. 4 ggr längre. Totalt kan man eventuellt säga att dagens lilla Raspberry Pi, beroende på vilken applikation man betraktar har en kapacitet som är mellan 1000 och 1000000 ggr högre än 1970-talets PDP11. Sannolikt ligger sanningen närmare 1000000 ggr än 1000 ggr …

Hello world

Min PiDP11/70 minidator i form av en modern mikrodator av typen Raspberry Pi model 3B. Notera att jag inte kör på den snabbaste varianten av Raspberry Pi. Valet av maskin att emulera PDP11 på gjordes utgående från vad jag råkade ha i miljonlådan … Raspberry Pi ligger på en fusklapp med kommandon man behöver för att använda den klassiska Unixeditorn ”vi” beskriven nedan.

Ett första test av en okänd dator och ifrågavarande dators programvara är ofta att skriva ett mycket kort program, kompilera det och sedan köra det. Sekvensen testar på ett allmänt plan att själva maskinen är någorlunda vettigt konfigurerad, det finns en fungerande text editor, kompilator (eller t.ex. basic tolk) samt förbindelse till bildskärm och tangentbord fungerar.

Jag har kört BSD Unix version 2.11 på min PiDP11. Alla någorlunda färska Unixvarianter är skrivna i programspråket ”c” och motsvarande kompilator heter cc (c compiler). I ett system som kör Unix brukar det alltid finnas en text editor som heter ”vi”. Editorn ”vi” är urgammal men förvånande kraftfull om användaren känner till den. Utmärkande för vi är att den är modal d.v.s. den har en kommandomod och en insättningsmod. I kommandomoden kan man med kursortangenterna och via andra tangentbordskommandon flytta sig i texten, ta bort text, söka text, byta ut text etc. Då man vill skriva text går man in i insättningsmod med kommandot ”i”. Då man vill tillbaka till kommandomoden så trycker man på ”ESC” tangenten.

Man sparar texten med kommandot ESC :w .

Man kommer ut ur programmet med kommandot ESC :q .

Avslutning så att texten sparas kan göras med kombinationen ESC :wq .

Att tvinga stängning av programmet kan man göra med ESC :q! .

Många Unixanvändare uppfattar att det enda ”vi” kommando man behöver känna till är ESC :q eftersom ingen människa med förståndet i behåll vill göra något annat än att snabbt ta sig ur editorn.

Terminalfänster från min bordsdator deNeb över nätet ner till PDP11/70. Programmet hello.c i listningen är skrivet med vi-editorn beskriven ovan.

Vi startar vi-editorn med kommandot ”vi hello.c” och kan då studera själva programmet som innehåller två utskriftskommandon som skriver ut textraderna

Hello world!
Another line!

Vi kompilerar programmet till körbar form d.v.s. maskinspråk med kommandot:

cc hello.c -o hello

Programmet körs med kommandot:

./hello

Och resultatet blir:

Kompilering av programmet hello.c . Vi ger tilläggsinformationen -o hello åt kompilatorn för att lagra resultatet i den körbara filen ”hello”. Standardnamnet på resultatet av compileringen skulle ha varit a.out vilket blir onödigt kryptiskt. Det körbara programmet körs därefter med kommandot ./hello . Orsaken till att jag skriver ./ före hello är att jag säger åt systemet att jag vill köra det program ”hello” som finns i den katalog i vilken jag befinner mig för tillfället. En Unix maskin brukar konfigureras så att man inte av misstag kör program i den katalog där man jobbar.

Jag nämnde ovan att många moderna Unixanvändare anser att det enda vi-commando man behöver känna till är ESC :q så att man med äran i behåll kan ta sig ut ur editorn. Problemet blir då hur jag skall skriva program om jag inte vill använda vi. Alternativet i 211BSD Unix på min PDP11/70 är editorn ”jove” som jag personligen har samma relation till som ”vi” d.v.s. jag vill ut ur den så snabbt som möjligt. Lösningen är naturligtvis att sätta upp kommunikation mellan min normala bordsdator eller laptop rill min PDP11 och då använda en modern editor i den moderna maskinen för att sedan flytta över program för kompilering på PDP11. Olika processer för att flytta över data mellan maskinerna presenteras i nästa avsnitt.

Datorarkeologi

10/12/2021

Dessa funderingar skrev jag som ett Facebook inlägg men de kan eventuellt intressera någon läsare på bloggen varför jag kopierar över inlägget också hit.

Jag bekantar mig med hur det känns att köra en dator från mitten av 1970-talet. Maskinen är en Digital PDP-11/70 minidator som kostade ca. $14000 då jag var en fattig student på Helsingfors Universitet. Det är fråga om en relativt sen variant med mycket centralminne som vid denna tid var RAM och inte ferritkärnminne.

Mycket centralminne i maxkonfiguration betyder 4 megabyte minne vilket dock skall jämföras med IBM:s första PC som kom ca. 10 år senare och rätt länge hade en max konfiguration på 640 kilobyte d.v.s. 1/6 av PDP-11. PDP-11 kördes ofta med tidsdelning d.v.s. flera terminaler var kopplade till samma maskin och flera personer kunde alltså samtidigt dela på maskinen.

Då jag i början av 1980-talet fungerade som data-assistent på Ammattikoulujen opettajaopisto i Tavastehus så hade man en, om jag kommer rätt ihåg, Eclipse Nova minidator (motsvarade ungefär PDP-11) som en hel dataklass i den tekniska skolan bredvid kompilerade Fortran mot … 20 elever per klass. Resultatet var att maskinen kroknade d.v.s. man kunde vänta flera minuter på något livstecken på den egna terminalen men maskinen kraschade inte! Resultatet var att jag skrev en del program på en åtta bitars CP/M maskin (som ungefär motsvarade en Commodore 64) som var härlig att jobba med eftersom jag hade tillgång till den helt ensam.

Min PDP-11/70 kostar idag ungefär 50E. Maskinen emuleras i en Raspberry Pi model 3 med 1 Gigabyte minne och 16 Gigabyte ”skivminne” på ett mikro sd-kort. Vid den här tiden hade en hårdskiva typiskt en kapacitet på 5-10 Megabyte d.v.s. 1/1000 av Raspberry Pi:s mikro SD korts kapacitet. Den lilla Raspberry Pi maskinen har en kapacitet som man sannolikt endast kunde drömma om på Tekniska högskolan på den tiden. På SD-kortet ryms mängder med operativsystem och program för PDP-11.

För tillfället kör jag BSD 2.11 från slutet av 1980-talet. Som linuxanvändare är det inget problem att köra BSD-unix. Kommandona, då man kör i terminal, är de samma. Ett grafiskt användargränssnitt saknas men jag kan köra grafiska program i en emulerad vektorgrafisk terminal på Linuxsidan i ett fönster.

Jag jobbar mot PDP-11 så att jag från min vanliga dator loggar in över nätet med ssh. Till planerna hör att då nästa sats komponenter fås fram så bygger jag en frontpanel med blinkande ledar med plats för Raspberry Pi. Det är främst strömbrytarna på fronten som ger problem, de är specialkonstruerade för den här byggsatsen för att möjligast väl matcha den ursprungliga modellen. Det är intressant att se att emuleringen är så exakt att det är möjligt att via ett adapterkort använda ursprungliga kort för en riktig PDP-11. Man har t.ex. kopplat in ett ursprungligt kärnminne (ferritringminne) och kört program från detta.

Man får en bild av den extrema utvecklingen på datorområdet då man jämför en modern Raspberry Pi med PDP-11 (jag använder en äldre Raspberry Pi modell 3 som jag råkade ha liggande). Raspberry Pi har fyra processorkärnor med ordlängden 64 bitar jämfört med PDP-11 som hade 16 bitar. Ordlängden som sådan betyder att RPi är kanske 4x effektivare och då vi har fyra processorer i RPi så kan processorn utföra 4x mera arbete.Ursprungligen så körde PDP-11 med en cykeltid på 800 ns vilket betyder en klockfrekvens på ca. 1,25 MHz vilket skall jämföras med RPi som klockas ca. 1000 ggr högre. Jag nämnde att PDP-11/70 hade ett maximalt minne på ca. 4 megabyte vilket skall jämföras med dagens RPi modell 4 som har 4 gigabyte (1000 ggr mer).

Om vi lägger ihop skillnaden mellan dagens 50Euros RPi och gårdagens $14000 minidator så ser vi att RPi totalt sett har en kapacitet som är ungefär 4x4x1000x1000 = 16 000 000 större än gårdagens PDP-11/70. Vi förstår också hur stor kapaciteten hos en Raspberry Pi är idag då vi noterar att jag kör Linux på RPi med grafiskt användargränssnitt och under Linux på RPi kör PDP-11 emulatorn SIMH som alltså låtsas vara en äkta PDP-11/70 och på den emulerade PDP-11/70:an kör jag BSD Unix v. 2.11. Den emulerade PDP-11/70 kör med ungefär dubbel hastighet mot orginalet!

En annan intressant jämförelse är att en normal Android mobiltelefon har ungefär samma hårdvara som en Raspberry Pi (eventuellt något bättre). Mobiltelefonen har alltså en total beräkningskapacitet som är miljoner gånger större än hos 1970-talets minidator. Största delen av processorkraften i dagens datorer/telefoner bränns dock på all världens bling bling och gårdagens maskin känns förvånande OK bara man inte tvingar den att rita ett grafiskt användargränssnitt med halvtransparenta fönster etc.

Jag kör ”adventure” som är ett textbaserat spel med något som påminner om Morias grottor i Sagan om ringen. Programmet körs under UNIX (BSD 2.11 som de facto är detsamma som BSD 4.3 med alla PDP-11 upgraderingar). Fönstret finns på min vanliga bordsdator som kör Linux och jag kopplar upp mot PDP-11/70 över nätverket med ssh.

Dagens ”Minidator” en Raspberry Pi model 3 emulerar gårdagens mycket använda Minidator PDP-11/70 i dubbel hastighet. Notera att det inte finns någon fläkt då Raspberry Pi förbrukar endast ca. 5W. Orginalet d.v.s. den riktiga PDP-11:n var högljudd eftersom hela maskinen ursprungligen var byggd från diskreta TTL-kretsar med mycket låg integrationsgrad. Senare modeller av PDP-11 hade processorer integrerade i en eller ett litet antal kretsar. Med högre integrationsgrad så minskade också strömförbrukningen.

Några källor:

Om någon är intresserad av att försöka sig på lödning så är detta ett relativt enkelt projekt:

https://obsolescence.wixsite.com/obsolescence/pidp-11-technical-details

Wikipedia har en rätt bra artikel om PDP-11:

https://en.wikipedia.org/wiki/PDP-11

Reparation av ett elpiano

19/09/2021

Jag råkade av en slump se att ett elpiano av typen Behringer Eurogrand EG2180 fanns till salu. Annonsen konstaterade att ett par tangenter inte riktigt gick tillbaka efter nedslag. Det begärda priset var 55 Euro d.v.s. ca. 500 SEK. Jag träffade säljaren som visade sig vara en trevlig utländsk studerande som studerar teknik på den avdelning på Aalto universitetet där jag själv i tiderna har undervisat. Säljaren var tydligen rätt förvånad över att jag var ganska ointresserad av att provspela instrumentet efter att jag såg att elektroniken tydligen fungerade. Jag var ju medveten om att jag sannolikt skulle vara tvungen att plocka isär instrumentet helt. Jag visste mycket väl att det fanns många fel.

Det blev affär och jag prutade upp priset till 60 Euro för att en student nog behöver pengarna…

Fig. 1 Utgångmgsläget då instrumentet var inburet men stativet kvar på kärran. De blå tejpbitarna visar tangenter som inte går tillbaka efter nedslag eller tangenter där känslan tydligt var fel men där tangenter trots viss tvekan själv gick tillbaka.

Det första skedet var att kartlägga så många fel som möjligt. Kartläggningen gick ut på att trycka på en knapp i taget och observera hur tangenten uppför sig. Det visade sig naturligtvis att det fanns betydligt fler tvivelaktiga tangenter än vad som angivits i annonsen … inget problem och egentligen helt väntat. Fig. 1 visar den första kartläggningen av fel. Notera att ett par tangenter som inte går tillbaka blev femton i detta skede. I ett senare skede kom det till ett antal fel då inte alla tangentsensorer fungerade korrekt.

Fig. 2 Skyddslocket över tangenterna, samt övre delen av instrumentet är demonterade. Kontrollpanelen som normalt ligger vid bakändan av tangenterna ligger upp och ned över högtalarna (det långa blå kretskortet). Ungefär på mitten, strax nedanför flatkablarna ser man ett litet nästan kvadratiskt elektronikkort som utgör instrumentets hjärna. Jag gissar att kortet i stort sett i fråga om datorkraft motsvarar en Raspeberry Pi dator som kostar 30-40 Euro. Ovanför flatkablarna ser man nätaggregatet.

För att kunna fixa tangentbordet måste det tas loss. Under framkanten av tangentbordet ungefär där limlapparna sitter finns en rad kanske 50 mm långa maskinskruvar skruvade underifrån in i tangentbordet. Genom att ställa instrumentet att stå på bakkanten var det inga problem att lossa skruvarna.

Längs den inre kanten av tangentbordet finns en rad skruvar som håller fast tangenbordet från insidan. En del av dessa skruvar saknades eftersom någon eller flera tidigare ägare har varit inne i instrumentet. Innan man lyfter ut tangentbordet är det skäl att lossa de två smala flatkablarna till processorkortet. Jag märkte kablarna V och H för att veta i vilken ordning kablarna skall moteras. Om man byter plats på kablarna så får man ett intressant instrument där diskanten klingar till vänster för att mitt på instrumentet byta till bas … ingenting går dock sönder om man kopplar fel. Av detta kan man naturligtvis dra slutsatsen att jag åtminstone en gång kopplade fel trots att kablarna var märkta, ”errare humanum est” d.v.s. det är mänskligt att fela. Uttrycket fortsätter ”perseverare autem diabolicum” som man antagligen kan översätta med att om man fortsätter att fela så hör det fan till …

Fig. 3 Det tunga(!) tangentbordet kan då skruvarna har lossats försiktigt lyftas ur och ligger nu på bordet. På undersidan av tangentbordet finns falska klubbor vars uppgift är att ge rätt känsla vid anslag som också slår mot tangentens hastighetssensor. Klubborna är monterade i modulen som i bilden ligger ovanpå tangentbordet. Tangenterna kan enkelt demonteras genom att lossa ett metallstöd och en svart ”kilribba” som fixerar tangenternas bakändor. I bilden har alla tangenter i den losstagna oktavmodulen demonterats. Tangenterna sjuts försiktigt bakåt varefter de kan lyftas bort.
Fig. 4 Tangenterna är fixerade på plats med en metallprofil samt en kilribba i plast. Då kilribban tas loss kan en tangent skjutas bakåt och sedan lyftas bort. Det visade sig att det speciellt vid återmonteringen ofta var lättare att montera vissa svarta tangenter före vita tangenter eftersom de vita tangenterna annars låg i vägen vid montering.

För att klubborna skall kunna demonteras måste de två långa gula kretskorten med tangentsensorer tas bort. Totalt blir det då att lossa 66 skruvar …

Fig. 5 Klubbornas moduler (en oktav) är skruvade till de två kretskorten. Det är inte möjligt att lossa en modul utan att lossa kretskorten. I bilden har det ena kretskortet redan demonterats. Längden på ett kretskort är halva längden av tangentbordet, det är alltså skäl att hantera kretskorten med försiktighet så att de inte skadas.

De två kretskorten utgör två enkla scannade brytarmatriser. Antalet kontakter är dubbla antalet mot antalet tangenter eftersom en tangenttryckning alltid aktiverar två kontakter. Kontakterna är monterade på olika avstånd från kretskortet och processorn uppskattar nedslagets hastighet genom att mäta tiden mellan de två kontaktaktiveringarna. I fig. 5 ser man uppstickande gummiben (grå samt genomskinlig) från kontakterna som utgörs av kontaktytor av grafit i gummibubblor som trycks mot spår i kretskortet. Mer om sensorerna senare i texten.

Fig. 6 Klubborna löper mycket dåligt. Notera hur fyra klubbor inte faller tillbaka av egen vikt. Det är också självklart att det inte hjälper att smörja in tangenterna eftersom friktionen finns i klubborna inte i tangenterna. Jag tror inte att det fanns en enda oktavmodul som inte hade kärvande klubbor. Resultatet var att jag servade alla klubbor.

Det är rätt enkelt astt fixa de kärvande klubborna. Man tar en lämplig metalldorn med diametern mindre än 8 mm och slår försiktigt ut axeln som går genom alla hamrarna. Det lönar sig att knacka loss axeln med modulen liggande på ett bord så att man inte blir med en grupp hamrar i famnen. Den urknackade axeln används nu som testverktyg då man med fil, borr eller brotch försiktigt vidgar axelhålet i de olika hamrarna. Jag ökade försiktigt på håldiametern tills klubban löpte lätt utan att kärva men fortfarande utan glapp. Det kan också vara skäl att försiktigt fila klubbans plastdel från sidorna eftersom problemet tydligen är att den gjutna plastdelen sväller med tiden då spänningar från tillverkningen släpper.

Fig. 7 En demonterad klubba. Problemet med kärvande klubba verkar vara att plasten med tiden sväller som en jäsande deg vilket ökar friktionen i hålet i den vita plastdelen överst. Då man jobbar med klubban kan det vara skäl att demontera den lilla triangelformade svarta plastdelen i närheten av axeln. Man kan mycket lätt tappa denna del och jag vet inte var man skulle hitta reservdelar. Lägg den åt sidan då du jobbar med tangenten. Jag tappade en av dessa svarta delar på golvet i den inte välstädade snickarboan men jag hittade den!

Jag behövde ungefär en och en halv timme för att fixa den första oktaven. De följande oktaverna krävde sedan ca. 20 minuter per oktavmodul. Övning ger färdighet.

Efter att de kärvande klubborna var fixade … jag kontrollera alla klubbor inte endast de som ursprungligen märkts med tejp, plockade jag ihop tangentbordet och kopplade det temporärt till instrumentet. Tangenterna fungerade nu perfekt. Det fanns inga kärvande tangenter och touchen var bra. Jag hittade dock ett antal tangenter som uppförde sig konstigt vid en tangenttryckning.Det fanns tre kategorier av fel:

  • Tangenten gav ett mycket kraftigt ljud helt oberoende av hur kraftigt jag tryckte på tangenten.
  • Tangenten gav ett svagt ljud då man tryckte på den och ett kraftigt ljud då man släppte upp den.
  • Tangenten gav ett svagt ljud oberoende av anslagets styrka.

Orsaken till ovanstående fel är följande:

Då tangenten ger ett kraftigt ljud oberoende av hur svagt man trycker på tangenten så betyder detta att den kontakt som ligger längre ifrån kretskortet gör kontakt medan den närliggande kontakten inte gör det. Processorn tolkar då anslagshastigheten som mycket hög med hög ljudvolym som resultat. Lösningen är att kontrollera att det inte finns fett, olja eller damm på kontaktytorna.

Då tangenten endast ger ett svagt ljud oberoende av anslagets styrka så betyder detta att kontakten närmare kretskortet ger kontakt korrekt men den andra kontakten längre ifrån kretskortet sluter inte vilket processorn tolkar som ett extremt långsamt anslag och resultatet blir en mycket svag ton.

Dubbeltonen svag/stark beror sannolikt på kontaminering med t.ex. olja som någon tidigare reparatör hade använt rikligt av. Då tangenten trycks ner så sluter endast den närliggande kontakten till kretskortet med resultatet att vi får en svag första ton. Då jag släpper upp tangenten så har oljan hunnit pressas undan och kontakten längre ifrån kretskortet sluter vilket tolkas som en separat kraftig knapptryckning.

Fig. 8 En tidigare reparatör hade tydligen inte förstått hur avkänningen av knapptryckningar fungerar utan man hade försökt korrigera något fel genom att lägga till ”dämpning?) i form av skumplastbitar. Sensormodulen till vänster är korrekt medan den gula skumplasten till höger inte hör dit.

I fig. 7 har sensorkretskorten monterats loss och vi kan se undersidan och de runda kontakttornen som klubban slår mot. Varje runt torn består av två kontakter. Mitt i ett torn finns en liten rund kontakt kanske en mm från kretskortet. Runt basen på ett torn finns en kontakt som går runt tornet och som ligger mycket nära kretskortet. Då man trycker på sensorn så kommer tydligen ringelektroden först att göra kontakt och sedan centralelektroden. Som jag nämnde ovan så verkar standardkonstruktionen i andra elpianon vara en dubbelrad sensorer med en kontakt per torn.

Man kan utan problem dra loss sensormodulerna för putsning men det blir en del pillrande för att få dem tillbaka på plats. Det är igen skäl att notera att jag inte vill skada någon gummimodul eftersom det kan vara extremt svårt att hitta reservdelar.

Fig. 9 En del av de bortplockade skumplastbitarna som inte skall finnas i sensorerna. Det fanns betydligt mer …

Den jobbigaste delen av reparationen var att hitta problemtangenter. Tangentbordet måste vara hopbyggt för att man skall kunna testa det. För att putsa en kontakt måste jag skruva loss det gula kretskortet i tangentbordet d.v.s. 33 skruvar. Det är skäl att alltid provspela hela tangentbordet och märka konstiga tangenter med tejp och en beskrivning av symptomen. Jag gissar att jag blev tvungen att öppna tangentbordet för justering fyra gånger innan jag fick alla fel fixade.

Fig. 10 Det hade använts rikligt med tunnflytande olja vid tidigare reparationsförsök tydligen för att fixa de kärvande klubborna. Resultatet var att det under en del av sensorerna fanns olja. Notera hur kretskortets svarta kontaktytor är våta av olja och olja finns naturligtvis också på gummidelens grafitytor.

Jag tog loss sensordelen av gummi på två ställen för att fixa kontaktproblem (se beskrivning av symptomen ovan). I fig. 10 ser man hur mittkontakten ser torr ut medan ringkontakten är nerkladdad av olja. Resultatet torde ha varit att ifrågavarande tangenter endast gav ett mycket kraftigt ljud eftersom processorn tror att anslaget sker med nästan oändlig hastighet.

Det visade sig att Biltemas elektronikrengöring på sprayburk fungerade bra. Jag använde vaddstickor fuktade med rengöringsmedel för att putsa kretskortet. Jag tog helt loss sensordelen av gummi och sprutade rikligt av rengöringsämne vid kontaktytorna. I ett skede såg det lite skrämmande ut då rengöringsmedlet tydligen reagerade med gummit vilket fick som resultat att gummidelen rullade ihop sig som en mask. Då jag monterade tillbaka sensordelarna och satte ihop tangentbordet så visade det sig ingen tangent i den genomskinliga sensormodulen i bilden ovan fungerade … uups! Då jag provspelade några timmar senare så hade tvättmedlet avdunstat helt och tangenterna fungerade korrekt.

Fig. 11 Sensormodulen från insidan. Vi ser ringelektroden som i viloläget är väldigt nära kretskortet och tydligen sluter kontakt genast vid en knapptryckning och således sätter igång en hastighetsmätning. I centrum finns en annan elektrod som är moterad kanske en mm högre och som ger inform om när hastighetsmätningen är slut. Notera hur den tvättade sensormodulen försöker rulla ihop sig. Spänningar i gummiblandningen gör ringelektroden elliptisk i stället för cirkelrund. Lyckligtvis så återfick sensorn sin ursprungliga form då allt lösningsmedel hade avdunstat.
Fig. 12 En annan sensor som har tagit stryk av olja. Notera hur tre av fyra ringelektroder helt eller delvis är oljiga.
Fig. 13 Motsvarande sensormodul innan tvättning. Vi ser att tre av fyra sensorer är nedsölade av olja.

Vad blev resultatet

Efter två dagars arbete är instrumentet hopmonterat och allt fungerar perfekt såvitt jag vet. Resultatet blev ett mycket trevligt elektriskt piano med, som jag uppfattar det, ett härligt ljud och mycket realistisk touch i tangenterna till ett pris på ca. 70 Euro då jag blev tvungen att satsa en tia på elektronikrengöringsmedel.

Projektet var väldigt lärorikt. Jag hade ingen aning om att ett elektriskt piano har hammare i likhet med ett riktigt piano. Felsökningen av starka/svaga och dubbla toner gjorde att jag nu förstår hur instrumentet känner av anslagshastigheten och jag kan genom att lyssna på en spelad ton höra om allt är ok eller om det finns ett sensorfel. Jag uppfattar att användningen av två kontakter för varje tangent är genialisk genom sin enkelhet. Ett sensorfel går att känna igen direkt på ljudet d.v.s. jag vet på förhand vilken typ av fel jag kan förvänta mig d.v.s. jag vet vilkendera sensorn som är orsak till problemet.

Notera att de flesta elektriska pianon har sensorerna placerare som två separata mittelektroder ovanför varandra inte som i Behringerinstrumentet kombinerade. Fördelen med den vanligare konstruktionen är att det är möjligt att hitta reservdelar till andra instrument medan det tydligen inte finns mycket reservdelar tillgängliga för Behringer.

Ett jättetrevligt projekt som inte blev sämre av att jag på slutändan fick ett fullt fungerande instrument som jag annars sannolikt hade varit tvungen att betala 500-700 Euro för. Projektet visar också väldigt konkret att en fullständig genomgång av ett modernt elpiano inte är billigt. Då jag Googlade så hittade jag en prisuppskattning gällande service som gick på $500 vilket nog inte är något rövarpris för ett jobb som jag uppskattar att jag, om jag skulle göra om det, skulle kunna göra på en dag. Det stora jobbet var de kärvande tangenterna/hamrarna. Putsning av sensorerna krävde på slutet ungefär en halv timme mellan varven men innan allt fungerade så blev det några varv.

Att reparera en fotoskrivare

11/02/2021

Jag köpte för ett antal år sedan en EPSON Stylus Photo PX730WD skrivare för att som gammal amatörfotograf med erfarenhet av ett riktigt mörkrum ha tillgång till den moderna motsvarigheten. Skrivaren använder sex olika bläckkassetter och fotoutskrift på blankt fotopapper blir extremt bra. Skrivaren råkade dock i likhet med min tidigare skrivare rätt snart ut för problem. Mina erfarenheter av bläckskrivare har varit följande:

  • Utskrift av färgbilder är dyrt! En sats färgkassetter kostar i orginal bortåt 100 Euro (1000 SEK).
  • Dyr utskrift leder till att jag skriver ut sällan, sparar på bläck.
  • Att spara på bläck kan leda till att skrivhuvudet torkar. Epsonskrivarna integrerar inte skrivhuvudet i kassetten vilket betyder att ett igentäppt munstycke inte fixas genom att byta kassett. Vissa andra skrivare har skrivhuvudet integrerat i den utbytbara kassetten vilket betyder att problem löses genom att byta kassett.
  • Dyr utskrift leder lätt till att jag använder ”piratbläck” d.v.s. icke märkesbläck. Jag har en känsla, utan klara bevis, av att blandning av orginalbläck och piratbläck kan leda till stopp i skrivhuvudet (detta var åtminstone fallet tidigare). Byte av bläckleverantör borde antagligen föregås av tvätt av skrivhuvudet (det finns specialmedel att köpa, se nedan).
  • Jag kan vara snål och försöka få ut de sista dropparna bläck ur de 15 ml stora kassetterna. Varför byta en kassett som ännu innehåller färg värd sin vikt i guld. Resultatet kan då vara att skrivaren suger luft in i slangen mellan kassett och skrivhuvudet. En luftbubbla blockerar helt eller delvis pumpningen av bläck vilket kan ge mycket synliga och besvärliga utskriftsfel. Dagens färgbläckskrivare marknadsförs enligt principen att det man förlorar på gungorna tar man in på karusellen d.v.s. skrivaren säljs till ett mycket lågt pris (jämförbart med en sats påfyllningskassetter) men med färgkassetter som endast delvis är fyllda för att tvinga köparen att snabbt köpa hutlöst dyr färg. Det är sannolikt att det finns köpare som byter hela skrivaren då bläcket tar slut eftersom nya bläckkassetter ligger i samma prisklass som hela skrivaren …

Ovanstående kostnadsproblem kan lösas på två sätt för den gamla PX730 skrivaren. Jag såg någonstans på nätet att man kan modifiera skrivaren så att den suger bläck direkt från flaskor på samma sätt som dagens Eco Tank skrivare. Ett annat alternativ är att använda kassetter som enkelt kan fyllas på. Jag valde det senare alternativet. För priset av en påfyllning med orginalbläck kan jag köpa en sats tomma påfyllningsbara kassetter med ett räknarchip som nollas automatiskt. En flaska bläck motsvarar tiotals påfyllningar d.v.s utskriftspriset sjunker till ungefär samma nivå som för en laserskrivare.

Fig. 1 Ett exempel på en påfyllnadssats för min skrivare. Det finns satser som också innehåller en flaska tvättmedel om skrivhuvudet delvis har torkat. Sök på ”refill kit XXXX” där XXXX är ditt skrivarmärke och modell. Notera att enkla färgskrivare tenderar att ha fyra färger d.v.s. svart + tre färger medan mera avancerade kvalitetsskrivare har fler kulörer. I mitt fall har skrivaren sex färger.
Fig. 2 En påfyllningsbar bläckkassett. Färg fylls på vid den röda korken längst trill höger. Korken i ofärgad plast närmast betraktaren i kassettens nedre hörn tas bort då kassetten är på plats så att lufttrycket kan jämnas ut.

Att fixa ett torkat skrivhuvud

Den normala metoden för att få ett torkat skrivhuvud att fungera är att använda ”head clean” d.v.s. tvätt av skrivhuvudet kombinerat med provutskrifter. Vid varje putsning (head clean) pumpar skrivaren bläck genom alla skrivarmunstycken för att öppna dem och således få till stånd en jämn utskrift. Varje ”head clean” använder rätt mycket bläck och tömmer alltså bläckkassetterna rätt effektivt. Om inte två till tre rengöringar ger önskat resultat så är det skäl att kontrollera om det finns andra orsaker till utskriftsproblemen. Den kanske sannolikaste orsaken till blockeringen för den giriga är att man har fått luft i någon eller flera av bläckslangarna. Man kan visuellt försöka se om det syns bubblor i den slang som går till den färg som ger problem. Det är dock inte självklart att man kan se bubblor eftersom bläckets färg är så kraftig. Lösningen på problemet är att fylla slangen på nytt med bläckskrivartvättmedel och tvinga ut eventuella luftbubblor.

Eliminering av luft från en slang görs på följande sätt:

Notera! Man kan inte med våld pressa in vatten/tvättmedel eller bläck genom kassettens anslutningsnippa eftersom detta förstör det mikromekaniska skrivhuvudet! Bläckslangarna måste tas loss innan man luftar någon av slangarna! Hur man tar loss slangarna beskrivs nedan för den specifika skrivaren PX730.

Se till att det finns mycket hushållspapper/pappershanddukar till hands. Stäng av skrivaren och sätt på den på nytt. Då skrivaren börjar ge ifrån sig ljud som tyder på att något rör sig så drar man ut nätsladden till skrivaren (ca. 5 sekunder efter att man satte på skrivaren kan man normalt rycka ur nätsladden). Skrivhuvudet kan nu föras i sidled så att man kommer åt skrivhuvudet. Om skrivhuvudet fortfarande är låst så får man inte använda våld utan man stänger locket till skrivaren, kopplar i strömmen på nytt och upprepar processen tills man utan våld kan flytta skrivhuvudet till ungeför mitt på pappersbanan. Skrivhuvudet är normalt mekaniskt låst och mekaniken förstörs om man flyttar huvudet med våld.

Fig. 3 Skrivarens överdel som innehåller en scanner kan vinklas upp så att man kommer åt eventuella felmatade papper samt bläckkassetterna nere till höger. Bläckkassetterna på bilden är påfyllningsbara via de färgade korkarna vid kassettens övre ända. Man kan också se slangarna, ungeför mitt i bilden, som transporterar bläck till skrivhuvudet som i bilden är parkerat på korrekt plats under EPSON etiketten strax till höger om mitten. I samma knippe som bläckslangarna till skrivhuvudet finns också en flatkabel genom vilket skrivhuvudets munstycken styrs. Hålen närmast betraktaren är luftningshål. Man bör komma ihåg att ta bort skyddskorkarna till luftningshålen innan man börjar använda skrivaren. Glömmer man att öppna luftningshålen så får man skrivproblem efter en stund då det blir undertryck i kassetterna.

Bläckmatningen till skrivhuvudet kan lossas genom att skuva loss tre skruvar. Därefter har man en pappershanduk till hands och lyfter upp plastdelen till vilken bläckslangarna är kopplade och skjuter pappershandduken under delen så att man inte får stora mängder bäck in skrivaren.

Fig. Ungefär mitt i bilden syns nu skrivhuvudet efter att det försiktigt har flyttats i sidled. I skrivhuvudets nedre höra kant ser man bläckmatningen gjord i vit plast fäst med tre skruvar. En blank skruv i mitten och två svarta skruvar som man kan skymta i bilden. Man lossar de tre skruvarna och lägger en pappershandduk över skrivhuvudet pch låter slangknippet (den vita delen) ligga på pappershandduken vars uppgift är att suga i sig bläck som droppar från färgslangarna. Notera att ingenting behöver demonteras utan man lyfter försiktigt upp den vita komponenten fäst i slangarna på papperet. Kom ihåg att starta skrivaren efter reparationen så att den själv för tillbaka skrivhuvudet i parkerat läge!

Man tar nu en liten injektionsspruta fylld med t.ex. färgskrivartvättmedel med en kort slangstump som passar till färgnippan och presser långsamt och försiktigt in vätska i slangen. Slangen är tunn och det behövs inte mycket.

Fig. Rengöringsmedel på flaska och en liten injektionsspruta försedd med silikonslang som passar till nippeln under en bläckkassett. Man fyller den lilla sprutan med en lämplig mängd rengöringsvätska t.ex. 1,5 ml och ser till att slangen inte innehåller luftbubblor. Man trycker slangen på nippeln som färgkassetten var tryckt mot och pressar långsamt vätska genom ifrågavarande färgslang. Var noga med att inte pressa luft in i slangen, man behöver inte använda hela mängden vätska! Tag loss sprutan/slangen och sätt tillbaka färgkassetten. Om det behövs så upprepas processen för övriga färger som skrivhuvudtest har visat problem med.

Putsa kring den losstagna slangfastsättningen och montera komponenten tillbaka på skrivhuvudet. Kontrollera att det inte finns bläck under skrivhuvudet på pappersbanan. Putsa vid behov. Kontrollera också att det inte finns bläck utanför skrivhuvudets parkeringspalts. Putsa vid behov. Försök inte flytta skrivhuvudet tillbaka i normalläge det är låst. Sätt helt enkelt på skrivaren med locket stängt varvid skrivhuvudet automatiskt parkeras. Notera att om arbetet av någon orsak blir på hälft så bör man se till att skrivhuvudet parkeras korrekt eftersaom huvudet annars torkar om det är felparkerat.

Montera tillbaka den färgkassett du tog loss. Det går nu att göra en ”head clean” och test av skrivmunstyckena.

Notera! Om flera skrivhuvud verkar ha problem så lönar det sig att eliminera luft/fylla ledningarna för alla färger. Tag loss en kassett i taget och montera tillbaka kassetten innan du går till följande färg. Om man av misstag lyckas montera en färg på fel plats kan det vara extremt besvärligt att putsa ifrågavarande färglinje. Tag alltså inte bort alla kassettere samtidigt utan fixa en färg i taget och lägg tillbaka kassetten då du är färdig så att inte färgerna blandas. Jobba metodiskt med eftertanke och fixa en färg i taget. Notera att varje färgslang du luftar kommer att ge ett tillskott bläck på pappershandduken. Byt vid behov!

Slutkommentar

Det är alltid väldigt trevligt då man lyckas med en reparation. Jag hade jobbat med skrivaren för ett halvt år sedan utan att få den i skick. Jag hade tvättat skrivhuvudet men vissa munstycken fungerade fortfarande inte. Jag beslöt igår (10.2.2021) att göra ett sista försök att få skrivaren att fungera … alternativet skulle ha varit att skrota den. Test av munstyckena visade nu att alla munstycken utom den svarta färgen fungerade perfekt. Det gick inte att se ett enda svart munstycke som skulle ha producerat färg. Sannolikheten för att alla svarta munstycken samtidigt skulle kunna ha fel är ganska liten varför slutledningen var att den svarta färgen hade förgmatningen blockerad av en luftbubbla. Problemet löstes ovan. Jag gissar att tvättmedlet då det fick verka under lång tid löste upp torkat bläck på skrivhuvudena.

Orsaken till att jag kontrollerade skrivaren ”en sista gång” var att jag hade hittat ett demoexemplar av en ”Eco Tank” skrivare med fyra färger. Den lyckade reparationen gjorde att jag i praktiken sparade ca. 170 Euro! Ingen dum besparing för ca. en timmes arbete. Timlönen blev helt skaplig och ännu bättre var det att skattmasen åtminstone inte ännu beskattar ogjorda utgifter!

Trevlig WiFi kamera

18/11/2020

En digitalkamera, t.o.m. en högkvalitativ sådan kostar idag ingenting eftersom man tillverkar någon miljard per år för montering i främst mobiltelefoner. Eftersom kameror massproduceras så kommer det alltid att finnas ett överskott som bl.a. kan användas av tekniskt intresserade amatörer.

Jag stötte för en tid sedan på ESP32-CAM som bygger på en ESP32 mikroprocessor med kameramodulen OV2640. Hela paketet kostar $6.99 och inklusive transport kostade paketet ungefär 10 Euro (100 SEK).

ESP32-kortet har storleken ca. 40×25 mm. Trådarna som är kopplade till kortet är strömförsörjning via USB samt serielinje för att kunna följa med vad som händer på kortet. Serieförbindelsen behövs inte i ett senare skede och strömförsörjningen kommer att skötas med laddningsbara batterier.

Vad innehåller paketet?

Processorn är en ESP32 med dubbla kärnor, 512 kByte SRAM och 4 MByte pseudostatiskt RAM. Processorn kör på en klockfrekvens upp till 240 MHz och har alla vanliga anslutningar för periferienheter SPI, I2C, serielinje etc. samt inbyggd WiFi alltså trådlöst nätverk utan extra komponenter. En enkel utvecklingsomgivning som finns för Linux, Windows och MacOS är Arduino IDE. För att skriva program för ESP32 behövs en IDE version som är någorlunda ny, jag kör 1.8.13.

Hur lägger jag in webbservern för kameran om den inte finns från början?

Hämta Arduino IDE för ditt operativsystem. Googla ”Arduino IDE xxxxc” där xxxx är ditt operativsystem.

Starta Arduino IDE och lägg till kortfamiljen ESP32 via File/Preferences

Nere i fönstret finns ett fält för Additional Boards Manager URLs .

Klistra in https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Tryck på OK.

Gå därefter till Tools/Board/Board Manager . Skriv ESP32 i fältet Filter your Search. Board managern visar vad den hittar (esp32) klicka på Install varvid systemet automatiskt laddar ner de hjälpprogram, drivrutiner, bibliotek och exempel man behöver. Om man tidigare har laddat ner hjälprutiner för ESP32 så meddelar Board manager status: Installed för paketet.

Hämta kameraprogrammet i File/Examples/ESP32/Camera/CameraWebServer . Programkoden öppnas automatiskt i fönstret.

För att programmera ESP32 behöver jag en USB till Serial konversionsmodul som kostar några Euro. Moderna datorer saknar en konventionell serieport varför det behövs en USB-modul som skapar en serieport via USB-porten. Jag beställde en ”USB To TTL FT232RL FTDI Serial Adapter Converter Module For Arduino 3.3V 5V Mini” tillsammans med ESP32-CAM modulen.

Spänningen i USB seriemodulen väljs via en jumper (bygel) till antingen 3.3 V eller 5V. Väljer man 3.3V måste stiftet VCC på USB modulen kopplas till 3.3V på ESP32. Om man väljer 5V kopplas VCC i stället till 5V på ESP32. Det är viktigt att inte klanta och koppla 5V till 3.3V på ESP32 eftersom detta kan leda till att man släpper ut rök. Som känt fungerar all elektronik på rök eftersom elektronik tenderar att sluta fungera om man släpper ut röken.

USB-modulens RX kopplas till UOT på ESP32 och på motsvarande sätt kopplas TX på USB-modulen till UOR på ESP32. Notera att Transmit (sänd) på ena sidan alltid kopplas till Receive (mottag) på andra sidan och tvärtom.

Koppla GND på USB-modulen till GND på ESP32.

För programmering kopplas ytterligare IO0 till GND på ESP32. Byglingen av IO0 till jord signalerar Arduino IDE att uppladdning av program till ESP32 önskas. Då man vill köra ett uppladdat program kopplar man bort denna bygel.

Koppla i USB till datorn där Arduino IDE är aktivt. Kontrollera i Tools/Port att en serieport t.ex. /dev/ttyUSB0 under Linux har detekterats. Kontrollera samtidigt att Upload speed är satt till t.ex. 9212000 bit/sekund (kör man på lägre hastighet kan uppladdningen bli besvärande långsam). Sätt Tools/Partitition Scheme är satt till Huge APP . Glömmer man att organisera minnet till Huge App så kommer kompileringen att misslyckas.

Vi kan nu försöka kompilera exempelprogrammet via Sketch/Verify/Compile. Kompileringen gick inte igenom för mig vid första försöket eftersom en pythonmodul <serial> inte hittades. Det gick att identifiera problemet genom att felet låg i ett program med typen .py medan språket som används under Arduino IDE normalt är C/C++.Notera att felet inte låg i ESP32 vebbserverprogrammet utan det var ett hjälpprogram från ESP32 som behövde modulen. Felet avhjälptes genom att ladda in serial:

sudo apt install python-serial

Modifiera därefter programkoden så att du lägger in WiFi SSID samt password. Dessutom måste man välja kameramodell. I mitt fall fungerar alternativet:

#define CAMERA_MODEL_AI_THINKER

Man väljer kameramodell genom att ta bort kommentaren före ifrågavarande #define. En kommentar börjar med ”//”.

Nu gick kompileringen igenom och programmet kan laddas upp till ESP32. Tryck på Reset på ESP32, en mycket liten trycktangent bredvid 3.3V anslutningen. Välj nu Sketch/Upload och om allt går korrekt så börjar programmet laddas upp (tid kanske 30-60 sekunder beroende på vilken uppladdningshastighet man valt). Då uppladdningen har lyckats kopplar man ur programmeringsbygeln IO0-GND för att köra programmet.

Starta Tools/serial Monitoroch kontrollera att hastigheten är vettig t.ex. 115200. Tryck på ESP32 Reset varefter ESP bör skriva diverse text till monitorn. I texten hittar vi den IP adress som ESP32 har fått via det lokala WiFi nätverket.

Vi öppnar nu en vebbläsare (jag använder Firefox) och lägger in den IP-adress vi fick oss tilldelad och som vi grävde fram åt oss från texten på monitorskärmen. I mitt fall fick jag adressen http://192.168.10.42/. Notera att den angivna adressen ovan inte är verklig och den kommer inte att fungera i ditt fall.

Ett fönster med kamerakontroller på vänster sida öppnas i vebbläsaren. Längst ner finns kontrollerna Get still, Start stream . Tryck på Start Stream varvid ESP32 börjar sända video över WiFi till datorn. Det är nu möjligt att via kontrollerna ändra ljushet/mörkhet, kontrast, upplösning etc. Fritt fram att experimentera.

Följande steg?

Följande steg blir att planera och skriva ut ett lämpligt skal samt förse ESP32 med ett laddningsbart batteripaket så att jag kan hänga systemet på fågelbordet och avslöja våra stora (vitsvanshjortar 😉 ) småfåglar som länsar fågelbordet på nolltid.

Källor:

Det finns en hel del artiklar på engelska om hur ESP32 skall kopplas för programutveckling. Nedan enast ett exempel. Vid problem lönar det sig oftast att Google på den felkod man får. Det finns oftast någon annan som har stött på samma problem och en lösning kan ofta hittas direkt.

Var hittar jag material som EU förbjuder?

16/11/2020

Vi lever i en vansinnig tid där förmynderiet frodas och hobbyisters arbete försvåras eller görs omöjligt. I många fall kan vansinnigheterna kringås genom att beställa över nätet från utlandet. Resultatet kan variera och det är alltid värt att testa den vara man har beställt eftersom det inte är självklart att man får det säljaren påstår att de säljer.

Lödtenn som innehåller bly

För en elektronikhobbyist är det idag i Finland omöjligt att köpa lödtenn som innehåller bly. Som känt är bly giftigt och bör i mån av möjlighet undvikas. Frågan är dock om det finns något vett alls i förbudet att sälja 60/40 lödtenn också till amatörer? Vilka är de mängder lödtenn och indirekt bly som kommer ut i naturen jämfört med andra källor såsom blybatterier, bly som redan finns i naturen efter årtionden av blytillsats i bensin (idag förbjudet). Min uppfattning är att jämfört med professionell användning av bly är amatöranvändningen en extremt liten droppe i havet.

Vad behöver jag lödtenn som innehåller bly till? Idag används blyfritt material vid tillverkning av elektronik (ROHS regler). Ett stort problem är att det är extremt mycket svårare att reparera elektronik som tillverkas med blyfritt lödtenn än då lödtennet innehåller bly. En delorsak är att smältpunkten för det blyade lödtennet (180 ⁰C ) är betydligt lägre än smältpunkten för blyfritt lödtenn (215-220⁰C). Högre temperatur leder till mycket större risk för skador på kretskortet vid reparationer. Notera att reparationer idag görs under mikroskop d.v.s. man kan inte sätta krafter på någon komponent kretskort eller annat utan skador.

Professionella reparatörer använder blyat lödtenn till att noggrannt tvätta bort allt blyfritt lödtenn innan man monterar en ny komponent med blyat lödtenn eftersom det blyade lödtennet visar sig vara mycket pålitligare att hantera än blyfritt.

Hur kan jag beställa lödtenn som innehåller bly

För att köpa blyat lödtenn måste jag ha en firma d.v.s. som amatör kan jag inte lagligt köpa det lödtenn jag behöver hemma i Finland. Jag gissar att orsaken är att våra idioter till politiker tolkar EU-bestämmelser striktare än övriga EU-länder eftersom jag tydligen kan köpa den kvalitet jag begöver från:

  • Tyskland (EU-medlem)
  • Storbrittannien (Fortfarande i princip EU-medlem, snart dock utanför EU)
  • Amazon och diverse andra nätförsäljare

Problemet med att köpa över nätet är naturligtvis att jag inte i praktiken kan klaga om jag inte får det jag vill ha. Det finns alltid en liten risk att en försändelse stoppas i tullen men erfarenheten visar att risken är liten.

Eftersom legeringen tenn/bly smälter vid låg temperatur (180⁰C) så bör det vara enkelt att fixa till en press där jag kan tillverka mitt eget lödtenn. Om andan faller på kan det hända att jag demonstrerar hur detta kan gå till i en senare artikel.



https://www.militaryaerospace.com/home/article/16708161/leadfree-solder-a-train-wreck-in-the-making

https://electronics.stackexchange.com/questions/70735/should-i-use-lead-free-solder

Kemikalier som inte för spridas i EU

Det finns ett antal kemikalier som inte får spridas fritt inom EU. Jag accepterar till fullo att det finns ämnen som inte i dagens värld med utbredd terrorism inte bör spridas fritt. Jag tänker i detta saammanhang naturligtvis på olika typer av kemikalier som t.ex. kan användas som sprängämnen (t.ex. Ammoniumnitrat) eller som kan användas till att producera sprängämnen (t.ex. Kaliumnitrat).

Det finns dock en del ämnen som av tradition har använts länge i olika samhällen utan påvisbara skador som EU i sin ”vishet” har valt att förbjuda. Jag vet inte om orsaken i detta fall är korruption eller ren dumhet hos beslutsfattarna som tydligen inte klarar av att läsa teknisk text innantill.

Borsyra och Borax

Borsyra och Borax har båda använts bl.a. som ämnen mot röta (svamp) och mot insektangrepp. Ämnena påstås kunna påverka bl.a. ärftligheten, ge skelettförändringar i extremt höga doser o.s.v. Det är dock intressant att notera att EU:s egen dokumentation tyder på att farligheten är ungefär i nivå med NaCl som är en extremt mycket använd kemikalie som finns överallt … Koksalt! Om ett ämne med ungefär samma giftighet som koksalt förbjuds bör man nog fråga sig vem som beställde beslutet, vad kostade beslutet och vilken industri har intresse av att ämnet förbjuds?

Vad används t.ex. Borax till

Borax har tidigare i stor utstreckning använts i olika tvättmedel, mot t.ex. myror samt i olika fluxmedel t.ex. vid smide samt som tillsatsämne i glasyr vid krukmakeri.

Ovanstående tekniska användning kan alltså ge möjligheter att skaffa små mängder borax/borsyra. Meddela att du behöver ämnet t.ex. för krukmakeri eller smide.

Ett intressant användningsområde för bor, som jag har behandlat i andra artiklar, är behandling av sjukdomar som skolmedicinen uppfattar som obotliga. Norden verkar vara ett område med borbrist i marken vilket sannolikt leder till att befolkningen har mycket låga bornivåer vilket kan tänkas ge upphov till problem. Borbrist kan eventuellt ge lödproblem, bor är eventuellt en delorsak till Vikingasjukan (Depuytrens kontraktur) etc.

Borax är ett billigt ämne som förekommer i nauren i ren form. Platser där Borax bryts är bl.a. Turkiet och Indien. Eftersom ämnet är billigt finns det ingen större orsak att försöka förfalska ämnet. Jag har hittat säljare i Polen och Litauen på Ebay. Leveranserna har i allmänhet kommit fram utan problem. Endast en gång har jag råkat ut för att tullen har stoppat ett paket. Om en försändelse inte kommer igenom beställer man på nytt eventuellt av en annan leverantör.

https://spegling.blog/2016/01/11/c-vitamin-jod-och-bor-borde-jag-tro-pa-konspirationsteorier/

https://www.sargenta.se/shop/article/9842

Miniprojekt: Metronom i klockan

02/09/2020

Jag har köpt en del småsaker, främst elektronik, från Banggood som är ett kinesiskt företag. Hittills har beställningarna kommit ungefär enligt beräknad tid men COVID-19 ställer till med problem. Tidigare beställningar

 
  • Visningar
  • Besökare

leder till att Banggood via facebook synbarligen aktiverar reklam aktuell för mig.

Jag råkade stöta på reklam för en ny aktivitetsklocka Lilygo T-Watch-2020. Klockan är baserad på en ESP32 mikroprocessor med två kärnor. Klockan innehåller WiFi funktionalitet med bl.a. en webbserver och också Bluetooth funktionalitet. Det speciella med den här klockan är att den från början är avsedd att hackas d.v.s. källkoden finns på github och den programmeras direkt över USB-anslutningen.

Då man får en ny programmeringsleksak så uppstår naturligtvis genast problemet med vad man skall göra med apparaten.  Färdiga funktioner är bl. a.

  • Väderapp
  • Stoppklocka
  • Kryptovaluta
  • Navigering via kart-API

Då jag sysslar med folkmusik som hobby så slog det mig att det kunde vara praktiskt att ha en enkel metronom i klockan som innan jag börjar spela ett stycke slår t.ex. tio slag med hjälp av klockans vibrationsmotor. Tanken är alltså inte att jag skulle spela hela stycken med klockan som metronom utan klockan skulle endast upplysa mig om ungefär vilket tempot är, att mentalt tänka sig ett tempo kan ibland leda fel rejält eftersom hjärnan inte i alla sammanhang går i realtid …

Operativsystem

Klockan kör ett kompakt realtidsoperativsystem FreeRTOS som stöder multitasking d.v.s. jag kan köra flera applikationer parallellt. Det är också i princip möjligt att ladda in nya program medan klockan är i gång eller stänga av obehövliga program. Den senare funktionaliteten används inte utan gör jag förändringar så kompilerar jag om rubbet och laddar upp allt som ett paket till klockan.

Man hittar FreeRTOS dokumentation på nätet.

Metronom

Jag plockade hem en klockversion från Github. Då jag ögnade igenom applikationerna som fanns färdigt så såg jag att det fanns en exempel app som inte gjorde någonting men som visade vilken struktur en app har.

Jag beslöt att försöka göra en extremt enkel applikation där användaren använder sig av en slider d.v.s. en funktion där man drar en indikator i sidled för att ställa in tempot. Jag tänkte mig att tempot kan ställas mellan 50 och 200 slag per minut. Det finns inga tekniska problem med att använda lägre tempon men jag uppfattar 50 slg/minut som väldigt långsamt. Då klockan startar är det förinställda värdet 100 slag/minut och klockan kommer ihåg det senast valda värdet mellan olika körningar av appen.

I princip borde applikationen ha varit väldigt enkel att realisera men det visade sig att indikatorhuvudet som samtidigt användes för att visa valt tempo var alltför litet d.v.s. det var svårt att se det valda tempot. Jag försökte kringgå problemet genom att lägga till ett separat textfält som skulle innehålla det valda värdet. Det nya textfältet förorsakade en omedelbar crasch.

Efter att jag två dagar hade slagit huvudet i väggen beslöt jag att byta ut slidern mot en spinbox där man i mitten har ett textfält och på vardera sidan tryckknappar som sänker/höjer det valda värdet. Det var tydligen något problem med slidern för nu fungerade val av tempo som det skulle.

Jag modifierade setupdelen i exempelapplikationen så att man väljer tempot med spinboxen och då man går ur tempofunktionen så gör klockan tio slag i det valda tempot varefter det sker retur till appens huvudnivå.

Call back funktioner

static void exit_example_app_setup_event_cb( lv_obj_t * obj, lv_event_t event );
static void example_app_metr_spinbox_event_cb(lv_obj_t * obj, lv_event_t event );
static void lv_spinbox_increment_event_cb(lv_obj_t * obj, lv_event_t event );
static void lv_spinbox_decrement_event_cb(lv_obj_t * obj, lv_event_t event );

Då användaren trycker på olika funktioner måste användargränssnittet kunna ”skicka signaler” till användarens kod så att den kan köras. För detta ändamål behöver vi såkallade callback funktioner. Om jag t.ex. trycker på knappen ”-” så stegas det valda tempot ner med ett steg (systemet anropar lv_spinbox_decrement_event_cb). Trycker jag på ”+” så stegas värdet upp med ett steg( lv_spinbox_increment_event_cb anropas).

Då jag trycker på återgång till appens huvudnivå så anropas exit_example_app_setup_event_cb. Denna funktion anropar funktionen execute_taps() som vibrerar telefonen tio gånger i önskat tempo.

// Let the metronome do ten taps
static void execute_taps(int taps, int tempo){
  int i;
  int taplen=0;
  int fixed = 100;
  float ms=60000;
  taplen = ms/tempo; 
  // Buzzer pin output BUZZER=4
  for(i=0; i< taps; i++){ 
    pinMode(BUZZER,OUTPUT);
    digitalWrite(BUZZER,ON);
    delay(fixed);
    digitalWrite(BUZZER,OFF);
    delay(taplen-fixed);
  }
}

Spinnboxen

Då klockan programmeras så har man tillgång till ett enkelt grafiskt användargränssnitt lvgl vilket i ytterst hög grad förenklar programmeringen. Problemet är dock att det finns rätt många olika grafiska gränssnitt och det kräver alltid en del läsande att börja använda ett nytt gränssnitt … så även denna gång.

Koden för att sätta upp en spinbox är:

// Create a spinbox center box with value
lv_obj_t *example_app_metr_spinbox_cont = lv_obj_create(example_app_setup_tile,NULL);
lv_obj_set_pos(example_app_metr_spinbox_cont,90,100);
example_app_metr_spinbox = lv_spinbox_create(example_app_metr_spinbox_cont, NULL ); 
lv_spinbox_set_range(example_app_metr_spinbox,50,200);
lv_spinbox_set_digit_format(example_app_metr_spinbox,3,0);
lv_spinbox_set_value(example_app_metr_spinbox,100);
lv_obj_set_event_cb(example_app_metr_spinbox,example_app_metr_spinbox_event_cb);
// Create increment button
lv_coord_t h = lv_obj_get_height(example_app_metr_spinbox);
lv_obj_t * btn = lv_btn_create(example_app_setup_tile, NULL);
lv_obj_set_size(btn, h, h);
lv_theme_apply(btn, LV_THEME_SPINBOX_BTN);
lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_PLUS);
lv_obj_align(btn, example_app_metr_spinbox, LV_ALIGN_OUT_RIGHT_MID, -20, 0);
lv_theme_apply(btn, LV_THEME_SPINBOX_BTN);
lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_PLUS);
lv_obj_set_event_cb(btn, lv_spinbox_increment_event_cb);
// Create decrement button
btn = lv_btn_create(example_app_setup_tile, btn);
lv_obj_align(btn, example_app_metr_spinbox, LV_ALIGN_OUT_LEFT_MID, -30, 0);
lv_obj_set_event_cb(btn, lv_spinbox_decrement_event_cb);
lv_obj_set_style_local_value_str(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_SYMBOL_MINUS);

Klockans skärm har upplösningen 240×240 pixlar. Först skapas ett kontext för spinboxen i filen example_app_setup.cpp utgående från specifikationer i appens huvudfönster. Därefter placeras spinnboxen på önskat ställe och programmet ställer in hurudant värdeområde (50-200 slag/minut) som är tillåtna. Programmet ställer också in vilket standardvärde (100 slag/minut) jag vill ha. Därefter skapar jag två tangenter/knappar som stegar spinboxens varde uppåt respektive nedåt.

Grafiska änvändargränssnitt fungerar så att skapade vidgetar själv detekterar om det händer något. I ovanstående fall så kommer tangenterna upp/ner att skicka en ”signal” som säger att en knapptryckning har detekterats. För att programmet skall kunna reagera på knapptryckningen så måste vi definiera såkallade callback funktioner d.v.s. funktioner som användargränssnittet anropar då aktivitet detekteras. I vårt fall är funktionen enkel:

static void lv_spinbox_increment_event_cb(lv_obj_t * obj, lv_event_t event ){
  if(event == LV_EVENT_SHORT_CLICKED || event == LV_EVENT_LONG_PRESSED_REPEAT) {
    lv_spinbox_increment(example_app_metr_spinbox);
  }
}

static void lv_spinbox_decrement_event_cb(lv_obj_t * obj, lv_event_t event ){
  if(event == LV_EVENT_SHORT_CLICKED || event == LV_EVENT_LONG_PRESSED_REPEAT) {
    lv_spinbox_decrement(example_app_metr_spinbox);
  }
}

När spinnboxens kontrollknappar detekterar aktivitet så anropas ifrågavarande funktioner ovan som i sin tur stegar upp spinboxens värde eller stegar ner det.

Aktivera metronomen

Jag valde att aktivera metronomen då man går ut ur inställningen av tempo tillbaka till appens huvudsida. Alternativet skulle ha varit att definiera en separat knapp för att aktivera metronomen. Jag har valt att begränsa antalet slag till tio helt enkelt för att jag uppfattar att jag då har hunnit uppfatta tempot tillräckligt bra.

static void exit_example_app_setup_event_cb( lv_obj_t * obj, lv_event_t event ) {
  switch( event ) {
    case( LV_EVENT_CLICKED ): 
      delay(2000);
      execute_taps(10,lv_spinbox_get_value(example_app_metr_spinbox));
      mainbar_jump_to_tilenumber( example_app_get_app_main_tile_num(), LV_ANIM_ON );
      break;
  }
}

Koden för execute_taps() finns litad tidigare i texten.

Att använda appen

IMGP7532

Fig. 1  Metronomappen syns till höger om väderappen nedanför tiden 20:57.

IMGP7533

Fig. 2  Applikationen metronom (Metr) huvudsida efter att man har valt applikationen genom att trycka på Metr i föregående bild. Kugghjulet leder till val av tempo. I framtiden lägger jag antagligen till t.ex. fyra knappar med fördefinierade tempon på denna sida.

IMGP7534

Fig. 3  Inställning av tempot med en spinbox. Det valda tempot stannar i minnet. Då man väljer retur (trycker på symbolen överst till vänster) så vibrerar telefonen tio gånger i det angivna tempot.

 

Datorreparation

11/08/2020

Jag hjälpte idag min hustru med att kopiera bilder från telefonen till hennes bärbara dator. Då jag öppnade datorn för att börja kopieringen märkte jag att datorns skal vid gångjärnen till bildskärmen glipare rätt duktigt. Från sidan kunde man se att centralenhetens två halvor öppnade sig med mer än fem millimeter vid bakkanten … inte bra. Orsaken var att sex stycken skruvar inte längre hade grepp om gångjärnet då bottenplattans skruvfesten hade tryckts in d.v.s. skruvarna drog inte längre ihop plattorna eftersom det mothåll skruvhuvudena borde ligga mot var borta (de hade brutits sönder och små plastbitar låg inne i datorn.

IMGP7528

Fig. 1  Den fixade datorn är av märket Acer. Jag har set motsvarande problem i flera andra datorer d.v.s. det beskrivna felet är vanligt och inte kopplat specifikt till just den här datorn.

Det ovan beskrivna problemet är rätt vanligt på portabla datorer eftersom påfrestningarna på skruvar och de komponenter skruvarna säkrar är stora till följd av att bildskärmens infästning förutom att den skall vara rörlig även måste ha så stor friktion att skärmen hålls i önskat läge.

Om problemet inte åtgärdas kommer något av följande problem som kan vara besvärlga att åtgärda att dyka upp:

  • Datorns bottenplatta spricker och en reparation blir besvärlig eftersom det är svårt att limma stora tunna plastkomponenter.
  • Kablarna till bildskärmen skadas vilket är värsta fall leder till att datorn slutar fungera då man släpper ut röken den kör på (All elektronik kör på rök vilket bevisas av att då röken släpps ut så fungerar apparaten inte längre 😉 ) .
  • Skärmens infästning blir så glapp att den inte hålls i rätt läge.

IMGP7525

Fig. 2  Det finns ingenting kvar av de ytor mot vilka skruvhuvudena har legat. De metalliska ytor man skymtar hör till den komponent mot vilken baksidan är fäst. Hålet genom vilket skruven skall spännas mot framsidans metallinsättning är helt enkelt större än skruvens huvud till följd av skada.

Efter lite funderande kom jag fram till att jag kunde konstruera insättningar i hålen som med superlim kunde fästas mot bottenplattan. För att insättningen skulle fästa bättre gjorde jag den aningen konisk vilket i viss mån bör förhindra att delen av skruvkraften dras loss.

Programmet som skapar skruvadaptern är mycket enkelt.  Genom en aningen konisk cylindrisk komponent  cylinder(r1=2.55,r2=2.35,h=3.5,$fn=64) borras ett hål för en 2.6 mm skruv translate([0,0,-1])cylinder(r=1.35,h=10,$fn=64) . Jag råkade ha lämpliga tillräckligt långa skruvar i miljonlådan som kunde kapas till önskade längder. De exakta dimensionerna ner till en tiodels millimeter är svåra att uppnå i ett steg för så här små komponenter. Vid utskrift tenderar lite plast att pressas ut åt sidorna vilket gör hål något mindre än vad de teoretiskt borde vara och komponentens ytterdimensioner brukar vara något större än önskat.

Jag skrev ut en första version som visade sig har för litet skruvhål och längden på pluggen visade sig vara onödigt stor efter provning mot den skadade dastorn. Jag ändrade designen en aning och fick de komponenter jag behövde. Utskriftstid för sex stycken pluggar var mellan tre och fyra minuter.

// Acer skruvadapter för skadade skruvhål

// Programspråket är OpenScad

difference(){
  cylinder(r1=2.55,r2=2.35,h=3.5,$fn=64);
  translate([0,0,-1])cylinder(r=1.35,h=10,$fn=64);
}

Notera att programmet ovan skapar endast en plugg. Jag kan importera många pluggar till utskriftsprogrammet. I examplet nedan skriver jag ut sex pluggar parallellt.

Bilden nedan är tagen från bildskärmen medan skrivaren skriver ut. Ju rödare komponenten är desto varmare är den d.v.s. de ljusröda områdena är de senast utskrivna.

Bottenplattan, de rundade områden (blå) som pluggarna står på är en hjälpkonstruktion som håller pluggarna på plats medan utskrift sker. Bottenplanet skärs bort innan pluggarna används.

Acer_insert

Fig. 3  Utskriftsprogrammet visar hur komponenterna ser ut för tillfället.

IMGP7527_part

Fig. 4  Den färdiga komponenten. Den svarta pluggen limmas i hålen (fig. 2) så att skruven som i detta läge är för lång skruvas fast och pluggen hålls i korrekt läge. Efter att limmet torkat kapas skruven till önskad längd genom att klippa av den med en Abico-tång. Skruven har dimensionen 2.6 mm. Rutnätets storlek är 7 mm.

Konklusion

En enkel reparation som verkar ha lyckats perfekt. Slutresultatet är sannolikt att datorn kan användas ytterligare något år innan den kommer till sin vägs ände.

 

 


Pointman's

A lagrange point in life

THE HOCKEY SCHTICK

Lars Silén: Reflex och Spegling

NoTricksZone

Lars Silén: Reflex och Spegling

Big Picture News, Informed Analysis

Canadian journalist Donna Laframboise. Former National Post & Toronto Star columnist, past vice president of the Canadian Civil Liberties Association. New posts: Mondays & Wednesdays.

JoNova

Lars Silén: Reflex och Spegling

Climate Audit

by Steve McIntyre

Musings from the Chiefio

Techno bits and mind pleasers

Bishop Hill

Lars Silén: Reflex och Spegling

Watts Up With That?

The world's most viewed site on global warming and climate change

TED Blog

The TED Blog shares news about TED Talks and TED Conferences.

Larsil2009's Blog

Lars Silén: Reflex och Spegling

%d bloggare gillar detta: