Hallo Leute, Ich hab mir ein paar Attiny 13 zugelegt, die ich mit dem Arduino UNO wie in einer Anleitung programmieren will. Programmieren funktioniert soweit auch, es kommen keine Fehlermeldungen und LED ein und aus funktioniert soweit auch. Wenn es aber um delay,micros etc. Geht, tut er nicht was er machen soll. Lade ich zb. Das Arduino "Blink" Beispiel hoch, leuchtet die LED nur, und blinkt nicht. AnalogWrite,millis und delay funktionieren einfach nicht, daher denke ich, dass es ein Problem mit dem internen 9,6Mhz Oszillator bzw mit dem timer gibt. Was mache ich falsch? Liegt es am timer? Vielleicht kann mir ja jemand helfen, Mfg Christoph Hier die Verwendete Anleitung: http://m.instructables.com/id/Programming-an-ATTiny13A-using-Arduino-servo-int/
Sicher, dass du die Fuses richtig gesetzt hast? Ein neuer Attiny13 ist (denke ich, weil fast immer so) wahrscheinlich mit 1MHz getaktet Edit: Hab mir grade das Datenblatt angeschaut, der kommt ja schon mit 9,6MHz. Hast du diese Frequenz irgendwo in deinem Code erwähnt? Der Compiler kann das nämlich nicht erraten.
:
Bearbeitet durch User
Die Frequenz solltr in der Board Datei für den Attiny 13 erwähnt sein, somit sollte der Compiler das wissen. Ich habe Die Delay Zeiten im Code auch schon von 1ms bis 1000000 ms durchprobiert, und es tur sich nichts
Nils Friess schrieb: > Sicher, dass du die Fuses richtig gesetzt hast? Ein neuer Attiny13 ist > (denke ich, weil fast immer so) wahrscheinlich mit 1MHz getaktet > > Edit: Hab mir grade das Datenblatt angeschaut, der kommt ja schon mit > 9,6MHz. > Hast du diese Frequenz irgendwo in deinem Code erwähnt? Der Compiler > kann das nämlich nicht erraten. Normalerweise ist im Auslieferungszustand die DIV8-Fuse programmiert, das heißt, der Takt läuft mit 1,2 MHz.
Vielleicht liegts auch daran: der attiny13 hat nur 1K Programmspeicher. Schau mal nach, wieviel Code an .hex file aus dem Arduino-sketch erzeugt werden. Das bisschen Kilobyte des Attiny13 wird bei der speicherfressenden Programmiersprache eines Arduino (C oder so ähnlich) in Nullkommamix überschritten. Den Attiny13 sollte man nur per Assembler programmieren. Eigentlich sollte ja die Programmierumgebung des Arduino melden, dass 2 oder 3 kByte nicht in den Attiny13 passen.
Ich kann mir nicht vorstellen, dass bei einem einfachen LED-Blink-Programm schon 1 KByte voll sein sollen, selbst mit der komischen Arduino-Bibliothek. Ich hab hier auch nen Attiny mit 1KByte Flash und programmiere ausschließlich in C.
Zeig uns doch einfach mal deinen Code, vielleicht findet sich der Fehler ja dort irgendwo.
Also laut Arduino IDE Hat der Code nichtmal die Hälfte des verfügbaren Speichers. Dass Assembler Speicher sparender ist weiß ich, nur lernen wir in der Schule seit 2 Jahren C und erst seit einem halben Jahr programmieren wir via AVR Studio den Atmega 16. Assembler haben wir nur kurz gemacht, deshalb ist es für mit Arduino einfach leichter. Wie kann ich die Fuses bzw. den Takt auf 9,6Mhz umstellen? Ich denke nicht dass es am Code liegt, da die Codes die ich probiert habe auf einem Atmega328p tadellos laufen. Delay sollte ja unabhängig vom Chip funktionieren und bei jeder Taktfrequenz gleich lange für eine Millisekunde brauchen. Ausser der Prozessortakt stimmt nicht. Wo wir schon bei assemblee etc. waren, kann mir jemand leicht verständliche Literatur zum Erlernen von AVR programmieren empfehlen? Also um alles von Grund auf richtig zu verstehen.
Christoph Fuggersberger schrieb: > Wie kann ich die Fuses bzw. den Takt auf 9,6Mhz umstellen? > Ich denke nicht dass es am Code liegt, da die Codes die ich probiert > habe auf einem Atmega328p tadellos laufen. In der Arduino IDE unter Tools/Board den Attiny mit der "richtigen" Frequenz wählen. Danach Tools/Bootloader installieren wählen, damit sollte alles gesetzt sein. Welche Board-Datei hast du genau? (Link)
Christoph Fuggersberger schrieb: > Wo wir schon bei assemblee etc. waren, kann mir jemand leicht > verständliche Literatur zum Erlernen von AVR programmieren empfehlen? > Also um alles von Grund auf richtig zu verstehen. Ich kann dir das AVR-GCC-Tutorial hier auf Mikrocontroller.net empfehlen. Gibt auch ein AVR-Tutorial für Assembler, darin werden auch ganz grundlegende Dinge erklärt.
Also in der IDE habe ich "Attiny13 @ 9,6Mhz" eingestellt, das sollte also passn. Wenn ich den bootloader installiere blinkt die LED am UNO nur kurz und dann steht sofort "Bootloader wurde installiert". Innerhalb von einer halben Sekunde. Codes uploaden mit "Arduino as ISP" funktioniert aber normal und dauert seine Zeit. Das ist mein Board: http://www.amazon.de/gp/aw/d/B00G576SXU/ref=mp_s_a_1_sc_2?qid=1399439212&sr=8-2-spell&pi=AC_SX110_SY165_QL70 Danke für die Empfehlung, werde mir das gleich mal anschaun.
Markus Weber schrieb: > > Normalerweise ist im Auslieferungszustand die DIV8-Fuse programmiert, > das heißt, der Takt läuft mit 1,2 MHz. Der Einzige der hier den Tiny kennt. Markus, jedenfalls haben alle Tiny13, die ich von dir beziehe, den Vorteiler.
Noch ein kleiner Tipp, jetzt höre ich mich schon an wie mein lieber Freund cyblord, steige schnell um auf C und verschwende keine Zeit mehr mit der Arduino Sprache. Mit C bist du dann völlig unabhängig. Es ist eine tolles Erlebnis, wenn du den selben Code, nach Anpassung der Pins, in einen anderen uC lädst und er tut genau das gleiche. Ab da an willst du kein Arduino mehr.
Foldi schrob: >Es ist eine tolles Erlebnis, wenn du den selben Code, nach Anpassung der >Pins, in einen anderen uC lädst und er tut genau das gleiche. Ein noch tolleres Erlebnis ist, wenn der gleiche Code dann etwas völlig Anderes tut, man den ganzen Rotz in die Ecke wirft und von Neuem anfängt. ;-) mfG Paul
Hatte bis jetzt beim Umstieg von einem Controller auf einen anderen mit dem "selben" Code immer "Glück". Natürlich müssen hier und da ein paar Ports und Register angepasst werden, aber im großen und ganzen eine feine Sache "dieses C". :-P
Also ich werde einfach mal versuchn in C zu programmieren. Kann ich das Arduino board als hardware für AVR Studio etc. Verwenden? Und wie krieg ich einen Assembler bzw. C Code auf den attiny?
Im Atmel Studio kann man mit Plugins die Arduino Kits als Boards reinholen. Dann kennt das Atmel Studio die schonmal. Wie programmierst du denn jetzt? Bei den Arduinos ist der Programmer mit auf dem Board glaube ich. (Habe selbst keins, nur einzelne AVRs). vielleicht erkennt das Atmel Studio den Programmer mit dem Arduino Kit?
> Also in der IDE habe ich "Attiny13 @ 9,6Mhz" eingestellt, das sollte also passn. Nö, passt nicht. Solange du nicht an den Fuses rumgespielt hast, laufen alle von Atmel gelieferten Prozessoren (sofern sie über einen internen Takt verfügen) mit einer Taktfrequenz von rund 1Mhz. In deinem Fall sind es dann eben 1.2Mhz, weil der interne 9.6Mhz noch durch die CKDIV8 Fuse durch 8 geteilt wird. Aber grundsätzlich liegt die Taktfrequenz bei fabrikneuen AVR-Prozessoren immer in der Gegend von 1Mhz.
:
Bearbeitet durch User
Egal wie die CKDIV8-Fuse gesetzt ist... wenn du in deinen Initialisierungscode am Anfang diese Sequenz CLKPR = 10000000 CLKPR = 00000000 einbaust, hast du die 9,6 MHz zur Verfügung. Der obere Wert setzt das CKPCE-Flag, der untere enthält in den 4 Lower-Bits den codierten Teilerfaktor. "0" bedeutet Teiler = 1 (Also keine Teilung). Dort wo jetzt die 0000 steht, kannst du andere Werte einsetzen, um ein gewünschtes Prescaler-Setup und damit den Systemtakt einzustellen. Siehe Datenblatt S. 32/33. Die CKDIV8-Fuse selbst wird dadurch nicht verändert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.