Arduino

USBasp ATmega Programming

Ich versuche immer Projekte mit möglichst geringem Geldaufwand zu realisieren. Doch durch die gestiegenen Preise auf dem Chip Markt, wird jede Kleinigkeit immer teurer. Außerdem wurde vor ein paar Jahren die Besteuerung von Importen aus China geändert. Da macht es keinen SInn mehr, billige Arduino Klone aus China für wenig Geld, aber lange Versandzeit zu kaufen. Deswegen habe ich mir gedacht, eigentlich brauche ich ja nicht immer gleich einen ganzen Arduino bzw. einen ATmega328. Da reicht auch weniger Speicher aus und es wird billiger. Darum hier eine Anleitung, um mittels USBasp Programmer Sketche auf einen Atmel AVR Mikrocontroller über die Arduino IDE zu schreiben.

Tutorial

Neue Mikrocontroller vorbereiten

1. Boards installieren

Zu allererst starten wir mal die Arduino IDE und öffnen die Einstellungen. Dort setzen wir die Haken bei „verbose output“ für „compile“ und „upload“ und tragen noch additional boards manager URLs ein. Mehrere werden einfach mit einem Komma separiert. Oder wir drücken rechts daneben den Button und tragen dort pro Zeile eine URL ein.

http://drazzy.com/package_drazzy.com_index.json
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json

MiniCore ist für die ATmega Reihe und das andere für die ganzen ATtinys.

Danach können die benötigten Board Pakete über den Board Manager installiert werden. Einfach in der Suche oben „MiniCore“ eingeben und das Paket installieren.

NicsMocs arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp
arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp
arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp

2. Bootloader brennen

Nun müssen noch die richtigen Fuses etc. auf den neuen ATmega geschrieben werden. Das machen wir, indem wir einen Bootloader darauf brennen. Doch zunächst müssen wir noch ein paar Sachen einstellen.

Unter „Board“ wählen wir unseren Mikrocontroller aus. „BOD“, „Bootloader“ und „EEPROM“ können auf den Standardeinstellung gelassen werden. Bei „Clock“ nehmen wir unbedingt irgendwas mit INTERNAL. Am besten internal 8MHz. Ansonsten kann der Mikrocontroller nicht mehr ohne weiteres Equipment beschrieben werden. 

Bei ATmega88 und den Versionen darunter macht es Sinn, „LTO“ zu aktivieren, um Speicherplatz zu sparen. 

Unter „Variant“ müssen wir noch die richtige Version des Mikrocontrollers angeben. Diese kann einfach direkt vom ATmega abgelesen werden. 

Abschließend muss noch angegeben werden, dass wir einen Programmer verwenden möchten. Unter dem Punkt „Programmer“ wählen wir noch „USBasp“ aus.

Falls der USBasp noch nicht an den Computer angeschlossen ist, wäre das jetzt der richtige Zeitpunkt dafür. Anschließend die Verbindung von USBasp zum Mikrocontroller herstellen und dann kann es schon losgehen: Burn Bootloader!

arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp
NicsMocs arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp
NicsMocs arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp
arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp
NicsMocs arduino uno usbasp atmega88 atmega48 atmega328 atmega168 programmer

ATmega8, ATmega48, ATmega88, ATmega168,ATmega328

Error handling

3. Irgendwas ging jetzt nicht

error: unable to open programmer usbasp on port usb

Du hast wahrscheinlich vergessen den USBasp an deinen Computer zu stecken oder noch nicht den Treiber installiert.

arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp

error: initialization failed

avrdude main() error: initialization failed, rc=-1

  •  double check the connections and try again
  • use -B to set lower ISP clock frequency, e.g. -B 125kHz
  • use -F to override this check
NicsMocs arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp

Ok das kann mehrere Gründe haben:

  1. die Verbindungen von USBasp zum ATmega sind falsch oder wackelig. Also nochmal überprüfen.
  2.  Die Clock Frequenz des USBasp ist zu schnell. Dafür gibt es auf dem USBasp 2 Pins, die über einen Jumper kurzgeschlossen werden können. Auf meinem USBasp steht an der Stelle JP3. Überbrückt zum Bootloader-Brennen die beiden Pins und der USBasp arbeitet langsamer.
  3. Falls das alles noch nicht geholfen hat, nun noch der ultimative Trick siehe 4. Kapitel unten.

4. Den Mikrocontroller retten

Scheinbar funktioniert der Mikrocontroller nicht richtig. Vermutlich wurden irgendwann falsche Fuses gesetzt. Aber nur die Ruhe, mit etwas Aufwand können wir auch das Problem lösen.

Material

Nein wir brauchen keine Schwingquarze oder Kondensatoren. Wir machen es uns ganz leicht. Da du meine Seite gesucht hast, gehe ich stark davon aus, dass du einen Arduino zur Hand hast. Diesen brauchen wir jetzt. Und auch noch ein Kabel.

NicsMocs arduino uno usbasp atmega88 atmega48 atmega328 atmega168 programmer

Problem external Clock

Das Problem, warum der ATmega nicht beschrieben werden kann, liegt wahrscheinlich daran, dass die Clock auf external gebrannt bzw. generell falsche Fuses gesetzt wurden. Was bedeutet, dass der ATmega nur mit externer Clock beschrieben werden kann. Also rüsten wir unseren, zum Beispiel, Arduino UNO so um, dass dieser ein 1 MHz Rechteck Signal erzeugt und damit die Aufgabe der external Clock übernimmt. Wir laden folgenden Sketch auf den Arduino UNO und verbinden Pin 9 vom UNO mit dem PIN 9 des ATmegas (XTAL1).

Nun sollte es möglich sein, den Bootloader mit der richtig ausgewählten INTERNAL Clock zu brennen.

Falls das jetzt alles nichts geholfen hat, sieht es wohl leider so aus, als ob der Mikrocontroller defekt ist.

5. Sketch hochladen

Jetzt kann nun endlich der Sketch auf den ATmega geladen werden. Dabei müssen wir nur aufpassen, dass wir „Upload Using Programmer“ zum Upload auswählen.

arduino atmega48 atmega88 atmega168 atmega328 atmega avr atmel microcontroller ide minicore usbasp