start timer oder enable timer?

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

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • start timer oder enable timer?

      Hi,

      wo genau ist der Unterschied zwischen "start timer" und "enable timer", ich kann am verhalten des Programms keinen Unterschied feststellen. Ob es ein "start timer" oder ein "enable timer" im Programm wird soll nicht von meinem Gemütszustand oder dem Wetter abhängig sein, es soll schon zu der Aufgabe des Timers passen.

      Grüßle, Naubaddi
    • When you use the CONFIG TIMER0 statement, the mode is stored by the compiler and the TCCRO register is set.
      When you use the STOP TIMER0 statement, the TIMER is stopped.
      When you use the START TIMER0 statement, the TIMER TCCR0 register is loaded with the last value that was configured with the CONFIG TIMER0 statement.

      avrhelp.mcselec.com/index.html?config_timer0.htm

      Und Enable schaltet den gewünschten Interrupt ein:
      avrhelp.mcselec.com/index.html?enable.htm

      Die Hilfe ist nicht so schlecht, wie man glaubt ;)
    • Mit enable kannst Du einen gestoppten Timer nicht starten, sondern gibst lediglich den Interrupt frei der ausgeführt wird, wenn der Timer überläuft.

      Vorausgesetzt natürllich, das vorher
      1. eine ISR definiert wurde (on timer0 my_isr)
      2. die ISR auch angelegt wurde
      3. die Interrupts global freigegeben wurden (enable Interrupts)

      Der Befehl enable timer0 hat also (auch wenn er so klingt!) keinen Einfluss darauf, ob der Timer läuft oder nicht.

      (Ups - klassischer Doppel-post ;) )
    • Hi,

      die Hilfe avrhelp.mcselec.com/index.html?config_timer0.htm und avrhelp.mcselec.com/index.html?enable.htm hatte ich gelesen, hat mir aber nicht geholfen es zu verstehen. Habe jetzt ein paar Stunden über Eure Antworten nachgedacht und nochmal einiges gelesen, mein Ergebnis sieht so aus:

      nach "enable timer0" und "enable interrupts" läuft der Timer von 0 bis 255 macht einen Überlauf und läuft wieder von 0 bis 255..., nach einem "stop timer0" bleibt der Timer z.B. bei 164 stehen und nach einem "start timer0" läuft er bei 165 weiter.

      Ist das soweit richtig?

      Grüßle, Naubaddi
    • Nicht so ganz: Im Config Timer ist ein "Start Timer " enthalten. Er läuft also sofort nach dem Config los und immer durch, auch über den Überlauf (255,0,1...)hinweg. Ein Stop Timer hält ihn an bis zum nächsten Start Timer.

      Das Enable Timer ist etwas unglücklich gewählt - es sollte besser Enable Timer Ovf heißen.
      Es bezieht sich nur auf die Möglichkeit des Timers einen Interrupt aus zu lösen. (sobald er überläuft - daher Ovf=Overflow).

      Damit überhaupt Interrupts zugelassen werden brauchts dann noch ein Enable Interrupts. Das schaltet alle (enableten) Interrupts zu, nicht nur die des Timers.
    • Leute mein Hirn qualmt, habe ein kleines Testprogramm erstellt um irgendwie den Timer zu verstehen.Stimmen die Bemerkungen bei dem Testprogramm, wenn nicht, wo ist mein Denkfehler?

      BASCOM Source Code

      1. ' Compiler: Bascom-Demo 2.0.7.5
      2. '
      3. ' Dateiname: Timer0 A85.avr
      4. ' Funktion: mit Timer0 warten bis etwas gemacht werden soll
      5. $regfile = "attiny85.dat"
      6. $crystal = 8000000
      7. $hwstack = 30
      8. $swstack = 30
      9. $framesize = 30
      10. config timer0 = timer , prescale = 256 ' der Timer ist Konfiguriert
      11. ' 8.000.000Hz / 256 = 31.250Hz während den 31.250Hz zählt der Timer vo 0 - 255
      12. ' 31.250Hz / 256(1 Byte) = 122 Überläufe pro Sekunde
      13. on timer0 Timer_0 ' die Funktion die Timer_0 ausführen ausführen soll
      14. enable timer0 ' der Timer ist ???
      15. enable interrupts ' der Timer ist aktiv und führt die Funktion bei einem Überlauf aus
      16. config portb.2 = output
      17. LED alias portb.2
      18. LED = 0
      19. dim Soll as byte
      20. Soll = 0
      21. do
      22. ' nix zu tun
      23. loop
      24. end
      25. Timer_0: ' wird 122 x pro Sekunde aufgerufen
      26. if Soll > 61 then ' nach 61 Überläufen
      27. Soll = 0 ' wird Soll auf 0 gesetzt
      28. toggle LED ' und die LED eingeschaltet oder ausgeschaltet
      29. else
      30. incr Soll ' bei jedem Überlauf wird Soll um 1 erhöht
      31. endif
      32. return
      Display All
      Grüßle, Naubaddi
    • Hallo Naubaddi,

      vom reinen Code her müsste es so funktionieren. Funktioniert es denn??
      Zu den Bemerkungen ist zu bemerken:

      config timer0 = timer, prescale = 256 konfiguriert den Timer nicht nur, sondern lässt ihn auch loslaufen (wie Pluto25 bereits anmerkte). Der Timer läuft 122 mal pro Sekunde über und startet wieder bei 0. Mehr passiert bis hierhin nicht.

      enable timer0 legt fest, dass bei jedem Überlauf von timer0 die definierte ISR ausgeführt werden soll.

      enable interrupts legt fest, dass der Controller grundsätzlich Interrupts ausführen soll.

      Das mit den "enables" ist so ein bisschen wie Sicherungen in einem Haus: Jeder Raum hat seine eigene Sicherung, aber es gibt noch eine Hauptsicherung, die vor allem sitzt. Mit den Raumsicherungen kanst Du gezielt in einzelnen Zimmern den Strom zu- und abschalten, und mit der Hauptsicherung das ganze Haus. Oder anders gesagt: Damit eine Glühbirne brennt, muss sowohl die Raumsicherung drin sein als auch die Hauptsicherung.

      Enable interrupts und sein Gegenspieler disable interrupts sind praktische Befehle, wenn man vorübergehend nicht von Interrupts gestört werden möchte (z.B. bei zeitkritischen Messungen, Datenempfang o.Ä.). Einfach Hauptsicherung raus (=disable Interrupts), und schon sind alle Interrupts kaltgestellt.

      Neben dem globalen "Enable Interrupts" müssen diejenigen Interrupts, die ausgeführt werden sollen, auf der Ebene "darunter" aktiviert werden. Dies wäre dann also z.B. enable timer0.

      Nochmal - der Lauf des Timers wird durch die enable- oder disable-Befehle nicht beeinflusst. Dies geschieht mit einem einfachen start timer0 oder stop timer0.
    • Hi Einzeller,

      ja das Testprogramm und auch andere Programme die schon längere Zeit ihren Dienst verrichten funktionieren, um nicht für jede Kleinigkeit zu Fragen möchte ich halt einigermaßen wissen was ich da mache.

      Was mir jetzt richtig geholfen hat um enable, start, stop... bei einem Timer besser zu verstehen ist Dein Vergleich mit den Sicherungen im Haus, ein großes DANKE für diesen Vergleich :-).

      Grüßle, Naubaddi
    • Hi,

      habe ein kleines Programm geschrieben um 2 Spannungen zu überwachen, dabei wurde enable timer0, stop timer0 und start timer0 verwendet. Vom Prinzip würde auch nur enable timer0 reichen wenn es erst dann benutzt wird wenn der Timer gebraucht wird, also erst in den 2 Zeilen wo start timer0 steht, durch enable, start und stop finde ich das Programm irgendwie übersichtlicher. In der do loop Schleife gibt es kein stop timer0, wenn eine Spannung überschritten wird soll es blinken bis ich den Fehler gefunden habe. Dann eine Entscheidung treffen was zu tun ist, Fehler beheben z.B. AKKU tauschen, Kurzschluss beseitigen... War es nur ein Spannungseinbruch warum auch immer kann das Programm mit der Resettaste neu gestartet werden, wenn der AKKU getauscht wurde ist das Programm eh aus und startet beim erneuten einschalten wieder.

      Ist es richtig was ich da geschrieben habe, oder habe ich es immer noch nicht verstanden?

      Das Programm:

      BASCOM Source Code

      1. ' Compiler: Bascom 2.0.7.5
      2. '
      3. ' Dateiname: Spannung-messen AKKU-uC A85.avr
      4. ' Funktion: 2 Spannungen messen und je nach Spannung etwas ausführen
      5. ' 1. Eingangsspannung Uin (AKKU)
      6. ' > 8,0V rote LED an, alles i.O.
      7. ' < 8.0V rote LED aus, die gelbe LED blinkt 6*/Sekunde bis die Reset-Taste gedrückt wird
      8. ' 2. Ausgangsspannung Uout (LM317)
      9. ' > 4,5V grüne LED an, alles i.O.
      10. ' < 4,5V grüne LED aus, die gelbe LED blinkt 12*/Sekunde bis die Reset-Taste gedrückt wird
      11. ' Datum: Start 17.12.2021, Stand 28.12.2021
      12. ' Von: Naubaddi foto-schubser@arcor.de
      13. '
      14. ' ATtiny85 (B.5 Reset)
      15. '
      16. ' +---v---+
      17. ' PCINT5/RESET/ADC0/dW B.5 |1 8| VCC
      18. ' PCINT3/XTAL1/CLKI/OC1B/ADC3 B.3 |2 7| B.2 SCK/USCK/SCL/ADC1/T0/INT0/PCINT2
      19. ' PCINT4/XTAL2/CLKO/OC1B/ADC2 B.4 |3 6| B.1 MISO/DO/AIN1/OC0B/OC1A/PCINT1
      20. ' GND |4 5| B.0 MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0
      21. ' +-------+
      22. '
      23. ' Spannungsteiler U2 = U * R2 / (R1 + R2) Spannungsregler LM317 Uout = 1,25*(1+(R2/R1))
      24. ' _____________
      25. ' Minus U Plus | | R1
      26. ' | <------------------------ | | LM317 | ______
      27. ' | R1 R2 | Plus -----| VI VO |---|______|---+----- Plus
      28. ' | ______ ______ | | | ADJ | | |
      29. ' +---|______|---+---|______|---+ | |_____________| | |
      30. ' | | <--------- | | | |
      31. ' | U2 | U1 | +---------------------+ |
      32. ' + <--------- + | | |
      33. ' | | Uin | | R2 | Uout
      34. ' | | | | ______ |
      35. ' Minus Plus | +----------|______|---+ |
      36. ' | | |
      37. ' | | |
      38. ' \_/ | \_/
      39. ' Minus ----------------------------------+----- Minus
      40. '
      41. ' 1* : R1 22K, R2 10K für den AKKU 9,6V 1* : R1 240R, R2 680R für die uC
      42. ' U : 9,6V vom AKKU, Nicht < 7,2V entladen! Uin : 9,6V vom AKKU
      43. ' U2 : uC ADC-Messung AKKU Überwachung Uout : 4,8V für die uC
      44. '
      45. ' 1* : R1 10K, R2 22K für den LM317
      46. ' U : 4,8V vom LM317
      47. ' U2 : uC ADC-Messung LM317 Überwachung
      48. '
      49. ' --- Mikrocontroler Daten... ----------------------------------------------------------------------------------
      50. $regfile = "attiny85.dat"
      51. $crystal = 1000000
      52. $hwstack = 32
      53. $swstack = 32
      54. $framesize = 40
      55. $PROG &HFF, &H62, &HDF, &HFF ' 1MHz
      56. ' &HFF, &HE2, &HDF, &HFF ' 8MHz
      57. ' --- Deklarationen... -----------------------------------------------------------------------------------------
      58. config timer0 = timer , prescale = 64 ' 1.000.000Hz/64=15.625Hz
      59. on timer0 blinken ' 15.625Hz/256(8 Bit Timer)=61,04 Überläufe
      60. enable timer0
      61. stop timer0
      62. config adc = single , prescaler = auto , reference = avcc
      63. config portb.4 = input : Uin alias getadc(2)
      64. config portb.2 = input : Uout alias getadc(1)
      65. config portb.0 = output : LED_rot alias portb.0 : LED_rot = 0
      66. config portb.1 = output : LED_gruen alias portb.1 : LED_gruen = 0
      67. config portb.3 = output : LED_gelb alias portb.3 : LED_gelb = 0
      68. enable interrupts
      69. ' --- Variablen... ---------------------------------------------------------------------------------------------
      70. const Faktor_Uin = 204.60 / 2.180
      71. const Faktor_Uout = 204.60 / 1.020
      72. dim Uin_alt as word
      73. dim Uout_alt as word
      74. dim dumm_w as word
      75. dim dumm_s as single
      76. dim Soll as byte : Soll = 6 ' 61,04 ist ca. eine Sekunde
      77. dim Ist as byte : Ist = 1 ' Zähler für Ist bis Soll erreicht wurde
      78. ' --- Programm Anfang ------------------------------------------------------------------------------------------
      79. do
      80. if Uin <> Uin_alt then ' AKKU Überwachung
      81. dumm_w = Uin
      82. dumm_s = dumm_w / Faktor_Uin
      83. Uin_alt = Uin
      84. Select case dumm_s
      85. case 0.000 to 8.000 : LED_rot = 0 : Soll = 12 : start timer0
      86. case 8.000 to 16.000 : LED_rot = 1
      87. end select
      88. end if
      89. if Uout <> Uout_alt then ' uC Überwachung
      90. dumm_w = Uout
      91. dumm_s = dumm_w / Faktor_Uout
      92. Uout_alt = Uout
      93. Select case dumm_s
      94. case 0.000 to 4.500 : LED_gruen = 0 : Soll = 6 : start timer0
      95. case 4.500 to 7.200 : LED_gruen = 1
      96. end select
      97. end if
      98. waitms 100
      99. loop
      100. ' --- Programm Ende --------------------------------------------------------------------------------------------
      101. end
      102. ' --- Proceduren, Funktionen... --------------------------------------------------------------------------------
      103. blinken: ' timer0 (8 Bit)
      104. if Ist >= Soll then
      105. Ist = 1
      106. toggle LED_gelb
      107. timer0 = 0
      108. else
      109. incr Ist
      110. endif
      111. return
      112. ' --------------------------------------------------------------------------------------------------------------
      Display All



      Grüßle, Naubaddi
    • Moin Naubaddi,

      das sieht alls schon fast gut aus!

      Den Timer0 in der ISR auf Null zu setzen kann man machen, muss man aber nicht: Da die ISR ja beim Überlauf angesprungen wird, ist der Timer ohnehin gerade bei 0 gewesen. Das Anspringen einer ISR braucht so ganz grob geschätzt 100 Prozessortakte - bei einem Prescaler von 64 dürfte der Timer in dieser Zeit noch nicht viel mehr als 1-2 Counts hochgezählt haben. Aber wie gesagt - das ist was für die "B-Note" :)

      Ein weiterer Punkt ist der, dass sich die Bedingungen bei Deinen Case-Abfragen überschneiden: 0.000 to 8.000 und 8.000 to 16.000. Wenn der gemessene Wert genau 8.000 ist (ist zwar eher unwahrscheinlich, aber es wird irgendwann passieren!), wird das Programm beide Anweisungen ausführen. So wie ich das einschätze wäre das hier nicht schlimm, dann müsste die grüne bzw. rote LED superkurz aus- und in der nächsten Codezeile wieder angehen - aber "sauberer" ist es, wenn sich die beiden abgefragten Bedingungen nicht überschneiden.

      Ob der Alias-Befehl auch mit getadc() funktioniert,weiß ich nicht; und was passiert wenn Du ein Word durch eine Fließkommazahl teilst (dumm_s = dumm_w / Faktor_Uin) kann ich auch nicht sagen; auch wenn das Ergebnis in eine Single-Variable übernommen wird. Dies kann man aber wunderbar am Simulator ausprobieren und sich alle Variablen in Ruhe anschauen. Ich persönlich (aber das ist nur mein Style!) mache es immer so, dass ich dem Controller überflüssiges Rechnen abnehme und mit einem Taschenrechner die "Grenzen" selber ausrechne.

      Im Beispiel Deiner Akku-Messung ginge das so:
      1. Referenz für den ADC ist Vcc, also 4,8V, damit beträgt die Auflösung 4,8V/1023 = 4,69 mV pro Bit.
      2. Der Spannungsteiler aus 22k und 10k teilt 7,2V auf 2,25 V runter. (NB: In Deinem Schaltplan sind R1 und R2 vertauscht!!)
      3. 2,25 V / 4,69 mV = 479 -> bei 7,2 V Akkuspannung liefert der ADC einen Wert von 479, das wäre dann die Grenze!

      Im Übrigen ist die Beschaltung des LM317 nicht korrekt: Doie Verbraucher müssen unbedingt direkt an den Anschluss Vo angeschlossen werden, und nicht über den Widerstand R1!

      The post was edited 2 times, last by Einzeller ().

    • Hi,

      O.K. dann fehlt mir noch der letzte Schlief wie man einen Timer perfekt benutzt ;-).
      Das der Befehl timer0 = 0 in der ISR überflüssig ist klinkt logisch, die ISR wurde ja ausgelöst weil der Timer gerade übergelaufen ist und wieder bei 0 anfängt a_45_132ca9f5 .
      Bei einem Prescaler von 64 funktioniert das Programm wie erwartet die LED blinkt schnell oder langsam, ob es jetzt 6 bzw. 12 * pro Sekunde ist habe ich nicht kontrolliert und wird drüber nachgedacht.
      Bis jetzt hat der Alias-Befehl auch mit getadc() funktioniert, finde es einfacher/übersichtlicher wenn keine festen Werte im Programm sind.
      Die "Grenzen" selber ausrechnen hört sich gut an, macht man ja nur 1* und gut ist.

      Ja der Stromlaufplan im Programm, war recht mühsam mit den Zeichen im Editor es halbwegs übersichtlich zu gestalten. Habe nix passendes gefunden um die Widerstände Senkrecht darzustellen, und beim drehen der Widerstände ist mir dann auch der Fehler passiert.

      Mit der Hilfe hier komme ich jedes mal ein Stück weiter, besten Dank für die Geduld die hier einem entgegen gebracht wird.

      Geänderter Stromlaufplan im Programm

      Source Code

      1. ' Spannungsteiler U2 = U * R2 / (R1 + R2) Spannungsregler LM317 Uout = 1,25*(1+(R2/R1))
      2. ' _____________
      3. ' Minus U Plus | |
      4. ' | <------------------------ | | LM317 |
      5. ' | R2 R1 | Plus -----| VI VO |--------------+----- Plus
      6. ' | ______ ______ | | | ADJ | | |
      7. ' +---|______|---+---|______|---+ | |_____________| R1 | |
      8. ' | | <--------- | | ______ | |
      9. ' | U2 | U1 | +----------|______|---+ |
      10. ' + <--------- + | | |
      11. ' | | Uin | | R2 | Uout
      12. ' | | | | ______ |
      13. ' Minus Plus | +----------|______|---+ |
      14. ' | | |
      15. ' | | |
      16. ' \_/ | \_/
      17. ' Minus ----------------------------------+----- Minus
      Display All

      Stromlaufplan für die Spannungsversorgung mit Überwachung:
      Spannung.jpg

      Grüßpe, Naubaddi
    • Hi,

      ja aus meiner Jugendzeit sind die Symbole die vor langer Zeit als Vektorbildchen erstellt wurden, das Programm war Corel-Draw bis Windows 98 danach kam Linux mit Open-Office-Draw und aktuell ist es Libre-Office-Draw. Wie man sieht hat meine Bibliothek die Betriebssysteme überlebt, und so ein Vektorprogramm funktioniert vom Prinzip immer gleich.

      Ja der Spannungsteiler, es ist mir auch schon aufgefallen das es etwas knapp geworden ist, bei einem 9,6V AKKU funktioniert es noch recht zuverlässig. Eine Zelle mehr und es gibt ungewollte merkwürdige Erscheinungen... ;( .

      Grüßle, Naubaddi
    • Hi,

      O.K. damit würde:
      die Spannung für den AKKU bei 16V 2,8V und bei 8V 1,4V sein
      die Spannung für die uC bei 5,0V 2,5V und bei 4,2V 2,1V sein

      Der Widerstand vor L1 hat 100Ohm, bei 1KOhm hört man ihn nicht mehr, der ist auch nicht unbedingt notwendig. AHA, das könnte der Effekt sein wenn die 4,2V für die uC unterschritten werden, dann blinken alle LEDs alle. Vor den LEDs gelb und rot sind 1KOhm und vor der Grünen sind 23KOhm weil es eine super helle LED ist, bei 1KOhm brauche ich im Bastelkeller kein Licht einschalten ;-).

      Mann O Mann das ist alles sehr kompliziert für einen Laien.

      Grüßle, Naubaddi
    • Naubaddi wrote:

      Mann O Mann das ist alles sehr kompliziert für einen Laien.
      Einzeln betrachtet wirds überschaubarer.
      Eine von den Leds braucht ca 1mA, Die muß die ZD1 nicht mehr übernehmen. Dadurch sinkt ihre Spannung ein wenig. Aber damit auch Vref, heißt der Adc-Wert "springt" auch. Die interne Vref ist da erheblich weniger betroffen.

      Die L1 lohnt da einen weiteren Blick: Sie (100Ohm) plus R10 sind 200 Ohm , bei 3,3V würden 16,5mA fließen. Die fließen auch über R3. Dort würden dann da 7,8V abfallen. Ohne denen Strom für den Tinny und die anderen Leds.

      Wenn das Programm beliebig Neustarts verträgt könnte es eine Art Notpiep ( wie bei Tiefkühltruhen bei Stromausfall) absenden. C8 vergrößern würde den Beeb verlängern.
      In der KFZ-technik würde einfach R3 verkleinert (ein Woche Batterie leer) :cursing:
      Wäre ein Piezo (wie in Armbanduhren) anstelle L1 möglich?
      Oder ein Transistor/Fet , der könnte dann auch eine Hupe schalten :D
    • Wenn man die Spannungsversorgung von den Controller über die Z-Diode betrachtet, ist die auch äuserst wackelig.

      Man muss ja bedenken, dass die Spannungsversorgung auch im schlechtesten Fall noch vorhanden sein soll.
      Und das ist bei Akkuspannung 8,4V, und wenn alle LED's + Lautsprecher aktiv sind.

      Die Z-Diode braucht ein Mindeststrom, der nicht unterschritten werden darf, sonst fällt die Z-Spannung drastisch ab. Also die Spannung für den Controller ist weg.
      Als Faustregel kann man von 10% des Stroms bei PTot ausgehen.

      Wenn ich den minimal-Strom berechne ohne den Controller anzuschließen, dann ergibt sich ein Strom in der Z-Diode (unbelastet) im Worst Case von
      I = (8,4V - 3,3V) / R3 = 10,8mA

      Und wenn nun der Controller angeschlossen wird, fließt Strom zum Controller, der nicht mehr durch die Z-Diode geht.
      Wenn man mal die 3 LED's betrachtet und Low-Current LED's annimmt, so kann man von mindestens 2-3mA pro LED ausgehen. Wenn alle 3 leuchten sollen, sind das 6-9mA.
      Ohne den Strom zu berücksichtigen von L1 und dem Controller selbst, bleibt da für die Z-Diode praktisch nix mehr übrig. D.h. Die Spannung wird einbrechen.

      Aber warum machst du nicht einfach anstelle der Z-Siode mit R3 einen Spannungsregler rein? Kannst auch einen 5V-Regler nehmen. Dann ist das Problem schon mal weg.
      Spannung ist stabil und alles ist gut.

      Für die LED's (wenn das Low-Current LED's sind) kannst du auch einen Vorwiderstand von 560 Ohm nehmen. Dann leichten die auch vernünftig bei 3,3V Controller-Spannung.
      Und dein Lautsprecher würde auch vernünftiges von sich geben können, wenn der Controller sauber versorgt ist (mit richtigem Vorwiderstand).
      Übrigens gibts auch solche kleinen Summer für 5V. Die summen dann ordentlich laut, wenn sie Spannung bekommen.
    • Morjen,

      @Pluto25, auf einen Piezo warte ich noch, der wurde schon bestellt.

      @Mitch64, im schlechtesten Fall...

      meine Gedanken waren/sind:

      • alles ist i.O., die rote LED ist an für AKKU i.O und die grüne LED ist an für uC i.O
      • AKKU <8,2V, grüne LED an (uC), rote LED aus (AKKU), gelbe LED blinkt langsam
      • AKKU >8,2V und uC <4,2V, grüne LED aus (uC), rote LED an (AKKU), gelbe LED blinkt schnell
      • AKKU <8,2V und uC <4,2V, rote LED aus (AKKU), grüne LED aus (uC), gelbe LED blinkt schnell oder langsam je nach dem was zuletzt eintraf und der Piezo piept


      alle Zustände wurden simuliert (Labornetzteil mit 2 Anzeigen 0,00-3,00A und 0,00-30,0V) es funktioniert so schon ganz gut, der ATtiny hat erst bei <2,6V die Fühler gestreckt und es blinkte unkontrolliert bis alles ist aus. Erst als L1 ein Summer der reichlich mA möchte dazu kam wurde es eng mit der Stromversorgung. Wie schon erwähnt ein Piezo ist bestellt, unbedingt notwendig ist ein Summer/Piezo nicht.

      Ja eine eigene Spannungsversorgung für den uC war angedacht, aus Platzmangel verworfen.

      Grüßle, Naubaddi