-
Mikrobasic sleep command
Ηθελα να ρωτήσω πώς μπορώ να ξυπνήσω εναν μικροελεγκτή απο sleep.
To πρόγραμμα μου δεν έχει κουμπιά κλπ.
Θέλω να πέφτει σε sleep για 15 λεπτά και μετά να εκτελεί το πρόγραμμα απο την αρχή. Νομίζω οτι ο WDT χρησιμοποιείται σε αυτές τις περιπτώσεις αλλα δεν εχω καταλάβει καλά τον τρόπο.
Εχει κανείς καμιά ιδέα?
-
Για να "ξυπν'ησει" απο το sleep ο PIC θέλει κάποιο INTERRUPT.
Το WDT δημιουργεί ένα τέτοιο
Για προγραμματισμό σε CCS δες εδώ http://www.ccsinfo.com/forum/viewtopic.php?p=15872 (ενδεικτικά)
Για Assembly δές εδώ http://www.dontronics.com/psbpix/sleep.html
-
Χμ....
Δεν μπορώ. Για κάποιο λόγο δε μου χωράει στο κεφάλι, δεν κατάφερα να το κάνω.
ΔΕΝ ΠΑΙΖΩ!!
-
Χρησιμοποιώντας τον WDT για να επαναφέρεις τον pic σε λειτουργία μετά από εντολή sleep, ο μέγιστος χρόνος εξαρτάται απο ποιόν pic χρησιμοποιείς. Γιατί κάποιοι pic έχουν διαφορετικά χαρακτηριστικά ως προς τον WDT και μπορεί να κυμαίνεται από λίγα sec έως λίγα λεπτά.
Τώρα εσύ που θέλεις να ξυπνά ο pic μετά απο 15 λεπτά, το μόνο που μπορώ να σκεφτώ είναι να τον ξυπνάς μέσω του MCLR, αλλά αυτό προυποθέτει ότι θα υπάρχει κάποιο εξωτερικό κύκλωμα το οποίο θα κάνει reset τον pic.
-
Εχεις δίκιο BOOMER αλλα προσπαθώ να μειώσω τα εξαρτήματα και να ελαχιστοποιήσω την κατανάλωση όσο μπορώ. Θα συνεχίσω το ψάξιμο.
-
Προσφατα έβαλα έναν 16F88 για ύπνο. Το ξύπναγα με τον WDT κάθε περίπου 4' αν θυμάμαι καλά, ή με interrupt στο B0 με μπουτόν.
Μπορείς να κάνεις ένα εξωτερικό RC να δημιουργει interrupt στο B0, είναι μια λύση, αλλά θες κι εσύ 15' πολλά είναι. κόψε κάτι μάστορα, δεν βγαίνω.
Άλλη λύση είναι εξωτερικό Watchdog, αλλά δεν ξέρω σε τι χρόνους βγαίνουν.
-
Εεεεεεε μα 15 θέλω.
Εξωτερικό watchdog?? Εμείς οι ιθαγενείς δεν έχουμε τέτοια αλλα θα το ψάξω, έχει μεγάλη κατανάλωση?
-
-
Ευχαριστώ Γιάννη θα το τσεκάρω αμέσως.
-
Ιδέα:
Χρησιμοποίησε το εσωτερικό WDT του μικροελεκτή όσο και να είναι αυτό, και για κάθε φορά που ξυπνάει να μετράει πχ στις 5 φορές που θα ξυπνήσει, να κάνει την δουλειά, αλλιώς να ξαναπέσει για ύπνο.
Το κάνω λιανά:
Θες χρόνο 15 λεπτά.
Έστω ότι ο εσωτερικός WDT σου δίνει χρόνο 1 λεπτο.
Έστω ότι κάθε 15' θα κάνεις μια δουλειά που θες, έστω μετράς μια θερμοκρασία.
έχεις έναν καταχωρητή πχ waketimes που μετράει πόσες φορές θα ξυπνήσει για να κάνει την δουλειά.
Ξεκινάει ο κώδικας κανονικά, πέφτει για ύπνο.
όταν ξυπνάει αυξάνει κατα ένα τον waketimes
ελέγχει αν είναι 15:
-> αν δεν είναι 15 ξαναπέφτει για ύπνο
-> αν είναι 15 πάει να μετρήσει θερμοκρασία κτλ, και μετα μηδενίζει τον waketimes και ξαναπέφτει για ύπνο
Αποτέλεσμα: κάθε φορά που ξυπνάει και ο waketimes δεν είναι 15 μέσα σε 4-5 εντολές έχει ξαναπέσει για ύπνο χωρίς να ξοδεύει πολύ ενέργεια. ;)