2009
11.26

Såga spånskiva

Fick ett ryck och tog ett par steg framåt med högtalarbygget. 3 m² sågspånskiva är nu omvandlat till 12 högtalarsidor.

12 högtalarsidor

12 högtalarsidor

Det tar längre tid än man tror, det där. Många mått som ska bli rätt, kompensera för bredd på sågklinga, räta vinklar, osv osv. Jag använde en cirkelsåg, och resultatet blev på det stora hela ganska bra. Men nästa gång tror jag att jag ber dem såga upp skivan när jag köper den, för att spara tid men även för att noggranheten på deras bandsågar borde vara högre.

tools

Lyckades göra två missräkningar på 5 mm. Den första gick att åtgärda genom att använda en spillbit. Till den andra fanns det ingen spillbit kvar. Så nu saknas det 227×5 mm längst ner, vilket gör att basspalten blir högre än vad den ska vara. Hoppas på att kunna fästa en trälist nederst för att kompensera för detta, men vet inte om det påverkar ljudet negativt.

Jag blev milt sagt irriterad på att jag lyckades göra samma misstag två gånger. Så här ska en normal tumstock se ut tycker jag:

tumstock

Notera att strecken vid hel centimeter är längre än vid halv centimeter. Detta verkar vara en sentida innovation! Med den äldre tumstock jag använde var det precis tvärtom, och därför lätt hänt man räknar fel på 5 mm.

Nästa steg är att såga ut hål för högtalarelementen. Plan A är att använda en sticksåg, men om det blir svårt att få hålet jämnt så får det bli till att få tag på en handöverfräs. Det skulle även göra det möjligt att fasa ner plattan, så att elementet ej skjuter ut. Får se hur det blir.

2009
11.23

En direkt uppföljning på det senaste inlägget. Jag har haft problem att få det trådlösa nätverket att fungera. När jag tidigare installerade en desktop-installation av Ubuntu med NetworkManager så fick jag det att fungera sporadiskt. Inte förrän jag avinstallerade NetworkManager och installerade wicd istället fick jag det att fungera felfritt.

Denna gång ville jag dock undvika även wicd, eftersom jag inte tänkte köra XBMC standalone.

Jag hittade till slut denna diskussion på XBMC-forumet där det fanns ett tips om hur man konfigurerade trådlösa nätverk via konfigurationsfiler istället. Tipset fungerade perfekt, efter att jag gjort ett par små modifieringar. Först behöver ett par program installeras:


sudo apt-get install wireless-tools wpasupplicant

Redigera sedan filen /etc/network/interfaces med din favorit-editor (vim), och lägg till följande sist i filen:


auto wlan0
iface wlan0 inet dhcp
wpa-ssid "namn-på-det-trådlösa-nätverket"
wpa-ap-scan 1
wpa-proto WPA2
wpa-pairwise TKIP
wpa-group TKIP
wpa-key-mgmt WPA-PSK
wpa-psk "lösenord"

Inställningarna wpa-ssid och wpa-psk måste förstås anpassas efter nätverket. Även wpa-proto, wpa-pairwise och wpa-group kan behöva ändras.

Starta därefter om nätverket med följande kommando:


sudo /etc/init.d/networking restart

2009
11.23

Installation av Ubuntu + XBMC

Hej vänner! Här följer ytterligare ett livsbejakande, tekniskt djupdykande inlägg! Denna gång om proceduren för att installera HTPC:ns mjukvara och operativsystem.

Jag använde denna guide som grund.

Systemet ska bara sköta en sak (XBMC), så därför ville jag ha ett så minimalt system som möjligt i övrigt. Jag installerade därför inte den fullständiga desktop-installationen, utan valde minimal-installations-cd:n, som går att ladda ner här. Jag använde UNetbootin för att skapa en bootbar USB-pinne.

Jag satte USB-pinnen i HTPC:n och startade om. Jag valde Command-line expert install i GRUB-menyn. Frågorna som ställs är mer ingående än vid en vanlig desktop-installation, men det mesta är logiskt (åtminstone för oss som har Slackware anno 1995 att jämföra med :D )

Installationen kräver att man har en trådbunden anslutning till Internet. Installeraren hittar inte det trådlösa nätverket/nätverkskortet automatiskt, och jag kunde iaf inte hitta något sätt att aktivera den under installation.

Jag valde att lägga installationen på en ext4-partition som täcker hela hårddisken, förutom en liten (~2 GB) swap-partition. Normalt brukar jag lägga upp en system-partition och en home-partition, så att jag vid en ominstallation i framtiden inte behöver bli av med alla mina inställningar och filer, men på denna dator är det inte tänkt att det ska ligga så mycket användardata förutom XBMC-inställningarna (all media ligger på en nätverks-disk) så jag valde för enkelhets skull att hoppa över home-partitionen denna gång. Kom föresten ihåg att sätta ”Reserverade block” till en mindre procentsats än den förvalda (5%). De reserverade blocken hålls alltid tillgängliga i princip för att administratören ska kunna logga in och frigöra mer utrymme. Men på en modern hårddisk (min är en liten en på 160 GB) är det alldeles överdrivet med 5% (8 GB). Jag valde 1% (1.6 GB).

Några punkter senare frågas det vilken Linux-kärna som ska användas. Jag valde ”linux-generic”, men det är möjligt att det finns ett lämpligare val …

Sedan frågas det om man vill inkludera alla drivrutiner i initrd. De används för att göra det möjligt att montera filsystemet. Eftersom ingen märklig hårdvara används för det på min dator (standard SATA) valde jag att bara inkludera de nödvändiga drivrutinerna, i hopp om att tjäna någon hundradel vid uppstart.

Som användarnamn valde jag namnet ”xbmc” istället för mitt vanliga användarnamn, eftersom jag möjligtvis skulle vilja lägga till ett vanligt konto på denna dator i framtiden. Men för xbmc-användaren ska inställningarna vara sådana att XBMC startar automatiskt, istället för Gnome-skrivbordet osv.

Eftersom det är en media-pc undkommer man inte att använda icke-fri mjukvara (främst codecs) så se därför till att tacka ja till att använda ”begränsad programvara”, och även programvara från ”universe”, ”multiverse” och möjligtvis ”bakåtporterad programvara” (härliga svenska översättningar).

Som bootloader valde jag Grub 2. Jag tänkte först använda Grub 1 eftersom jag har en del dåliga erfarenheter med Grub 2 (främst extremt lång boot-tid), men av någon anledning misslyckades installationen av Grub 1, men Grub 2 gick bra.

När installationen är klar startas datorn om, och du uppmanas så småningom logga in. Logga in med användarnamnet ‘xbmc’ och det lösenord som valts tidigare.

Programvara installeras på Ubuntu-system med kommandot apt-get (alternativ finns). Det första jag gjorde efter uppstart var att installera OpenSSH-server så att jag kunde logga in på datorn från en annan PC och fortsätta installationen därifrån:


sudo apt-get install openssh-server

Det första kommandot, sudo, står för switch-user-do (eller superuser-do) och har uppgiften att köra det efterföljande kommandot som en annan användare (som standard systemadministratören). Om du loggar in som systemadministratör (”root”) kan du hoppa över sudo.

Datorn har ännu inget grafiskt gränssnitt, och inga drivrutiner för grafikkortet. Det finns drivrutiner att installera med apt-get, men den senaste tillgängliga versionen är 185, medan nvidia har släppt version 190. Det går dock att lägga till ett extra programvaruförråd som innehåller de senaste drivrutinerna. Här finns en fullständig beskrivning, men i korthet behövs bara följande kommandon:


sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nvidia-vdpau/ppa
sudo apt-get update
sudo apt-get install nvidia-190-modaliases nvidia-glx-190

Den första raden installerar programmet add-apt-repository som används på den andra raden. Den andra raden lägger till ett nytt förråd med programvara som kan användas för automatisk installation. Möjligtvis kan det uppstå problem med krypteringsnycklar, men jag för mig laddades de ner automatiskt.

Den tredje raden laddar ner en lista med alla tillgängliga programvaror och den sista raden installerar slutligen grafikdrivrutinerna. Dessa två paket är dock beroende av andra, så en mängd paket (71 st hos mig, 50 MB) installeras automatiskt av den sista raden.

I Ubuntu används normalt PulseAudio för att hantera ljud. Det är en kraftfull ljudserver, som kan hantera olika volymnivåer för olika program, koppla över ljud automatiskt till hörlurar när de ansluts, sänka viss volymnivåer vid inkommande samtal osv, osv. Det är tyvärr även ökänt för att det orsakar problem med ljudkort som tidigare fungerat väl, fördröjningar i ljuduppspelninge, med mera. Eftersom en media-pc inte använder flera program, och all nedmixning av olika kanaler sker via XBMC så behövs inte PulseAudio, så därför hoppade jag över att installera det.

Installerade däremot de nödvändiga ljud-drivrutinerna med följande kommando:


sudo apt-get install linux-sound-base alsa-base alsa-utils

För att xbmc-användaren ska få använda ljudkortet krävs att den tilldelas rättigheter:


sudo usermod -a -G audio xbmc

Kommandot ovan lägger till användaren ”xbmc” i gruppen ”audio”.

På samma sätt krävs extra rättigheter för att XBMC ska få lov att stänga av datorn eller sätta den i vänteläge när det väljs av användaren. Det görs dock via PolicyKit:


sudo apt-get install pm-utils policykit
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.suspend
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.hibernate
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.reboot
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.shutdown
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.reboot-multiple-sessions
sudo polkit-auth --user xbmc --grant org.freedesktop.hal.power-management.shutdown-multiple-sessions

Volymnivåer är normalt satta till noll, men datorn kommer ihåg senaste nivåer efter omstart. Eftersom ljudnivån hanteras av XBMC så är det en bra idé att sätta alla ljudnivåer på ljudkortsnivå till max. Med vissa ljudkort kan detta orsaka överstyrning, så om det händer så sätt nivåerna till 80% eller liknande.

Kommandot ovan installerade även en mixer i textläge som kan användas för att ställa ljudnivåerna. Starta den med ”sudo alsamixer”. På min dator satte jag kanalerna ”Master” och ”Front” till 100, samt aktiverade IEC958, IEC958 D och IEC958 1. De sista används för ljud via HDMI-utgången.

Använd följande kommando för att tvinga ljudkortsdrivrutinerna att spara ner inställningarna direkt:


sudo alsactl store 0

Nästa programvara att installera är XBMC. Precis som för grafik-drivrutinerna så finns XBMC tillgängligt i ett extern programvaruförråd. När detta skrivs är den senaste tillgängliga versionen 9.11beta1. Lägg till programvaru-förrådet med följande kommando:


sudo add-apt-repository ppa:team-xbmc/karmic-ppa

Det finns en mängd XBMC-relaterade paket som kan installeras. Det enda nödvändiga paketet är ‘xbmc’, men de övriga innehåller olika skins, scripts, med mera. En komplett lista fås med detta kommando:


apt-cache search xbmc

Jag använde följande kommando för att installera ett grundläggande XBMC-system:


sudo apt-get install xbmc-skin-pm3-hd xbmc-skin-confluence xbmc

Återigen installerades en mängd andra paket automatiskt (110 st).

Nästa steg är att konfigurera grafiken. Det görs i de flesta fall automatiskt med följande kommando:


sudo nvidia-xconfig

Till slut ska operativsystemet ställas in att starta XBMC direkt efter uppstart. Guiden jag länkade till tidigare gör det på ett ganska smart sätt, men det finns andra. Jag valde iaf att göra på samma sätt som står beskrivet där, framför allt eftersom det är en snabb uppstart som inte involverar gdm.

Därmed hade jag ett fungerande system uppe som startar automatiskt. Det tar ca 35 sekunder från att man trycker på startknappen tills man är inne i XBMC:s huvudmeny. Helt ok!

Får avsluta med att be om ursäkt för en knastrande snustorrhet och brist på korrekturläsning. Jag skrev detta främst för att komma ihåg de nödvändiga stegen när det är dags för ominstallation. Nästa gång blir det om något intressantare, så som kompilering av LCDProc drivrutiner! :)

2009
11.14

Fjärrkontroll och rattar

Mina lediga stunder de senaste veckorna har gått till att få inmatnings-enheterna att fungera. I synnerhet de två rattarna samt fjärrkontroll.

Rattar

Till de två rattarna använder jag rotary encoders. Det är vridströmställare utan stopp som levererar två digitala pulser, där den ena är förskjuten 90° jämfört med den andra:

Genom att hela tiden hålla reda på när en signal växlar från hög till låg eller tvärtom, och vad som senast hände, kan man avgöra om ratten vrids åt höger eller åt vänster. Det hela fungerar riktigt bra, och jag har inte ens behövt använda någon avstudsningsteknik.

Jag hade från början tänkt använda en vanlig potentiometer till volym-ratten, eftersom det är en fördel om den har fasta min- och max-lägen. Men för att göra konstruktionen lättare och för att vinna ytterligare lite flexibilitet har jag bestämt mig för att använda samma komponenter för båda rattarna.

Fjärrkontroll

Från början hade jag tänkt undvika att implementera fjärrkontrol-hantering, och istället använda fjärrkontroll-sensorn från min gamla X-box. Eftersom signalerna på gamepads och sensorer som ansluts till X-box är USB-kompatibla så är det enkelt att löda på en vanlig USB-kontakt på sensorn och ansluta till en PC istället. Det finns bra stöd i LIRC för det. Instruktioner för hur man omvandlar sensorn till vanlig USB finns här.

Jag gjorde detta för ett par månader sedan, och det fungerade bra. Men när jag nu plockat upp den igen har något gått sönder, så den upptäcks inte alls som USB-enhet längre. Så vad göra. Köpa ny? Nähä. Då får jag fixa IR-stöd själv istället.

Till saken hör att min TV har en fjärrkontroll som kan växlas mellan två lägen: TV och STB. Vad STB står för vet jag inte, men det vore perfekt om man kunde använda samma fjärrkontroll till TV:n och HTPC:n, genom att växla mellan dessa två lägen.

Så jag beställde en IR-sensor (75-303-89 på Elfa) och anslöt den till interface-kortet med hjälp av en experimentbräda. Noterade direkt att signalnivåerna var de rätta så nu var det bara att ta reda på protokollet från fjärrkontrollen och börja knacka kod.

Efter analys med oscilloskop kom jag fram till att fjärrkontrollen använder ett protokoll utvecklat av NEC. Det finns beskrivet tillsammans med en uppsjö andra IR-protokoll på denna utmärkta sida!

Hanteringen är ganska enkel. Jag har lagt ett interrupt på digital-ingången från IR-sensorn. Vid varje nytt interrupt (uppåtgående eller nedåtgående flank) kontrollerar jag om den nya nivån och tiden sedan senaste interruptet är de beräknade, med en viss marginal på tiden. Sedan startar timern om och interrupthanteringen avslutas. När sista interruptet mottagits, och kommandot är komplett (32 bitar) så inaktiveras interruptet tills kommandot hanterats av huvudloopen.

När huvudloopen uppfattar att ett IR-kommando är komplett så skickar den ett USB-interrupt till PC:n. Samma sak med rattarna och knapparna.

XBMC

Det sista steget är att informera XBMC om vad som händer. Jag har skrivit ett enkelt program som dels väntar på USB-interrupt (dvs väntar på att ta emot kommandon från interface-kortet) och dels har en anslutning till XBMC via EventServer/Client protokollet (ett enkelt envägs UDP-baserat protokoll för att skicka just knapptryckningar och liknande).

I och med detta är hela kedjan klar, från fjärrkontroll till ir-sensor till avr till usb till pc till xbmc. Men det finns ett problem:

Fjärrkontrollen fungerar och man kan navigera runt i XBMC. Men navigeringen är inte mjuk. T.ex om man höjer volymen genom att hålla volymknappen inne på fjärrkontrollen så går den stötvis. Eller om man trycker ”enter” på ett underbibliotek t.ex, så kan den skicka två knapptryckningar istället för ett så att man hamnar någon helt annanstans än man tänkt sig.

Jag misstänker att det finns två anledningar till detta. Fjärrkontrollen skickar ut upprepningskommandon med ett förmodat jämnt tempo. Men någonstans längs den komplicerade kedjan innan dessa når XBMC kan tidsförskjutningar uppstå, med en ryckig navigering som följd.

Det andra problemet är att, som sagt, upprepningskommandon skickas av fjärrkontrollen. Dessa skickas exakt 110 ms efter det förra kommandot startade. Eftersom varje nytt kommando tar ca 86 ms att skicka innebär det att första upprepningskommandot kommer bara 24 ms senare. Har användaren inte hunnit släppa knappen på den tiden skickas nästa kommando direkt.

Jag funderar på olika sätt att lösa detta. Ett sätt är att konfigurera programmet så att vissa knappar bara skickar en impuls. Dvs, volymknappen fortsätter fungera som nu och skicka upprepade knapptryckningar, medan enter-tangenten bara skickas en gång.

Ett annat sätt är att skicka en ”knapp nertryckt” signal till XBMC när första kommandot mottages och sedan skicka ett ”knapp släppt” kommando först när det gått 110 ms utan att någon upprepningskod mottagits.

2009
11.02

Glasrutan åter på plats

Glasrutan är åter på plats. Åtminstone tillfälligt.

Efter att Malmös ledande bilvårdfirma bidragit med ett par bitar solfilm gav jag mig på det något svåra arbetet med montera solfilm på glas. Det gick sådär.

Solfilm monteras genom att man drar av filmen från skyddsfolien och lägger den med dess klistriga sida mot (den väl rengjorda!) glasytan. Men först ska man blöta både filmen och glasytan, för då kan man passa in den ifall den inte skulle bli perfekt från början (och det blir den inte). Men jag snålade med vattnet, så den första filmen gick åt skogen. Den andra filmen gick betydligt bättre, men tyvärr var den lite ljusare än den första, så jag kommer nog att få be om en bit till!

wfoil

Tog en sväng om Clas Ohlson på väg hem idag (och kom därifrån med halva affären, men det är en annan historia). Letade främst efter något att fästa glasrutan med, och kom hem med några olika möjliga lösningar. Det som visade sig fungera bäst var faktiskt skruvklammers i plast.

Glasrutan fäst med skruvklammers

Glasrutan fäst med skruvklammers

Skruvklammrarna ger dels ett stöd under för att hålla upp glaset, och dels trycker de glaset mot radions framsida. Perfekt.

klammers

Så nu sitter glasrutan där, åtminstone tills jag får en ny solfilm. Just nu är den bara fästad i underkant men det sitter oväntat bra ändå. Det är inte lika enkelt att fästa en skruvklammer ovanför då det är mycket tunnare material att skruva i där.

Nästa utmaning är att hitta på ett sätt att montera display och rattar.