Idle und Sleep

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 3 2024  13:22:12      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Idle und Sleep

    







BID = 425140

wolleausmallo

Gerade angekommen


Beiträge: 5
Wohnort: Breckerfeld
 

  


Guten Tag allerseits. Seit einer Woche versuche ich den AT90S2313 in den Idle-Modus zu schicken und möchte ihn natürlich wieder aufwecken(bei Netzausfall auf Batteriebetrieb). Aber ich krieg das nicht hin). Der Rest funktioniert. Vielleicht kann mir einer von Euch helfen. Hier der Code...


$regfile = "2313def.dat"
$crystal = 3686400
Config Timer1 = Timer , Prescale = 64

Config Pinb.2 = Output
Led3 Alias Portb.2

Config Pinb.7 = Output

Config Pinb.1 = Input
Kontrollpin Alias Pinb.1

Config Pinb.3 = Input
Powerpin Alias Portb.3

Config Pind.2 = Input
Powercontrol Alias Pind.2

Mcucr = &B00100000

On Timer1 Timer_irq
Const Timervorgabe = 7936
Enable Timer1
Enable Interrupts

Dim Sekunde As Byte
Dim Minute As Byte
Dim Stunde As Byte
Dim Motor As Byte

Declare Sub An
Declare Sub Aus
Declare Sub Sommer
Declare Sub Winter
Declare Sub Aufwachen

Portd.0 = 1
Portb.1 = 1
Portb.3 = 0
Portb.7 = 0
Stunde = 12



Do

While Powercontrol = 0
Led3 = 0
Portb.7 = 0
Idle ' ----------------keine Funktion
Wend

If Kontrollpin = 0 Then Gosub Sommer
If Kontrollpin = 1 Then Gosub Winter

Loop




Sommer:

If Stunde = 12 Then Gosub An
If Stunde = 14 Then Gosub An
If Stunde = 19 Then Gosub Aus
If Stunde = 22 Then Gosub Aus

Return



Winter:


If Stunde = 12 Then Gosub An
If Stunde = 13 Then Gosub An
If Stunde = 0 Then Gosub Aus
If Stunde = 2 Then Gosub Aus


Return





An:
Portb.7 = 1
Return




Aus:
Portb.7 = 0
Return

Int0_isr:
Return

Timer_irq:

Timer1 = Timervorgabe
Toggle Led3
Incr Sekunde
If Sekunde = 60 Then
Incr Minute
Sekunde = 0
If Minute = 60 Then
Incr Stunde
Minute = 0
If Stunde = 24 Then
Stunde = 0
Minute = 0
Sekunde = 0
End If
End If
End If

Return

Grüße
Wolle

BID = 425790

Midnight

Stammposter



Beiträge: 256

 

  

Hallo,

habe Deinen Code zwar nicht komplett analysiert, aber eines ist mir gleich ganz vorne im Code aufgefallen.
Sobald Du den Controller in den Idle-Mode schickst wird er von jedem Interrupt wieder geweckt. Da der Timer1 ja läuft weckt der den Controller natürlich bei jedem Timer-Interrupt wieder aus dem Idle.

Gruß

Simon

BID = 426238

wolleausmallo

Gerade angekommen


Beiträge: 5
Wohnort: Breckerfeld

Hallo Simon.
Hast du vielleicht eine Idee wie ich das anders lösen kann?
Eine Sekunde Idle bringt keine Stromersparnis. Der Prozessor sollte alle 5-10 Sekunden nachschauen ob der Pin noch low ist und wenn ja, dann wieder schlafen(evtl.ein Stück Code)
Danke schon mal im voraus.
Grüße
Wolle

BID = 426248

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Timerwert erhöhen & Zeitzähler anpassen
(z.B. auf 10 sec. erhöhen, dann aber auch bei der Zeitzählung gleich 10 sec. addieren)

BID = 426249

Midnight

Stammposter



Beiträge: 256

Hallo Wolle,

dann solltest Du mal kurz erklären was Dein Programm genau machen soll.
Wenn der Controller als Uhr laufen muß/soll wird Dir der Idle wie Du erwähnt hast nicht viel bringen.

Gruß

Simon

BID = 426485

wolleausmallo

Gerade angekommen


Beiträge: 5
Wohnort: Breckerfeld

Hallo an Simon und natürlich alle Anderen.

Du hast recht. Der Idle wird durch den Sekundeninterrupt immer wieder unterbrochen.
Die Schaltung soll die Tageszeit zählen und eine Pumpe schalten. Fällt der Strom aus wird stromsparend auf Batterie(Knopfzelle) umgeschaltet. Die Zeit muß bei Netzausfall weiterlaufen. Das ist der Grund für den Idle-Mode. Vielleicht hast Du, habt Ihr eine andere Idee für mein Problem. Vielleicht mit Softclock???

Grüße
Wolle

BID = 426487

wolleausmallo

Gerade angekommen


Beiträge: 5
Wohnort: Breckerfeld

Tja Hajos 118.
Vielleicht kannst Du mir das an einem Beispiel erläutern
Gruß
Wolle

BID = 426525

wolleausmallo

Gerade angekommen


Beiträge: 5
Wohnort: Breckerfeld

Softclock ist bei dem 2313 nicht implementiert

BID = 426584

zephyrin

Gerade angekommen


Beiträge: 3
Wohnort: Ampfing

Hallo,

wenn du nicht extrem Strom sparen willst, kannst du mit 3V Betriebsspannung und einem niedrigen Takt von unter 100kHz (Uhrenquarz 32.768kHz) auf deutlich unter 100uA kommen, ohne irgend einen Sparmodus zu aktivieren. Sagt das Datenblatt.

Wenn du extrem Strom sparen musst (tagelanger Netzausfall bei winziger Batterie), dann brauchst du einen größeren Controller mit echter RTC, z.B. ATmega88, da sind unter 10uA möglich.

Grüße,
Peter

[ Diese Nachricht wurde geändert von: zephyrin am  3 Mai 2007 18:22 ]

BID = 426735

Midnight

Stammposter



Beiträge: 256

Hallo,

sonst bliebe noch die Möglichkeit mit einem externen RTC zu arbeiten. Die Uhrzeit selber zu erzeugen ist eh nicht sonderlich genau, nen paar Minuten pro Tag wird sie falsch gehen.
Irgendwo ist mir auch mal ein RTC über den Weg gelaufen (mir fällt der Typ grad nicht ein)in dem man ein paar Events einprogrammieren kann, und er dann nen IRQ auslöst, das wäre das eleganteste.
Die Überwachung der Spannungsversorgung würde ich eh auf einen Interrupt legen.
Dann kannst Du Deinen Controller schlafen legen, und er wacht erst wieder auf wenn eine bestimmte Zeit erreicht wird, oder Netzausfall anliegt.

Gruß

Simon

BID = 426739

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Dein Code sieht so aus, als ob's BASCOM wäre (da bin ich nicht der Profi). Aber es gibt eine Konstante, die sich "Timervorgabe" nennt... ich vermute, dass damit die Dauer der Zeit zwischen den Interrupts bestimmt wird. Diesen Wert müsste man erhöhen, damit nicht so oft der Interrupt ausgelöst wird.
Logischerweise muss man dann aber auch den Sekundenzähler nicht um 1 erhöhen, sondern um den angepassten wert, also z.B.: um 2, wenn durch die (neue) Konstante eine Zeit von 2 Sek. zwischen den Interrupts bestimmt.
Weiter oben wurde schon erwähnt, dass durch Betrieb mit einem "niederfrequenten" Quarz der Stromverbrauch ebenfalls drastisch reduziert wird, was aber auch eine Anpassung der Konstanten für den Timer impliziert - möglicherweise kannst Du dann die Sekunden ganz vergessen und einen Minuten - Timer aufbauen - 59 mal weniger Interrupts, aber auch die Reaktionszeit auf Ausfall wird entsprechend schlechter!

Nebenbei bemerkt:
Der ATtiny2313 hat Pins, welche einen Interrupt auslösen können, wenn sich an Ihnen der Pegel ändert ... wäre das nicht eine Möglichkeit die Netz/Batt Umschaltung zu realisieren?


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 23 Beiträge im Durchschnitt pro Tag       heute wurden bisher 13 Beiträge verfasst
© x sparkkelsputz        Besucher : 180690733   Heute : 6631    Gestern : 12674    Online : 372        29.3.2024    13:22
9 Besucher in den letzten 60 Sekunden        alle 6.67 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0255801677704