Ich möchte mit Bascom einen ATtiny13 aus dem Powerdown via Watchdog per Interrupt aufwecken. Per Reset funktioniert es, aber per Interrupt scheint das in Bascom nicht möglich zu sein. (Laut Datenblatt kann der ATtiny13 das und es gibt auch eine gut erklärte App Note) Die Register setzen ist ja kein Problem, nur "On Wtd" kennt Bascom anscheinend nicht und das wird im Editor auch nicht farblich hervorgehoben. Im MCS-Bascom-Forum finde ich einige Einträge dazu, die aber mehr als 10 Jahre alt sind. Andererseits finde ich im Netz zahlreiche Bespiele, die angeblich funktionieren. Ich nutze Bascom 2.0.7.9 (Demo). Hat jemand eine Version in der das möglich ist und welche ist das? Oder funktioniert das in der kostenpflichtigen Vollversion? Auf der Webseite steht allerdings nichts von Watchdog Interrupt: https://www.mcselec.com/index.php?option=com_content&task=view&id=14&Itemid=103 "Interrupt programming: ON INT0/INT1/TIMER0/TIMER1/SERIAL, RETURN, ENABLE, DISABLE, COUNTERx, CAPTUREx, INTERRUPTS, CONFIG, START, LOAD." Bin gerade ratlos...
Der Watchdog funktioniert auch mit der Demo. Er wird mit "Config Watchdog" und anschließend "Start Watchdog" scharf geschaltet. Maximale Zeit für die Auslösung sind 8 Sekunden.
Winfried K. schrieb: > Der Watchdog funktioniert auch mit der Demo. > Er wird mit "Config Watchdog" und anschließend "Start Watchdog" scharf > geschaltet. Maximale Zeit für die Auslösung sind 8 Sekunden. Das wissen wir doch alle schon! Die offene Frage: Ist man in der Lage den WDT Interrupt mit Bascom zu fangen/nutzen? Oder kann die Sprache das nicht?
Ich kenne mich zwar mit Bascom nicht aus, aber er schreibt ja oben bzgl "ON Interrupt": https://avrhelp.mcselec.com/index.html Da heißt es dann:
1 | Or you can use the AVR name convention: |
2 | OC2 , OVF2, ICP1, OC1A, OC1B, OVF1, OVF0, SPI, URXC, UDRE, UTXC, ADCC, ERDY and ACI. |
3 | The available interrupts depend on the processor. |
Hast Du einfach schonmal probiert was passiert wenn du die "Name convention" des Watchdog ISRs verwendest?
Du mußt einfach nur schauen, wie ein anderer Interupthandler aufgebaut ist. Und das dann als Gerüst für den Watchdoginterrupt nehmen und ihm den entsprechenden Vector zuweisen. In C ist das ganz einfach, da nimmt man die Namen, die im Datenblatt stehen, mit "_" für Leerzeichen und "_vect" am Ende.
Hi >Da heißt es dann: >Or you can use the AVR name convention:> >OC2 , OVF2, ICP1, OC1A, OC1B, OVF1, OVF0, SPI, URXC, UDRE, UTXC, >ADCC, ERDY and ACI. >The available interrupts depend on the processor. Der letzte Satz ist ausschlaggebend. Bascom kennt alle für ensprechenden AVR vorhandenen Interrupts. Also auch den WDT, wenn vohanden. Wenn nicht, bleibt nur in MCUSR die RESET-Auslösende Flags zu detektieren und entsprechend zu reagieren. MfG Spess
Spess53 schrieb: > Also auch den WDT, wenn vohanden. Der ist vorhanden beim ATTiny13. Warum glaubst Du, dass ich schreibe: MWS schrieb: > Dietmar S. schrieb: >> On Wtd > > On Watchtimerdog würde ich auch nicht kennen. :D Aber für solch' dezente Andeutungen ist das Forum nichts, da muss der derbe Keil kommen.
Hi <Warum glaubst Du, dass ich schreibe: Warum glaubst du das ich alle AVRs nach WDT-Interrupt untersuche? MfG Spess
Spess53 schrieb: > <Warum glaubst Du, dass ich schreibe: > > Warum glaubst du das ich alle AVRs nach WDT-Interrupt untersuche? Die Pointe ist Dir wohl verborgen geblieben, da hat auch der derbe Keil nichts geholfen. Selbst wenn Du vermutest, dass Du irgendwas durchsuchen sollst, dann sicher nicht "alle AVRs", denn um alle ging's nicht, sondern im Speziellen um: Dietmar S. schrieb: > mit Bascom einen ATtiny13
Geht simpel:
1 | $Regfile="attiny13.dat" |
2 | $Crystal=4800000 |
3 | $hwstack=16 |
4 | $swstack=20 |
5 | $framesize=24 |
6 | |
7 | Config PORTB.1 = Output |
8 | LED ALIAS PORTB.1 ' LED zur Anzeige |
9 | LED = 0 |
10 | Config Watchdog = 4096 |
11 | Enable Wdt |
12 | |
13 | Do |
14 | LED = 1 |
15 | Waitms 500 |
16 | LED = 0 |
17 | Power Powerdown |
18 | Loop |
19 | End ' Mainloop |
Nachtrag: Die LED macht 1x blink und geht dann für 4s schlafen, dann wieder von Vorne...
:
Bearbeitet durch User
UDietmar S. schrieb: > Per Reset funktioniert es, aber per Interrupt > scheint das in Bascom nicht möglich zu sein. Uwe D. schrieb: > Geht simpel: Uwe, ist deine Lösung wirklich per Interrupt und nicht per Reset? Dietmar möchte ja zum Beispiel alle 60 Sekunden blinken, das heisst es muss über mehrere Watchdog-Unterbrechungen gezählt werden. Könnte man natürlich über Eeprom machen, das kostet aber wiederum Strom ... LG, Sebastian
:
Bearbeitet durch User
Einfach Kopieren und im Simulator ausführen... Eine ISR kann man machen, wer das unbedingt braucht. Der Tiny pennt beim Powerdown ein, der WDT weckt ihn wieder und läuft da weiter wo er eingepennt ist. Benutze ich für kleine SOLAR-Module und ein paar LEDs und illuminiere damit den Garten im Winter.
Arduino Fanboy D. schrieb: > Oder existiert die im dunklen Schatten? Yep, tut sie. Ohne ISR steht ein RETI am entsprechenden Vektor in der IVT.
Beitrag #6655009 wurde vom Autor gelöscht.
Leider habe ich jetzt erst entdeckt, dass ich noch viele Antworten bekam. Hatte mich damals im Forum abgemeldet und hier nicht mehr rein gesehen. Also erst mal ein großes Danke für die vielen Infos! Ich werde die Tage versuchen die Ratschläge umzusetzen bzw. auszuprobieren.
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.