Forum: Mikrocontroller und Digitale Elektronik ATtiny 12 - Aufwachzeit mit Uhrenquarz


von Patrick (Gast)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Hallo,

@Patrick

schreibe 100x auf ein Blatt Papier:

Ich soll Quelltexte bei Softwarefragen mit Posten.

MfG

von Aha (Gast)


Lesenswert?

Wie wurde der power down initialisiert ? Wie wurden die fuses 
initialisiert?

von Patrick (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

> int0_isr:
>   ;sei
>   rjmp orange

Was soll das denn sein? Gleichzeitig ISR und Teil des Hauptprogramms? Wo 
ist das reti?

von Peter D. (peda)


Lesenswert?

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

von Patrick (Gast)


Lesenswert?

> 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.

von Rolf Magnus (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.