Forum: Mikrocontroller und Digitale Elektronik ATtiny44 startet nicht neu obwohl Spannung weg


von Markus E. (schreckenstein)


Lesenswert?

Hallo Zusammen,
ich habe einen ATtiny44A programmiert der nach einer Senderoutine in den 
Sleep-Modus versetzt wird und nur sporadisch aufwacht um eine 
Überwachung durchzuführen.
Was mich überrascht, der ATtiny44A scheint aus dem Sleep-Modus trotz 
eines Batteriewechsels nicht aufzuwachen, d.h. die Startroutine wird 
nicht durchlaufen sie wird erst nach dem Drücken des Reset-Tasters 
ausgeführt.
Ich habe auch die Anschlußpins der Platine (natürlich ohne Batterien) 
kurzgeschlossen um die Kondensatoren zu entladen, auch die BOD-Fuse 
eingeschalten, nichts half.
Es ist nervig nach jedem Batteriewechsel die Reset-Taste zu betätigen 
weil diese im Gerät verbaut ist und ohne aufschrauben nicht zugänglich 
ist.
Davon abgesehen würde es mich interessieren was die Ursache sein kann 
daß selbst die fehlende Spannung keinen Neustart auslöst.

Aufgeweckt wird der ATtiny44A durch einen Watchdog-Interrupt der alle 8 
Sekunden stattfindet.

Der Programmcode mit Kommentare:
--> hier wird die Startroutine durchgeführt

Set Wdtcsr.wdp3        ' ** Watchdog Timeout einstellen: alle 8 Sek
Set Wdtcsr.wdp0
Set Wdtcsr.wdie        ' ** Watchdog-Timer einschalten
Set Wdtcsr.wde         ' ** Watchdog einschalten

' ** abschalten nicht benötigter Peripherie
Set PRR.PRTIM1    ' ** Timer 1
Set PRR.PRTIM0    ' ** Timer 0
Set PRR.PRUSI     ' ** USI
Set PRR.PRADC     ' ** AD-Wandler

Enable Interrupts

Do
  --> hier wird überwacht

  ' ** Power-Down Modus aktivieren
   Set Mcucr.sm1
   Set Mcucr.se
   $asm
      sleep
   $end asm
Loop

Danke und Grüße
Markus

von Stefan (Gast)


Lesenswert?

Im Sleep braucht der so wenig Strom, daß schon kleine Kapazitäten 
ausreichen, um ein paar Sekunden Batteriewechsel zu überbrücken. Du 
sagst, Du schliesst die Batterieanschlüsse kurz. Hast Du zwischen 
Batterie und VCC eine Diode, z.B. als Verpolungsschutz? Schliesse mal 
die VCC direkt am Controller kurz.

Gruß, Stefan

von Pandur S. (jetztnicht)


Lesenswert?

Zeig und mal das Schema und das Reset Circuit.

von Markus E. (schreckenstein)


Lesenswert?

Ich habe keine Diode vorgeschalten, der Kurzschluß geht direkt zu den 
Controlleranschlüßen.
Die Reset-Schaltung ist nur ein 22K Ohm Widerstand gegen Vcc.
Also kein C zwischen Reset und Gnd, in einem anderen Forumsbeitrag wurde 
dies bei den heutigen Mikros als überflüssig dargestellt.
Wäre vielleicht ein Versuch wert, so in der Größe von etwa 100nF.

von Markus E. (schreckenstein)


Lesenswert?

Es sind in der Schaltung nur drei Kondensatoren mit jeweils 100nF 
verbaut. Zwischen Vcc und Gnd des ATtiny44A und bei dem Funkmodul das 
zwei Vcc-Anschlüße hat. Jeweils ganz nah an den Bauteilen.

von npn (Gast)


Lesenswert?

Besteht die ganze Schaltung nur aus dem Tiny und dem Funkmodul? Oder 
sind Pins des Tinys irgendwo noch angeschlossen?
Ich frage deshalb, weil sich bei nicht vorhandener Vcc der Tiny durchaus 
auch über die Schutzdioden der IO-Pins seine Versorgung ziehen könnte.

von Markus E. (schreckenstein)


Lesenswert?

Ein DS18B20 Temperatursensor, das Funkmodul und der ATtiny44A, mehr 
nicht.
Ich habe es ausgebaut und nur das Modul mit den drei Bauteilen wird mit 
der Batterie verbunden, sonst keinerlei Verbindung nach außen.

von Martin S. (led_martin)


Lesenswert?

Wieviele Zellen hat Deine Batterie? Eine? Dann reicht die Spannung 
vielleicht nicht aus, um die Schaltschwellen des Power-On Resets zu 
durchlaufen. Liegt die Spannung unter der unteren Schwelle (Im 
Datenblatt 1,6V als max. Wert (Bei neueren Tiny-Revisionen)) ist der 
Reset nicht aktiv, so daß der Tiny durchaus laufen kann, wenn die 
Taktfrequenz klein genug ist, und man ihm einen Reset von extern gibt.

Mit freundlichen Grüßen - Martin

von Markus E. (schreckenstein)


Lesenswert?

Es sind 4 Mignon-Akkus, also 4,8 V.
Der BOD-Level ist bei 2,2 V eingestellt und als Takt habe ich gewählt
 intern mit 8 MHz und einer Anlaufverzögerung von 64mSek,
also das max. Mögliche.

Viele Grüße Markus

von Martin S. (led_martin)


Lesenswert?

Hallo  Markus EL,

mit den 4 Zellen sollte das eigentlich problemlos gehen, und durch den 
eingestellten BOD sollte es reichen, wenn die Spannung unter 2,2V fällt, 
um einen Reset auszulösen. Die 2,2V BOD kommen mir für 8 MHz knapp vor, 
würde da höher gehen, in dem Bereich sind die Akkus eh schon bös 
tiefentladen. Du solltest bedenken, daß die Zellen, wenn sie randvoll 
sind, auch 1,5V haben können, da bist Du dann bei 6V am Tiny, das ist 
schon an den Absolute Maximum Ratings, bei denen die Funktion nicht mehr 
garantiert wird. 3 Zellen liegen da eigentlich besser im 
Spannungsbereich des Controllers.

Mal eine ganz andere Idee: Du weisst, daß der Controller, bei einem 
Reset, den RAM-Inhalt nicht ändert, vielleicht lässt Du dich ja dadurch 
täuschen? Ich habe da mal was beobachtet, das mich doch verwundert hat. 
Ein Aufbau mit einem ATmega644P, bedient über ein Terminalprogramm, auch 
mit der Möglichkeit Datzensätze aus dem RAM des Controllers zu lesen. 
Ich musste meine Bastelei unterbrechen, um einkaufen zu gehen, Alles 
ausgeschaltet, ca. eine 3/4 Stunde später ging ich wieder ran, 
versuchsweise einen Datensatz gelesen, in der Historie des 
Terminalprogramms noch der Abzug von vorher, und von den 32 Bytes waren 
nur 2 oder 3 anders, der Rest war komplett identisch. Hab den Versuch 
dann wiederholt, nach der 3/4 Stunde waren noch ca. 0,2V am Controller, 
und wieder ein ähnliches Bild. Diese 0,2V haben gereicht, einen großen 
Teil der RAM-Inhalte zu erhalten.

Mit freundlichen Grüßen - Martin

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Egal, was bei BDO eingestellt ist, 0 Volt bedeutet: Es folgt ein Reset.

Somit kommt nach meiner Meinung nur eine ungewollte Stütze infrage.
Ob das jetzt eine Fremdspeisung oder ein nicht entladener Kondensator 
ist sollte verifiziert werden.

von Peter D. (peda)


Lesenswert?

Markus El schrieb:
> d.h. die Startroutine wird
> nicht durchlaufen

Woher weißt Du das?
Das Programm macht ja nichts, an dem man was erkennen könnte (z.B. 
Portpin schalten).

Was für eine Programmiersprache ist das überhaupt?

von Nil (nilsnilss)


Lesenswert?

Wäre es möglich, dass dein Funkmodul zur Initialisierung einfach zu 
lange braucht? Also der Attiny versucht schon zu senden, das Funkmodul 
ist aber noch nicht bereit und so scheint es für dich, dass der Tiny 
nicht sendet?
Dann drückst du den Reset, das Modul hatte nun genügend Zeit zum 
"hochfahren" und kann nun mit deinem Tiny kommunizieren.
Ist zwar bei 64ms Anlaufzeit unwahrscheinlich aber du kannst ja mal als 
Beginn deines Programms einfach ein großzügiges Delay einbauen.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Markus El schrieb:
> Davon abgesehen würde es mich interessieren was die Ursache sein kann
> daß selbst die fehlende Spannung keinen Neustart auslöst.

Markus El schrieb:
> Was mich überrascht, der ATtiny44A scheint aus dem Sleep-Modus trotz
> eines Batteriewechsels nicht aufzuwachen,

Markus El schrieb:
> Die Reset-Schaltung ist nur ein 22K Ohm Widerstand gegen Vcc.
> Also kein C zwischen Reset und Gnd, in einem anderen Forumsbeitrag wurde
> dies bei den heutigen Mikros als überflüssig dargestellt.
> Wäre vielleicht ein Versuch wert, so in der Größe von etwa 100nF.

würde ich mal vorschlagen und über den 22k nach VCC eine Diode damit der 
Kondi sich schneller entlädt bei Batteriewechsel.


Evtl. noch Code hinzufügen ob es ein power on Reset war oder der Reset 
Taster, evtl. noch eine LED zur Signalisierung damit du erst mal den 
Code überprüfen kannst, bzw. optisch feststellen ob beides richtig 
erkannt wurde.

Ich hatte es mir angewöhnt eine LED 3-5 x blinken zu lassen am Start, 
dann sehe ich ob der Start richtig durchlaufen wird bevor es in die 
never ending loop geht wo vielleicht nix mehr passiert. Bei dir bietet 
es sich an 2 verschieden farbige  LEDs zu Probe zu verbauen 1 für power 
on reset und eine für den reset taster, damit du das besser 
unterscheiden kannst.

Nun aber genug Prosa, zeichne einen Plan wie dein aufbau ist und zeige 
den, auch Bilder sind willkommen.

von Martin S. (led_martin)


Lesenswert?

Beachte aber, hier gibt es eine Menge Reset-Quellen:
Der externe Reset über den Kondensator und Widerstand am Reset-Pin,
Der Power-On Reset, vom Controller intern generiert (bei ca. 1,3V),
Der Brown-Out Reset, vom Controller generiert bei der eingestellten 
Spannung (Zuletzt 2,2V, bei Dir).

Jeder dieser Reset Typen hat sein eigenes Bit im MCUSR – MCU Status 
Register.

Mit freundlichen Grüßen - Martin

von Joachim B. (jar)


Lesenswert?

Joachim B. schrieb:
> Bei dir bietet
> es sich an 2 verschieden farbige  LEDs zu Probe zu verbauen 1 für power
> on reset und eine für den reset taster

Martin Schlüter schrieb:
> Der externe Reset über den Kondensator und Widerstand am Reset-Pin,
> Der Power-On Reset, vom Controller intern generiert (bei ca. 1,3V),
> Der Brown-Out Reset, vom Controller generiert bei der eingestellten
> Spannung (Zuletzt 2,2V, bei Dir).

OK dann 3 Ports, drei verschieden farbige LEDs, einverstanden?

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.