Ich habe mal eine Verständnisfrage zu den Fuses beim ATTiny85. Laut diverser Internettutorials kann man diesen auf einem internen Takt von 16,5 MHz laufen lassen, wenn man diese Fuses verwendet: http://eleccelerator.com/fusecalc/fusecalc.php?chip=attiny85&LOW=E1&HIGH=DD&EXTENDED=FE&LOCKBIT=2C Meine Frage: wie geht das? Ich sehe da zwar was von einem PLL-Clock, aber keinen zugehörigen Wert. Und bei den "LOW Fuse Presets" kann ich ansonsten nur interne 8 MHz auswählen, von 16,5 MHz weit und breit keine Spur. Also wo soll diese Frequenz herkommen, wenn kein externer Quarz vorhanden ist?
> diverser Internettutorials
Die erste Quelle sollte das Datenblatt sein, und dort findet sich unter
'Clock Sources' der Unterpunkt 'High Frequency PLL Clock'. Damit müsste
alles klar sein.
Ergänzen ließe sich allenfalls, dass man durch Verändern von OSCCAL
noch höher als die 16.0 MHz (8.0 * 8 / 4) kommt, dies ist allerdings
'not recommended'.
Hi http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf Kapitel 6 ab S.23 MfG Spess
Datenblatt lesen hilft. Unter "6.1.5 Internal PLL for Fast Peripheral Clock Generation - clk PCK": steht da z.B. The internal PLL is enabled when: • The PLLE bit in the register PLLCSR is set. • The CKSEL fuse is programmed to ‘0001’. • The CKSEL fuse is programmed to ‘0011’.
Squizzy schrieb: > Also wo soll diese Frequenz herkommen, wenn kein externer Quarz > vorhanden ist? Vom internen Oszillator, der mit 8MHz läuft und dann durch Zuschalten der PLL verdoppelt wird. Die richtigen Fuses habe ich jetzt nicht parat, aber es müssten CLKSEL und SUT sein. E1 für die LowFuse passt jedenfalls auch für den Tiny861, den ich gerade im STK500 stecken habe.
spess53 schrieb: > Hi > > http://ww1.microchip.com/downloads/en/DeviceDoc/At... > > Kapitel 6 ab S.23 > > MfG Spess Genau da komme ich aber nicht weiter. Die Beschreibung vom Link sagt: "The internal PLL is enabled when: • The PLLE bit in the register PLLCSR is set. • The CKSEL fuse is programmed to ‘0001’. • The CKSEL fuse is programmed to ‘0011’. " Wenn ich CKSEL0 und CKSEL1 in dem Fuse-Calculator aber auf 1 setze, steht dort was von "Ext. Crystal Osc" - also genau das Gegenteil von einem internen Clock!?
Squizzy schrieb: > Wenn ich CKSEL0 und CKSEL1 in dem Fuse-Calculator aber auf 1 setze, > steht dort was von "Ext. Crystal Osc" - also genau das Gegenteil von > einem internen Clock!? Du weißt schon, dass eine Fuse mit '0' als programmiert gilt?
Ein gesetztes Fuse ist 0. Dieser Fuse calculator macht eine 0 aus diesem Häkchen
:
Bearbeitet durch User
Andreas B. schrieb: > Ein gesetztes Fuse ist 0. Dieser Fuse calculator macht ein Häkchen aus > dieser 0 OK, das macht es jetzt nicht einfacher: Das Manual schreibt was von CKSEL=0001 - muss ich statt dessen tatsächlich 1110 setzen? Warum zum Geier werden die Bits nicht so beschrieben, wie sie gesetzt werden müssen sondern gerade umgekehrt?
Wenn im DB steht, da gehört eine 1 rein, dann ist das auch so gemeint. 0 heißt: Diese Option ist gesetzt. Im Fuse calculator steht dafür ein Häkchen. Schau Dir doch mal an, welche Bits im Fuse calculator gesetzt werden wenn Du ein Häkchen setzt.
Squizzy schrieb: > Warum zum > Geier werden die Bits nicht so beschrieben, wie sie gesetzt werden > müssen sondern gerade umgekehrt? Naja, weil eine gelöschte EE-Zelle halt 0xFF enthält. Dass man das Programmieren eines Bits als 'Setzen' bezeichnet und es dabei zu '0' wird, ist vermutlich dieser Tatsache geschuldet - und hat möglicherweise sogar historische Gründe.
OK, ich fürchte ich bin maximal verwirrt. Wenn ich LFuse auf 0xE1 setze, dann sind CKSEL1, CKSEL1 und CKSEL2 gesetzt - richtig? Weiterhin habe ich dann den internen Taktgenerator gesetzt, richtig? Wenn beides stimmt: welche Clock-Frequenz nutzt der ATTiny85 dann genau?
...ich meinte natürlich CKSEL1, CKSEL2 und CKSEL3 sind gesetzt...
DB Seite 25, Table 6-1. : High Frequency PLL Clock (see page 26) mit Verweis auf Seite 26: external clock. Sprich, wenn Du den PLL clock mit internen Takt verwenden willst, geht das nicht (nur) über die Fuses. Du mußt das PLLE Bit setzen.
:
Bearbeitet durch User
> Sprich, wenn Du den PLL clock mit internen Takt verwenden willst, > geht das nicht (nur) über die Fuses. Du mußt das PLLE Bit setzen. Das PLLE-Bit wird automatisch gesetzt bei entsprechendem Fuse-Low-Byte: "If PLL is selected as a system clock source the value for this bit is always 1"
S. Landolt schrieb: >> Sprich, wenn Du den PLL clock mit internen Takt verwenden willst, >> geht das nicht (nur) über die Fuses. Du mußt das PLLE Bit setzen. > > Das PLLE-Bit wird automatisch gesetzt bei entsprechendem Fuse-Low-Byte: > "If > PLL is selected as a system clock source the value for this bit is > always 1" PLL über die fuses zu setzen, geht aber nur mit externen Takt. Deshalb hat er sich den Tiny jetzt zerschossen. Siehe Beitrag "ATTiny85 - Fuses zurücksetzen?"
> PLL über die fuses zu setzen, geht aber nur mit externen Takt.
Das kann ich nicht bestätigen!
Squizzy schrieb: > OK, ich fürchte ich bin maximal verwirrt. Wenn ich LFuse auf 0xE1 setze, > dann sind CKSEL1, CKSEL1 und CKSEL2 gesetzt - richtig? Nein. Gesetzt ohne Angabe auf welchen Wert heißt im Allgemeinen auf 1 gesetzt. Mit 0xE1 wird CKSEL1, CKSEL2 und CKSEL3 auf 0 gebracht und CKSEL0 auf 1 gesetzt. Das entspricht der Datenblatt Einstellung für 16MHz System clock der über PLL aus dem internen 8MHz Oszillator abgeleitet wird. Mit 0xE1 wird auch die CKDIV8 Fuse auf 1 gesetzt. Also auf unprogrammed gesetzt und damit werden die 16MHz nicht nochmal durch 8 geteilt. Es bleibt bei den 16MHz. Datenblatt: 6.2.2 High Frequency PLL Clock There is an internal PLL that provides nominally 64 MHz clock rate locked to the RC Oscillator for the use of the Peripheral Timer/Counter1 and for the system clock source. When selected as a system clock source, by programming the CKSEL fuses to ‘0001’, it is divided by four like shown in Table 6-4. > Weiterhin habe ich dann den internen Taktgenerator gesetzt, richtig? Richtig! > Wenn beides stimmt: welche Clock-Frequenz nutzt der ATTiny85 dann genau? 16MHz
S. Landolt schrieb: >> PLL über die fuses zu setzen, geht aber nur mit externen Takt. > > Das kann ich nicht bestätigen! Stimmt, da habe ich mich verguckt. Siehe auch den Beitrag von GustavG, dem ich zustimme. Da muß der TO wohl etwas anderes vergeigt haben.
Datenblatt lesen ist anscheinend sowas von aus der Mode wenn nicht mal klar ist, dass ein Fuse-Bit, dass den Wert 0 enthält, als gesetzt gilt...
M. K. schrieb: > Datenblatt lesen ist anscheinend sowas von aus der Mode wenn nicht mal > klar ist, dass ein Fuse-Bit, dass den Wert 0 enthält, als gesetzt > gilt... Dann zitiere mal die Stelle aus dem ATTiny25/45/85 Datenblatt aus dem hervorgeht, daß ein Fuse Bit mit Wert 0 als gesetzt gilt. Ich finde da immer nur, daß es als "programmed" gilt.
GustavG schrieb: > Ich finde da > immer nur, daß es als "programmed" gilt. Ja, aber damit hast du ja die Stelle schon gefunden, was soll ich dir denn dazu noch raus suchen?
GustavG schrieb: > M. K. schrieb: >> Datenblatt lesen ist anscheinend sowas von aus der Mode wenn nicht mal >> klar ist, dass ein Fuse-Bit, dass den Wert 0 enthält, als gesetzt >> gilt... > > Dann zitiere mal die Stelle aus dem ATTiny25/45/85 Datenblatt aus dem > hervorgeht, daß ein Fuse Bit mit Wert 0 als gesetzt gilt. Ich finde da > immer nur, daß es als "programmed" gilt. M. K. schrieb: > GustavG schrieb: >> Ich finde da >> immer nur, daß es als "programmed" gilt. > > Ja, aber damit hast du ja die Stelle schon gefunden, was soll ich dir > denn dazu noch raus suchen? Wenn du nicht zwischen Bit gesetzt und Bit programmed unterscheiden kannst, hat es keinen Sinn sich mit dir auszutauschen.
GustavG schrieb: > Wenn du nicht zwischen Bit gesetzt und Bit programmed unterscheiden > kannst, hat es keinen Sinn sich mit dir auszutauschen. Wenn du mit "Bit gesetzt" implizierst, dass der Wert des Bits dann 1 ist, hat es keinen Sinn sich mit dir auszutauschen ;)
GustavG schrieb: > Dann zitiere mal die Stelle aus dem ATTiny25/45/85 Datenblatt aus dem > hervorgeht, daß ein Fuse Bit mit Wert 0 als gesetzt gilt. Ich finde da > immer nur, daß es als "programmed" gilt. Das hatte ich dir doch oben schon mal erklärt: HildeK schrieb: > Naja, weil eine gelöschte EE-Zelle halt 0xFF enthält. Dass man das > Programmieren eines Bits als 'Setzen' bezeichnet und es dabei zu '0' > wird, ist vermutlich dieser Tatsache geschuldet Nimm es einfach zur Kenntnis für die Zukunft - ein einfacher Lernprozess. Oder glaube es einfach. Ist halt so.
GustavG schrieb: > Wenn du nicht zwischen Bit gesetzt und Bit programmed unterscheiden > kannst, hat es keinen Sinn sich mit dir auszutauschen. Bei AVR Bit gesetzt: unprogrammed M. K. schrieb: > Wenn du mit "Bit gesetzt" implizierst, dass der Wert des Bits dann 1 > ist, hat es keinen Sinn sich mit dir auszutauschen ;) Das ist überall auf der Welt so. Sogar bei AVR. Nur ist bei den AVRs gesetzt bzw. 1 eben nicht programmed. Hoffentlich ist das jetzt mal geklärt.
Andreas B. schrieb: > Nur ist bei den AVRs gesetzt bzw. 1 eben nicht programmed. Programmed und gesetzt ist gleichbedeutend. Das beste Beispiel ist das CLKDIV8-Fusebit. Wenn mal wieder hier im Forum sich jemand wundert, dass sein AVR um den Faktor 8 zu langsam läuft kommt jedem sofort in den Sinn "Ja klar, da ist das CLKDIV8-Fusebit gesetzt". Das Problem ist hier mal wieder das Übersetzen vom Englischen ins Deutsche und zurück. Der Fusebit Calculater zeigt das im Prinzip sehr schön: Um ein Fusebit zu "programmieren" muss ein Häckchen gesetzt werden.
M. K. schrieb: > Programmed und gesetzt ist gleichbedeutend. Langsam wundert mich nicht mehr, daß der TO verwirrt wird. Du passt Dich hier den (falschen) Sprachgebrauch an. Wenn im DB eines AVR die Rede von einem gesetzten Bit ist, dann ist immer Bit=1 gemeint. Wenn die Rede von einem programmed Bit bei den Fuses ist, dann ist immer Bit=0 gemeint. Zeig mir irgendeine Stelle im DB wo das anders ist. Es wurde zwar bereits erwähnt aber man kann es gar nicht oft genug wiederholen: Irgendwelche Tutorials oder Fuse calculatoren sind nicht die Referenz, sondern das DB.
:
Bearbeitet durch User
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.