Autor |
|
|
|
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?
|