Attiny13 bothloader brennen

Hallo da draussen,
habe mir heute beim Pollin einen Attiny13A gekauft und will damit eine simple LED Dimmersteuerung realisieren. leider bekomme ich den Bootloader nicht drauf.
Wo bekomme ich die Boarddatei her?

Was für eine IDE-Version verwendest du?
Du brauchst zuerst mal "Core-Dateien" für den ATtiny13. Welche und wie man die einbindet hängt von der IDE-Version ab.

Einen Bootloader gibt es für den ATtiny13 eigentlich nicht. Man kann mit der Arduino-IDE zwar den Befehl "Bootloader brennen" ausführen, aber dabei werden nur die Fuses gesetzt (das sind so grundsätzliche Einstellungen wie Taktrate etc.).
Aber prinzipell funktioniert es auch ohne extra Setzen von Fuses, weil es ab Werk schon eine Standardeinstellung gibt. Die Taktrate ist z.B. 1,2 MHz.
Aber um überhaupt ein Programm auf einen ATtiny zu bekommen brauchst du einen ISP-Programmer oder du kannst einen Arduino (z.B. UNO) als ISP-Programmer verwenden.

Edit:
Siehe z.B. hier Michaels Technik Hobby: Die Kleinen - ATtiny Chips im Arduino IDE
Das bezieht sich zwar nicht direkt auf den ATtiny13, aber der Programmiervorgang (und die Anschlüsse) sind genau gleich wie beim ATtiny85.

Bin gerade noch auf der Suche nach "Core-Dateien" für den ATtiny13A. Ich hab welche und ich verwende den ATtiny13 auch immer wieder, ich kann mich aber leider nicht mehr erinnern wo ich die her hab... :confused:

Für IDE-Version ab 1.6.x gäbe es z.B. hier: GitHub - Marzogh/ATtiny: ATtiny 13/44/84/45/85 cores for Arduino 1.6.x
ein Core für den ATtiny13(A).

vielen Dank für die schnelle Antwort
Bin den Anleitungen gefolgt und kann jetzt den Attiny13 auswählen.
bekomme jetz aber die Fehlermeldung:
"efuse" memory type not defined for part "ATtiny13"
Fehler beim Brennen des Bootloders.

Meine gegenwertige Hard- und Softwarekonfiguration sieht wie folgt aus:

  • Arduino Software 1.6.5
  • Platine Arduino UNO R3
  • Attiny13A

habe jetzt den Kondensator zwischen Reset und GND gegen den im Beispiel gezeigten Wiederstand gewechselt und der o.g. Fehler ist weg.
Leider bekomme ich jetzt einen neuen Fehler angezeigt:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03
Probleme beim Hochladen auf die Platine

Haste da ne Idee?

Ich nutze ATtiny 45, 85, 2313, 4313, aber 13A kenne ich nicht!

Gundelputz:
habe jetzt den Kondensator zwischen Reset und GND gegen den im Beispiel gezeigten Wiederstand gewechselt ...

Bei mir geht es mit Kondensator am UNO.

Gundelputz:
Haste da ne Idee?

Wenn ich auch darf: Mit "efuse" ist wohl "bootloader.extended_fuses" in boards.txt gemeint.

Hier gibt es die mit Wert 0xFF. Hier fehlt dieser Parameter, ebenso hier.

Wenn ich meine IDE auf geschwätzig stelle, bekomme ich diese Informationen (ATtiny 85 mit Blink-Sketch), mit denen Du vergleichen kannst:

Der Sketch verwendet 748 Bytes (9%) des Programmspeicherplatzes. Das Maximum sind 8.192 Bytes.
Globale Variablen verwenden 11 Bytes (2%) des dynamischen Speichers, 501 Bytes für lokale Variablen verbleiben. Das Maximum sind 512 Bytes.
C:\Program Files (x86)\Arduino165\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino165\hardware\tools\avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM6 -b19200 -Uflash:w:C:\Users\All\AppData\Local\Temp\build5257679189505670786.tmp/Blink.cpp.hex:i

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "C:\Program Files (x86)\Arduino165\hardware\tools\avr/etc/avrdude.conf"

Using Port : COM6
Using Programmer : stk500v1
Overriding Baud Rate : 19200
AVR Part : ATtiny85
Chip Erase delay : 400000 us
PAGEL : P00
BS2 : P00
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack


eeprom 65 12 4 0 no 512 4 0 4000 4500 0xff 0xff
flash 65 6 32 0 yes 8192 64 128 30000 30000 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00

Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0x1e930b
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 "C:\Users\All\AppData\Local\Temp\build5257679189505670786.tmp/Blink.cpp.hex"
avrdude: writing flash (748 bytes):

Writing | ################################################## | 100% 1.28s

avrdude: 748 bytes of flash written
avrdude: verifying flash memory against C:\Users\All\AppData\Local\Temp\build5257679189505670786.tmp/Blink.cpp.hex:
avrdude: load data flash data from input file C:\Users\All\AppData\Local\Temp\build5257679189505670786.tmp/Blink.cpp.hex:
avrdude: input file C:\Users\All\AppData\Local\Temp\build5257679189505670786.tmp/Blink.cpp.hex contains 748 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.85s

avrdude: verifying ...
avrdude: 748 bytes of flash verified

avrdude done. Thank you.

Wenn ich meine IDE auf geschwätzig stelle,

was meinst du damit?

egal was ich ausprobiere es kommt nach wie vor die Fehlermeldung:
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03

Den weggelassenen Kondensator halte ich für kritisch. Der soll ja beim Uno den Reset unterdrücken und damit den Uno-Sketch unberührt lassen. Also eher wieder draufpacken.

Bist Du auch sicher, dass die Verdrahtung stimmt?
Und dass Du den Tiny nicht schon "verfused" hast?

mit oder ohne Kondensator kein erfolg
sobald der Kondensator angeschlossen ist erhalte ich folgende Fehlermeldung:
"efuse" memory type not defined for part "ATtiny13"
ohne versucht er es 10x und brint diese Meldung:
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03
mit Wiederstand die gleiche.
Bei der beschaltung habe ich nun auch schon so ziemlich jede verfügbare Beschaltung versucht. Wenn du eine absulut 100% korrekte kennst lass mich es bitte wissen.

hier noch mal ein Bild von meinem Aufbau

Ich hab schon zig 13er Tinys programmiert mit meinem Uno, geht also grundsätzlich. Die Cores sind meist das Problem, also schau ich mal zuhause welche Cores mit welcher IDE Version funktionieren.

Oder klebst Du an einer speziellen IDE-Version fest?

Deine Plus-Versorgungsschiene hängt in der Luft :slight_smile:

hier noch mal.
Muss mich jetzt mal kurz reseten
wenn die schaltung so in Ordnung ist fange ich noch mal mit neuen Bauteilen an
nicht das hier ein Teil gelitten hat

Gundelputz:

Wenn ich meine IDE auf geschwätzig stelle,

was meinst du damit?

IDE Datei/Voreinstellungen/Hochladen mit Häkchen.

Lass das "Bootloader uploaden" mal weg. Es geht auch ohne.

Bei mir funktioniert das so:

Arduino (UNO) als ISP-Programmer
Falls kein ISP-Programmer zur Hand ist, kann auch ein Arduino (z.B. UNO) als ISP-Programmer benutzt werden.
Damit können andere ATmegas aber auch ATtinys programmiert werden.

1. ArduinoISP-Sketch auf den Arduino (UNO) laden
Ab Arduino IDE 1.0.1 gibt es einen Beispiel-Sketch “ArduinoISP”. Diesen öffnen und auf den Arduino laden (ganz normales Prozedere). Dadurch wird der Arduino (UNO) zum ISP-Programmer.

2. Arduino (= Programmer) mit dem Mikrocontroller verbinden, der programmiert werden soll

        Arduino (UNO) |  zu programmierender  |    
      ISP-Programmer  |    Mikrocontroller    |  z.B.: ATtiny 13/25/45/85
--------------------------------------------------------------------------
          D10 (SS) ............. Reset ........... IC-Pin 1
          D11 (MOSI) ........... MOSI ............ IC-Pin 5
          D12 (MISO) ........... MISO ............ IC-Pin 6
          D13 (SCK) ............ CLK ............. IC-Pin 7
          GND .................. GND ............. IC-Pin 4
          5V ................... VCC ............. IC-Pin 8

3. Programm (Sketch) für Ziel-Mikrocontroller schreiben
Unter Boards den jeweiligen µC auswählen mit der richtigen Taktrate. Für einen ATtiny13 ist das bei einem fabriksneuen Chip 1.2 MHz (in diesem Fall muss man keine Fuses setzen und braucht auch keinen "Bootloader uploaden").

4. Upload mit Programmer
Menü: Tools / Programmer / Arduino as ISP auswählen
Menü: Datei / Upload mit Programmer
(Hinweis: das Upload mit dieser Methode dauert etwas länger als gewöhnlich)

Ausser den oben erwähnten Verbindungen verwende ich nichts weiter (also keine Widerstände und auch keinen Kondensator) und das funktioniert bei mir gut (natürlich gibt es noch die USB-Verbindung vom Arduino UNO zum Computer).

Super.
Danke.

Upload hat funktioniert
habe folgenden Code übertragen:

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(3, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(3, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(3, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Diode mit Vorwiederstand an pin2 gelegt und siehe da sie leuchtet.
Leider blinkt sie aber nicht.
Muss ich noch nen externen Takt einspeisen. Habe bis her noch nichts gefunden was darauf hinweisen würde.

Super, dass jetzt zumindest der Upload funktioniert hat!

Nein, der ATtiny braucht keinen externen Takt. Er funktioniert mit seinem internen Taktgeber und "läuft" mit 1.2 MHz.

Ich glaube, du hast eigentlich alles richtig gemacht.

Ich muss vorausschicken, dass ich normalerweise zum Programmieren von ATtiny13 eine seeeehr alte IDE-Version verwende (nämlich 1.0.1. mit einem ebenso alten Core für den ATtiny), aber weil das gut funktioniert bleibe ich dabei - "never change a running team" :slight_smile: .

Bin jetzt (erst) dazu gekommen zuhause eine neuere "Konfiguration" auszuprobieren, nämlich mit den Core-Files von dem Link weiter oben (#2) und mit einer einigermaßen aktuellen Arduino-IDE-Version, nämlich 1.6.5.

Ich komme dabei zum selben Ergebnis wie du: mit deinem Test-Sketch leuchtet die LED auf PB3 (IC-Pin 2) nur - oder zumindest sieht es so aus. Denn wie mir mein Logic Analyzer verrät, wird die LED an PB3 in sehr schneller Folge ein- und ausgeschaltet, was dann für unsere Augen so aussieht, als würde sie ständig leuchten.

Das Problem ist der delay-Befehl. Anscheinend funktioniert der bei diesem Core mit dieser IDE-Version nicht so wie er soll .... aber wenn du es mal blinken sehen willst, kannst du alle

delay(1000);

durch

_delay_ms(1000);

ersetzen, dann funktioniert es (zumindest bei mir) und die LED blinkt im "Sekundentakt".
Ob es noch andere Probleme mit anderen Befehlen gibt weiß "man" nicht... :confused:

Warum das so ist, ist das große Fragezeichen, aber wie schon Klaus_ww in #10 meinte:

Ich hab schon zig 13er Tinys programmiert mit meinem Uno, geht also grundsätzlich. Die Cores sind meist das Problem, also schau ich mal zuhause welche Cores mit welcher IDE Version funktionieren.

Also diese Core (für den ATtiny13) funktioniert mit IDE 1.6.5. anscheinend nicht so ganz richtig.

Echt Super.
Vielen Dank.

Aber da kommen auch schon die nächsten beiden Fragen.

  1. Welche Befehle kann ich bein Tiny13 überhaupt verwenden?
  2. Mein Zielsketch sie wie folgt aus:
int led1 = 3;// LED an Pin2
int hell = 1;//Taster1 an Pin6
int dunkel = 0;//Taster1 an Pin5
int helligkeit;
int led2 = 4;//Maximale lechtkraft an pin3

void setup()
{    // put your setup code here, to run once:
pinMode(led1,OUTPUT);
pinMode(hell,INPUT);
pinMode(dunkel,INPUT);
pinMode(led2,OUTPUT);
}

void loop()
{  
  if(digitalRead(hell) == HIGH)
  {
    if(helligkeit <= 254)
    {
      helligkeit = helligkeit + 1;
    }
    else
    {
      helligkeit = 254;
    }
  }
    if(digitalRead(dunkel) == HIGH)
  {
    if(helligkeit >= 1)
    {
      helligkeit = helligkeit - 1;
    }
    else
    {
      helligkeit = 0;
    }
  } 
    if(helligkeit >= 250)
    {
      analogWrite(led2, 255);
    }
    else
    {
      analogWrite(led2, 0);
    }
  analogWrite(led1, helligkeit);
  _delay_ms(20);
}

Ich will eine LED mit hilfe von 2 Tastern dimmen. eine 2. LED soll mir zeigen ob der maximalwert erreichtist. Die Taster und die 2. LED funktioniren hier korrekt. Die zu dimmende LED leuchtet aber permanent. Kann es sein das der Tiny13 PWM nicht unterstützt bzw. der Code anders gestrickt sein muss?

Soweit mir bekannt ist, hat der ATtiny13 2 PWM Ports, welche, kann ich aktuell nicht sagen. Schau im Datenblatt nach.

Im Datenblatt habe ich zwar gefunden das PWM vorhanden ist da aber mein englisch sehr bescheiden ist kann ich nicht sagen welcher ausgang hier genutzt wird. Also Probieren geht über ...
Hab jetzt also herrausgefunden das pin1 zum dimmen geeignet ist aber nun nur noch der Taster an pin0 funktiniert.
Also schön weiter probiert und jeden verbleibenden Pin für den zeiten Taster ausprobiert.
Fazit für mich der Tiny13 ist so für diese Konfiguration nicht geinet.

Hat noch jemand ne Idee wie sich das Problem umgehen lässt?
ansonten noch mal vielen dank an alle für die Hilfestellung.