Attiny 13 Clock Problem

Gast #3645435
Lesenswert?

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/
Gast #3645442
Lesenswert?

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.
Gast #3645484
Lesenswert?

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
(Firma: guloshop.de) #3645491
Lesenswert?

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.
#3645508
Lesenswert?

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.
Gast #3645513
Lesenswert?

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.
Gast #3645560
Lesenswert?

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.
Gast #3645608
Lesenswert?

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)
Gast #3645623
Lesenswert?

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.
Gast #3645812
Lesenswert?

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.
#3645830
Lesenswert?

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.
Gast #3645966
Lesenswert?

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
#3646134
Lesenswert?

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?
#3646156
Lesenswert?

> 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.
Gast #3646212
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren