V1.7 20.2.2024
ANLEITUNG µC programmieren (USBasp Programmer wird benötigt)
leere oder fertige gelötete Platine, modifiziertes RAK18001, Raspi OS Image anfragen
Installation der Arduino IDE und Nutzung mit dem ATtiny13
Diese Schritt-für-Schritt-Anleitung zeigt Ihnen, wie Sie die Arduino IDE installieren, die Board-Bibliothek für den ATtiny13 einbinden und einen Code mit einem USBasp-Programmer kompilieren und hochladen.

1. Arduino IDE herunterladen und installieren
- Besuchen Sie die Arduino-Website: https://www.arduino.cc/en/software
- Laden Sie die Version der Arduino IDE herunter, die zu Ihrem Betriebssystem passt (Windows, macOS oder Linux).
- Installieren Sie die Arduino IDE:
- Windows: Führen Sie die heruntergeladene .exe-Datei aus und folgen Sie den Anweisungen.
- macOS: Ziehen Sie die Arduino-Anwendung in den Ordner „Programme“.
- Linux: Entpacken Sie das Archiv und folgen Sie der Dokumentation für Ihr System.
2. Board-Bibliothek für den ATtiny13 einbinden
- Starten Sie die Arduino IDE.
- Öffnen Sie das Menü Datei > Voreinstellungen.
- Fügen Sie im Feld Zusätzliche Boardverwalter-URLs folgende URL ein:
https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json
(Falls bereits andere URLs eingetragen sind, trennen Sie diese mit einem Komma.)
- Bestätigen Sie mit OK.
- Gehen Sie zu Werkzeuge > Board > Boardverwalter.
- Suchen Sie nach „attiny“.
- Wählen Sie die MicroCore-Bibliothek von MDUdude aus und klicken Sie auf Installieren.
3. Board und Programmer einstellen
- Gehen Sie zu Werkzeuge > Board > Microcore und wählen Sie „ATtiny13“ aus.
- Stellen Sie die folgenden Optionen ein:
- Prozessor: ATtiny13
- Takt: 1.2 MHz (Interner Oszillator)
- Programmer: USBasp slow
4. USBasp-Programmer einrichten

- Verbinden Sie den USBasp-Programmer mit Ihrem Computer.
- Schließen Sie den ATtiny85 an den USBasp an:
USBasp Programmer bei Amazon
Besorgen sie sich am Besten auch ein Steckboard und Jumperkabel m/f (männl auf weibl). - Hinweise:
VCC und GND müssen korrekt verbunden werden, um den Mikrocontroller mit Strom zu versorgen.
Die Pins MOSI, MISO, SCK, und RESET stellen die SPI-Schnittstelle dar, die für die Programmierung genutzt wird.
Stelle sicher, dass die Spannung des USBasp (meist 5V oder 3,3V) mit der Versorgung des ATtiny13 kompatibel ist.
Achten sie auf die korrekte Ausrichtung (der kleine Punkt am µC Gehäuse markiert PIN 1).
5. Testcode schreiben und kompilieren
Schreiben Sie Ihren Code in der Arduino IDE oder verwenden Sie ein Beispiel
Dieser Code lässt ein LED an PIN7 blinken (LED mit 220 Ohm Vorwiderstand versenden)
void setup() {
pinMode(0, OUTPUT); // PB0 (Pin7) als Ausgang setzen
}
void loop() {
digitalWrite(0, HIGH); // einschalten
delay(1000); // 1 Sekunde warten
digitalWrite(0, LOW); // ausschalten
delay(1000); // 1 Sekunde warten
}
- Klicken Sie auf das Haken-Symbol („Übersetzen“), um den Code zu kompilieren. Prüfen Sie, ob es Fehler gibt.
6. Code auf den ATtiny13 hochladen
- Gehen Sie zu Werkzeuge > Bootloader brennen, um den Takt des ATtiny13 einzustellen (nur einmal erforderlich).
- Klicken Sie auf das Pfeil-Symbol („Hochladen“), um den Code auf den ATtiny13 zu übertragen.
- Die Arduino IDE zeigt „Hochladen abgeschlossen“, sobald der Vorgang erfolgreich war.
Hinweise:
- Falls es Probleme mit dem USBasp gibt, installieren Sie die entsprechenden Treiber. Unter Windows können Sie z. B. den „zadig“-Treiber-Installer verwenden.
Mit dieser Anleitung sollten Sie erfolgreich Ihren ATtiny85 programmieren können. Viel Erfolg!
Erstellen sie nun in der Arduino IDE ein neues Projekt und fügen sie den Code ein. Überrüfen sie die Einstellungen Board und Programmer.
Compilieren sie den Code und spielen sie ihn auf den Attiny13 hoch.
Setzen sie den fertig programmieren µC in den IC-Sockel auf ihrer elektronischen Schaltung.
Achten sie auf die korrekte Ausrichtung (der kleine Punkt am µC Gehäuse markiert PIN 1).
Programmcode ATtiny13
//Fernupdate //Fernupdate V1.7 20250224
// ATTINY13 mit HFD2-003 bistabiles Relais
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define WAKEUP_PIN 2 // PWM Signal vom RAK18003 | ATTINY13 PIN7=PB2
#define START_PIN_1 3 // Relais SET = Raspi ein | ATTINY13 PIN2=PB3
#define START_PIN_2 4 // Relais RESET = Raspi aus | ATTINY13 PIN3=PB4
#define SLEEP_PIN 0 // Erwartet GPIO Signal vom Raspi | ATTINY13 PIN5=PB0
volatile uint8_t pwm_pulses = 0; // Zählt WAKEUP_PIN HIGH
volatile uint8_t sleep_pulses = 0; // Zählt SLEEP_PIN HIGH
void setup()
{
// Setze Pins als Ein- oder Ausgänge
DDRB |= (1 << START_PIN_1); // Ausgang
DDRB |= (1 << START_PIN_2); // Ausgang
DDRB &= ~(1 << SLEEP_PIN); // Eingang
DDRB &= ~(1 << WAKEUP_PIN); // Eingang
// Setze Ausgangszustände
PORTB &= ~(1 << START_PIN_1); // LOW
PORTB &= ~(1 << START_PIN_2); // LOW
PORTB |= (1 << WAKEUP_PIN); // Pull-up Widerstand aktivieren
PCMSK |= (1 << PCINT2); // Aktiviert den Interrupt für Pin 2 (WAKEUP_PIN)
PCMSK |= (1 << PCINT0); // Aktiviert den Interrupt für Pin 0 (SLEEP_PIN)
GIMSK |= (1 << PCIE); // Aktiviert Pin Change Interrupts für Port B
sei();// Schalte globale Interrupts ein
// Beginne im Schlafmodus (Schlafmodus aktivieren)
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_enable();
sleep_mode(); // Hier geht der Mikrocontroller in den Schlafmodus
}
void loop()
{
PORTB &= ~(1 << START_PIN_1); // LOW
if (bit_is_set(PINB, SLEEP_PIN)) // Prüfen, ob der SLEEP_PIN HIGH ist
{
delay(60000); // 60 Sekunden warten
PORTB &= ~(1 << START_PIN_1); // LOW
PORTB |= (1 << START_PIN_2); // HIGH
delay(300);
PORTB &= ~(1 << START_PIN_2); // LOW
pwm_pulses = 0;// Zähler zurücksetzen
sleep_enable(); // Aktiviert den Schlafmodus
sleep_mode(); // Geht wieder in den Schlafmodus
}
}
// Interrupt Service Routine für den externen Interrupt Pin
ISR(PCINT0_vect)
{
// Prüfen, ob SLEEP_PIN von LOW auf HIGH gewechselt ist
if (bit_is_set(PINB, SLEEP_PIN))
{
// Wenn der SLEEP_PIN HIGH ist, Zähler erhöhen
sleep_pulses++;
if (sleep_pulses >= 2)
{
delay(60000); // warte 60 Sekunden bis zum Ausschalten
// Raspi ausschalten, Relais RESET
PORTB &= ~(1 << START_PIN_1); // LOW
PORTB |= (1 << START_PIN_2); // HIGH
delay(500); // 0,5 Sekunden warten
PORTB &= ~(1 << START_PIN_2); // LOW
sleep_pulses = 0;
pwm_pulses = 0;// Zähler zurücksetzen
}
}
// Prüfen, ob WAKEUP_PIN auf HIGH gewechselt hat
if (bit_is_set(PINB, WAKEUP_PIN))
{
// PWM-Signal erkannt (Sekundentakt)
pwm_pulses++;
if (pwm_pulses >= 5) // Warte mindestens 5 Impulse, bevor gestartet wird
{
PORTB |= (1 << START_PIN_1); // HIGH setzen (Relais einschalten)
delay(500);
PORTB &= ~(1 << START_PIN_1); // LOW
}
}
}
leere oder fertige gelötete Platine, modifiziertes RAK18001, Raspi OS Image anfragen