Πίνακας περιεχομένων:

Χρονοδιακόπτης προγραμματισμού 8 καναλιών: 13 βήματα
Χρονοδιακόπτης προγραμματισμού 8 καναλιών: 13 βήματα

Βίντεο: Χρονοδιακόπτης προγραμματισμού 8 καναλιών: 13 βήματα

Βίντεο: Χρονοδιακόπτης προγραμματισμού 8 καναλιών: 13 βήματα
Βίντεο: ΤΥΧΗ σκάει την εβδομάδα 29 Ιανουαρίου ως 4 Φεβρουαρίου (2024). Η αστρολόγος Αλεξάνδρα προβλέπει. 2024, Νοέμβριος
Anonim
Χρονοδιακόπτης προγραμματισμού 8 καναλιών
Χρονοδιακόπτης προγραμματισμού 8 καναλιών
Χρονοδιακόπτης προγραμματισμού 8 καναλιών
Χρονοδιακόπτης προγραμματισμού 8 καναλιών
Χρονοδιακόπτης προγραμματισμού 8 καναλιών
Χρονοδιακόπτης προγραμματισμού 8 καναλιών

Εισαγωγή

Χρησιμοποιώ τη σειρά μικροελεγκτών PIC της Microchip για τα έργα μου από το 1993 και έχω κάνει όλο τον προγραμματισμό μου σε γλώσσα συναρμολόγησης, χρησιμοποιώντας το Microchip MPLab IDE. Τα έργα μου κυμαίνονταν από απλά φανάρια και LED που αναβοσβήνουν, έως διεπαφές χειριστηρίου USB για μοντέλα Ε/Κ και αναλυτές διακοπτών που χρησιμοποιούνται στη βιομηχανία. Η ανάπτυξη χρειάστηκε πολλές ημέρες και μερικές φορές χιλιάδες γραμμές κωδικού συναρμολογητή.

Μετά τη λήψη του Matrix Multimedia Flowcode 4 Professional, ήμουν αρκετά σκεπτικός για το λογισμικό. Φαινόταν πολύ εύκολο να το πιστέψω. Αποφάσισα να το δοκιμάσω και δοκίμασα όλες τις διαφορετικές μακροεντολές Component, όλα με μεγάλη επιτυχία. Το καλύτερο μέρος της χρήσης του Flowcode ήταν ότι τα απλά έργα μπορούσαν να κωδικοποιηθούν σε μία μόνο νύχτα. Αφού έπαιξα με το I²C και ένα ρολόι πραγματικού χρόνου DS1307, αποφάσισα να σχεδιάσω τον χρονοδιακόπτη 8 καναλιών χρησιμοποιώντας το Flowcode. Δεν ήταν ένα μικρό και εύκολο έργο, πίστευα ότι αυτό θα ήταν ένα σπουδαίο έργο για να μάθω στον εαυτό μου το Flowcode.

Επιλογή μικροεπεξεργαστή και άλλων εξαρτημάτων

Λόγω του αριθμού των απαιτούμενων ακίδων εισόδου/εξόδου, ήταν σαφές ότι θα χρειαστεί μια συσκευή 40 ακίδων. Το PIC 18F4520 επιλέχθηκε, κυρίως για τη μνήμη προγράμματος 32K, και 1536 byte μνήμης δεδομένων. Όλα τα εξαρτήματα που χρησιμοποιούνται, είναι τυπικές συσκευές μέσω οπών, καθιστώντας δυνατή την κατασκευή του κυκλώματος στην πλακέτα Vero, εάν απαιτείται. Αυτό βοήθησε επίσης στην ανάπτυξη σε ένα breadboard.

Βήμα 1: Στόχοι έργου

Στόχοι του έργου
Στόχοι του έργου

Στόχοι

- Ακριβής τήρηση χρόνου, με εφεδρική μπαταρία.

- Όλα τα προγράμματα και τα δεδομένα που πρέπει να διατηρηθούν, ακόμη και μετά από απώλεια ισχύος.

- Απλή διεπαφή χρήστη.

- Ευελιξία προγραμματισμού.

Τήρηση χρόνου

Ζώντας σε μια περιοχή επιρρεπή σε διακοπές ρεύματος, το τυπικό 50/60Hz από τις γραμμές ρεύματος δεν θα είναι επαρκές για την ακριβή τήρηση του χρόνου. Ένα ρολόι σε πραγματικό χρόνο ήταν απαραίτητο, και αφού δοκίμασα πολλά τσιπ RTC, αποφάσισα το DS1307 λόγω του απλού ταλαντωτή και της ρύθμισης της μπαταρίας. Πολύ ακριβής διατήρηση του χρόνου επιτεύχθηκε χρησιμοποιώντας μόνο ένα κρύσταλλο 32.768 kHz συνδεδεμένο με το DS1307. Η ακρίβεια ήταν εντός 2 δευτερολέπτων σε μια δοκιμαστική περίοδο 2 μηνών χρησιμοποιώντας 4 διαφορετικές μάρκες κρυστάλλων.

Διατήρηση δεδομένων

Όλα τα δεδομένα του προγράμματος χρονοδιακόπτη πρέπει να διατηρούνται, ακόμη και κατά τη διάρκεια διακοπής ρεύματος. Με έως και 100 διαφορετικά προγράμματα και διάφορα δεδομένα διαμόρφωσης, κατέστη σαφές ότι τα 256 byte του ενσωματωμένου EEPROM του PIC δεν θα είναι αρκετά μεγάλα. Ένα 24LC256 I²C EEPROM χρησιμοποιείται για την αποθήκευση όλων των πληροφοριών προγραμματισμού.

Απλή διεπαφή χρήστη

Η διεπαφή χρήστη αποτελείται μόνο από 2 στοιχεία, μια οθόνη LCD 16 x 4 γραμμών με οπίσθιο φωτισμό LED και ένα πληκτρολόγιο 4 x 3. Όλος ο προγραμματισμός μπορεί να γίνει με το πάτημα μόνο μερικών κουμπιών. Οι προσθήκες στη διεπαφή είναι ένας ηχητικός πιεζοηχητικός βομβητής και οπτικός οπίσθιος φωτισμός LCD που αναβοσβήνει.

Βήμα 2: Προγραμματισμός Ευελιξία

Ευελιξία προγραμματισμού
Ευελιξία προγραμματισμού

Για να εξασφαλιστεί αρκετή ευελιξία προγράμματος, ο χρονοδιακόπτης διαθέτει 100 προγράμματα τα οποία μπορούν να ρυθμιστούν ξεχωριστά. Για κάθε πρόγραμμα, μπορούν να ρυθμιστούν τα On time, Off Time, Output Channels και Day of Week. Κάθε πρόγραμμα έχει τρεις λειτουργίες:

- Αυτόματα: Έχει οριστεί η ώρα, η ώρα εκτός λειτουργίας, το κανάλι εξόδου και η ημέρα της εβδομάδας.

- Απενεργοποιημένο: Το μεμονωμένο πρόγραμμα μπορεί να απενεργοποιηθεί, χωρίς να διαγραφούν οι ρυθμίσεις. Για να ενεργοποιήσετε ξανά το πρόγραμμα, απλά επιλέξτε διαφορετική λειτουργία.

- Ημέρα/Νύχτα: Έχει οριστεί η ώρα, η ώρα εκτός λειτουργίας, το κανάλι εξόδου και η ημέρα της εβδομάδας. Λειτουργεί το ίδιο με την αυτόματη λειτουργία, αλλά θα το κάνει

ενεργοποιήστε τις εξόδους μόνο μεταξύ των ωρών ενεργοποίησης και απενεργοποίησης όταν είναι σκοτεινό. Αυτό ενεργοποιεί επίσης τον πλήρη έλεγχο ημέρας/νύχτας

ως πρόσθετη ευελιξία να ανάβουν τα φώτα κατά το ηλιοβασίλεμα και να σβήνουν κατά την ανατολή.

Παράδειγμα 1: Θα ανάψει το φως μετά τις 20:00 και θα σβήσει το φως με την ανατολή.:

Στις: 20:00, Απενεργοποίηση: 12: 00, Παράδειγμα 2: Θα ανάψει το φως στο ηλιοβασίλεμα και θα σβήσει το φως στις 23:00.

Στις: 12:00

Εκτός: 23:00

Παράδειγμα 3: Θα ανάψει το φως κατά το ηλιοβασίλεμα και θα σβήσει το φως κατά την ανατολή.

Στις: 12:01

Εκτός: 12:00

Επιπλέον διαθέσιμες επιλογές, όλες λειτουργούν ανεξάρτητα από τα 100 προγράμματα ενεργοποίησης/απενεργοποίησης.

Κανάλια προγράμματος Ενεργά: Αντί να απενεργοποιήσετε πολλά προγράμματα, τα μεμονωμένα κανάλια εξόδου μπορούν να απενεργοποιηθούν χωρίς να χρειάζεται να αλλάξετε προγράμματα.

Βοηθητικές είσοδοι: Διατίθενται δύο ψηφιακές είσοδοι, που επιτρέπουν την ενεργοποίηση ορισμένων καναλιών εξόδου για συγκεκριμένο χρόνο. Μπορεί, για παράδειγμα, να ενεργοποιήσει ορισμένα φώτα κατά την άφιξη στο σπίτι αργά το βράδυ, όταν πατάτε ένα κουμπί στο τηλεχειριστήριο ή για να ενεργοποιήσετε μια διαφορετική σειρά φώτων όταν ενεργοποιείται ο συναγερμός του σπιτιού.

Βοηθητικές έξοδοι: Δύο επιπλέον έξοδοι (εκτός από τα 8 κανάλια εξόδου) είναι διαθέσιμες. Μπορούν να προγραμματιστούν ώστε να ενεργοποιούνται με συγκεκριμένα κανάλια εξόδου ή με τις ψηφιακές εισόδους. Στην εγκατάστασή μου, έχω εξόδους 6-8 που ελέγχουν την άρδευση μου, η οποία λειτουργεί σε 24V. Χρησιμοποιώ τα κανάλια 6-8 για να ενεργοποιήσω μία από τις βοηθητικές εξόδους, για να ενεργοποιήσω ένα τροφοδοτικό 24V για το σύστημα άρδευσης.

Μη αυτόματη ενεργοποίηση: Όταν βρίσκεστε στην κύρια οθόνη, τα κουμπιά 1-8 μπορούν να χρησιμοποιηθούν για χειροκίνητη ενεργοποίηση ή απενεργοποίηση των καναλιών.

Βήμα 3: Υλικό

Σκεύη, εξαρτήματα
Σκεύη, εξαρτήματα

Τροφοδοσία: Το τροφοδοτικό αποτελείται από ανορθωτή, πυκνωτή εξομάλυνσης και ασφάλεια 1 Amp για προστασία από υπερφόρτωση. Αυτή η παροχή ρυθμίζεται στη συνέχεια από έναν ρυθμιστή 7812 και 7805. Η τροφοδοσία 12V χρησιμοποιείται για την οδήγηση των ρελέ εξόδου και όλα τα άλλα κυκλώματα τροφοδοτούνται από την τροφοδοσία 5V. Καθώς ο ρυθμιστής 7805 είναι συνδεδεμένος στην έξοδο του ρυθμιστή 7812, το συνολικό ρεύμα πρέπει να περιορίζεται σε 1 amp μέσω του ρυθμιστή 7812. Συνιστάται να τοποθετήσετε αυτούς τους ρυθμιστές σε μια κατάλληλη ψύκτρα.

I BusC Bus: Παρόλο που ο Flowcode επιτρέπει τον έλεγχο I hardwareC υλικού, αποφάσισα να χρησιμοποιήσω τη διαμόρφωση του λογισμικού I²C. Αυτό επιτρέπει μεγαλύτερη ευελιξία στις εκχωρήσεις καρφιτσών. Αν και πιο αργό (50 kHz), εξακολουθεί να λειτουργεί υπέροχα σε σύγκριση με το δίαυλο I hardwareC υλικού. Τόσο το DS1307 όσο και το 24LC256 είναι συνδεδεμένα σε αυτό το δίαυλο I²C.

Ρολόι πραγματικού χρόνου (DS1307): Κατά την εκκίνηση, ο καταχωρητής RTC 0 και 7 διαβάζεται για να καθοριστεί εάν περιέχει έγκυρα δεδομένα χρόνου και διαμόρφωσης. Μόλις ρυθμιστεί σωστά, ο χρόνος RTC διαβάζεται και ο χρόνος φορτώνεται στο PIC. Αυτή είναι η μόνη φορά που διαβάζεται η ώρα από το RTC. Μετά την εκκίνηση, ένας παλμός 1Hz θα υπάρχει στο pin 7 του RTC. Αυτό το σήμα 1Hz συνδέεται με RB0/INT0 και μέσω ρουτίνας υπηρεσίας διακοπής, ο χρόνος PIC ενημερώνεται κάθε δευτερόλεπτο.

Εξωτερική EEPROM: Όλα τα δεδομένα και οι επιλογές προγράμματος αποθηκεύονται στο εξωτερικό EEPROM. Τα δεδομένα EEPROM φορτώνονται κατά την εκκίνηση και ένα αντίγραφο των δεδομένων αποθηκεύεται στη μνήμη PIC. Τα δεδομένα EEPROM ενημερώνονται μόνο όταν αλλάξουν οι ρυθμίσεις προγράμματος.

Αισθητήρας ημέρας/νύχτας: Μια τυπική αντίσταση εξαρτώμενη από το φως (LDR) χρησιμοποιείται ως αισθητήρας ημέρας/νύχτας. Καθώς τα LDR έρχονται σε πολλά σχήματα και ποικιλίες, όλα με διαφορετικές τιμές αντίστασης κάτω από τις ίδιες συνθήκες φωτισμού, χρησιμοποίησα ένα αναλογικό κανάλι εισόδου για να διαβάσω το επίπεδο φωτός. Τα επίπεδα ημέρας και νύχτας είναι ρυθμιζόμενα και επιτρέπουν κάποια ευελιξία για διαφορετικούς αισθητήρες. Για να ρυθμίσετε κάποια υστέρηση, μπορούν να οριστούν μεμονωμένες τιμές για την Ημέρα και τη Νύχτα. Η κατάσταση θα αλλάξει μόνο εάν το επίπεδο φωτισμού είναι κάτω από την Ημέρα ή πάνω από τα σημεία ρύθμισης της Νύχτας, για περισσότερο από 60 δευτερόλεπτα.

Οθόνη LCD: Χρησιμοποιείται οθόνη 4 γραμμών, 16 χαρακτήρων, καθώς δεν ήταν δυνατή η εμφάνιση όλων των δεδομένων σε οθόνη 2 γραμμών. Το έργο περιλαμβάνει ορισμένους προσαρμοσμένους χαρακτήρες, που ορίζονται στη μακροεντολή LCD_Custom_Char.

Βοηθητικές είσοδοι: Και οι δύο είσοδοι ρυθμίζονται με ένα τρανζίστορ NPN. +12v και 0V είναι επίσης διαθέσιμα στην υποδοχή, επιτρέποντας πιο ευέλικτες συνδέσεις σε εξωτερικές συνδέσεις. Για παράδειγμα, ένας δέκτης τηλεχειριστηρίου μπορεί να συνδεθεί στην παροχή.

Έξοδοι: Όλες οι έξοδοι απομονώνονται ηλεκτρικά από το κύκλωμα μέσω ρελέ 12V. Τα ρελέ που χρησιμοποιούνται, έχουν βαθμολογία 250V AC, στα 10 αμπέρ. Οι κανονικά ανοιχτές και κανονικά κλειστές επαφές μεταφέρονται στους ακροδέκτες.

Πληκτρολόγιο: Το πληκτρολόγιο που χρησιμοποιείται είναι ένα πληκτρολόγιο μήτρας 3 x 4 και είναι συνδεδεμένο PORTB: 2..7.

Βήμα 4: Διακοπές πληκτρολογίου

Διακοπές πληκτρολογίου
Διακοπές πληκτρολογίου
Διακοπές πληκτρολογίου
Διακοπές πληκτρολογίου
Διακοπές πληκτρολογίου
Διακοπές πληκτρολογίου

Wantedθελα να χρησιμοποιήσω το PORTB Interrupt on Change interrupt σε οποιοδήποτε πάτημα πλήκτρου. Για αυτό, έπρεπε να δημιουργηθεί μια προσαρμοσμένη διακοπή στο Flowcode, για να διασφαλιστεί ότι η διεύθυνση και τα δεδομένα PORTB έχουν ρυθμιστεί σωστά πριν και μετά από κάθε διακοπή του πληκτρολογίου. Μια διακοπή δημιουργείται κάθε φορά που πατάτε ή αφήνετε ένα κουμπί. Η ρουτίνα διακοπής αποκρίνεται μόνο όταν πατηθεί ένα πλήκτρο.

ΠΡΟΣΑΡΜΟΓΗ ΔΙΑΚΟΠΗ

Ενεργοποίηση κώδικα

portb = 0b00001110; trisb = 0b11110001;

intcon. RBIE = 1;

intcon2. RBIP = 1;

intcon2. RBPU = 1;

rcon. IPEN = 0;

Κωδικός χειριστή

εάν (intcon & (1 << RBIF))

{FCM_%n ();

portb = 0b00001110;

trisb = 0b11110001;

wreg = portb;

clear_bit (intcon, RBIF);

}

Βρέθηκαν προβλήματα

Κατά τη διάρκεια μιας διακοπής, η ρουτίνα της υπηρεσίας διακοπής πρέπει υπό ΟΧΙ συνθήκες, να καλέσει οποιαδήποτε άλλη μακροεντολή που μπορεί να χρησιμοποιηθεί κάπου στο υπόλοιπο πρόγραμμα. Αυτό θα οδηγήσει τελικά σε προβλήματα υπερχείλισης στοίβας, καθώς η διακοπή μπορεί να συμβεί την ίδια στιγμή που το κύριο πρόγραμμα βρίσκεται επίσης στην ίδια υπορουτίνα. Αυτό προσδιορίζεται επίσης ως ΣΟΒΑΡΟ ΛΑΘΟΣ από το Flowcode όταν καταρτίζεται ο κώδικας.

Στον προσαρμοσμένο κωδικό του πληκτρολογίου κάτω από το GetKeyPadNumber, υπάρχει μια τέτοια κλήση στη μακροεντολή Delay_us, η οποία θα προκαλέσει υπερχείλιση στοίβας. Για να το ξεπεράσω, έχω αφαιρέσει την εντολή Delay_us (10) και την αντικατέστησα με 25 γραμμές "wreg = porta;" εντολές. Αυτή η εντολή διαβάζει PORTA και τοποθετεί την τιμή της στον καταχωρητή W, για να πάρει κάποια καθυστέρηση. Αυτή η εντολή θα μεταγλωττιστεί σε μια ενιαία εντολή παρόμοια με το assembler movf porta, 0. Για το ρολόι 10MHz που χρησιμοποιείται στο έργο, κάθε εντολή θα είναι 400ns, και για να λάβω καθυστέρηση 10us, χρειάστηκα 25 από αυτές τις οδηγίες.

Σημείωση στη δεύτερη γραμμή του σχήματος 3: GetKeypadNumber Custom Code, ότι η αρχική εντολή delay_us (10) έχει απενεργοποιηθεί με το "//". Κάτω από αυτό, έχω προσθέσει το 25 "wreg = porta;" εντολές για να λάβετε νέα καθυστέρηση 10us. Χωρίς κλήσεις σε καμία μακροεντολή μέσα στον προσαρμοσμένο κωδικό Keypad_ReadKeypadNumber, η μακροεντολή πληκτρολογίου μπορεί τώρα να χρησιμοποιηθεί μέσα σε μια ρουτίνα υπηρεσίας διακοπής.

Πρέπει να σημειωθεί ότι τα στοιχεία πληκτρολογίου Flowcode και eBlocks δεν χρησιμοποιούν τις τυπικές αντιστάσεις έλξης στις γραμμές εισόδου. Αντ 'αυτού, χρησιμοποιεί 100K πτυσσόμενες αντιστάσεις. Λόγω κάποιων παρεμβολών που βρέθηκαν στο πληκτρολόγιο κατά την ανάπτυξη, οι αντιστάσεις 100Κ αντικαταστάθηκαν όλες με 10Κ και όλες οι αντιστάσεις 10Κ αντικαταστάθηκαν με 1Κ5. Το πληκτρολόγιο δοκιμάστηκε να λειτουργεί σωστά με καλώδια 200mm.

Βήμα 5: Χρήση του χρονοδιακόπτη

Χρήση του χρονοδιακόπτη
Χρήση του χρονοδιακόπτη
Χρήση του χρονοδιακόπτη
Χρήση του χρονοδιακόπτη
Χρήση του χρονοδιακόπτη
Χρήση του χρονοδιακόπτη

Όλες οι οθόνες έχουν ρυθμιστεί για να υποδεικνύουν όλες τις απαιτούμενες πληροφορίες για να κάνει ο χρήστης γρήγορες αλλαγές στις ρυθμίσεις. Η γραμμή 4 χρησιμοποιείται για να βοηθήσει στην πλοήγηση στα μενού και τις επιλογές προγράμματος. Συνολικά 22 οθόνες είναι διαθέσιμες κατά την κανονική λειτουργία.

ΓΡΑΜΜΗ 1: Χρόνος και κατάσταση

Εμφανίζει την τρέχουσα ημέρα και ώρα, ακολουθούμενη από εικονίδια κατάστασης:

A - Υποδεικνύει ότι το Aux Input A ενεργοποιήθηκε και ο Aux Input A χρονοδιακόπτης λειτουργεί.

B - Υποδεικνύει ότι το Aux Input B ενεργοποιήθηκε και ο Aux Input B χρονοδιακόπτης λειτουργεί.

C - Υποδεικνύει ότι η έξοδος Aux C είναι ενεργοποιημένη.

D - Υποδεικνύει ότι η Aux Output D είναι ενεργοποιημένη.

} - Κατάσταση αισθητήρα ημέρας/νύχτας. Εάν υπάρχει, δηλώνει ότι είναι νύχτα.

ΓΡΑΜΜΗ 2: Έξοδος προγράμματος

Εμφανίζει τα κανάλια που έχουν ενεργοποιηθεί από τα διαφορετικά προγράμματα. Τα κανάλια εμφανίζονται στους αριθμούς εξόδου τους και ένα "-" υποδεικνύει ότι η συγκεκριμένη έξοδος δεν είναι ενεργοποιημένη. Τα κανάλια που έχουν απενεργοποιηθεί στο "Output Output Program" θα εξακολουθούν να εμφανίζονται εδώ, αλλά οι πραγματικές έξοδοι δεν θα ορίζονται.

ΓΡΑΜΜΗ 3: Πραγματικές εκροές

Εμφανίζει ποια κανάλια είναι ενεργοποιημένα από τα διαφορετικά προγράμματα, Aux Inputs A & B ή μη αυτόματες εξόδους που έχει οριστεί από τον χρήστη. Πιέζοντας 0 θα επιστρέψουν όλες οι μη αυτόματα ενεργοποιημένες έξοδοι σε απενεργοποίηση και θα επαναρυθμιστούν οι χρονομετρητές A & B εξόδου Aux.

ΓΡΑΜΜΗ 4: Επιλογές μενού και κλειδιών (σε όλα τα μενού)

Υποδεικνύει τη λειτουργία των πλήκτρων "*" και "#".

Το κεντρικό τμήμα υποδεικνύει ποια αριθμητικά πλήκτρα (0-9) είναι ενεργά για την επιλεγμένη οθόνη.

Η κατάσταση εισόδου του Aux Input A & B εμφανίζεται επίσης μέσω ενός εικονιδίου διακόπτη ανοικτού ή κλειστού τύπου.

Οι έξοδοι μπορούν να ενεργοποιηθούν/απενεργοποιηθούν χειροκίνητα πατώντας το αντίστοιχο πλήκτρο στο πληκτρολόγιο.

Σε όλα τα μενού, τα πλήκτρα Star και Hash χρησιμοποιούνται για πλοήγηση στις διάφορες επιλογές προγράμματος. Τα πλήκτρα 0-9 χρησιμοποιούνται για τη ρύθμιση των επιλογών. Όπου διατίθενται πολλές επιλογές σε μία οθόνη ή μενού προγραμματισμού, το πλήκτρο Hash χρησιμοποιείται για να περάσετε τις διαφορετικές επιλογές. Η τρέχουσα επιλεγμένη επιλογή θα υποδεικνύεται πάντα με τον χαρακτήρα ">" στα αριστερά της οθόνης.

0-9 Εισαγάγετε τιμές χρόνου

1-8 Αλλαγή επιλογής καναλιού

14 36 Προγράμματα βήμα προς βήμα, 1 βήμα πίσω, 4 βήματα πίσω 10 προγράμματα, 3 βήματα μπροστά, 6 βήματα μπροστά 10

προγράμματα

1-7 Ορισμός ημερών της εβδομάδας. 1 = Κυριακή, 2 = Δευτέρα, 3 = Τρίτη, 4 = Τετάρτη, 5 = Πέμπτη, 6 = Παρασκευή, 7 = Σάββατο

0 Στην κύρια οθόνη, διαγράψτε όλες τις χειροκίνητες παρακάμψεις και τα χρονόμετρα Εισόδου Α & Εισόδου Β. Σε άλλα μενού, αλλάζει

επιλεγμένες επιλογές

# Στην κύρια οθόνη, θα απενεργοποιηθούν όλες οι χειροκίνητες παρακάμψεις, τα χρονόμετρα εισόδου Α & εισόδου Β και οι έξοδοι προγράμματος, έως ότου

το επόμενο συμβάν.

* και 1 Επανεκκινήστε το χρονόμετρο

* και 2 Διαγράψτε όλα τα προγράμματα και τις επιλογές, επαναφέρετε τις προεπιλεγμένες ρυθμίσεις.

* και 3 Θέστε το χρονόμετρο σε κατάσταση αναμονής. Για να ενεργοποιήσετε ξανά το χρονόμετρο, πατήστε οποιοδήποτε πλήκτρο.

Κατά τη διάρκεια λανθασμένων καταχωρήσεων οποιασδήποτε χρονικής τιμής, ο οπίσθιος φωτισμός LCD αναβοσβήνει 5 φορές για να υποδείξει σφάλμα. Ταυτόχρονα, θα ακουστεί ο βομβητής. Οι εντολές Έξοδος και Επόμενο θα λειτουργήσουν μόνο όταν η τρέχουσα καταχώριση είναι σωστή.

Οπίσθιος φωτισμός LCD

Κατά την αρχική εκκίνηση, ο οπίσθιος φωτισμός LCD θα ενεργοποιηθεί για 3 λεπτά, εκτός εάν:

- Υπάρχει βλάβη υλικού (EEPROM ή RTC δεν βρέθηκαν)

- Ο χρόνος δεν έχει οριστεί στο RTC

Ο οπίσθιος φωτισμός LCD θα ενεργοποιηθεί ξανά για 3 λεπτά σε οποιαδήποτε είσοδο χρήστη στο πληκτρολόγιο. Εάν ο οπίσθιος φωτισμός LCD είναι απενεργοποιημένος, οποιαδήποτε εντολή πληκτρολογίου θα ενεργοποιήσει πρώτα τον οπίσθιο φωτισμό LCD και θα αγνοήσει το πλήκτρο που πατήθηκε. Αυτό διασφαλίζει ότι ο χρήστης θα μπορεί να διαβάσει την οθόνη LCD πριν χρησιμοποιήσει το πληκτρολόγιο. Ο οπίσθιος φωτισμός LCD θα ενεργοποιηθεί επίσης για 5 δευτερόλεπτα εάν είναι ενεργοποιημένη η Aux Input A ή η Aux Input B.

Βήμα 6: Στιγμιότυπα οθόνης μενού

Στιγμιότυπα οθόνης μενού
Στιγμιότυπα οθόνης μενού
Στιγμιότυπα οθόνης μενού
Στιγμιότυπα οθόνης μενού
Στιγμιότυπα οθόνης μενού
Στιγμιότυπα οθόνης μενού

Χρησιμοποιώντας το πληκτρολόγιο, κάθε μία από τις επιλογές μπορεί να προγραμματιστεί εύκολα. Οι εικόνες δίνουν κάποιες πληροφορίες για το τι κάνει κάθε οθόνη.

Βήμα 7: Σχεδιασμός του συστήματος

Σχεδιασμός του Συστήματος
Σχεδιασμός του Συστήματος

Όλη η ανάπτυξη και οι δοκιμές έγιναν στο breadboard. Κοιτάζοντας όλα τα τμήματα του συστήματος, έσπασα το σύστημα σε τρεις ενότητες. Αυτή η απόφαση οφειλόταν κυρίως στους περιορισμούς μεγέθους PCB (80 x 100mm) της δωρεάν έκδοσης του Eagle.

Ενότητα 1 - Τροφοδοσία

Ενότητα 2 - πλακέτα CPU

Ενότητα 3 - Πίνακας ρελέ

Αποφάσισα ότι όλα τα εξαρτήματα πρέπει να είναι εύκολα προσιτά και ότι δεν ήθελα να χρησιμοποιήσω εξαρτήματα επιτοίχιας τοποθέτησης.

Ας περάσουμε από καθένα από αυτά.

Βήμα 8: Τροφοδοσία

Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος
Παροχή ηλεκτρικού ρεύματος

Το τροφοδοτικό είναι κατευθείαν και τροφοδοτήστε την CPU και τις πλακέτες ρελέ με 12V και 5V.

Τοποθέτησα τους ρυθμιστές τάσης σε αξιοπρεπείς νεροχύτες και χρησιμοποίησα επίσης υπερτιμημένους πυκνωτές για την παροχή.

Βήμα 9: Πίνακας CPU

CPU Board
CPU Board
CPU Board
CPU Board
CPU Board
CPU Board
CPU Board
CPU Board

Όλα τα εξαρτήματα, εκτός από την οθόνη LCD, το πληκτρολόγιο και τα ρελέ είναι τοποθετημένα στην πλακέτα της CPU.

Τα τερματικά μπλοκ προστέθηκαν για να απλοποιήσουν τις συνδέσεις μεταξύ της παροχής, δύο ψηφιακών εισόδων και του αισθητήρα φωτός.

Οι ακίδες/υποδοχές κεφαλίδας παρέχουν εύκολη σύνδεση με την οθόνη LCD και το πληκτρολόγιο.

Για τις εξόδους στα ρελέ, χρησιμοποίησα το ULN2803. Περιέχει ήδη όλες τις απαιτούμενες αντιστάσεις οδήγησης και διόδους flyback. Αυτό εξασφάλισε ότι η πλακέτα CPU μπορεί ακόμα να κατασκευαστεί χρησιμοποιώντας τη δωρεάν έκδοση του Eagle. Τα ρελέ συνδέονται με τα δύο ULN2803. Το κάτω ULN2803 χρησιμοποιείται για τις 8 εξόδους και το επάνω ULN2803 για τις δύο βοηθητικές εξόδους. Κάθε βοηθητική έξοδος έχει τέσσερα τρανζίστορ. Οι συνδέσεις στα ρελέ γίνονται επίσης μέσω ακίδων/υποδοχών κεφαλίδας.

Το PIC 18F4520 ήταν εξοπλισμένο με υποδοχή προγραμματισμού, ώστε να επιτρέπει τον εύκολο προγραμματισμό μέσω του προγραμματιστή PicKit 3.

ΣΗΜΕΙΩΣΗ:

Θα παρατηρήσετε ότι ο πίνακας περιέχει επιπλέον IC 8 ακίδων. Το επάνω IC είναι ένα PIC 12F675 και είναι συνδεδεμένο με μια ψηφιακή είσοδο. Αυτό προστέθηκε κατά τη διάρκεια του σχεδιασμού PCB. Αυτό διευκολύνει την προεπεξεργασία της ψηφιακής εισόδου. Στην εφαρμογή μου, μία από τις ψηφιακές εισόδους είναι συνδεδεμένη στο σύστημα συναγερμού μου. Εάν ηχεί ο συναγερμός, ανάβουν ορισμένα φώτα στο σπίτι μου. Οπλισμός και αφοπλισμός του συναγερμού μου δίνει διαφορετικά ηχητικά σήματα στη σειρήνα. Χρησιμοποιώντας το PIC 12F675, μπορώ τώρα να διακρίνω μεταξύ βραχίονα/αφοπλισμού και πραγματικού συναγερμού. Το 12F675 είναι επίσης εξοπλισμένο με υποδοχή προγραμματισμού.

Έκανα επίσης πρόβλεψη για μια θύρα I2C μέσω ακίδας/υποδοχής κεφαλίδας. Αυτό θα είναι χρήσιμο αργότερα με τους πίνακες ρελέ.

Ο πίνακας περιέχει μερικούς βραχυκυκλωτήρες, οι οποίοι πρέπει να κολληθούν πριν τοποθετήσετε τις πρίζες IC.

Βήμα 10: Συμπέρασμα κωδικού ροής

Συμπέρασμα ροής κώδικα
Συμπέρασμα ροής κώδικα
Συμπέρασμα ροής κώδικα
Συμπέρασμα ροής κώδικα
Συμπέρασμα ροής κώδικα
Συμπέρασμα ροής κώδικα

Καθώς έχω συνηθίσει να εργάζομαι σε επίπεδο καταχώρισης στη συναρμολόγηση, ήταν μερικές φορές δύσκολο και απογοητευτικό να χρησιμοποιήσω τις μακροεντολές των συστατικών. Αυτό οφείλεται κυρίως στην έλλειψη γνώσης της δομής προγραμματισμού του Flowcode. Τα μόνα μέρη που έχω χρησιμοποιήσει τα μπλοκ C ή ASM ήταν να ενεργοποιήσουμε τις εξόδους μέσα σε μια ρουτίνα διακοπής και στη ρουτίνα Do_KeyPressed να απενεργοποιήσουμε/ενεργοποιήσουμε τη διακοπή του πληκτρολογίου. Ο PIC τοποθετείται επίσης στο SLEEP χρησιμοποιώντας ένα μπλοκ ASM, όταν το EEPROM ή το RTC δεν βρίσκονται.

Βοήθεια για τη χρήση των διαφορετικών εντολών I²C, όλες ελήφθησαν από τα αρχεία βοήθειας Flowcode. Απαιτείται να γνωρίζετε ακριβώς πώς λειτουργούν οι διαφορετικές συσκευές I²C, προτού οι εντολές μπορούν να χρησιμοποιηθούν με επιτυχία. Ο σχεδιασμός ενός κυκλώματος απαιτεί από τον σχεδιαστή να έχει όλα τα σχετικά φύλλα δεδομένων διαθέσιμα. Αυτό δεν είναι μειονέκτημα του Flowcode.

Το Flowcode ανταποκρίθηκε πραγματικά στη δοκιμή και συνιστάται ιδιαίτερα για άτομα που θέλουν να ξεκινήσουν να εργάζονται με τη σειρά μικροεπεξεργαστών Microchip.

Ο προγραμματισμός ροής και η διαμόρφωση του PIC ορίστηκαν σύμφωνα με τις εικόνες

Βήμα 11: Προαιρετικός πίνακας ρελέ I2C

Προαιρετικός πίνακας ρελέ I2C
Προαιρετικός πίνακας ρελέ I2C
Προαιρετικός πίνακας ρελέ I2C
Προαιρετικός πίνακας ρελέ I2C
Προαιρετικός πίνακας ρελέ I2C
Προαιρετικός πίνακας ρελέ I2C

Ο πίνακας CPU έχει ήδη συνδέσεις κεφαλίδας για 16 ρελέ. Αυτές οι έξοδοι είναι τρανζίστορ ανοιχτού συλλέκτη μέσω των δύο τσιπ ULN2803. Αυτό μπορεί να χρησιμοποιηθεί για την άμεση τροφοδοσία των ρελέ.

Μετά τις πρώτες δοκιμές του συστήματος, δεν μου άρεσαν όλα τα καλώδια μεταξύ της πλακέτας της CPU και των ρελέ. Καθώς συμπεριέλαβα μια θύρα I2C στην πλακέτα της CPU, αποφάσισα να σχεδιάσω την πλακέτα ρελέ για σύνδεση στη θύρα I2C. Χρησιμοποιώντας ένα τσιπ 16 καναλιών MCP23017 I/O Port Expander και μια διάταξη τρανζίστορ ULN2803, μείωσα τις συνδέσεις μεταξύ της CPU και των ρελέ σε 4 καλώδια.

Καθώς δεν μπορούσα να χωρέσω 16 ρελέ σε ένα PCB 80 x 100 mm, αποφάσισα να φτιάξω δύο σανίδες. Κάθε MCP23017 χρησιμοποιεί μόνο 8 από τις 16 θύρες. Ο πίνακας 1 χειρίζεται τις 8 εξόδους και ο πίνακας 2 τις δύο βοηθητικές εξόδους. Η μόνη διαφορά στους πίνακες είναι οι διευθύνσεις κάθε πίνακα. Αυτό ρυθμίζεται εύκολα με ένα μίνι βραχυκυκλωτήρα. Κάθε πλακέτα διαθέτει υποδοχές για την παροχή ρεύματος και δεδομένα I2C στην άλλη πλακέτα.

ΣΗΜΕΙΩΣΗ:

Εάν απαιτείται, το λογισμικό προβλέπει μόνο έναν πίνακα που μπορεί να χρησιμοποιήσει και τις 16 θύρες. Όλα τα δεδομένα ρελέ εξόδου είναι διαθέσιμα στον πρώτο πίνακα.

Καθώς το κύκλωμα είναι προαιρετικό και πολύ απλό, δεν δημιούργησα ένα σχηματικό. Εάν υπάρχει αρκετή ζήτηση, μπορώ να το προσθέσω αργότερα.

Βήμα 12: Προαιρετικός σύνδεσμος RF

Προαιρετικός σύνδεσμος RF
Προαιρετικός σύνδεσμος RF
Προαιρετικός σύνδεσμος RF
Προαιρετικός σύνδεσμος RF
Προαιρετικός σύνδεσμος RF
Προαιρετικός σύνδεσμος RF

Μετά την ολοκλήρωση του έργου, σύντομα συνειδητοποίησα ότι πρέπει να τραβήξω πολλά καλώδια AC 220V στο χρονόμετρο. Δημιούργησα έναν σύνδεσμο RF χρησιμοποιώντας τυπικές μονάδες 315MHz που επέτρεπαν την τοποθέτηση του χρονοδιακόπτη μέσα σε ένα ντουλάπι και τους πίνακες ρελέ μέσα στην οροφή, κοντά σε όλες τις καλωδιώσεις 220V.

Ο σύνδεσμος χρησιμοποιεί ένα AtMega328P που λειτουργεί στα 16MHz. Το λογισμικό τόσο για πομπό όσο και για δέκτη είναι το ίδιο και η λειτουργία επιλέγεται από μίνι βραχυκυκλωτήρα.

Πομπός

Ο πομπός είναι απλώς συνδεδεμένος στη θύρα CPU I2C. Δεν απαιτείται πρόσθετη ρύθμιση, καθώς το AtMega328P ακούει τα ίδια δεδομένα με τους πίνακες ρελέ I2C.

Τα δεδομένα ενημερώνονται μία φορά το δευτερόλεπτο στη θύρα I2C και ο πομπός στέλνει αυτές τις πληροφορίες μέσω του συνδέσμου RF. Εάν ο πομπός δεν λάβει δεδομένα I2C για περίπου 30 δευτερόλεπτα, ο πομπός θα μεταδίδει συνεχώς δεδομένα για να απενεργοποιήσει όλα τα ρελέ στη μονάδα δέκτη.

Η ισχύς της μονάδας πομπού μπορεί να επιλεγεί μεταξύ 12V και 5V με ένα μίνι βραχυκυκλωτήρα στην πλακέτα υπολογιστή. Τροφοδοτώ τον πομπό μου χρησιμοποιώντας 12V.

Δέκτης

Ο δέκτης ακούει κωδικοποιημένα δεδομένα από τον πομπό και τοποθετεί τα δεδομένα σε μια θύρα I2C. Ο πίνακας ρελέ απλώς συνδέεται σε αυτήν τη θύρα και λειτουργεί το ίδιο όπως ήταν συνδεδεμένος στην πλακέτα CPU.

Εάν ο δέκτης δεν λάβει έγκυρα δεδομένα για 30 δευτερόλεπτα, ο δέκτης θα στέλνει συνεχώς δεδομένα στη θύρα I2C για να απενεργοποιήσει όλα τα ρελέ στους πίνακες ρελέ.

Σχήματα

Μια μέρα, αν υπάρχει ζήτηση για αυτό. Το σκίτσο Arduino περιέχει όλες τις απαιτούμενες πληροφορίες για την κατασκευή του κυκλώματος χωρίς διάγραμμα κυκλώματος.

Εύρος

Στην εγκατάστασή μου, ο πομπός και ο δέκτης απέχουν περίπου 10 μέτρα. Το χρονόμετρο βρίσκεται μέσα σε ένα ντουλάπι και η μονάδα ρελέ στην κορυφή της οροφής.

Βήμα 13: Τελικό προϊόν

Τελικό προϊόν
Τελικό προϊόν
Τελικό προϊόν
Τελικό προϊόν
Τελικό προϊόν
Τελικό προϊόν

Η κύρια μονάδα τοποθετήθηκε σε ένα παλιό κουτί έργου. Περιέχει τα εξής:

- Μετασχηματιστής 220V/12V

- Πίνακας τροφοδοσίας

- Πίνακας CPU

- Οθόνη LCD

- Πληκτρολόγιο

- Πομπός RF Link

- Πρόσθετη οικιακή μονάδα απομακρυσμένου δέκτη για να μπορώ να ενεργοποιώ/σβήνω τα φώτα μέσω του τηλεχειριστηρίου

Η μονάδα ρελέ αποτελείται από τα ακόλουθα:

- Μετασχηματιστής 220V/12V

- Πίνακας τροφοδοσίας

- Δέκτης RF Link

- 2 x πίνακες αναμετάδοσης I2C

Όλες οι σανίδες σχεδιάστηκαν με την ίδια διάσταση, καθιστώντας εύκολη τη στοίβαξή τους η μία πάνω στην άλλη με αποστάτες 3 χιλιοστών.

Συνιστάται: