Hallo, Ich habe in einem neuen Projekt den ATtiny412 eingeplant. Nun kenne ich mich eigentlich in der AVR-Mega-Welt gut aus, allerdings sind bei der neuen AVR 1-Serie ganz schön viele Neuheiten. Nun habe ich "versucht" einen Timer (TCA0) für eine, vorerst, SW-PWM zu initialisieren. Soweit so gut, der Overflow-Interrupt löst aus und die LED lässt sich über meine SW-PWM dimmen. Allerdings wollte ich eine andere PWM-Frequenz. So habe ich mit dem MainClk und den Prescalern vom TCA0 experimentiert. Und siehe da - keine Änderung. Es ist völlig egal was ich einstelle, der Timer lässt sich nicht verändern. Selbst wenn ich die WGM-Modes oder auch den Split-Mode auswähle, ändert sich nichts. Da dieser µC mit UPDI programmiert werden will, habe ich mir sogar den neuen Programmer von ATMEL gekauft. Jetzt kam noch ein stutziger Moment - Atmel-Studio und der ICE erkenn den tiny412 "nur" als tiny402, der etwas weniger kann. Achja.... bevor ich es vergesse : Ich programmiere in Assembler. Ich hoffe, es findet sich jemand, der sich mit der neuen Serie auskennt und mir weiterhelfen kann. Danke. André
André M. schrieb: > Achja.... bevor ich es vergesse : > Ich programmiere in Assembler. Ja, dann ist natürlich alles klar. Fehler befindet sich gleich nach der Linie 36.
Marc V. schrieb: > Ja, dann ist natürlich alles klar. > > Fehler befindet sich gleich nach der Linie 36. Oh wie witzig. Ein Experte für die neue AVR-Serie. Ok.... ein Beispiel ldi r16,0x01 (Bit0 = Timer Enable) sts TCA0_SINGLE_CTRLA,r16 Ergebnis - Timer läuft , eigentlich auch kein Wunder ldi r16,0x03 (Bit0 = Timer enable / Bit1 = prescaler2) sts TCA0_SINGLE_CTRLA,r16 Ergebnis - Timer läuft allerdings in der gleichen Geschwindigkeit. So - jetzt kommst du.
Hallo, warum sollte man das so unleserlich schreiben?
1 | ldi r16,0x03 (Bit0 = Timer enable / Bit1 = prescaler2) |
2 | sts TCA0_SINGLE_CTRLA,r16 |
Da sieht doch keiner die verwendeten Bits.
André M. schrieb: >> Fehler befindet sich gleich nach der Linie 36. > > Oh wie witzig. Überhaupt nicht, wo sollte man die Assembler "Einleitung" ISR Einsprünge und die Stackdefinition findet, wenn nicht im Quellcode? Meistens ist ein Problem wo andres zu finden, als man selbst vermutet.
Karl M. schrieb: > warum sollte man das so unleserlich schreiben?ldi r16,0x03 (Bit0 = > Timer enable / Bit1 = prescaler2) > sts TCA0_SINGLE_CTRLA,r16Da sieht doch keiner die verwendeten Bits. hmm.... Für mich persönlich ist klar das ein 0x03 ein 0b00000011 ergibt. Bei der Bitschreibweise würde ich mich höchstens in den Nullen verzählen. Wie würdest du es schreiben. Ich lern ja gern dazu. Karl M. schrieb: > Überhaupt nicht, wo sollte man die Assembler "Einleitung" ISR Einsprünge > und die Stackdefinition findet, wenn nicht im Quellcode? > > Meistens ist ein Problem wo andres zu finden, als man selbst vermutet. Ja, wahrscheinlich hast du recht, allerdings muss ich das erst heute Abend zu Hause checken. Hat denn jemand eine Idee warum der Programmer den t412 nur als t402 erkennt?
André M. schrieb: > Hat denn jemand eine Idee warum der Programmer den t412 nur als t402 > erkennt? Welche Signatur liest er denn aus?
Beitrag #5546734 wurde vom Autor gelöscht.
Peter D. schrieb: > André M. schrieb: >> Hat denn jemand eine Idee warum der Programmer den t412 nur als t402 >> erkennt? > > Welche Signatur liest er denn aus? Es gab einen Leidensgenossen, der die gleiche Problematik mit dem t412 hatte. Es hat sich herausgestellt, dass Atmel Studio einen Fehler hat. Zitat (Microchip): ************************************************************************ ******** The part pack file(version 1.3.172) of ATtiny412 and ATtiny402 contains wrong device signature value. As a workaround you can manually correct the signatures in the ATDF files. You find the ATDF files here: C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\ATtiny_DFP\1.3.172\atdf The correct signature for ATtiny412 is 0x1e9223. If you edit the file ATtiny412.atdf lines 320:324 should look like this: <property-group name="SIGNATURES"> <property name="SIGNATURE0" value="0x1E"/> <property name="SIGNATURE1" value="0x92"/> <property name="SIGNATURE2" value="0x23"/> </property-group> The correct signature for ATtiny402 is 0x1e9227. If you edit the file ATtiny402.atdf lines 301:305 should look like this: <property-group name="SIGNATURES"> <property name="SIGNATURE0" value="0x1E"/> <property name="SIGNATURE1" value="0x92"/> <property name="SIGNATURE2" value="0x27"/> </property-group> ************************************************************************ ******************
Hallo André, verwendest Du in deinem ASM-Projekt das Includefile: tn412def.inc ? Hier findet man einige Bit-Definitionen für das Register TCA0_SINGLE_CTRLA:
1 | TCA0_SINGLE_CTRLA = (TCA_SINGLE_ENABLE_bm | TCA_SINGLE_CLKSEL0_bm) |
1 | ; Ab Zeile 3800ff |
2 | ; TCA_SINGLE_CTRLA masks |
3 | .equ TCA_SINGLE_CLKSEL_gm = 0x0E ; Clock Selection group mask |
4 | .equ TCA_SINGLE_CLKSEL_gp = 1 ; Clock Selection group position |
5 | .equ TCA_SINGLE_CLKSEL0_bm = (1<<1) ; Clock Selection bit 0 mask |
6 | .equ TCA_SINGLE_CLKSEL0_bp = 1 ; Clock Selection bit 0 position |
7 | .equ TCA_SINGLE_CLKSEL1_bm = (1<<2) ; Clock Selection bit 1 mask |
8 | .equ TCA_SINGLE_CLKSEL1_bp = 2 ; Clock Selection bit 1 position |
9 | .equ TCA_SINGLE_CLKSEL2_bm = (1<<3) ; Clock Selection bit 2 mask |
10 | .equ TCA_SINGLE_CLKSEL2_bp = 3 ; Clock Selection bit 2 position |
11 | .equ TCA_SINGLE_ENABLE_bm = 0x01 ; Module Enable bit mask |
12 | .equ TCA_SINGLE_ENABLE_bp = 0 |
Karl M. schrieb: > Hallo André, > > verwendest Du in deinem ASM-Projekt das Includefile: tn412def.inc ? > > Hier findet man einige Bit-Definitionen für das Register > TCA0_SINGLE_CTRLA: >
1 | TCA0_SINGLE_CTRLA = (TCA_SINGLE_ENABLE_bm | |
2 | > TCA_SINGLE_CLKSEL0_bm) |
> >
1 | ; Ab Zeile 3800ff |
2 | > ; TCA_SINGLE_CTRLA masks |
3 | > .equ TCA_SINGLE_CLKSEL_gm = 0x0E ; Clock Selection group mask |
4 | > .equ TCA_SINGLE_CLKSEL_gp = 1 ; Clock Selection group |
5 | > position |
6 | > .equ TCA_SINGLE_CLKSEL0_bm = (1<<1) ; Clock Selection bit 0 mask |
7 | > .equ TCA_SINGLE_CLKSEL0_bp = 1 ; Clock Selection bit 0 |
8 | > position |
9 | > .equ TCA_SINGLE_CLKSEL1_bm = (1<<2) ; Clock Selection bit 1 mask |
10 | > .equ TCA_SINGLE_CLKSEL1_bp = 2 ; Clock Selection bit 1 |
11 | > position |
12 | > .equ TCA_SINGLE_CLKSEL2_bm = (1<<3) ; Clock Selection bit 2 mask |
13 | > .equ TCA_SINGLE_CLKSEL2_bp = 3 ; Clock Selection bit 2 |
14 | > position |
15 | > .equ TCA_SINGLE_ENABLE_bm = 0x01 ; Module Enable bit mask |
16 | > .equ TCA_SINGLE_ENABLE_bp = 0 |
Danke für den Hinweis. Bis jetzt habe ich auf so etwas immer verzichtet wegen der Schreiberei beim programmieren. Ich habe immer das Datasheet der Registerdefinitionen offen, und trage deshalb direkt den Hex-Wert ein.
André M. schrieb: > Danke für den Hinweis. > Bis jetzt habe ich auf so etwas immer verzichtet wegen der Schreiberei > beim programmieren. > Ich habe immer das Datasheet der Registerdefinitionen offen, und trage > deshalb direkt den Hex-Wert ein. Das dachte ich mir, deshalb die Anregung...
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.