Guten Abend, ich verwende einen ATtiny 12 mit 32.768Hz-Quarz. Wenn ich den µC per Taster (Interrupt) aus dem Power-Down-Modus hole, dauert das ca. 2-3 Sekunden. Ich merke das daran, dass der erste Befehl LEDs einschaltet. Ist diese Zeit normal? Ich hab da eine Dauer von ein paar Zyklen im Hinterkopf. Wie lässt sich der Vorgang beschleunigen? Grüße Patrick
Hallo, @Patrick schreibe 100x auf ein Blatt Papier: Ich soll Quelltexte bei Softwarefragen mit Posten. MfG
Wie wurde der power down initialisiert ? Wie wurden die fuses initialisiert?
Auf Papier gibt es aber kein Copy und paste ;) Fuses sind RSTDISBL aktiviert und External Low Frequenvy Oscillator, wenn ich mich recht erinnere. hier mal ein Auszug aus dem Code:
1 | .org 0x000 ; Sprungmarke zu main |
2 | rjmp main |
3 | |
4 | .org 0x001 ; Wenn Taster gedrückt -> Interrupt, dann orange werden |
5 | rjmp int0_isr |
6 | |
7 | .org 0x003 ; Sprungmarke Interrupthandler bei Timer0-Overflow |
8 | rjmp t0_ovf |
9 | |
10 | main: |
11 | |
12 | |
13 | ldi temp1, 0b011101 |
14 | out DDRB, temp1 ; PB1+5 Eingang |
15 | |
16 | ldi temp1, 0b00111010 |
17 | out PORTB, temp1 ; Eingänge mit Pullup-Widerstand, Ausgänge high=LED an, anfangs aus |
18 | |
19 | ldi temp1, 0<<ISC01 | 1<<SM ; 0 in isc01-> low level interrupt, SM=1->power-down |
20 | out MCUCR, temp1 ; INTO auslösen bei fallender Flanke (=wenn Taster gedrückt wird) |
21 | |
22 | ldi temp1, 0b01000000 |
23 | out GIMSK, temp1 ; INT0 aktivieren um Sleep-Mode zu beenden |
24 | |
25 | ; Stackpointer wird automatisch initialisiert |
26 | |
27 | ldi reload, 248 ; Reload-Wert = 248 |
28 | |
29 | ldi temp1, 1<<TOIE0 |
30 | out TIMSK, temp1 ; Timer0 Overflow Interrupt aktivieren |
31 | |
32 | |
33 | sei ; Interrupts aktivieren |
34 | |
35 | rjmp schlafen ; nach Initialisierung schlafen |
36 | |
37 | orange: |
38 | sbi PORTB,rot ; rot an |
39 | sbi PORTB,gruen ; und grün an = orange |
40 | |
41 | (...uninteressanter code...) |
42 | |
43 | schlafen: |
44 | in temp1, MCUCR |
45 | ori temp1, 1<<SE |
46 | out MCUCR, temp1 ; schlafen aktivieren |
47 | sleep ; Gute N8 |
48 | nop |
49 | nop |
50 | nop ; Sicherheit |
51 | |
52 | int0_isr: |
53 | ;sei |
54 | rjmp orange |
> int0_isr: > ;sei > rjmp orange Was soll das denn sein? Gleichzeitig ISR und Teil des Hauptprogramms? Wo ist das reti?
Patrick wrote: > ich verwende einen ATtiny 12 mit 32.768Hz-Quarz. Wenn ich den µC per > Taster (Interrupt) aus dem Power-Down-Modus hole, dauert das ca. 2-3 > Sekunden. Ja, das ist normal. Ein Quarz ist ein Schwinger mit sehr hoher Güte, daher wird er auch nur mit sehr geringer Energie erregt, sonst könnte er brechen. Ein 10MHz Quarz braucht etwa 10ms, also 100000 Perioden zum Anschwingen. Bei 32kHz dauert das entsprechend länger. Peter
> int0_isr: > ;sei > rjmp orange > Was soll das denn sein? Gleichzeitig ISR und Teil des Hauptprogramms? Wo > ist das reti? Das wurde schon in einem anderen Thread diskutiert, da der Tiny 12 einen Hardwarestack hat kann man das so machen und statt einem Rücksprung eine Verzweigung machen. > Ja, das ist normal. > Ein Quarz ist ein Schwinger mit sehr hoher Güte, daher wird er auch nur > mit sehr geringer Energie erregt, sonst könnte er brechen. Schade, die befürchtung hatte ich auch.
> da der Tiny 12 einen Hardwarestack hat kann man das so machen > und statt einem Rücksprung eine Verzweigung machen. Ach so, richtig. Beim Tiny12 ist ja alles anders. Da hatte ich nicht dran gedacht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.