Powerdown ATtiny85

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Powerdown ATtiny85

      Hallo,

      ich habe noch nie mit den Sleepmodi gearbeitet und bin leider über die Suche nicht wirklich fündig geworden.
      Ich möchte einen ATtiny85 (int. RC at 1MHz) mit ein und demselben Taster in den Powerdown schicken und wieder aufwecken.
      Den Taster wollte ich an PB5 (Reset deaktiviert) nach Masse anschließen, bin bei der PIN-Wahl aber noch frei.

      Wie konfiguriere ich den Tiny so, dass er beim Drücken des Tasters wieder aufwacht?

      MfG
      Tido
    • Tido wrote:

      (Reset deaktiviert)
      Bloß nicht. Wenn du den deaktivierst kommst du nicht mehr ohne weiteres (HV-Programmer erforderlich) an den Tiny ran.
      Einen An/Aus-Schalter kannst du über einen Interrupt realisieren. Dazu zwei Flags definieren. Einen für den Interrupt und einen für den aktuellen Status.
      Also ob An oder Aus.

      Das könnte so ähnlich aussehen

      BASCOM Source Code

      1. Dim Int_flag As Bit , An_aus As Bit
      2. An_aus = 0
      3. Do
      4. If Int_flag = 1 Then
      5. Toggle = An_aus
      6. Int_flag = 0
      7. End If
      8. If An_aus = 0 Then
      9. ... irgendwelche Aufgaben bevor er schlafen geht
      10. Wait 2
      11. Config Powermode = Powerdown
      12. Else
      13. ... Aufgaben zum aufwecken
      14. End If
      15. Loop
      16. End
      17. Int0_irq:
      18. Int_flag = 1
      19. Return
      Display All
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • djmsc wrote:

      Bloß nicht. Wenn du den deaktivierst kommst du nicht mehr ohne weiteres (HV-Programmer erforderlich) an den Tiny ran.
      Hm, daran habe ich nicht gedacht. Dann habe ich einen Pin zu wenig (aber schon eine andere Idee, das zu lösen).
      Was ich immer noch nicht verstanden habe: Wo/wie definiere ich, dass der ATtiny nur beim Druck auf den Taster aufwacht?
    • djmsc wrote:

      Wenn du den Tiny in Powerdown schickst reicht ein kurzer Impuls am Interrupt-Pin und er wacht wieder auf.
      Also wacht er auf, egal welcher Port sich ändert?
      Kann ich auch konfigurieren, dass er erst aufwacht, wenn Pin xy=High?

      Was meinst du mit "Interrupt-Pin"? Sind ja alle PCINTx
      Im "Normalfall" sind alle Input-Pins Low; ich möchte gerne, dass er aufwacht, wenn einer davon High wird. Geht das?

      Da muss ich doch irgendwie "config intx" oder so angeben???
    • Um den Attiny aufzuwecken genügt ein kurzer Tastendruck. In diesem Fall legt er sich automatisch nach 10 Minuten schlafen. Aber dir geht es ja hauptsächlich um das Aufwecken!

      Source Code

      1. $regfile = "Attiny85.dat"
      2. $crystal = 8000000
      3. $hwstack = 32
      4. $framesize = 64
      5. $swstack = 32
      6. '**************************************************************
      7. Config Pinb.2 = Input 'Taster
      8. Config Portb.1 = Output 'Led_rot
      9. Config Portb.0 = Output 'Led_gruen
      10. Config Portb.3 = Output 'Mosfet
      11. 'Alias Namen vergeben
      12. '**************************************************************
      13. 'Eingaenge
      14. Taster Alias Pinb.2
      15. 'Ausgaenge
      16. Led_a Alias Portb.1 'rote LED - Akku leer
      17. Led_k Alias Portb.0 'gruene LED - Akku OK
      18. Mosfet Alias Portb.3
      19. Portb.2 = 1 'Pull-Up fuer Taster
      20. Dim Messung As Word
      21. Dim Taster_flag As Bit
      22. Dim Sekunden As Byte
      23. Dim Ticks1 As Byte
      24. Const An_zeit = 150 'nach 10 Minuten wird die Spannungsversorgung des LC-Meter ausgeschaltet
      25. '8-Bit 4-Sekunden - Timer
      26. '**************************************************************
      27. Config Timer1 = Timer , Prescale = 16384 'Besonderheit des Attiny85; weitere moegliche Teiler 2048 / 4096 / 8192
      28. Enable Timer1
      29. On Timer1 Isr_timer1
      30. 'Analogwandler zur Akku-Spannungsmessung aktivieren
      31. Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56_nocap
      32. 'Analogwandler starten
      33. Start Adc
      34. On Int0 Int0_isr 'INT0 will be the wake-up source for Powerdown Mode
      35. Config Int0 = Low Level
      36. Enable Int0
      37. Enable Interrupts
      38. Taster_flag = 0
      39. Led_a = 0
      40. Led_k = 0
      41. Stop Adc
      42. Config Powermode = Powerdown
      43. 'Hauptschleife
      44. '**************************************************************
      45. Do
      46. If Taster = 0 Then
      47. Toggle Taster_flag
      48. Waitms 50
      49. Do : Loop Until Taster = 1
      50. Waitms 50
      51. End If
      52. If Sekunden < An_zeit And Taster_flag = 1 Then
      53. Mosfet = 1
      54. Else
      55. Sekunden = 0
      56. Taster_flag = 0
      57. Mosfet = 0
      58. Led_a = 0
      59. Led_k = 0
      60. Stop Adc
      61. Config Powermode = Powerdown
      62. End If
      63. If Mosfet = 1 Then Gosub Akkuspannung
      64. If Messung < 630 Then Taster_flag = 0 'Unterspannungs-Abschaltung bei 2,65V
      65. Loop
      66. End
      67. 'Der Attiny85 hat zwar zwei Timer, aber beide nur 8-Bit
      68. '**************************************************************
      69. Isr_timer1:
      70. '8 MHz / 16384 / 256 = 1,9 Hz
      71. Timer1 = 1
      72. Ticks1 = Ticks1 + 1
      73. If Ticks1 = 8 Then
      74. If Taster_flag = 1 Then
      75. Incr Sekunden 'alle 4 Sekunden wird um 1 Sekunde weitergezaehlt
      76. End If
      77. Ticks1 = 0
      78. End If
      79. Return
      80. '**************************************************************
      81. Akkuspannung:
      82. Start Adc
      83. Messung = Getadc(2) 'Messeingang = Pin3
      84. If Messung <= 688 Then 'Spannungsteiler + 470k - 750k GND ergibt Umschalschwelle bei 2,8V Akkuspannung
      85. Led_a = 1 : Led_k = 0
      86. Else
      87. Led_a = 0 : Led_k = 1
      88. End If
      89. Return
      90. '**************************************************************
      91. Int0_isr:
      92. 'wake_up
      93. Return
      Display All