Forum: Mikrocontroller und Digitale Elektronik ATtiny412 Probleme der Initialisierung


von André M. (killroymenzel)


Lesenswert?

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é

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von André M. (killroymenzel)


Lesenswert?

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.

von Karl M. (Gast)


Lesenswert?

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.

von Karl M. (Gast)


Lesenswert?

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.

von André M. (killroymenzel)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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.
von André M. (killroymenzel)


Lesenswert?

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>

************************************************************************ 
******************

von Karl M. (Gast)


Lesenswert?

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

von André M. (killroymenzel)


Lesenswert?

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.

von Karl M. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.