Drücke „Enter”, um zum Inhalt zu springen.

ATtiny2313: Fuses setzen und Programmieren mit PlatformIO

0

Bevor das erste Beispielprogramm auf dem ATtiny wie gewünscht und mit den richtigen Timings ausgeführt werden kann, müssen im Vorfeld die “Fuses” richtig gesetzt werden. Hierfür habe ich das kostenfreie Programm Microchip Studio for AVR© and SAM Devices in der Version 7.0.2542 verwendet. Nach der Installation und dem Start des Programms, kann der Device Programmer über das Menü Tools aufgerufen werden.

Tools -> Device Programming

Als Tool wählt man den verwendeten ISP Programmer aus (in meinem Fall STK500). Unter Device wählt man den ATtiny2313 aus und klickt anschließend auf Apply.

Unter dem Punkt Fuses (links im Bild) kann man relativ komfortabel die entsprechenden Fuses setzen. Wichtig ist hierbei, dass bei der Verwendung des integrierten 8 MHz Oszillators der Teiler (CKDIV8) nicht verwendet wird, da es ansonsten zu Timing-Problemen kommt. Die Fuse Register sollten folgendermaßen aussehen:

EXTENDED: 0xFF
HIGH:     0xDF
LOW:      0xE4

Durch einen Klick auf Program werden die Fuses entsprechend geflasht.

Fuse programming

In PlatformIO muss als nächstes die platformio.ini entsprechend angepasst werden. Zur Sicherheit wurde hier ebenfalls nochmal die Taktfrequenz des ATtiny auf 8 MHz eingestellt (8000000L):

Die fertige platformio.ini sollte folgendermaßen aussehen, wobei der Upload Port entsprechend angepasst werden muss:

[env:program_via_AVRISP_mkII]
platform = atmelavr
board = attiny2313
board_hardware.oscillator = internal
board_build.f_cpu = 8000000L
board_build.mcu = attiny2313
framework = arduino
upload_protocol = custom
upload_port = COM7
upload_flags = 
	-C
	$PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf
	-p
	$BOARD_MCU
	-P
	$UPLOAD_PORT
	-c
	stk500v2
upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i
monitor_speed = 19200

Folgendes Beispielprogramm ist eine erweiterte Variante des klassischen “Blink” Programms. Hierbei wird noch zusätzlich über eine serielle Schnittstelle die Laufzeit des ATtiny abgefragt. Hierbei muss unbedingt darauf geachtet werden, dass man nicht die “reguläre” serielle Schnittstelle verwendet, da der Serial.println() Befehl bei der Übertragung einer Zahl (z.B. Serial.println(5)) zu einem Absturz des ATtiny führt. Diese Erkenntnis hat mich 2 Abende Recherche gekostet. Verwendet man SoftwareSerial.h für eine virtuelle serielle Schnittstelle, können Zahlen ohne Probleme z.B. über ein FTDI Breakout Board an einen seriellen Monitor übertragen werden.

#include <Arduino.h>
#include <ATTinyCore.h>
#include <SoftwareSerial.h>

unsigned long time_now = 0;
bool zustand = LOW;

SoftwareSerial geraet(0,1); //Rx, Tx

void setup() {
  geraet.begin(19200);
  pinMode(7,OUTPUT);
}

void loop() {
  if (millis() >= time_now + 1000) {
    time_now = millis();
    geraet.println(time_now);
    if (zustand == LOW) {
      zustand = HIGH;
      digitalWrite(7, HIGH);
    } else {
      zustand = LOW;
      digitalWrite(7, LOW);
    }
  }
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.