Ремонт на дървен шкаф – част 2

След първата част се захванах с едно от чекмеджетата. Разглобих го нацяло и залепих наново сглобките. Тъй като те не бяха особено плътни вместо страндартното (поливинилацетатно) лепило за дърво използвах полиуретаново. То се раздува докато съхне и може да запълни малки луфтове.

Жлебовете в които влизаше дъното също се бяха отцепили. Направих нови летви които залепих към рамката на чекмеджето с подходящи прорези. Те служат и като водачи, защото върху тях се плъзга самото чекмедже. Оставих ги малко по-дълги и после подрязах, така че да ограничат движението навътре.

Горната част на шкафа имаше 2 основни проблема. Гърбът на едното шкафче беше откъртен и имаше голяма пукнатина на ‘тавана’, който е от същите 5мм слепени дъски като гърбовете.

Гърбовете на всички шкафчета влизат в П-образна рамка от дъски с жлебове. На две от дъските тук жлебовете бяха откъртени. На горната издялках откъртеното до паралелепилед с длето и залепих подготвена летвичка с подходящ размер. Самата дъска беше твърде добре свързана с останалата част на шкафа и не искам да я махам.

Страничната дъска със счупен жлеб едва се държеше, така че я отстраних без проблем и изработих изцяло нова дъска на циркуляра.

Тъй като нямаше как да я прихвана със стеги при лепенето малко импровизирах.

Гърбът също беше счупен от единия край и имаше 1-2 малки пукнатини. Добавих ново парче (взето от голяма част от тавана, която замених) и залепих напуканото. Тежестите пречат на тънките плоскости да се надигнат в мястото на слепване от силата на стегите.

Всичко монтирано на място. На снимката се вижда и как страницата е спукана при долната панта. Свалих вратата за да мога да сложа стеги и залепих пукнатината.

Демонтирах тавана изцяло и изрязах около 1/3 от него заради голямата пукнатина.

По вече отработения начин залепих нова дъска намерана из ‘боклуците’ останали от ремонта на покрива.

Ето и един автопортрет с готовия продукт.

След лак цветът е доста близък, но така или иначе тази част няма да се вижда. Двете дупки се падат точно върху стените на шкафчетата и някога в тях е имало дибли закрепващи допълнителни орнаменти върху шкафа. За съжаление те са безследно изчезнали много преди аз да се родя.

Новият таван вече монтиран на шкафа.

Преди да мога да поставя горната част на шкафа на мястото ѝ трябваше да сменя малко занаята. Между двете половини има гранитен плот, който беше доста издраскан. Искаше ми се да се опитам да го полирам преди да го поставя на мястото му.

Проблемът с това е, че гранитът е доста твърд. Специално за целта си поръчах комплект диамантени полиращи дискове от ebay.

С внимателна работа с дрелката, така че да не се получат дълбоки задирания изшлайфах драскотините. Дисковете почват от едрина 80 и стигат до 3000. Въпреки, че накрая имах равна повърхност без драскотини тя стана много матова и се загуби красотата на камъка. Тайната към лъскава и огледална повърхност се оказа в използването на специална восъчна полир паста за камъни.

Тъй като цялата процедура е доста трудоемка частта, която ще остане под горната част на шкафа ме домързя да я полирам. На тази снимка се вижда разликата, като полираната част отразява асмалъка под който работех.Преди:

И след:

Сега вече всички части на шкафа могат да се съберат на едно място.

Струваше си труда по полировката. Ясно се вижда отражението на шкафа в гранита.Дори фотоапарата може да го фокусира.

Сега обратно към дърводелството. Проектът е 99% готов, но както знаем последния 1% отнема 50 процента от времето :). В моя случай най-много отне докато се наканя да довърша последните 3-4 детайла.

Един проблем, който се появи след слгабянето на всички части е, че от тежестта средата провисна. В резултат на това вратите взеха да опират и да се отварят много трудно. За да реша този проблем добавих една опора.

В средата над двете чемкеджета имаше една изтегляща се масичка, която никога не сме ползвали. След добавянето на опората масичката нямаше как да се сложи вече, затова просто запуших дупката.

Бронзовата дръжка на едното чекмедже никога не я е имало. Направих ‘временна’ от дърво, колкото да може да се отваря. Тъй като поговорката, че най-трайните неща са временните явно ще важи и в този случай я приведох в малко по-добър вид.

Всички тези довършителни работи са видими на долната снимка. Също така се вижда, че шкафът вече се ползва.

Близък план на ‘временната дръжка’. Не знам дали да не направя същата и за другото чекмедже, че да са еднакви.И последно, вратата на долния шкаф също няма дръжка (бях пъхнал една дибла в ключалката, да мога да я отварям), но пък има една дупка. Не можах да измисля особено красиво решение, но запълних дупката с някакъв обков, който имах под ръка и поне по цвят пасва горе-долу.

Шкафът е купен втора употреба от баба ми през 50-те години на миналия век, така че не се знае колко е стар точно. Надявам се след това освежаване да изкара поне докато се пенсионирам :).

В процеса на работа се уверих, че трябва да си организирам по-добре работилницата. И най-вече, че един истински дърводелски тезгях ще направи удоволствието от подобни дейности още по-голямо.

Ето най-нарая в завършен вид.

Ремонт на дървен шкаф – част 1

Родителите ми имат един стар дървен шкаф. Покрай разни ремонти се наложи да го изпразним изцяло и изнесем от стаята и се видя, че състоянието му не е особено добро. Краката и дъното му бяха сериозно нападнати от дървояди.

Точно в този момент бях решил да си почина известно време от работата пред компютъра и ремонтът на шкафа ми се стори добър проект за разтоварване. Опитах се да снимам основните етапи и да ги кача тук, най-вече за бъдещо вдъхновение, а и малко да се похваля. Ако искате да се научите как се правят подобни неща ви препоръчвам чудесния български блог „Дървени философии“ или необятното количество информация налична на английски.

Дъното и краката бяха толкова проядени, че единственият вариант беше да ги заменя изцяло. Останалата част от шкафа третирах с някакъв силно отровен препарат против дървояди.

За новото дъно купих сухи дъски на доста висока цена от Baumax в Пловдив. Въобще намирането на хубав дървен материал си е проблем. От дъските слепих плоскост малко по-голяма от необходимия ми размер.

След изсъхване на лепилото изшлайфах малко повърхността и третирах профилактично с препарата против дървояди.

Маркирах и изрязах плоскостта до точния размер.

Пробното поставяне на новото дъно излгежда добре:

Старото дъно лягаше върху основата (вижда се следата на припокриване),но аз реших да направя новото на едно ниво с нея. Нямаше никаква пролука по време на монтажа, но след няколко седмици се отвори сигурно 0.5-1мм процеп. По принцип препоръчват дървеният материал за някоя мебел да престои известно време в стаята, където ще се ползва и тогава да се сглобява. Аз нямах търпение да чакам и уж бях купил сухи дъски, но явно не достатъчно.

Докато поставях новото дъно забелязах, че някой, някога е ремонтирал гърба на шкафа. Едната плоскост беше заменена с фазер. На принципа „Като ще е гарга – да е рошава“  реших да изработя нова плоскост с която да заменя фазера и да върна близък до  оригиналния вид.

За целта ми трябваха тънки дъски, които отидох да търся на ‘боклуците’, или където бяхме струпали отпадъците от ремонта на покрива миналата година. Първо намерих една малка костенурка:

След това попаднах и на подходящи дъски. Повечето бяха криви или напукани, но подбрах най-добрите парчета и залепих пукнатините.

Майка ми беше доста скептична като разбра, че възнамерявам да вградя част от ‘боклуците’ в шкафа ѝ. След като прекарах горните дъски през абрихта вече беше по-спокойна, че знам каво правя и няма да орезиля семейната ценност. Дори след повече от 50 години на покрива след малко обработка дървото може да изглежда като ново.

Преди и след:

Гърбът е дебел само 5мм и трябваше да отнема доста материал, но тъкмо така успях да поизправя малко нещата.

Като страничен ефект се получава това:

До сега не бях слепвал толкова тънки дъски, но в крайна сметка резултатът се оказа приличен.

Ето и един изглед от вътрешността на шкафа:

После укрепих дъното и гърба с няколко летви и ги лакирах:

Най-накрая дойде ред да се захвана и с краката. Преди шкафът имаше четири струговани крака, един от които може да се види на първата снимка. Тъй като нямам струг реших да изработя крака подобни на един от орнаментите, така че да изглеждат добре като се съчетаят.

Изработих заготовка близка по форма на тези орнаменти.

Първоначално мислех да сложа пак четири крака. Предните два с формата на орнамените, а задните просто паралелепипеди. Също мислех краката да са ориентирани по същия начин, както орнаментита в горната част. На тази снимка шкафът е с краката нагоре.

Вуйчото на един приятел, който се занимава любителски с дърворезба, изкопира орнаментите върху моите заготовки за крака. Категорично ми отказа всякакво парично заплащане за услугата. В крайна сметка му занесох една бутилка ракия.

След известно експериментиране и чудене в крайна сметка реших да направя краката плътни по цялата дължина на страниците. Също завъртях орнамента на 180 градуса, така че да е огледален на горните и добавих една малко по-широка основа с фрезован ръб. Всичко това слепих в един доста масивен крак:

Първият крак е готов, остава още един.

След това залепих една пукнатина на вратите, ремонтирах и регулирах пантите и куп други дребни неща, които забравих да снимам.

Пърият етап е завършен! Долната половина на шкафа вече е върната на мястото си. Ако сте впечатлени от скоростта и лекотата с които работя помислете пак. През това време беше направен основен ремонт на цялото помещение (даже два пъти!).

Ще забележите, че краката са видимо по-тъмни от колкото трябва. Получи се така, защото повърхността на дързорезбата беше по-грапава. Дори при използване на един и същ лак по-гладките повърхностите стават по-светли, а по-грапавите по-тъмни.

Вижте продължението в част 2.

 

 

Philips SHB3060 won’t turn on

Some time ago I bought a Philips SHB3060 bluetooth headset from Technopolis (a chain of consumer electronics  stores in Bulgaria). After just a couple of weeks of usage it broke with the symptom of not turning ON at all. It was exchanged under warranty, but at the price of an awful customer experience rivaling that during the communist times. It failed yet again, in exactly the same manner. I decided to take the matters in my own hands, even if there’s more than a year of warranty left.

The first step of disassembly is to remove the ear cushion by carefully pulling it aside:

After that you’ll reach a small Philips screw:

Next the plastic cover needs to be popped off. It’s held by a few clips and a little help from a flat headed screw driver can be useful to avoid breaking them:

Remove the second Philips screw and you can finally take the PCB out:

It was immediately obvious what is the problem:

The travel of the plastic button on the enclosure is not limited in any way. Because of that the small microswitch on the PCB has to endure all of the force, while being held in place only by two tiny solder joints. This has caused one of the PCB traces to lift off and break.

The reaction to the power button is delayed by a couple of seconds, which is a good idea to avoid unwanted presses while in a bag, etc. Unfortunately there is no immediate feedback that the button is actually being pressed (like by blinking the LED near it or something), so sometimes the user tends to exert a little extra force just to be sure, which makes this failure mode even more likely.

I  fixed the broken PCB trace with a piece of thin copper wire. The trace is tiny and even under a magnifying glass it was not so easy to work on it (or I’m getting old and my eyesight not as good as it used to be 🙂 ). The headphones came back to life!

To make sure my repair has at least a fighting chance of lasting longer I superglued the whole underside of the microswitch to the PCB. I also hotglued two little pieces of plastic with the right thickness to limit the travel of the plastic button on the enclosure. This way if additional force is exerted on the button it will be taken up by the edge of the PCB (which is pretty strong) and not by the microswitch.

How long will my repair last? Only time will tell, but I’m pretty optimistic it will last longer than replacing the headset under warranty a second time. Bonus points for not having to deal with the grumpy auntie at the local Technopolis store.

Енергийна ефективност, част 1 – ЕНЕРГИЯ, РАБОТА, МОЩНОСТ

В предишната ми публикация споменах, че ми се иска да обърна повече внимание на темата за енергийната ефективност. За да можем да си говорим на тази тема е необходимо да разбираме някои основни понятия. Естествено, на първо място това е понятието за енергия.

За съжаление напоследък в ежедневния език думата ‘енергия’ се използва най-често в изказа на разни шарлатани, парапсихолози и други подобни. Затова искам изрично да уточня, че тук ще става въпрос само и единствено за физичната величина.

Вътрешната енергията на една затворена1 система е показател за способността ѝ да извърши работа. При извършването на работа определено количество енергия се прехвърля от нея в системата върху която се извършва работата. Тук под „извършване на работа“ отново имаме предвид само и единствено понятието от физиката, а не седенето по цял ден пред компютъра в офиса :).  Например, ако вие бутнете количката с продуктите в супермаркета и тя се задвижи, то вие сте извършили механична работа (преместване на тяло, под действие на сила) върху количката. В резултата енергията на количката се е увеличила, а вашата е намаляла.

Мерната единица за енергия и работа (тъй като работата се изразява в обмен на енергия) в системата SI e джаулът. 1 J е работата, извършена от сила 1 N при преместване на тяло на разстояние 1 m по направление на силата или пък под действието на мощност от 1 W  в продължение на 1 s.

Освен в джаули енергията може да бъде измерване в kWh (киловатчасове), калории, BTU (британски термални единици) и др. Различните мерни единици се ползват за удобство или по традиция в различни ситуации. 1 калория например е енергията необходима за повишаване на температурата на 1 грам вода с 1 градус Целзий и е равна на около (има доста видове калории!) 4.2 джаула. Киловатчасът е доста по-голяма единица и е равен на 3.6 мегаджаула (MJ) или 3 600 000 джаула и се ползва за измерване на потребената електрическа енергия. Британската термална единица е равна на 1055 джаула и все още се използва често при климатичните системи. Преобразуването от една мерна единица в друга става лесно чрез умножаването с подходящия коефициент.

За извършването на дадено количество работа е необходимо определено количество енергия. В много случаи обаче е важно не само дадена работа да бъде свършена, а това да стане бързо. Величината мощност  показва скоростта на извършване на работа, или също така консумираната енергия за единица реме. Мощността се измерва във ватове (W), като един ват отговаря на един джаул за една секунда. Други популярни мерни единици за мощност са конската сила (равна на около 0.75kW) и BTU/h2 (британска термална единица на час). Ако например бутате количката с покупки от предния пример, зяпайки витрините, ще изминете разстоянието до касите за 10 минути. Ако обаче закъснявате за работа и се позабързате ще изминете същото разстояние за 1 минута. И в двата случая ще извърщите едно и също количество работа, но във втория ще работите с 10 пъти по-голяма мощност!

Поздравления за търпението да прочетете всичко до тук! Знам, че за много хора горните редове са безинтересни и скучни, и само им напонмят за часовете по физика в 7-ми клас. Ако искате обаче да знаете защо имате големи разходи за електричество или отопление и най-вече как да ги намалите,  ви гарантирам, че времето прекарано в малко самообучение по темата ще ви се изплати многократно.

Очаквайте скоро „Енергийна ефективност, част 2: ТЕМПЕРАТУРА, ТОПЛИННА ЕНЕРГИЯ, ТОПЛИНА“

  1. Повече информация за видовете термодинамични системи може да намерите в Уикипедия. Погледнете също статията за понятието енергия, която е може би доста по-добра от моите писания тук.
  2. Когато чуете някой да казва, че си е монтирал климатик ‘шеснайска’, това означава, че топлинната мощност на климатичната система е 16000 BTU/h или около 4.7kW

Изрязване на дупка в навес (за програмисти)

houser-sun-raysТази година на FOSDEM посетих много впечатляваща лекция за FreeCAD и от тогава си търсех някакво оправдание малко да го разцъкам.

Аз живея в малка къща с много приятна веранда на югоизточната стена, със страхотен изглед към целия град. Единственият ѝ кусур е, че навесът над нея почти изцяло засенчва прозорците на тези стена. Реших, че искам да изрежа отвор в навеса и в него да заменя керемидите с нещо прозрачно, така че слънчевите лъчи да могат да проникват през прозорците.

Целта ми е да се възползвам максимално от слънчевата радиация за отопление през периода от 1-ви октомври до 30-ти април, като евентуално засенчването остане за останалата част на годината. Тази сметка по принцип може да се направи лесно (има и много уеб калкулатори) ако стената е ориентирана точно на юг, но при мен ориентацията е по-скоро югозапад.

Трябва да призная, че ми отне известно време докато успея да начертая нещата във FreeCad. Кривата на учене определено е леко стръмна, особено за такъв като мен, който няма опит с никаква друга CAD система (ако изключим разни за електронни схеми и платки). Все още много от концепциите са ми мътни и вероятно ще отнеме доста време докато нещата започнат да се проясняват. В крайна сметка, след няколко итерации на четене, проби и грешки успях да направи прост схематичен 3Д модел на стената, прозорците и навеса.

Използвах Sketcher модула за да начертая стената и прозорците в равнината YZ и им добавих ограничение (constraints), за да ги позиционирам и оразмеря в мащаб с реалността. После в равнината XZ начетах една наклонена линия, която екструдирах по оста Y, за да направя повърхността на навеса. Не знам дали това е най-добрият и „правилен“ начин да се направят нещата, но аз това можах да измисля.

Една от най-яките възможности на FreeCAD e, че всичко може да се скриптира на Питон. Използвах библиотеката PySolar за да изчисля точната позиция на слънцето в небосклона през интервали от 5 минути за датите 1-ви октомври, 30-ти април и 21-ви декември за локацията на моята къща. След това, със съвсем малко свързващ код начертах линии започващи от горния ляв  ъгъл на единия от прозорците в посока слънцето. Жълтите линии са за април, сините за октомври, а червените за 21-ви декември (когато слънцето е най-ниско).

Тази визуализация потвърди по доста по-точен и сигурен метод това, което предполагах (базирано на клонящите ми към нула познания по астрономия и емпирични наблюдения на движението на слънцето, проведени на верандата, с бира в ръка). Ако искам да се възползвам от максималната възможна слънчева радиация за отопление през прозорците ще трябва да направя целия навес прозрачен. Питонския ми код е много кратък и с твърдо зададени стойности на координати и положения на прозорците, та надали би бил полезен на някой друг. Все пак, този малък експеримент ме кара да смятам, че FreeCAD би бил една много добра основа за свободна платформа за енергиен анализ на сгради. Не става въпрос само за засенчването – може примерно директно да се смята добивът в kWh на енергия от даден прозорец, загубите през стени, под, таван, вентилация и т.н.

Ако вече сте грабнали теслите и трионите и сте се насочили към разрушаването на вашия собствен навес – спрете! Преди това трябва да имате много добра изолация на стените, тавана, пода, дограмите и чак тогава евентуално да помислите за добавянето на някой и друг ват час от слънцето през прозорците. По принцип темета за енергийната ефективност ми е много интересна и се надявам скоро да започна да пиша малко по-систематизирано по нея.

Всякакви предложения с какъв прозрачен материал и начин на монтаж може да бъдат заменени керемидите и дървенета ламперия са добре дошли в коментарите – поликарбонат, закалено стъкло, триплекс?

 

Мини масичка за лаптоп от чам

Използвани материали:

Плот – парчета ламперия от отвора за капандура, който изрязах в навеса на верандата, за по-лесен достъп до покрива.

Крака – летви останали от закърпването на покрива над антрето.

Широки летви за укрепване на краката – останали от опаковката на климатика.

Слепих парчетата ламперия в плот, на който скосих ръбовете на 45 градуса.

Другите части бяха сглобени по доста мързлив начин. Намазах допиращите се повърхности с лепило и след това ги прихванах с пирони/кламери с пневматичния такер. След като изсъхна лепилото се получи изключително лека, но доста здрава и стабилна конструкция. Дори може спокойно да се ползва и като табуретка/столче от някой като мен (към 60 кг).

В крайна сметка съм доволен от резултата. Размерът на масичката пасва точно на този на лаптопа, събира се в малките пространства между леглото и стената, а и най-вече защото се ползва постоянно.

masichka2

Еко-био-хендмейд-рециклирана холна масичка

Представям ви моя проект за масичка, направена от две врати на стар гардероб. Голямата ми гордост е, че при разкроя няма (почти) никакъв отпaдък!

Необходими материали – две врати от гардероб (или други правоъгълни плоскости с подходящ размер):

Стъпка 1:

Отрязваме по един полукръг от двата края на едната врата. Диаметъра е равен на ширината на плоскостта. Аз използвах оберфреза, но ако имате стабилна ръка би трябвало да се справите и със зеге.IMG_1414 IMG_1415

Плотът на масичката е готов!

IMG_1418Стъпка 2:

Отрязваме от другата врата две равни части, които ще служат за крака. Останалото ще бъде рафтчето. Не давам точни размери. Аз ги нагодих на око – според плоскостите с които разполагах и колко широка/висока масичка исках да получа.

IMG_1419 IMG_1420

Стъпка 3:

Вземаме остатъците от изрязването на плота.
IMG_1416
На сминката се вижда, че на моите плоскости има фрезовани отвори за панти или нещо подобно, които изрязах да не грозят. Това е и единствената „загуба“. Краката имат същите отвори, но просто ги обърнах навътре, да не се виждат.

Подрязваме ги така, че да получим четири ъгълчета.

IMG_1421 IMG_1424

Въпросните ъгълчета, смятах да сложа за допълнителна якост между рафтчето и краката, а и като визуален елемент. В крайта сметка и без тях масата се оказа достатъчно стабилна и красива и ме домързя да ги сложа.

Стъпка 4:

Прорязваме рафтчето така, че вертикалните елементи да минат през него:
IMG_1425
На сминката се виждат дупки за дръжка, които имаше на едната врата. Запуших ги с дървени дибли и прецених рязането така, че да останат на рафтчето и да не бият много на очи.

Стъпка 5:

Сглобяване. Би трябвало да разполагате с нещо подобно на това:
IMG_1422Рафтчето, краката и вертикалните подпори са съединени с винтове 3.5х50мм (по съвет на Киро). Те са достатъчно тънки, така че да не разпукат талашита дори и без предварително разпробиване. Плота е закрешен към краката с ъглови сглобки, за да няма по него глави на винтове и дупки.

Ето как изглежда сглобената масичка:

IMG_1429Стъпка 6:

Подобряване на външния вид. Реших да не се опитвам да слагам кант на плота в домашни условия. Също така, цвета на плоскостите беше малко различен от двата края. Вместо това, намазах цялата масичка с лазурен лак, така че всичко да придобие горе-долу един цвят. Смятам, че се получи добре.

IMG_1436 IMG_1433 IMG_1432 IMG_1431В последствие се оказа, че лазурният лак не е много устойчив, нанесен върху фурнира. Реших да нанеса поне на плота яхтен лак, така че да е устойчив на надраскване. Това обаче предизвика някаква реакция между двата лака. В крайна сметка изщкурих плота и го лакирах наново, само с яхтен лак. Макар и да стана малко по-различен цвят от останалите, сега вече не се драска и пак като цяло масичката изглежда добре.

Имам още доста плоскости останали от този гардероб, така че всякакви идеи за оползотворяването им са добре дошли. За сега освен масичката съм направил и една ъглова етажерка за обувки. Макар и не чак толкова красива, тя е съобразена със всички чупки и стълби и пасва точно в ъгъла на много малкото антре вкъщи. Тогава ме домързя да снимам процеса, но ако на някой му е любопитно мога да кача една снимка на крайния продукт.

Принтер/скенер/копир Dell 1815dn и Линукс

Наскоро се сдобих с въпросното устройство – принтер, скенер и копир Dell 1815dn. Добра машинка, намираща се на прилична цена от доставчиците на употребявана техника.

За да заработи под Линукс принтера (в моя случай Убунту 12.04), сваляте архив с драйвери от тук. Единственият файл, който ви интересува в този архив, е cdroot/Linux/noarch/at_opt/share/ppd/mfp1815ps.ppd. Трябва да го посочите при добавянето на нов принтер, след като автоматичното търсене на драйвер се окаже неуспешно.

За сканиране по мрежата, решението е тук. Работи без никакви проблеми.

Развитие по случая с недостъпна среда

Във връзка с предишните две публикации (1, 2) има малко развитие.

Получихме отговори от областната управа и общината. Прилагам ги тук, но с две думи – интересуват се от проблема и препращат копие към компетентния орган. Благодарим за указаната подкрепа!

obshtina  oblast-1oblast-2

По-важното е, че като минавах от там завчера направо не можах да повярвам на очите си. Имаше сигурно 10 работника, които изкъртиха знаците от средата на тротоара и ги преместиха в градинката встрани или по-близо до пътя.

Преди:

След:
znak1
Преди:

След:
znak2
Чакаме и скосяването на бордюрите!

linux boards

Linux GPIO programmer for AVRDUDE

Hello!

Here you’ll find a tutorial and example of how to connect an AVR microcontroller to the GPIO pins of an embedded Linux system and use avrdude with the linuxgpio programmer type to program it.

Embedded Linux systems are small computers running Linux. Usually they will have quite a bit of available GPIO (General purpose input output) pins which you can toggle between 1/0 using /sys/class/gpio interface provided by the Linux kernel. Although small Linux computers are very capable, frequently they work in cooperation with even smaller computers like the 8 bit AVR microcontrollers. That can be quite handy if you need to handle some hard realtime task for example.

Traditionally to upload new firmware to these little helpers you would use a bootloader and connect them to a spare UART for example. This presents a chicken and egg problem of programming the bootloader in the first place. Also you may want to use every bit of flash available on the micro and not spare any for a bootloader, or not have a spare UART and so on. That’s where the linuxgpio programmer described here come into play. You can connect the AVR ISP programming interface to any four spare GPIO pins (usually there are plenty) of your Linux board and program it using avrdude. This can also be of interest to you if you already have an embedded Linux board (like the popular RaspberryPi, OlinuXino and the like) and want to get started programming AVRs, but don’t have a dedicated ISP programmer.

This solution have existed as a patch for avrdude 5.10 for more than two years. Luckily embedded Linux systems got much more popular now and Richard Nauber ported the patches to the current SVN version (a task I’ve been meaning to do for quite a while). This prompted me to bring the patch up to standard and with the help and feedback of the awesome people on the avrdude-dev mailing list it’s included in the official avrdude SVN. No more patches, yay! Until a new version of avrdude is released and finds its way into distributions here’s a quick description how to build and use it yourself. I’m assuming you’re doing this on a Linux system with a complete C development environment – gcc, autotools, etc. If you get some errors try to figure out which package is missing and install it using your distributions package manager.

First, checkout a fresh copy of avrdude SVN trunk:

$svn co svn://svn.savannah.nongnu.org/avrdude/trunk

Bootstrap autotools:

$cd trunk/avrdude
$ ./bootstrap

The linuxgpio programmer is not enabled by default, because it’s usually only useful for embedded Linux systems. You have to pass an additional option to configure to enable it:

$./configure --enable-linuxgpio=yes

If you’re doing a cross-compile as opposed to a native build you may want to pass some additional options like:

$./configure --host=arm-angstrom-linux-gnueabi --enable-linuxgpio=yes

Finally:

$make

If all went well you should have the avrdude executable and avrdude.conf files in the current directory. If you want to do things the proper way you can try to prepare a package for your favourite distribution (in which case you may find it easier to sart from an available source package). I won’t bother with this for now and just copy the two files mentioned above to my board using scp.

Now, time for some hard(ware) work! You need to connect your Linux system’s GPIO pins to the AVR and also supply power to it. It’s recommended that you take some measures to keep the magic smoke in. Make sure both systems use the same or compatible voltage levels i.e. 3.3V vs 5V. It’s also a good idea to put some resistors in series to limit the maximum current. A more robust approach would be to put a 3-state buffer in between, you can find a description of such a setup here.

For my tests I made a simple straight trough cable connecting the 4 GPIO pins, 3.3V power and GND from a RaspberryPi to the ISP connector of a Freeduino board, equipped with an Atmega168. Note that this make the Atmega168 work a bit out of spec, because at 3.3V its max frequency is 12MHz and not 16MHz but it worked fine for me. Also note the Freeduino is not connected or powered by anything else, as it normally runs on 5V, only 3.3V is being supplied through the ISP connector. It happened so that I used the pins for the hardware SPI interface of the RPi, but this need not be so, they were just the most convenient to wire with 3.3v and GND on the sides.

The picture in the beginning shows my test setup with the Freeduino connected to the RaspberryPi. Next to it, showing some other Linux boards which can be used instead – OlinuXino maxi and a Bifferboard (where it all started).

Jump to your Linux board, wherever you copied avrdude and avrdude.conf and open the latter with a text editor. By default the entry of the linuxgpio programmer is commented out, because there is no way to know how you wired things up in your setup. Uncomment it and replace the question marks with the GPIO pins to match your wiring scheme. Note that in the first version of this patch the GPIO numbers were off by one (i.e. you had to put 13 in the config file if you meant GPIO 12). This has been fixed, so now you need to put the correct number. In my case:

programmer
id = "linuxgpio";
desc = "Use the Linux sysfs interface to bitbang GPIO lines";
type = "linuxgpio";
reset = 22;
sck = 10;
mosi = 11;
miso = 9;
;

The moment of truth:

root@raspberrypi:/tmp# ./avrdude -C avrdude.conf -c linuxgpio -p m168 -U flash:w:blink.hex

If you’re lucky you should see something like this:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9406
avrdude: NOTE: „flash“ memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file „blink.hex“
avrdude: input file blink.hex auto detected as Intel Hex
avrdude: writing flash (3526 bytes):

Writing | ################################################## | 100% 1.77s

avrdude: 3526 bytes of flash written
avrdude: verifying flash memory against blink.hex:
avrdude: load data flash data from input file blink.hex:
avrdude: input file blink.hex auto detected as Intel Hex
avrdude: input file blink.hex contains 3526 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 1.97s

avrdude: verifying …
avrdude: 3526 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done. Thank you.

root@raspberrypi:/tmp#

Enjoy!