Attiny85 Power Supply

Hallo,
ich habe vor kurzem mit meinem Arduino den Attiny85 programmiert. Jetzt will ich den Attiny85 unabhängig von der Stromquelle (+5V) des Arduinos betreiben. Da ich kein Fan von Batterien bin, hab ich mir überlegt, ein USB-Kabel als Stromquelle zu verwenden (dies stellt 5V als Eingangsspannung zur Verfügung). Der Attiny85 hat eine Stromaufnahme von 1.8 - 5.5V.

Bevor ich allerdings meinen Attiny85 daran anschließe, wollte ich eure Meinung hören, bevor doch noch schwarzer Rauch aufsteigt :slight_smile:

Vielen Dank und Grüße,
UnoRookie

UnoRookie:
Der Attiny85 hat eine Stromaufnahme von 1.8 - 5.5V.

Volt sind Spannung, nicht Strom.

Die notwendige Spannung hängt vom Takt ab, den Du mit den Fuses einstellst, siehe Datenblatt. Ausgeliefert wird der ATtiny mit 8 1 MHz intern, da sind 5 V goldrichtig.

Wenn Dein “USB-Kabel” jetzt auch noch genügend Strom (in Ampere) liefert, dann sollte es funktionieren.

EDIT: Frequenz

agmue:
...Ausgeliefert wird der ATtiny mit 8 MHz intern, da sind 5 V goldrichtig.

Ohne Änderungen der Fuse-Bits ist der ATtiny85 bei Auslieferung auf 1MHz eingestellt.
Dieser kann dann per Fuse-Bits (aus der IDE mit Bootloader) auf 8 MHz oder auch per Anpassung des Vorteilers im Sketch änderbar.

Hallo,

ich hab die Internal Clock bei der Arduino IDE auf 8 MHz eingestellt. Die Option Bootloader brennen hab ich nicht gebraucht, hab nur

  • als Board den Attiny85 ausgewählt,
  • Clock auf 8 MHz eingestellt,
  • ArduinoISP upgeloaded auf den Arduino
  • und anschließend nen simplen Blink-Sketch einer LED an Pin 4 des Attiny85 upgeloaded,
    was auch alles funktioniert hat (bis auf die Tatsache, dass delay(100) statt delay(1000) beim Attiny85 eine Sekunde warten bedeutet :slight_smile:

Dann müssten doch die 5V passen, oder ?

Wenn Dein "USB-Kabel" jetzt auch noch genügend Strom (in Ampere) liefert, dann sollte es funktionieren.

Puh, das muss ich erst mal mit dem Voltmeter messen. Hab ein USB-A- zu USB-A Kabel abgeschnitten und die Voltzahl gemessen. Die Stromabgabe (also Ampere) hab ich noch nicht gemessen.

UnoRookie:
...
ich hab die Internal Clock bei der Arduino IDE auf 8 MHz eingestellt. Die Option Bootloader brennen hab ich nicht gebraucht, hab nur

  • als Board den Attiny85 ausgewählt,
  • Clock auf 8 MHz eingestellt,

Damit wird der interne Takt nicht geändert, nur mit den Fuse-Bits oder per Vorteiler im Sketch.

Du solltest dringend das Datenblatt lesen, damit du es auch verstehst.

  • ArduinoISP upgeloaded auf den Arduino
  • und anschließend nen simplen Blink-Sketch einer LED an Pin 4 des Attiny85 upgeloaded,
    was auch alles funktioniert hat (bis auf die Tatsache, dass delay(100) statt delay(1000) beim Attiny85 eine Sekunde warten bedeutet :slight_smile:

Das sagt schon aus, dass deine interne Frequenz nicht stimmt.
Wenn du nicht die richtigen Fuse-Bits (per Bootloader) setzt, arbeitet der mit 1 MHz intern.

Dann müssten doch die 5V passen, oder ?Puh, das muss ich erst mal mit dem Voltmeter messen. Hab ein normales USB-A-Kabel abgeschnitten und die Voltzahl gemessen. Die Stromabgabe (also Ampere) hab ich noch nicht gemessen

Ein PC liefert am USB normalerweise 0,5 A, sollte also auch passen, wen du keine weiteren großen Verbraucher dran hast.

Hallo,

1MHz deshalb, weil standardmäßig die Fuse DIV/8 gesetzt ist. Wer nackte µC verwendet muss sich mit der Fuse Einstellung befassen.

HotSystems:
Ohne Änderungen der Fuse-Bits ist der ATtiny85 bei Auslieferung auf 1MHz eingestellt.

Habe schon lange keinen neuen mehr gekauft, sind mir inzwischen zu teuer :frowning:

Danke für die Korrektur.

UnoRookie:
Die Option Bootloader brennen hab ich nicht gebraucht, ...

In der IDE ist "Bootloader brennen" und "Fuse setzen" eine Aktion, brauchst Du doch. Je nach Installation wird ein leerer Bootloader gebrannt.

Hallo,
vielen Dank für eure zahlreichen Antworten.

In der IDE ist “Bootloader brennen” und “Fuse setzen” eine Aktion, brauchst Du doch. Je nach Installation wird ein leerer Bootloader gebrannt.

Ja, das muss ich noch machen. Die “Bootloader brennen” Aktion hat mich bisl verwirrt, da ich von dem Bootloader eines Betriebssystems ausgegangen bin.

Das sagt schon aus, dass deine interne Frequenz nicht stimmt.

Wobei das doch heißen müsste, dass die Taktfrequenz intern schon auf 8 MHz gesetzt ist, oder? Beim Arduino, der 16MHz hat, dauert ein delay(1000) eine Sekunde und beim Attiny85 mit 8MHz betrieben, dann delay(100). Müsste doch stimmen, oder ?

Hallo,

das delay soll doch unabhängig vom µC Takt immer richtig sein. Ein delay(1000) soll demnach immer eine Sekunde sein. Egal ob 16MHz oder 8MHz. Bei dir ist schon der interne 8MHz Oszillator aktiv. Aber zusätzlich noch der Vorteiler 8. Deswegen taktet dein ATtiny real mit 1MHz statt mit 8MHz.

Laut deiner falschen Rechnung mit 8MHz müßte das delay(500) sein um auf 1s. zukommen. Ist aber alles Unfug. Ohne Fuseanpassung stimmt gar nix was machst. Geht mit der seriellen weiter.

Doc_Arduino:
Deswegen taktet dein ATtiny real mit 1MHz statt mit 8MHz.

Laut deiner falschen Rechnung mit 8MHz müßte das delay(500) sein um auf 1s. zukommen. Ist aber alles Unfug. Ohne Fuseanpassung stimmt gar nix was machst. Geht mit der seriellen weiter.

Falsch :slight_smile:

Die IDE nimmt an, 8MHz. Real: 1 MHz weil Vorteiler / 8

Wenn der Taktgeber einigermaßen genau rennt, dann sollte 1000 / 8 = 125 passen.

delay(125); = 1 Sekunde

Gruß, Katsumi

agmue:
Habe schon lange keinen neuen mehr gekauft, sind mir inzwischen zu teuer :frowning:

Danke für die Korrektur.In der IDE ist "Bootloader brennen" und "Fuse setzen" eine Aktion, brauchst Du doch. Je nach Installation wird ein leerer Bootloader gebrannt.

Aber gerne doch.
Ok, der Preis ist im Verhältnis zu fertigen Pro Mini Clone recht hoch. Allerdings für kleine Projekte, wo der Platz knapp ist, sind die bisher ungeschlagen und da gebe ich das Geld gerne aus.
Mein aktuelles Projekt sind per Bewegungssensor gedimmte Led-Strips für den Kleiderschrank. Ideal für den ATtiny85.
Alles andere wäre zu groß.

@UnoRookie
Bootloader ist hier eigentlich der falsche Begriff, da tatsächlich keine Software geflasht wird, wie beim Uno, sondern nur die Fuse-Bits.

Der Berechnungsfehler tritt nicht nur bei delay() auf!
Sondern auch die Baudrate, ADC , SPI und I2C Takt werden falsch berechnet.
Auch so zeitkritische Dinge wie WS2801 LEDs, der Thermosensor DS18B20, usw, werden versagen.

Und diese Probleme will man doch alle nicht!

Puh, jetzt wird die Liste lang, also :

Nochmals meinen besonderen Dank an

  • agmue
  • combie
  • Doc_Arduino
  • HotSystems
  • Katsumi_S

für eure Beiträge !!

(nach dem Alphabet geordnet :slight_smile: )

Ich hoff ich hab jetzt keinen vergessen :o . Falls ja, bitte bei mir beschweren.

Werd das ganze dann heute Abend mit Bootloader brennen übernehmen.

Viele Grüße an euch,
Uno_Rookie

HotSystems:
Mein aktuelles Projekt sind per Bewegungssensor gedimmte Led-Strips für den Kleiderschrank. Ideal für den ATtiny85.

Erst wollte ich nicht glauben, daß das geht, aber ich habe es ausprobiert, es funktioniert :slight_smile:

HotSystems:
@UnoRookie
Bootloader ist hier eigentlich der falsche Begriff, da tatsächlich keine Software geflasht wird, wie beim Uno, sondern nur die Fuse-Bits.

Das kommt drauf an. Auf meinem PC mit ATTiny Core gibt es empty_all.hex (28 Bytes) und optiboot_attiny85.hex1) (7216 Bytes). Je nach Auswahl in der IDE wird der Optiboot-Bootloader oder ein "leerer"2) zusammen mit den Fuse-Bits übertragen.


  1. Dieser steht nun bei mir gerade bei unsupported, aber für andere ATtiny kann ich den Optiboot auswählen.

  2. Irgendwas steht da drin, möglicherweise ein Sprung oder ein Sprungvektor oder die Adresse eines Sprungvektors, aber eben nicht die Funktionalität eines Bootloaders.

agmue:
Erst wollte ich nicht glauben, daß das geht, aber ich habe es ausprobiert, es funktioniert :slight_smile:

Was hast du probiert bzw. was funktioniert ?

Das kommt drauf an. Auf meinem PC mit ATTiny Core gibt es empty_all.hex (28 Bytes) und optiboot_attiny85.hex1) (7216 Bytes). Je nach Auswahl in der IDE wird der Optiboot-Bootloader oder ein "leerer"2) zusammen mit den Fuse-Bits übertragen.


  1. Dieser steht nun bei mir gerade bei unsupported, aber für andere ATtiny kann ich den Optiboot auswählen.

  2. Irgendwas steht da drin, möglicherweise ein Sprung oder ein Sprungvektor oder die Adresse eines Sprungvektors, aber eben nicht die Funktionalität eines Bootloaders.

Ja, davon habe ich auch gelesen, aber der Standard ist wohl ohne die genannten “Funktionalitäten”.

HotSystems:
Was hast du probiert bzw. was funktioniert ?

Meine neun PTH_RGB_LED_WS2812 (siehe Avatar) habe ich an einen ATtiny85 angeschlossen. Es hat mich beeindruckt, daß es funktioniert.

HotSystems:
Ja, davon habe ich auch gelesen, aber der Standard ist wohl ohne die genannten "Funktionalitäten".

Hier im Forum tauchen auch immer mal Fragen zu Adafruit Trinket und vergleichbaren auf, welche einen Bootloader verwenden. Daher wollte ich nur darauf hinweisen, daß es ATtinys mit und ohne Bootloader gibt. Selbst habe ich sie allerdings nur ohne verwendet, mein Arduino UNO mit Nullkraftsockel erledigt die Programmübertragung bestens.

Hallo,
also ich hab jetzt den Bootloader auf den ATtiny85 gebrannt (mit 8 MHz) und jetzt funktioniert delay(1000) auch einwandfrei.
Anschließend habe ich den Takt des ATtiny85 wieder zurück auf 1 MHz gesetzt und den Bootloader wieder gebrannt, was zwar funktioniert, aber den Takt anscheinend nicht wieder zurück auf die 1 MHz setzt.
Die Einstellungen liegen auf dem Bildschirmfoto unten vor.
Hab es so nochmal gebrannt, den Sketch nochmal hochgeladen und der ATtiny85 scheint weiterhin mit 8 MHz zu laufen, anstatt wie eingestellt, mit 1 MHz.
Wo liegt der Fehler ?

P.S. : Über Sinn und Unsinn, die MHz-Zahl wieder zurückzusetzen, kann man jetzt streiten, mir gehts nur darum zu verstehen.

Vielen Dank,
UnoRookie

Du könntest mal prüfen, ob die Fuses in der boards.txt korrekt eingetragen sind.
Denn die IDE tut das, was da eingetragen ist

Da könnte der Fuse Calculator helfen. Bitte beachte den roten Hinweis.

Bei mir steht in der boards.txt:

attinyx5.menu.clock.8internal=8 MHz (internal)
attinyx5.menu.clock.8internal.bootloader.low_fuses=0xE2
attinyx5.menu.clock.8internal.build.f_cpu=8000000L

attinyx5.menu.clock.1internal=1 MHz (internal)
attinyx5.menu.clock.1internal.bootloader.low_fuses=0x62
attinyx5.menu.clock.1internal.build.f_cpu=1000000L

agmue:
Meine neun PTH_RGB_LED_WS2812 (siehe Avatar) habe ich an einen ATtiny85 angeschlossen. Es hat mich beeindruckt, daß es funktioniert.

Ok, alles klar.

Hier im Forum tauchen auch immer mal Fragen zu Adafruit Trinket und vergleichbaren auf, welche einen Bootloader verwenden. Daher wollte ich nur darauf hinweisen, daß es ATtinys mit und ohne Bootloader gibt. Selbst habe ich sie allerdings nur ohne verwendet, mein Arduino UNO mit Nullkraftsockel erledigt die Programmübertragung bestens.

Stimmt, diese Teile haben ja auch einen USB-Anschluss zum flashen, da geht es nicht ohne.
Das trifft auf meine Projekte nicht zu, somit brauche ich diese Bootloader sicher nicht. :wink: