Όποτε πηγαίνουμε να ψηφίσουμε για εκλογές, βλέπουμε ηλεκτρονικά μηχανήματα ψηφοφορίας. Σε αυτό το έργο πρόκειται να σχεδιάσουμε και να αναπτύξουμε μια απλή μηχανή ψηφοφορίας χρησιμοποιώντας τον μικροελεγκτή ATmega32A. Παρόλο που μπορούμε να χρησιμοποιήσουμε τον ελεγκτή για να πάρουμε περισσότερα από 32 άτομα ψηφοφορίας, για να διατηρήσουμε τα πάντα απλά, θα κάνουμε ένα σύστημα ψηφοφορίας για μέγεθος τεσσάρων ατόμων. Θα έχουμε τέσσερα κουμπιά για τέσσερα άτομα και όποτε πατηθεί ένα κουμπί, Η ψήφος πηγαίνει για το αντίστοιχο άτομο και ο αριθμός των ψήφων που εμφανίζεται κάθε άτομο στην οθόνη LCD.
Απαιτούμενα στοιχεία
Σκεύη, εξαρτήματα:
ATMEGA32
Τροφοδοσία (5v)
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ AVR-ISP
JHD_162ALCD (16x2 LCD)
Πυκνωτής 100nF (πέντε τεμάχια), πυκνωτής 100uF (συνδεδεμένος σε τροφοδοτικό)
κουμπί (πέντε κομμάτια), 10KΩ αντίσταση (πέντε κομμάτια).
Λογισμικό:
Atmel studio 6.1
progisp ή flash μαγεία.
Διάγραμμα κυκλώματος και εξήγηση εργασίας
Όπως φαίνεται στο παραπάνω κύκλωμα ηλεκτρονικής ψηφοφορίας, το PORTA του μικροελεγκτή ATMEGA32 συνδέεται σε θύρα δεδομένων LCD 16x2. Εδώ πρέπει να θυμόμαστε να απενεργοποιήσουμε την επικοινωνία JTAG στο PORTC του ATMEGA αλλάζοντας τα bytes ασφάλειας, εάν κάποιος θέλει να χρησιμοποιήσει το PORTC ως κανονική θύρα επικοινωνίας. Σε LCD 16x2, υπάρχουν 16 ακίδες πάνω από όλα αν υπάρχει οπίσθιο φως, εάν δεν υπάρχει οπίσθιο φως θα υπάρχουν 14 ακίδες. Κάποιος μπορεί να τροφοδοτήσει ή να αφήσει τις πίσω ακίδες. Τώρα στις 14 ακίδες υπάρχουν 8 καρφίτσες δεδομένων (7-14 ή D0-D7), 2 καρφίτσες τροφοδοσίας (1 & 2 ή VSS & VDD ή gnd & + 5v), 3ος ακροδέκτης για έλεγχο αντίθεσης (VEE-ελέγχει πόσο παχιά πρέπει να είναι οι χαρακτήρες φαίνεται), 3 ακίδες ελέγχου (RS & RW & E).
Στο κύκλωμα, μπορείτε να παρατηρήσετε ότι έχω πάρει μόνο δύο ακίδες ελέγχου, καθώς αυτό δίνει την ευελιξία της καλύτερης κατανόησης. Το bit αντίθεσης και το READ / WRITE δεν χρησιμοποιούνται συχνά, ώστε να μπορούν να βραχυκυκλωθούν στη γείωση. Αυτό θέτει την οθόνη LCD σε υψηλότερη αντίθεση και λειτουργία ανάγνωσης. Πρέπει απλώς να ελέγξουμε ENABLE και RS καρφίτσες για να στείλουμε ανάλογα χαρακτήρες και δεδομένα.
Οι συνδέσεις που γίνονται για LCD δίνονται παρακάτω:
PIN1 ή VSS - γείωση
PIN2 ή VDD ή VCC - Ισχύς + 5v
PIN3 ή VEE - γείωση (δίνει τη μέγιστη αντίθεση καλύτερα για έναν αρχάριο)
PIN4 ή RS (Επιλογή καταχώρησης) - PD6 του uC
PIN5 ή RW (Ανάγνωση / Εγγραφή) - γείωση (θέτει την οθόνη LCD σε λειτουργία ανάγνωσης διευκολύνει την επικοινωνία για τον χρήστη)
PIN6 ή E (Ενεργοποίηση) - PD5 του uC
PIN7 ή D0 - PA0 του uC
PIN8 ή D1 - PA1 του uC
PIN9 ή D2 - PA2 του uC
PIN10 ή D3 - PA3 του uC
PIN11 ή D4 - PA4 του uC
PIN12 ή D5 - PA5 του uC
PIN13 ή D6 - PA6 του uC
PIN14 ή D7 - PA7 του uC
Στο κύκλωμα μπορείτε να δείτε ότι έχουμε χρησιμοποιήσει επικοινωνία 8bit (D0-D7), ωστόσο αυτό δεν είναι υποχρεωτικό. Μπορούμε να χρησιμοποιήσουμε την επικοινωνία 4bit (D4-D7) αλλά με το πρόγραμμα επικοινωνίας 4 bit γίνεται λίγο περίπλοκο, οπότε μόλις πήγα με την επικοινωνία 8 bit.
Έτσι, από την απλή παρατήρηση του παραπάνω πίνακα, συνδέουμε 10 ακίδες LCD με ελεγκτή, όπου 8 ακίδες είναι καρφίτσες δεδομένων και 2 ακίδες για έλεγχο. Υπάρχουν πέντε κουμπιά εδώ, τέσσερα για την αύξηση των ψήφων των υποψηφίων και το πέμπτο για την επαναφορά των ψήφων του υποψηφίου στο μηδέν.
Οι πυκνωτές που υπάρχουν εδώ είναι για την εξουδετέρωση των πλήκτρων που αναπηδούν. Εάν αφαιρεθούν, ο ελεγκτής μπορεί να μετρά περισσότερα από ένα κάθε φορά που πατάτε το κουμπί. Οι αντιστάσεις που συνδέονται για καρφίτσες προορίζονται για τον περιορισμό του ρεύματος, όταν πατηθεί το κουμπί για να τραβήξει προς τα κάτω τον πείρο στο έδαφος.
Κάθε φορά που πατάτε ένα κουμπί, ο αντίστοιχος πείρος του ελεγκτή τραβιέται προς τα κάτω και έτσι ο ελεγκτής αναγνωρίζει ότι έχει πατηθεί κάποιο κουμπί και ότι πρέπει να ληφθεί αντίστοιχη ενέργεια, μπορεί να αυξάνει τις υποψήφιες ψήφους ή να επαναφέρει τις ψήφους ανάλογα με το πάτημα του κουμπιού.
Όταν πατηθεί το κουμπί που αντιπροσωπεύει ένα αντίστοιχο άτομο, ο ελεγκτής το επιλέγει και αυξάνει τον αντίστοιχο αριθμό προσώπου μέσα στη μνήμη του μετά την αύξηση, δείχνει την αντίστοιχη βαθμολογία ατόμων στην οθόνη LCD 16x2.
Η λειτουργία αυτής της ηλεκτρονικής μηχανής ψηφοφορίας με βάση τον μικροελεγκτή εξηγείται βήμα προς βήμα του κώδικα C παρακάτω,