Forum: Mikrocontroller und Digitale Elektronik AVR128DA64 TCA1 funktioniert nicht mit alternativen Output?


von Nils K. (flying_nils)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich stehe aktuell vor einem Problem mit einem AVR128DA64, bei dem ich 
nicht mehr weiter komme. Ich möchte den TCA0 und TCA1 für PWM-Signale 
auf sechs Outputs nutzen. Beide Outputs habe ich auf alternative Pins 
gelegt, was ich entsprechend im PORTMUX so eingestellt habe.

Der TCA0 funktioniert einwandfrei, aber der TCA1 gibt überhaupt keine 
Signale aus. Wenn ich den TCA1 ohne PORTMUX auf seinen „normalen“ Pins 
teste, funktioniert er wie gewünscht auf allen drei Outputs. Sobald ich 
ihn jedoch auf die alternativen Pins (PORTE, die gewünschten) umstelle, 
gibt es keinen Output mehr.

Zur Ergänzung: Es sind auch einige LEDs an den Pins von PORTG 
angeschlossen. Hier funktioniert lediglich der erste Output.

Ich denke nicht, dass es an der Initialisierung des Timers liegt, da er 
ja auf manchen Pins funktioniert. Auch an dem PCB liegt es nicht, da ich 
die drei Outputs und LEDs normal schalten kann. Andere Module werden 
ebenfalls nicht genutzt.

Ich finde es seltsam, dass der TCA1 normal funktioniert, aber bei 
Nutzung der alternativen Pins nur teilweise oder gar nicht reagiert, 
zumal der TCA0 in genau der selben Situation funktioniert.

Hat jemand eine Idee, woran das liegen könnte?

Vielen Dank vorab!
1
void timerMosfetInit(void)
2
{
3
  PORTMUX.TCAROUTEA = 0x00; 
4
  //PORTMUX.TCAROUTEA = 0b00010001; 
5
  /*TCA0.SINGLE.PER = 0x0FFF;
6
  TCA0.SINGLE.CTRLB = (TCA_SINGLE_WGMODE_SINGLESLOPE_gc) | (TCA_SINGLE_CMP0EN_bm) | (TCA_SINGLE_CMP1EN_bm) | (TCA_SINGLE_CMP2EN_bm);
7
  TCA0.SINGLE.CMP0 = 0x08FF;
8
  TCA0.SINGLE.CMP1 = 0x08FF;
9
  TCA0.SINGLE.CMP2 = 0x08FF;*/
10
  
11
  TCA1.SINGLE.PER = 0x0FFF;
12
  TCA1.SINGLE.CTRLB = (TCA_SINGLE_WGMODE_SINGLESLOPE_gc) | (TCA_SINGLE_CMP0EN_bm) | (TCA_SINGLE_CMP1EN_bm) | (TCA_SINGLE_CMP2EN_bm);
13
  TCA1.SINGLE.CMP0 = 0x05FF;
14
  TCA1.SINGLE.CMP1 = 0x05FF;
15
  TCA1.SINGLE.CMP2 = 0x05FF;
16
  
17
  
18
  //TCA0.SINGLE.CTRLA = (TCA_SINGLE_CLKSEL_DIV8_gc) | (TCA_SINGLE_ENABLE_bm);
19
  
20
  TCA1.SINGLE.CTRLA = (TCA_SINGLE_CLKSEL_DIV8_gc) | (TCA_SINGLE_ENABLE_bm);
21
}
22
int main(void)
23
{
24
  clkInit();
25
  
26
  PORTB.DIR = 0x07;
27
  PORTE.DIR = 0x70;
28
  
29
  PORTB.OUTSET = 0x07;
30
  PORTE.OUTSET = 0x70;
31
32
    PORTG.DIR = 0xFF;
33
34
35
  timerMosfetInit();
36
    while (1) 
37
    {
38
    
39
  
40
    }
41
}

von Georg M. (g_m)


Lesenswert?

AVR128DA Silicon Errata:
"It is not possible to configure TCA1 in PORTMUX.TCAROUTEA to use pinout 
alternatives 2 and 3."

https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/Errata/AVR128DA-28-32-48-64-SilConErrataClarif-DS80000882.pdf

von Nils K. (flying_nils)


Lesenswert?

Ah ok, das erklärt es natürlich.
Danke!

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Angehängte Dateien:

Lesenswert?

Nils K. schrieb:
> ich stehe aktuell vor einem Problem mit einem AVR128DA64, bei dem ich
> nicht mehr weiter komme (...)

Es gibt auch noch mindestens einen AVR128DB64 – die Serien unterscheiden 
sich ein wenig voneinander, bei DB gibt es u.a. die sogenannte 
VDDIO2-Spannung und man kann einen externen Quarz für HF anschließen, ob 
das aber hier von den Innereien bei einem Projekt überhaupt in Frage 
käme, muss man schon selbst anhand der Datenblätter untersuchen und 
herausfinden – die Errata scheint auf den ersten Blick bezüglich des 
besagten TCA-Problems jedenfalls etwas anders zu sein.

Es gibt noch die Serien AVR-DD und AVR-EA – die haben aber anscheinend 
keine TQFP64-Typen.

von Nils K. (flying_nils)


Lesenswert?

Zeitlich ist unser Projekt leider sehr limitiert, weswegen ich keinen 
neuen IC mehr bestellen kann.

Habe aber als Überbrückung ne ehr unschöne Lösung gefunden. Ich gebe das 
PWM Signal auf den alternativen 1 aus, welche auf dem PCB unbelegt sind 
und übertrage den Status von den Ausgängen mit einem Timer B, welchen 
ich eh brauche, zu den richtigen Ausgängen. Als Provisorium reicht das, 
aber in der Zukunft müsste ich da auf jeden Fall was ändern.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Nils K. schrieb:
> Als Provisorium reicht das, aber in der Zukunft müsste ich da auf jeden
> Fall was ändern.

Man könnte natürlich auch gleich z.B. zu STM32 greifen, sofern man nicht 
auf 5V als VCC angewiesen ist, denn der Lötaufwand bei LQFP64 mit 0,5mm 
Raster ist dann quasi gleich – selbst ein STM32F030RC müsste dem 
Anwender mehr als ein AVR128 bieten, allein schon aufgrund der 
Taktfrequenz, die dort bei 48MHz liegt; es gibt aber auch welche mit 170 
oder 180 MHz in dem Gehäuse mit extrem viel Peripherie – viele 
16-Bit-Timer, die man als PWM nutzen kann, DAC-Ausgänge, DMA-Einheiten 
zum Schaufeln der Daten, I2S etc. Voraussetzung bei solchen 
Quantensprüngen im Konzept ist aber, dass man sich mit den 32-bittern 
bereits ausreichend auskennt.

von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

Kann man hier irgendwo Revision-Nr. sehen?

von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Angehängte Dateien:

Lesenswert?

Maxim B. schrieb:
> Kann man hier irgendwo Revision-Nr. sehen?

Immer wieder das gleiche, was in diesem Forum passiert – man weigert 
sich vehement, die kostenlosen Datenblätter mit einem Mausklick zu 
öffnen und zu lesen, um auch mal selbst an Informationen und Wissen zu 
kommen.

von Maxim B. (max182)


Lesenswert?

Gregor J. schrieb:
> man weigert
> sich vehement, die kostenlosen Datenblätter mit einem Mausklick zu
> öffnen und zu lesen

Danke für die Antwort und für Geduld: 730 Seiten sind nicht so einfach 
mit einem Blick zu begreifen.

von Gregor J. (Firma: Jasinski) (gregor_jasinski)



Lesenswert?

Maxim B. schrieb:
> Danke für die Antwort und für Geduld: 730 Seiten sind nicht so einfach
> mit einem Blick zu begreifen.

Bitte sehr. Man liest auch nur punktuell das, was gerade benötigt wird – 
dafür gibt es die Suchfunktion innerhalb eines Datenblatts oder auch den 
Index etc. Im Anhang die ausgelesene REV-ID von meinem AVR128DB28 in 
SO28 mit 1,27mm – umgerechnet lautet sie A5 und dieser Wert scheint auch 
plausibel zu sein.

von Maxim B. (max182)


Lesenswert?

Ed gibt schon B0. PDF von 02.04.2024.
Aber da meine AVRs in September 2023 gemacht wurden, ist das 
wahrscheinlich A5. Später kucke ich das über UPDI. Im Moment ist 
Computer anders beschäftigt.

: Bearbeitet durch User
von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Angehängte Dateien:

Lesenswert?

Maxim B. schrieb:
> Ed gibt schon B0. PDF von 02.04.2024.
> Aber da meine AVRs in September 2023 gemacht wurden, ist das
> wahrscheinlich A5. Später kucke ich das über UPDI. Im Moment ist
> Computer anders beschäftigt.

In B0 scheint noch mehr von den anfangs gemachten Irrtümern behoben 
worden zu sein – am schlimmsten war es bei der Initial-Revision A4, es 
ist aber insgesamt immer noch relativ wenig im Vergleich zu den Erratas 
bei STM32.

von Maxim B. (max182)


Lesenswert?

Ja, bei mir in 0x0F01 steht auch "0x15", d.h. A5.
Gut zu wissen...

von Gregor J. (Firma: Jasinski) (gregor_jasinski)



Lesenswert?

Ich habe noch abschließend einen Screenshot gemacht, damit nicht wieder 
irgendeine Thread-Komödie fabriziert wird, um es zu finden – entweder 
man liest es selbst mit der CPU aus und schickt den 8-Bit-Wert dann z.B. 
weiter an die UART-Schnittstelle etc, wie ich es hier anfangs gemacht 
habe, oder man schaut einfach mit dem Debugger nach, welcher Wert im 
REV-ID-Register steht – die zweite Variante ist deutlich einfacher und 
eigentlich auch idiotensicher, sofern man mit dem Wert etwas anfangen 
kann, aber die Interpretation der Nibbles wird im Datenblatt eindeutig 
erklärt. Vorher muss man aber noch das entsprechende Fenster aktivieren 
(IO) und in die richtige Registerdomäne mit der Maus springen. Die hier 
verwendete Software ist Atmel Studio in seiner letzten finalen Version 
(as-installer-7.0.2594-full.exe) auf einem PC mit Winodws 10 als 
Betriebssystem. Auf dem zusätzlichen, zweiten Screenshot ist noch die 
Info zu der Markierung auf dem Gehäuse, d.h. was man also dort finden 
und auch nicht finden wird. Scrollt man im Datenblatt weiter runter, 
wird man auch die anderen Gehäusetypen und deren Marking finden.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Vielen Dank für alle Erklärungen.

Ich verstehe zwar nicht, warum dich so einfachen Fragen so ärgern?

Aber ich hoffe, dieser Ärger kommt nicht weiter, und die Fragen dürfen 
hier gestellt werden? Dich, deine Kenntnisse, deine Erfahrungen, das 
alles braucht man hier.

Gregor J. schrieb:
> Bitte sehr. Man liest auch nur punktuell das, was gerade benötigt wird –
> dafür gibt es die Suchfunktion innerhalb eines Datenblatts oder auch den
> Index etc.

Wenn man mich über Orgeln fragt, und meistens geht es um elementare 
Sachen, könnte ich wohl auch sagen: lies mal Dom Bedos, dort steht 
alles, und zwar schwarz auf weiß in Altspanisch mit Latein beigemischt 
:) Stattdessen erkläre ich alles. Warum?

: Bearbeitet durch User
von Gregor J. (Firma: Jasinski) (gregor_jasinski)


Lesenswert?

Immer schön die Datenblätter lesen, denn damit ist allen geholfen und 
mit jedem Gebrauch man immer mehr Routine darin bekommt – irgendwann mal 
kann man diesbezüglich dann auch die Unmündigkeit nach der Definition 
von I. Kant endlich beiseitelegen.

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

warum wechselt der Name vom TO von Nils auf Maxim?
Maxim schreibt weiter im Thread als wenn er Nils wäre.
Was ist hier los?
Weil Nils könnte auch die 3 nicht funktionierenden PortMux Leiterbahnen 
trennen und an den funktionierenden Port anlöten. Die Nächste bestellte 
Leiterplatte ist dann dementsprechend korrigiert.

von Maxim B. (max182)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> warum wechselt der Name vom TO von Nils auf Maxim?
> Maxim schreibt weiter im Thread als wenn er Nils wäre.
Das mache ich nicht. Ich habe einfach gefragt, weil mich Thema auch 
interessiert.

Oder habe ich meinen Eigennamen versteckt?

Ich war gerade dabei, eine Platine für AVR128DB64 zu bestellen. Zum 
Glück habe ich Thread gesehen. Bisher dachte ich, alles arbeitet genau 
wie in Datenblatt steht. Nun muß ich die Platine noch einmal 
überprüfen...

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

Entschuldigung. Das wechselt(e) hier alles so nahtlos zwischen AVRxDA, 
STM, AVRxDB hin und her.

Den AVRxDB verwende ich auch, hatte bisher keine Probleme damit.
Den AVRxEA hätte ich auch da.

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