AVR Atiny85 Restart

Gast #4638702
Hallo,

ich verwende einen Atiny85s am USB-Port als Datenschleuder.
Alles wunderbar.

Nun begibt es sich, das ich den AVR neu starten muss.

Hierzu verwende ich eine von Atmel genannte Methode:

[cpp]
 cli();
 wdt_enable (WDTO_15MS);
 while (1);//Reset Atiny85 by never respond watchdog
[/cpp]

Das verstehe ich nicht. Der Atiny hängt dann und wird auch danach nie 
wieder etwas "sagen".

Wo ist also der Denkfehler, bzw. Wie kann ich ein rein/raus 
-Steckvorgang
am USB-Port simulieren ?

Der Baustein wird von einem Windows Rechner versorgt und tauscht
2000 Bytes/Sekunde mit dem Host aus.

Der Atiny läuft mit 16.5 Mhz basierend auf V-Usb
Kompiliert mit Atmel Studio, upload via usbasp.

Vielen Dank für Hinweise
 Karsten

http://flexxvision.de/konnektivitaet.html#a1888
Gast
Karsten S. schrieb:
> wdt_enable (WDTO_15MS);

AHbe noch nie mit dem Watchdog gearbeitet.. aber der überwacht den 
Programmablauf und löst einen Reset aus wenn etwas hängt.

Du lässt ihn hängen und nach 15ms löst der Watchdog den reset aus.
Gast
Hallo Phillip,

Vielen Dank für deine schnelle Antwort.

Ja das wäre schon schön, aber nach dieser Aktion ist das Teil leider 
tot.
Ich muss dann manuell das Dingens triggern.

hmm...
Gast
Karsten S. schrieb:
> Ja das wäre schon schön, aber nach dieser Aktion ist das Teil leider
> tot.
> Ich muss dann manuell das Dingens triggern.

Nach einem WDT-Reset bleibt der Watchdog weiter aktiv und schlägt dann 
irgendwann zu, wenn man ihn nicht triggert.
Deshalb sollte man ihn gleich am Anfang der main() deaktivieren, wenn 
man ihn nicht braucht.
Gast
Hallo Chris,

also das hat gefehlt, sehr gut! So bleibt das Teil am Leben.

Wenn ich den ResetPin triggere (FUSE hier auf Reset erlaubt)
Dann wird die Mainfunktion nicht mehr aufgerufen.
(manuelles re- Stöpseln nötig)

Kann man da etwas machen ?

Wenn ich Reset an der Fuse verbiete ist der Port als normaler IO nutzbar 
stimmt das ?

Danke für Hinweise.
 Karsten
für einen Mega AVR verwende ich immer folgende Codezeilen um das von dir 
beschriebene Problem zu vermeiden:
in einer separaten *.c Datei:
1
#include <avr/wdt.h>
2
#include "watchdog_handle.h"
3

4
void handle_watchdog_reset(void)
5
{
6
  MCUSR = 0;
7
  wdt_disable();
8
}
in einer separaten *.h Datei:
1
/*
2
  Nach einem Watchdig Reset wird die Funktio handle_watchdog_reset() vor dem Programmstart
3
  ausgeführt um den Watchdogtimer frühzeitig zu deaktiveren. Ohne diese Routine 
4
  würde der Controller nach einem Reset nicht mehr starten, da der WDT immer
5
  wieder einen Reset erzwingen würde.
6

7
*/
8

9
void handle_watchdog_reset(void) __attribute__((naked)) __attribute__((section(".init1")));
Ob das Register genau so passt musst du selber prüfen.
Hoffe es hilft dir weiter
Gast
Lieder noch nicht, der Handler wurde nicht angesprungen, bezüglich der 
Vereinbarung section(".init1"...  Ich muss da erst weiter forschen.

Allerdings wird auch Main nie wieder angesprungen, nach Betätigung des 
RestBits oder nach Auslösung des Verfahrend über Watchdog.

In allen Fällen muss ich den Dongle ein/ausstecken was man nicht möchte.

Ich verändere nämlich zur Laufzeit die PID und VID und lade über WinUsb
*.inf das Gerät neu.

Na aber Danke der Nachfrage, das wird der Tage noch.

Grüsschen aus Berlin
 Karsten
Gast
Hallo Peter,

nach meiner Aktion :

[cpp]
cli();
wdt_enable (WDTO_15MS);
while (1);//Reset Atiny85
[/cpp]

Ist der Tiny tot, main() wird nichtmehr angesprungen.
Ich denke der bleibt in der while stecken.. mal sehen morgen..

Danke Dir,
 Lg
   Karsten

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.