Forum: Mikrocontroller und Digitale Elektronik Watchdog auf ATtiny1617 aktivieren


von Max (Gast)


Lesenswert?

Hallo zusammen

Teste gerade die "neuen" Mikrocontroller von Microchip. Gerne würde ich 
den Watchdog auf einem ATtiny1617 aktivieren. Leider fehlt mir dazu das 
nötige Wissen, um die richtigen Register zu setzen. <avr/wdt.h> 
funktioniert mit diesem Chip leider nicht. Internetsuche ohne Erfolg :-(

http://ww1.microchip.com/downloads/en/devicedoc/attiny3217_1617-data-sheet-40001999b.pdf

von Veit D. (devil-elec)


Lesenswert?

Hallo,

kennst du schon das Kapitel WDT im Manual?
Wenn man gar nicht reinkommt und sonst nichts findet, kann man durchaus 
im Atmel Studio "Atmel Start" aufrufen, µC auswählen, WDT Funktion 
hinzufügen, konfigurieren und am Ende schauen was für Code erzeugt wird. 
Sind zwar unzählig erzeugte Headerdateien, aber da kann man sich mal 
durchwühlen.

von S. Landolt (Gast)


Lesenswert?

Für die megaAVR® 0-series sieht es ganz simpel wie folgt aus, wird für 
tinyAVR 1-series nicht viel anders sein:
1
 ldi tmp0,CPU_CCP_IOREG_gc
2
 sts CPU_CCP,tmp0
3
 ldi tmp0,WDT_PERIOD_8KCLK_gc
4
 sts WDT_CTRLA,tmp0

von Max (Gast)


Lesenswert?

Das funktioniert leider nicht. Inline Assembly in der Arduino IDE bekomm 
ich nicht hin :-(

von S. Landolt (Gast)


Lesenswert?

So war es auch nicht gemeint; das wird in C so irgendwie aussehen:
1
 CPU.CCP  = CPU_CCP_IOREG_gc;
2
 WDT.CTRL = WDT_PERIOD_8KCLK_gc;
In der Hoffnung, dass der Arduino das innerhalb von 4 Takten ausführt. 
Und ob die Bezeichnungen exakt identisch sind, kann ich auch nicht 
sagen, da müssen Sie selbst nachschlagen.

von S. Landolt (Gast)


Lesenswert?

PS:
Muss eventuell auch noch in 'cli(); ... sei();' eingebettet werden.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

C/C++
1
CPU_CCP = CCP_IOREG_gc;   // write access for four CPU instructions

Die Schreibweisen für WDT Register und Bits schauste bitte im Headerfile 
deines ATtinys nach. Müsste ich jetzt auch nachschauen.

von Max (Gast)


Lesenswert?

Vielen Dank für eure Antworten!

Das hier funktioniert:
1
CPU_CCP = CCP_IOREG_gc;
2
WDT_CTRLA = WDT_PERIOD_8KCLK_gc;

Und für den Reset:
1
void watchdogReset() {
2
  __asm__ __volatile__ (
3
    "wdr\n"
4
  );
5
}

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.