Most recent comments
Jogging og blogging
Are, 4 måneder, 2 uker
Liveblogg nyttårsaften 2016
Are, 4 måneder, 2 uker
Reading in dark times
Are, 6 måneder, 2 uker
Moldejazz 2016
Camilla, 10 måneder
Dørskilt
Karoline, 10 måneder, 2 uker
Halifax
Tor, 11 måneder, 1 uke
Sony Smartwatch 3 review
Tor, 11 måneder, 3 uker
Numerikk, takk
Tor, 12 måneder
Topp tur
Camilla, 1 år, 2 måneder
Tolkien reading day
Tor, 1 år, 2 måneder
50 book challenge
Camilla, 4 måneder, 4 uker
Ten years ago
Reed switch
Tor
Controls
Register

Lavnivå

I programmering snakker man gjerne om at et språk er høynivå eller lavnivå, der lavere nivåer ligger nærmere hardware i en eller annen forstand. Vi har vært innom dette før, for eksempel i artikkelen om assembler, som er rimelig lavnivå, ettersom det krever at man kjenner en del detaljer om prosessoren man programmerer for. Python, som jeg bruker mye, ligger i motsatt ende av skalaen, ved at det tar hånd om en del detaljer for deg uten at du trenger å tenke på det. Du kan for eksempel leve lykkelig med python ganske lenge uten å vite noe særlig om datatyper og minne og slikt, i allefall hvis du ikke prøver å gjøre altfor avanserte ting. I tillegg kommer python med såpass mye innebygget magi i det som kalles standardbiblioteket at du kan leve et temmelig beskyttet liv.

Elektronikk, som jeg fra tid til annen har prøvd å pusle med, er naturlig nok temmelig lavnivå. For eksempel har jeg gått til innkjøp av en e-papir-skjerm og en Arduino, som jeg prøver å koble sammen med en Raspberry Pi for å sette opp et dørskilt som kan fortelle mine kollegaer hvor jeg er når jeg ikke er på kontoret, og jeg ser at jeg antagelig ikke kommer utenom å forholde meg til ting på et noe lavere nivå enn jeg vanligvis er komfortabel med. For eksempel, for å skrive 0x03 til register 0x08 og 0xA1 til register 0x09 trenger du bare å følge denne hendige oppskriften:

Nå er det naturligvis ikke fullt så ille som at jeg faktisk må passe på klokken selv og sette piner til høy og lav på riktig tidspunkt og alt det der, ettersom det finnes et SPI-bibliotek for Arduino, men det ligger likevel an til å bli litt grumsete. En interessant ting som jeg ikke hadde tenkt over på forhånd er for eksempel at skjermen har rundt 50000 punkter, mens arduinoen jeg kjøpte bare har 2K minne, så jeg kan ikke holde et helt bilde i minnet. Dermed må jeg oppdatere skjermen linje for linje, eller noe slikt. Intrikate greier.

Planen er omtrent som følger:
  • For hver avtale i kalenderen min lager jeg et sort-hvitt bilde med tekst
  • Bildet må gjøres tilgjengelig på Raspberry Pien, sammen med klokkeslett for avtalen
  • Hvert minutt vil Arduinoen spørre Raspberry Pien, over I2C, om den skal oppdatere bildet
  • Hvis ja sender Raspberry Pien en linje av det nye bildet
  • Arduinoen sender linjen videre til skjermen, over SPI, og skriver den nye linjen til displayet
  • Gjenta de to forrige operasjonene til hele bildet er overført

Rapport og kildekode følger hvis det blir vellykket.
Camilla, Matteus likes this

Comments

Men jeg har tro på deg. Det blir nok hakket mer imponerende enn mitt system med lapper og bokmerker.

Matteus,  09.05.15 11:35

Kan du vektorisere bildet og bare overføre info om hvor det skal være svarte piksler for å spare minne? Og bare nullstille alle piksler før bildet oppdateres?
Tor,  09.05.15 11:48

Nei, det tror jeg ei.

Jeg tror for eksempel ikke det finnes en enkel funksjon for å nullstilel hele skjermen. Det er litt teknisk mikkmakk å ta hensyn til. For eksempel, hvis du bare flipper en piksel blir den tilsynelatende ikke fullstending flippet, så hvis du har et bilde, og så skriver du for eksempel svart til hele skjermen, så vil man se rester av det forrige bildet. Dette kalles ghosting, og later til å være en ting med epapirskjermer. Derfor er det blandt annet vanlig å invertere det forrige bildet, skrive flere ganger, ogsåvidere. Du ser det på denne videoen av en kindle.

Når det gjelder å bare overføre svarte piksler, så er jeg usikker på om det er mulig, men det er ikke sikkert det vil spare plass. Hvis du skriver en hel linje, så må du overføre linjenummeret (1 byte) og så hele linjen (33 byte). Hvis du skriver bare svarte piksler må du ha pikselposisjonen for hver piksel, så det kan fort bli mer data hvis det er mange svarte piksler. Jeg er heller ikke sikker på om det finnes en funksjon i displayet for å skrive en og en piksel.

Matteus,  12.05.15 13:24

Hmm, ghosting, altså. Rare greier. Har lurt på hvorfor kindlen skifter sider slik den gjør.

Skjønner at det blir mer data for alle svarte piksler enn for bare ei linje. Men at hvis mye skal være hvitt uansett, så var det rom for å oppdatere mer enn ei linje i slengen. Har kanskje lite å si når det er et dørskilt. Må lære meg slik koding, helt enkelt.

Hvor har du kjøpt skjermen?
Tor,  13.05.15 21:46

Jeg kan melde at jeg har ombestemt meg med hensyn til arduinoen. Tålmodighet er ikke alltid min sterke side, og etter å ha kastet bort en kveld på å prøve å bygge C-kode for arduinoen som klager over manglende funksjonsdefinisjoner i headerfiler som så vidt jeg kan se er helt riktige, begynte jeg å kikke etter alternative løsninger.

Jeg fant pyboard, som må være den kuleste duppedingsen jeg har sett på en god stund. Den er litt kraftigere enn arduinoen, og en del dyrere (£28 for pyboard vs. $2 for arduino mini på eBay), men viktigst av alt: den kjører python rett på jernet. Alt du trenger å gjøre for å programmere den er å plugge den i USB-porten, den dukker opp som en minnepinne, og du kan hive over et script. Det tok fem linjer kode å dimme den innebydge LEDen basert på målinger fra det innebygde akselerometeret. Helt fantastisk.
pyboard

Skjermen kjøpte jeg fra Embedded Artists (forøvrig et svensk firma).