- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Ewiger Blinker ATtiny13

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    Ewiger Blinker ATtiny13

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    Ich bin dabei, einen "ewigen Blinker" mittels eines ATtinys zu bauen. Dazu lege ich den Chip schlafen (im Power-down Mode >0,1 uA Verbrauch), und dann soll er durch den Timer-Interrupt aufwachen. Es hängt nur eine LED am PB0.

    Dazu hätte ich diesen Code so geschrieben / angepasst.

    Leider tut er nichts. Die LED blinkt einmal (Funktionstest) und dann nie wieder...


    Code:
    $regfile = "attiny13.dat"                                   ' specify the used micro
    $crystal = 1000000                                          ' used crystal frequency
    
    $hwstack = 20                                               ' default use 32 for the hardware stack
    $swstack = 10                                               ' default use 10 for the SW stack
    $framesize = 30                                             ' default use 40 for the frame space
    
    
    
    
    
    'The following code shows how to use the TIMER0 in interrupt mode
    
    Config Portb = Output
    Dim I As Byte
    I = 0
    
    
    'Configute the timer to use the clock divided by 1024
    Config Timer0 = Timer , Prescale = 1024
    
    'Define the ISR handler
    On Ovf0 Tim0_isr
    'you may also use TIMER0 for OVF0, it is the same
    
    Enable Timer0                                               ' enable the timer interrupt
    Enable Interrupts
    
    Portb = &B00000000
      Wait 1
    Portb = &B11111111       'Funktionstest LED ein und ausschalten
      Wait 1
    Portb = &B00000000
    
                                              'allow interrupts to occur
    Do
       Powerdown
           MCUCR = bits( SE , SM1)
           SLEEP
    
    Loop
    
    'the following code is executed when the timer rolls over
    Tim0_isr:
    
      I = I + 1
    
      If I >= 9 Then
       I = 0
        Portb = &B11111111
        Wait 1
        Portb = &B00000000
      End If
    
    Return
    
    
    End

    Wäre echt classe, wenn mir jemand mit Interrupterfahrung den Fehler fände


    Danke & Mfg

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Zum Powerdown-Modus schreibt das Datenblatt fogendes:


    "When the SM1..0 bits are written to 10, the SLEEP instruction makes the MCU enter
    Power-down mode. In this mode, the Oscillator is stopped, while the external interrupts,
    and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog
    Reset, a Brown-out Reset, an external level interrupt on INT0, or a pin change interrupt
    can wake up the MCU. This sleep mode halts all generated clocks, allowing operation of
    asynchronous modules only."


    Da der interne Oszillator angehalten wird, gibt´s auch keinen Timer-Overflow mehr. Die einzige Möglichkeit eines Aufwachens ohne ein externes Ereignis wäre der Watchdog.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Zitat Zitat von Sauerbruch Beitrag anzeigen
    Zum Powerdown-Modus schreibt das Datenblatt fogendes:


    "When the SM1..0 bits are written to 10, the SLEEP instruction makes the MCU enter
    Power-down mode. In this mode, the Oscillator is stopped, while the external interrupts,
    and the Watchdog continue operating (if enabled). Only an External Reset, a Watchdog
    Reset, a Brown-out Reset, an external level interrupt on INT0, or a pin change interrupt
    can wake up the MCU. This sleep mode halts all generated clocks, allowing operation of
    asynchronous modules only."


    Da der interne Oszillator angehalten wird, gibt´s auch keinen Timer-Overflow mehr. Die einzige Möglichkeit eines Aufwachens ohne ein externes Ereignis wäre der Watchdog.
    Ok, das heißt in der Theorie könnte der Code schon das tun, was ich wollte. Nur halt gibt es keinen Timer-Interrupt.

    Sprich, ich werde mich einlesen, wie man den WatchDog bedient.


    Danke!!

    Lg

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Sprich, ich werde mich einlesen, wie man den WatchDog bedient.
    1. Weißt du schon, was der Watchdog macht?

    2. Schon mal nen Blick ins Datenblatt geworfen? Hier gibts den Idle Mode
    Idle mode enables the MCU to wake up from external triggered interrupts as well as internal
    ones like the Timer Overflow.
    3. Warum einen µC für ein Blinklicht?

    mfg
    Geändert von Wsk8 (08.09.2013 um 22:30 Uhr)

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    2. Schon mal nen Blick ins Datenblatt geworfen? Hier gibts den Idle Mode
    Das stimmt - aber der Idle-Mode reduziert die Stromaufnahme ungefähr nur auf 50%. Da ist der Power-Down-Modus schon wesentlich effektiver, was Stromsparen anbetrifft.

    Bleibt natürlich der berechtigte Punkt 3. - mit einem CMOS-Inverter, einem 10MOhm-Widerstand und ´nem 100nF-Kondensator ließe sich auch ein Rechteckgenerator aufbauen, der unter 1µA zieht...

  6. #6
    Hallo runner02,
    probiers doch mal so:
    Code:
    $regfile = "ATtiny13.DAT"
    $crystal = 128000                                           'Reale Frequenz des internen 128kHz-Oszillators
    Config Portb = &B00000001                                   'Pinb.0 auf 'Ausgang', Rest auf 'Eingang' schalten
           Portb = &B11111110                                  'Pullups zuschalten, au¼er fÄur Pinb.0
    Stop Adc                                                    'A/D-Wandler abschalten, um Strom zu sparen
    Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen
    
                                        
    Enable Interrupts
    
    
    Do
      Portb.0 = 1						
      Wdtcr = &B11000000				       'watchdog auf 16ms setzen	
      Reset Watchdog
      Powerdown
      Portb.0 = 0
      Wdtcr = &B11000111                                 'watchdog auf 2s setzen
      Reset Watchdog
      Powerdown
    
    Loop
    
    End
    So hab ich meine programmiert und die halten jahre mit einer mignon zelle.
    hier noch ne schaltung: http://www.b-kainka.de/Weblog/Schalt...loflasher.html
    und schau dir bitte mal "das Kochbuch" an, das enthält auch ne liste mit den möglichen Watchdogzeiten: http://www.reaktivlicht.de/kochbuch_V3.pdf
    Geändert von PsychoDreams (14.12.2013 um 21:25 Uhr)

Ähnliche Themen

  1. Optimierter ewiger Blinker
    Von runner02 im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 31.08.2013, 21:32
  2. Blinker
    Von roboter14 im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 24.04.2010, 18:30
  3. einfachster blinker
    Von nullDog im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 27.04.2005, 15:32
  4. simpeler blinker
    Von Goblin im Forum PIC Controller
    Antworten: 10
    Letzter Beitrag: 20.12.2004, 17:54
  5. Led Blitzer/Blinker
    Von VAG im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 24.06.2004, 19:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen