Bootloader bei Attiny

Hallo,

ich benötige malwieder Hilfe. Ich möchte gerade mit meinem Arduino Mega 2560 einen Attiny45(20Mhz) programmieren.
Soweit funktioniert alles. Das Problem ist, dass die delay-Funktion falsch ist. Sprich wenn ich eine LED an und ausschalte (im sekundentakt) dann dauert dass in wirklichkeit viel länger. Als Abhilfe habe ich gelesen, dass ich den Bootloader installieren soll.
Nachdem ich das gemacht habe, konnte ich aber meinen Attiny45 nicht mehr programmieren. Ich habe mir jetzt mehrere Attiny45 angeschafft und das verhalten getestet, bei allen Attinys bei denen der bootlaoder installiert wurde kann ich nichts mehr machen.

Woran kann das liegen und wie kann ich den Attiny einstellen, dass die delay(1000)-Funktion wirklich 1Sekunde wartet?

Kann ich die Attinys selbst widerherstellen, sodass diese wieder verwendbar sind oder benötigt man dazu etwas anderes als nur einen "Arduino"?

vielen Dank schonmal im vorraus!

Hi. Ich hatte mal dasselbe "Problem".
20 Mhz ist bisle overkill, meinst nicht?
Habe meine mit 8 Mhz am laufen. Selbst mit 1 Mhz hast du deine genaue 1Sec Delays.

Ich such mal den Thread....

Bitteschön: ATtiny 85 16Mhz - Deutsch - Arduino Forum

Vielen dank ich werde das gleich mal alles durcharbeiten :slight_smile: nein ich benötige diesen Takt, ich muss gerade ein Projekt machen bei welchem ich sozusagen in Echtzeit Daten erfassen muss (inkrementelle Sensoren) dazu möchte ich einen attiny verwenden, bzw versuchen ob dieser verwendet werden kann

mtr86084:
Woran kann das liegen und wie kann ich den Attiny einstellen, dass die delay(1000)-Funktion wirklich 1Sekunde wartet?

Die Taktgeschwindigkeit, für die der Sketch kompiliert wird, steht in der "boards.txt" Datei bei dem Eintrag Deines Boards.

boardbezeichnung.build.f_cpu=8000000L

Wenn Du da als f_cpu die falsche Taktrate stehen hast, wird das Programm auch für die falsche Taktrate kompiliert.

Das Board muss mit derselben Taktrate takten, für die der Sketch kompiliert wurde - dann klappt's auch mit dem delay.

nochmals danke,

also wenn ich die taktgeschwindigkeit in der board.txt auf 16 000 stelle (also die meines arduinos) dann funktioniert es immer noch nicht richtig, oder habe ich da etwas falsch verstanden?

In dem Link von mir, hat Stefan (Eisebaer) in Post#3 zwei verschiedene Dateien gepostet. das eine läuft mit 16Mhz das andere mit 20Mhz. die mit 16Mhz hatte ich getestet, da ich kein 20Mhz Quarz hab, konnte ich die andere nicht testen.

in der board.txt auf 16 000 stelle (also die meines arduinos)

Nicht die deines Arduinos, sondern die, welches du Programmieren willst (vom Tiny), kommt die Geschwindigkeit da rein.

mmh ok, diese board.txt - datei verwende ich schon die ganze zeit, darum dachte ich ich muss nochmal etwas ändern damit es klappt, aber scheinbar ist die datei richtig und der fehler liegt irgendwo anders.
Vermutlich liegt es daran dass ich den bootloader nicht mehr draufinstallieren kann, und wenn es klappt geht der attiny nicht mehr, und die fuses neu zu setzen bekomm ich irgendwie noch nicht so ganz hin

mtr86084:
Vermutlich liegt es daran dass ich den bootloader nicht mehr draufinstallieren kann, und wenn es klappt geht der attiny nicht mehr, und die fuses neu zu setzen bekomm ich irgendwie noch nicht so ganz hin

Beim Verwenden der Arduino-Software werden die Fuses immer dann gesetzt, wenn Du die Funktion "Bootloader installieren" verwendest.

Dabei kannst Du den Atmega vom Prinzip her so "verfusen", dass er nicht mehr funktioniert. Wenn der Controller sich nach Verwendung von "Bootloader installieren" nicht einmal mehr mit einem Programmer neu programmieren läßt, dann kontrolliere die Fuses! Welche Fuses stehen in der Boards.txt und welche sollten entsprechend des Systemtaktes (intern/externer Quarz) gesetzt sein?

Insbesondere muß das Augenmerk darauf liegen, dass der Systemtakt nicht verfused wird. Im Originalzustand ab Werk sind die Controller-Fuses so gesetzt, dass die Controller mit internem Takt laufen. Bei den Atmegas mit 8 MHz internem Takt. Bei den Attinys weiß ich nicht. Wenn Du jetzt den Takt auf "externen Quarz" ("External Full Swing Oszillator") setzt, braucht der Controller danach einen Schwingquarz in der Schaltung, um zu funktionieren.

Und wenn Du irgendwelche falschen Fuses setzt, wie zum Beispiel versehentlich "External Clock" statt "External Full Swing Oszillator", dann kann es möglicherweise schwierig werden, das wieder hinzubekommen, ohne einen sehr, sehr speziellen "High Voltage Programmer" zu verwenden, um den Controller wieder in den Auslieferungszustand zu versetzen.

skorpi08:
Danke Stefan!

Für alle anderen hier ne Anleitung die man von oben nach unten abarbeiten sollte
ATtiny -> Arduino
VCC(+) -> +5V
Pin2 (Analog Input 1, SCK) -> Pin13
Pin1 (PWM, MISO) -> Pin12
Pin0 (PWM, AREF, MOSI) -> Pin11
Pin3 (XTAL1/PB3) -> Pin9
(-) GND -> GND
Reset -> Pin10

Aufs Arduino ladet man diesen Sketch: ArduinoISP2

In der Arduino IDE stellt man folgendes ein:
Programmer-->ArduinoISP
Board-->// In meinem Fall ist es ein// ATtiny85 @ 8Mhz (internal oszillator; BOD disabled)

Und schon kann man getrost weiter basteln.

Wichtig ist der Pin9

vielen dank nochmal, den sketch hab ich schon nen weilchen vor mir bin aber als einsteiger noch unsicher wie ich den auf den mega2560 machen soll, also bezüglich der anschlüsse

Nur mal so eine Frage am Rande. Du hast schon einen 20MHz Kristall/Resonator/Oszillator? Die 20MHz schafft der ATTiny nicht alleine, und wenn Du ihm die Fuses so setzt, dass er mit 20MHz schwingen soll, und gibst ihm keine Schwingung vor, dann tut er nichts mehr.

Grüße,

Sven

Nein, so einen Kristall besitze ich nicht, ich wollte folgendes Projekt nachmachen:
http://www.sachsendreier.com/asw/clernen/arduinoasisp/arduinoasisp.html
das habe ich auch soweit geschafft, nur war mir die Sekunde zu lange zwischen dem Blinken weshalb ich einen Bootloader verwendet habe.

Mir fehlen zu diesem Thema leider sämtliche Grundlagen.

Na schön, dann haben wir doch Deinen Fehler gefunden. Bei dem Bild unter Punkt 5 (tolle Nummerierung af der Seite. 1. 2. 5. ;-)) sieht man toll, dass bei allen ATTinys mit 20MHz "external clock" davor steht. Das heißt, Du brauchst ein Quarz mit 20MHz. Bis Du das nicht hast, oder einen Hochvoltprogrammierer (da kommen wir dann später irgendwann dazu) wird der Tiny nichts mehr tun. Der Tiny schafft mit seinem internen Taktgeber nur maximal 8MHz. Wenn Du ihn mit 20MHz betreiben willst muss an XTAL1 und XTAL2 ein Quarz angeschlossen werden Das sind PIN2 und 3. Siehe hier: http://www.wvshare.com/img/pinout/ATtiny45_l.jpg
Diese Pins kannst Du dann auch für nichts anderes mehr verwenden. Wie man ein Quarz anschliest (da braucht es dann noch Kondensatoren dazu) sagt Dir Google, da müsste ich jetzt nämlich auch erst nachschauen, bevor ich Blödsinn erzähle.

Grüße,

Sven

Noch was. Du musst den Bootloader passend aufspielen. Wenn Du als Board mit 20MHz wählst, aber der Chip mit 1MHz bespielt wurde, dann wird er falsche Zeiten haben. Dann wird er viel zu langsam blinken. Also Bootloader mit 1MHz aufspielen, dann den Sketch drauf, imer noch mit 1MHz ausgewählt. Sonst passiert das mit den falschen Zeiten.

Kurz zur Erklärung, der Bootloader hat eigentlich mit der ganzen Sache nix zu tun. Das ist leider etwas verwirrend. Die Arduino IDE kann beim "normalen" Programmieren keine Fuses setzen. Auch nicht, wenn man einen Programmer (in diesem Fall den Arduino Mega) verwendet. Die Fuses legen aber u.a. fest mit welche Taktrate der Tiny betrieben wird und ob er den internen Oszillator oder einen externen Taktgeber verwenden soll.
Beim Vorgang "Bootloader installieren" werden die gemäß ausgewählten Eintrag aus der boards.txt festgelegten Fuses aber gesetzt, da das Tool "avrdude" dann mit den entsprechenden Parametern von der IDE aufgerufen wird. Der Bootloader selbst wird dabei nicht installiert, zumindest nicht auf den ATTinys. Zumal die meisten davon gar keine serielle Schnittstelle in Hardware haben und daher ein Bootloader nicht viel bringen würde. Wenn der RAM überhaupt ausreicht.

Zu dem Effekt mit den Zeiten. In der boards.txt sind diverse Basisdaten gespeichert. Unter anderem auch der entsprechende Grundtakt mit dem der ATTiny dann mit den Einstellungen (Fuses) betrieben werden soll. Aus diesem Wert, der nur eine reine Festlegung ist und erstmal nichts mit dem tatsächlich verwendeten Takt zu tun hat, werden dann alle möglichen Timings abgeleitet. Z.B. wieviele Takte ein delay(xxx) dauert.

Die meisten ATTinys sind im "Rohzustand" auf 1 MHz Taktfrequenz mit dem internen Oszillator eingestellt. Demzufolge wird eine im Sketch festgelegte Taktfrqeunz von 16 MHz (oder bei Dir 20 MHz) dazu führen, das alle Timings so berechnet werden, als ob der Tiny mit 20 MHz laufen würde. Läuft er aber nur mit 1 MHz, dann stimmt diese Zuordnung nicht und ein delay(1000) dauert 20 Mal so lange, also 20 Sekunden.
Die Angabe bei den ATTinys von 20Mhz, 16MHz oder 10 MHz bezieht sich auf die maximale Taktfrequenz mit der man den Chip betreiben kann, ohne das es Probleme gibt. Mit dem internen Oszillator sind aber maximal (wie oben schon geschrieben) 8MHz möglich und die sind auch noch ziemlich ungenau.

Ich hoffe das bringt ein wenig Licht ins Dunkle :slight_smile:

Mario.

Soweit alles ok, aber gerade die Tiny's können einen internen Takt von 16MHz haben. Das ist eine besonderheit bei den Tiny's.

Aus dem Handbuch von Atmel über die x5er Attinys

6.1.5 Internal PLL for Fast Peripheral Clock Generation - clk
PCK
The internal PLL in ATtiny25/45/85 generates a clock frequency that is 8x multiplied from a source input. By
default, the PLL uses the output of th
e internal, 8.0 MHz RC oscillator as
source. Alternatively, if bit LSM of
PLLCSR is set the PLL will use the outpu
t of the RC oscillator divided by two

Das ist der Normalfall.

Ich finde die Seite gerade nicht aber man kann mit ner Fast Port Manipulation auf einem Attiny auch einen Clocktakt genereieren den dann auf den verfusedten Attiny verbinden und den wenigstens zurückfusen (soweit ich weiß braucht es dann aber einen ISP Programmer der automatisch variable Programmiergeschwindigkeiten kann).
Ansonsten ein 20Mhz Quarz besorgen und zwei 20pf Kerkos.
Schau mal hier hiflt evtl. weiter.
http://www.instructables.com/id/Arduino-attiny8545-ISP-shield-debug-help/3/?lang=de

Was versteht man unter verfusedten Attiny? Wenn man den Bootloader für 20Mhz installiert und kein 20Mhz hat?
Dann ist doch meine Anleitung genau die richtige und einfachste Lösung in diesem Fall.