Dunkelstern's Blog

Apr

26

Atmel AVR Programmer

5 Kommentare

Bild vom USBASP

Ich sehe schon, ich vernachlässige mein Blog zu sehr, könnte daran liegen, dass ich hinter den Kulissen an der Blog Engine arbeite gerade :D

Aber Heute geht’s mal um was anderes: Elektronik und die Tücken des Platinen herstellens.

AVR USB Programmer

Leider hat sich mein Atmel AVRISP MK2 vor ein paar Monaten schon in die ewigen Jagdgründe verabschiedet. Was genau dem Kistchen fehlt kann ich leider nicht wirklich sagen, denn am Computer wird es noch ohne weiteres Erkannt und funktioniert anscheinend auch, doch aus dem Programmierstecker kommt kein Muks mehr. Der Maschinengeist war dem kleinen blauen Kästchen wohl nicht mehr gnädig und hat sich auf die Suche nach einem neuen Zuhause gemacht.

Da ich ja nun kein Programmiergerät mehr mein eigen nennen durfte musste natürlich ein neues her. Und da mein WG Mitbewohner zufällig noch einen dieser kleinen Adapter besitzt der noch funktionsfähig ist dachte ich mir ich baue mir einfach selber einen. Kann ja nicht so schwer sein und siehe da im Netz findet man sogar Schaltpläne für diverse Versionen dieser Programmer. Nach mehrfachem hin und her was ich nun bauen soll habe ich mich für das USBLab Christian Ulrich entschieden. Warum? – Das war relativ einfach zu entscheiden:

  1. Kann man mit der USBLab Hardware auch die USBASP Firmware benutzen, d.h. falls die USBLab Firmware nicht laufen würde hätte ich einfach die von USBASP drauf flashen können.
  2. Kann USBLab noch viel mehr. z.B. kann man einen JTAG Adapter draus machen oder ein sehr niederfrequentes Oszilloskop.

Die Tücken der Platinenherstellung

Immer wenn man mal wieder richtig was tolles bauen will versagt natürlich die Ausrüstung, ist ja klar. Vor einem Monat funktionierte noch alles, doch wenn man es jetzt aus dem Schrank zieht tut sich nix mehr. Kennt das jemand? – Nicht? – Glück gehabt. Ich hatte nicht soviel Glück und natürlich ist die dumme Aquariumspumpe der Ätzanlage (damit die Säure so schön durchgemischt wird beim Ätzen) direkt erstmal verreckt. Aber immerhin tut die Heizung noch. Aber sei’s drum, dann stell ich mich halt daneben und schwenk die Platine hin und her. Aber dazu müsste man wohl erstmal ein korrekt belichtetes Platinchen in den Händen halten. Also unsere Mini Solarbank ausgepackt (Umgebauter Scanner mit einem Gesichtsbräuner drin… funktioniert super!) und dem Laserdrucker eine Folie zu fressen gegeben und das Layout erstmal ausgedruckt. Soweit so gut.

Ich halte also eine korrekt belichtete Platine in den Händen und rühre den Entwickler nach Gefühl und, so glaubte ich zumindest, bestem Wissen und Gewissen an, lasse die Platine hineingleiten und wusch: Platine komplett entschichtet. Ups das war wohl zu scharf angesetzt. Also schnell mal mit der gleichen Menge Wasser aufgießen und ein neues Stück Platine zurechtdrehmeln.

Beim 2. Mal hat’s dann schließlich geklappt. 5 Gramm Entwickler auf 200 ml Wasser. So nun hab ich’s aufgeschrieben und wenn ich beim nächsten mal auf Twitter schreib das ich mich vertan hab dürft ihr mich hauen.

Beim Ätzen sind mir dann ein paar kleine Schwächen des Platinenlayouts aufgefallen, an einer Stelle wollte sich das Kupfer nämlich nicht von der Platine lösen und ich musste dem Ding nachher mit einem Skalpell zu Leibe rücken um den Kurzschluss zu beseitigen. Das was ihr in diesem Blogeintrag zu sehen kriegt ist also schon das bereits überarbeitete Platinenlayout das ich dann morgen ätzen und bestücken werde. Das Foto am Anfang ist jedoch das bereits funktionierende Teil was ich schon fertig hab mit Version 1 der Platine.

Beim Bohren der Platine wurde mir dann auch wieder ins Gedächtnis zurück gerufen weshalb ich Eagle nicht so besonders mag. Man kann nicht ohne weiteres alle Lötpads vergrößern damit diese beim Bohren per Hand nicht plötzlich verschwinden (weil man eben nicht genau Zentral getroffen hat und somit das gute Kupfer die Platine verlassen hat um sich ganz eng an den Bohrer zu kuscheln… Man wickelt sozusagen das ganze Pad auf den Bohrer auf und darf sich nachher die Haare raufen wie man das jetzt festgelötet kriegt)

Aus genau diesem Grund habe ich dann Heute entschlossen mir eine eigene Eagle Library zu bauen in die ich einfach alle Teile reinkopiert habe die ich auf der Platine habe um die Lötpads zu vergrößern. Die Dunkelstern “Handmade” Library sozusagen. Wenn die Bibliothek einmal genügend Teile umfassen sollte werde ich die dann auch mal online stellen, aber im Moment ist es dafür wohl noch zu früh. An den Teilen habe ich auch schon teilweise Detailverbesserungen angebracht (z.b. hat der Quarz jetzt ein rechteckiges Pad an Pin1 und die Widerstände haben 1mm mehr Abstand damit ein normalsterblicher die auch so biegen kann dass die da ohne weiteres reinpassen), ein paar mehr werden wohl folgen.

USBLab Firmware

Nachdem ich dem Ding dann endlich alle Hardwarefehler und Kinderkrankheiten ausgetrieben habe ging’s an die Firmware, doch die hätte ich mir besser vorher angesehen. Ich habe selten so ein #ifdef Chaos gesehen wie in dieser Firmware. Es gibt für die USBLab Platine insgesamt 7 verschiedene Firmware brocken plus einen USB Bootloader. Leider wurden alle 7 unterschiedlichen Programme inkl. Bootloader in einem Satz Dateien untergebracht und es wird munter mittels #ifdef ausgeklammert was man gerade nicht benötigt. Der Quellcode ist ohne Vorlauf von “gcc -E” nicht lesbar. Nachdem der Präprozessor die Firmware einmal durchgekaut hat geht’s einigermaßen, aber ändern kann man an dem Quellcode so nix. Was dabei allerdings auch unglaublich nervt: Es gibt keine Makefiles in die man eben das -E einschmuggeln könnte, sondern nur AVRStudio Projektdateien. Also musste die Virtuelle Maschine mit Windows ran um das Gewirr zu sortieren.

Als nächstes musste ich feststellen, dass der Bootloader ein paar sehr merkwürdige Annahmen über die Taktfrequenz des ATmega8 vorweg nimmt, so läuft der Bootloader nur mit 12 MHz und, mit den übertakteten außerhalb der Spezifikation des Chips liegenden, 20 MHz, die 16 MHz die ich so gut wie immer benutze werden nicht unterstützt. Allerdings ist das eine absolut frei gewählte Einschränkung damit der Firmware Updater nicht soviele verschiedene Firmware Images vorhalten muss. Da der Firmwareupdater aber wohl eh nur unter Windows läuft war mir das zunehmend egal. Dann kann ich den halt nicht verwenden.

Schaltplan

Also auf zur Programmer Firmware. Und ich ahnte schlimmes (was wie ihr gleich sehen werdet auch eintrat). Ich wollte eigentlich die AVRISP MK2 Firmware einspielen und mein fertiges Gerätchen dann gut getarnt wieder in das Gehäuse des Zerstörten original Atmel Programmers einsetzen (daher auch die Außenmaße von 4 mal 5 cm). So könnte ich wie gewohnt weiter arbeiten. Aber leider musste ich feststellen, dass trotz der vielen #ifdef Anweisungen immer starr von 12 MHz ausgegangen wird und sich der Autor der Firmware auch noch selber eine Timer funktion gebastelt hatte die nur als delay verwendung findet und dafür einen Timer/Counter auffrisst. Natürlich funktionierte diese Timer Funktion nicht mehr korrekt bei 16 MHz.

Nachdem ich auch diesen Fehler beseitigt hatte erkannte mein Computer den Programmer korrekt als AVRISP MKII mit der Seriennummer ULIHOME.DE0. Soweit so klar, also das AVRStudio angeworfen, eine Testplatine rausgekramt und einfach mal irgendwas auf den Microcontroller auf der Platine schreiben…. Mööööp Fehlanzeige. Das AVRStudio und auch Windows erkennen das Gerät zwar korrekt aber leider funktioniert wohl irgendetwas nicht und die Verbindung kommt nicht zustande. Zu diesem Zeitpunkt dachte ich mir nur: “Hoffentlich ist es nicht die Hardware, sondern nur meine Dummheit”. Also fix die USBASP FIrmware runtergeladen, die Ports und Pins angepasst und siehe da: Es funktioniert.

Softwareentwicklung und Elektronik

Wie ich immer wieder feststellen musste sind Elektroniker nicht unbedingt die besten Softwareentwickler. Für mich hat sich dieses Vorurteil mit dem USBLab wieder mal bestätigt, ich möchte niemandem zu nahe treten mit dieser Aussage, denn ich bin zwar ein guter Softwareentwickler aber dafür nicht so gut mit der Elektronik :)

Trotzdem werde ich mich der kaputten Firmware annehmen und diese in funktionsfähigen und lesbaren Zustand bringen, ich hab ja nu schon mal 2 von den Geräten hier rumliegen, dann will ich das auch nutzen können. (Habt mich also doch gekriegt ;) )

Ich werde das dann hier in meinem Blog dokumentieren und evtl. noch ne Projektseite dazu online stellen.

Die Hardware

In den Bildern oben konntet ihr ja schon sehen wie das ganze ungefähr aussieht. Sollte jetzt jemand so heiß drauf sein, dass er das unbedingt nachbauen will kommt hier jetzt einfach noch schnell ein PDF mit allen Zeichnungen drin.

Auf der letzten Seite findet ihr das Board Layout zum Belichten in Originalgröße, sowie eine Maske für den Lötstopp Lack sowie ein kleines Bestückungsschema. An einigen Widerständen im Schaltplan steht kein Wert dran, diese Werte könnt ihr in der Materialliste auf der nächsten Seite nachlesen. Als Lötstopp Lack lässt sich übrigens prima der unbelichtete Lack der noch auf der Platine ist nach dem Ätzen verwenden. Einfach nochmal die Lötstopp Maske drauf belichten, nochmal entwickeln (jetzt sind die Lötpads frei) und dann für 10 min in den Backofen legen (ohne vorheizen) das backt den Lack dann fest und ihr habt fast die Qualität Platine die ihr aus der Fabrik kriegen würdet :)

5 Responses to 'Atmel AVR Programmer'

Kommentare abonieren RSS or TrackBack to 'Atmel AVR Programmer'.

  1. Hi,
    ich versuche gerade krampfhaft den USBasp mit 16MHz zum laufen zu bekommen. Auf meiner Platine läuft schon der usbaspLoader(Bootloader, der USBasp simuliert) problemlos. Aber die eigendliche USBasp Firmware will nicht laufen, bzw lässt sich nicht am USB finden.
    Welche anpassungen an welcher USBasp version hast du gemacht, damit es mit 16Mhz lief?

    Beste Grüße,
    Dino0815

    Dino0815No Gravatar

    1 Jul 10 at 17:25

  2. Soweit ich mich erinnern kann hab ich nur die pins in usbconfig.h angepasst und sicher gestellt, dass F_CPU korrekt gesetzt ist. Alternativ kannst du das CPU_kHz oder wie das heißt in der config auch direkt auf 16000 setzen.

    Sollte es dann immer noch nicht laufen würde ich empfehlen den V-USB Teil zu updaten, einfach den aktuellen runterladen und die Dateien ersetzen

    dunkelsternNo Gravatar

    1 Jul 10 at 20:49

  3. JP1 und JP3 ?
    Das ist nur einer nötig.

    Platine 10 Minuten backen bei welcher Temperatur ?

    KroSan

    KroSanNo Gravatar

    25 Jul 10 at 12:46

  4. Backen bei was der Ofen hergibt :) deswegen ja ohne vorheizen 10 min.

    Man braucht nur einen Jumper, der wird von 1 auf 3 umgesteckt um das gerät über den “Programmier-Ausgang” fremdzuprogrammieren. Sonst muss man für ein firmwareupdate ohne bootloader ja immer den Chip rausnehmen.

    dunkelsternNo Gravatar

    3 Aug 10 at 20:36

  5. Danke für die Antwort,
    werde es dann mal im Heißluftherd versuchen.

    KroSan

    KroSanNo Gravatar

    4 Aug 10 at 13:41

Einen Kommentar hinterlassen