Πίνακας περιεχομένων:
- Βήμα 1: Καθορισμός διευθύνσεων μητρώου
- Βήμα 2: Πίνακες και καθολικές μεταβλητές
- Βήμα 3: Η συνάρτηση "serial.begin"
- Βήμα 4: Η συνάρτηση "serial.available"
- Βήμα 5: Η συνάρτηση "serial.read"
- Βήμα 6: Η συνάρτηση "serial.write"
- Βήμα 7: Η λειτουργία ρύθμισης
- Βήμα 8: Οι λειτουργίες βρόχου και ISR
- Βήμα 9: Καλωδίωση
- Βήμα 10: Το βάζουμε όλα μαζί
Βίντεο: Arduino Tone Generator Χωρίς βιβλιοθήκη ή σειριακές λειτουργίες (με διακοπές): 10 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:37
Αυτό δεν είναι κάτι στο οποίο κανονικά θα έκανα εκπαιδευτικό, προτιμώ τη μεταλλική μου εργασία, αλλά καθώς είμαι φοιτητής ηλεκτρικής μηχανικής και πρέπει να παρακολουθήσω ένα μάθημα για μικροελεγκτές (Σχεδιασμός ενσωματωμένων συστημάτων), σκέφτηκα να κάνω ένα εκπαιδευτικό ένα από τα έργα μου. Όταν έφτιαξα αρχικά το έργο και άλλα για αυτήν την τάξη, διαπίστωσα ότι υπάρχουν πολύ λίγα έως καθόλου σεμινάρια που δεν χρησιμοποιούν τις λειτουργίες βιβλιοθήκης arduino ή σειριακές λειτουργίες, ο οποίος είναι ένας άλλος λόγος που σκέφτηκα ότι αυτό θα ήταν ένα καλό εκπαιδευτικό.
Αυτός ο κωδικός έχει σχεδιαστεί για τον μικροελεγκτή Atmega 2560, οπότε αν θέλετε να τον εφαρμόσετε σε άλλη πλακέτα θα πρέπει να αλλάξετε τους καταχωρητές διευθύνσεων στον κώδικα με βάση το εγχειρίδιο χρήστη των χειριστηρίων σας. Η βασική ιδέα πίσω από τον κώδικα είναι ότι κάθε φορά που εισάγετε ένα κλειδί στο πληκτρολόγιο στη σειριακή οθόνη, το arduino mega θα βγάζει μια συγκεκριμένη συχνότητα με βάση το πλήκτρο που πατάτε, με το "q" να το επαναφέρει. Το έκανα έτσι ώστε το "a" να βγάζει την επίπεδη συχνότητα A και το "A" να βγάζει την απότομη συχνότητα A, το "b" να βγαίνει B επίπεδο, "c" για το C επίπεδο, το "C" για το C ευκρινές, και ούτω καθεξής. Ο πλήρης κώδικας μεταφορτώνεται στο τέλος, αλλά κάθε βήμα θα διασπάσει τον κώδικα σε κομμάτια, ώστε να είναι πιο εύκολο να εξηγηθεί.
Βήμα 1: Καθορισμός διευθύνσεων μητρώου
Αυτό το βήμα είναι εύκολο, εάν χρησιμοποιείτε το atmega 2560, πρέπει απλώς να χρησιμοποιήσετε τις διευθύνσεις που χρησιμοποίησα, αν και εάν χρησιμοποιείτε έναν πίνακα με διαφορετικό τσιπ, θα πρέπει να βρείτε τις διευθύνσεις για καθένα από αυτούς τους καταχωρητές στο εγχειρίδιο χρήσης τσιπς. Οι ορισμοί στο επάνω μέρος είναι απλώς σταθερές που θα χρησιμοποιηθούν για τις συναρτήσεις μας αργότερα. Καθορίζουμε τις διευθύνσεις ως πτητικές ανυπόγραφες, επειδή δεν θέλουμε ο μεταγλωττιστής να τα μπερδέψει.
Βήμα 2: Πίνακες και καθολικές μεταβλητές
Εδώ θέλουμε να ορίσουμε τον πίνακα συχνότητας που θα περιέχει όλες τις συχνότητες που πρέπει να εξάγει κάθε κλειδί. Αυτές οι τιμές υπολογίζονται από τις πραγματικές συχνότητες σημειώσεων και ειλικρινά ξέχασα πώς τις πήρα, αλλά είναι οι σωστές τιμές καθώς τις δοκίμασα σε παλμογράφο για να βεβαιωθώ. Ορίζουμε επίσης τον πίνακα σημειώσεων που περιέχει όλα τα πλήκτρα που πρέπει να πατήσετε για κάθε τόνο, καθώς και τις μεταβλητές που θα χρειαστούμε για τις μεταγενέστερες συναρτήσεις μας.
Βήμα 3: Η συνάρτηση "serial.begin"
Θα καλέσουμε την προσαρμοσμένη συνάρτηση που επαναλαμβάνει τη συνάρτηση "serial.begin" U0init (). Παίρνει το επιθυμητό baudrate ως είσοδο και ξεκινά τη σειριακή θύρα σε αυτό το baudrate.
Βήμα 4: Η συνάρτηση "serial.available"
Θα καλέσουμε τη συνάρτηση που μιμείται "serial.available" U0kbhit (). Δεν απαιτεί είσοδο, αλλά ανιχνεύει αν υπάρχει αλλαγή στο πληκτρολόγιο χρησιμοποιώντας το bit κατάστασης RDA και επιστρέφει true όταν εντοπιστεί μια αλλαγή.
Βήμα 5: Η συνάρτηση "serial.read"
Θα καλέσουμε τη συνάρτηση που μιμείται τη συνάρτηση "serial.read" U0getchar (), η οποία δεν λαμβάνει καμία είσοδο και εξάγει οποιαδήποτε αλλαγή γίνει στο πληκτρολόγιο, το οποίο είναι αποθηκευμένο στο μητρώο UDR0.
Βήμα 6: Η συνάρτηση "serial.write"
Θα καλέσουμε τη συνάρτηση που μιμείται το "serial.write" U0putchar (), το οποίο λαμβάνει τα δεδομένα από το μητρώο UDR0 ενώ ανιχνεύεται και αποθηκεύεται μια αλλαγή και εξάγονται ξανά στη σειριακή οθόνη.
Βήμα 7: Η λειτουργία ρύθμισης
Αυτή είναι η βασική λειτουργία ρύθμισης που θα χρησιμοποιήσει τη μίμηση "serial.begin" για την προετοιμασία της σειριακής θύρας και θα αρχικοποιήσει τις ρυθμίσεις bit μας για τους καταχωρητές χρονοδιακόπτη και θα ρυθμίσει το PB6 να εξάγει τους τόνους μας.
Βήμα 8: Οι λειτουργίες βρόχου και ISR
Ο βρόχος λειτουργεί ως εξής: εάν εντοπιστεί αλλαγή με τη συνάρτηση "serial.available", η συνάρτηση "serial.read" αποθηκεύει αυτές τις αλλαγές και η συνάρτηση "serial.write" τοποθετεί αυτήν την αλλαγή στη σειριακή οθόνη. Όσο μια μεταβλητή i είναι μικρότερη από το μέγεθος της συστοιχίας συχνοτήτων, θα ορίσει την έξοδο να είναι η θέση του i σε αυτόν τον πίνακα, εξάγοντας τη συχνότητα σε αυτήν τη θέση. Το ISR λειτουργεί ως επαναφορά, όπου εάν η θέση συστοιχίας συχνότητας δεν είναι ίση με 0 (με άλλα λόγια αν δεν πατηθεί το "q"), θα εξάγει τη συχνότητα, αλλά όταν πατηθεί το "q" θα επαναρυθμιστεί. Σημειώστε: Αυτός ο κώδικας χρησιμοποιεί διακοπές, αλλά μπορεί να γίνει με απενεργοποιημένες διακοπές. Θα δημοσιεύσω τον κώδικα χωρίς διακοπή εάν λάβω οποιαδήποτε αίτηση γι 'αυτόν, απλώς πιστεύω ότι η έκδοση διακοπής είναι πιο διασκεδαστική.
Βήμα 9: Καλωδίωση
Η καλωδίωση για αυτόν τον κωδικό είναι εξαιρετικά εύκολη, απλά τοποθετήστε ένα καλώδιο εξόδου από το PB6 σε ένα breadboard, συνδέστε ένα βομβητή ή ηχείο σε σειρά με αυτό και συνδέστε το ξανά στη γείωση. Σημείωση: εάν χρησιμοποιείτε ηχείο, τοποθετήστε μια μικρή αντίσταση πριν από το ηχείο. Εάν θέλετε απλώς να δείτε την έξοδο αλλά να μην την ακούσετε, απλώς συνδέστε το PB6 στο κόκκινο καλώδιο ενός παλμογράφου και το μαύρο καλώδιο στη γείωση.
Βήμα 10: Το βάζουμε όλα μαζί
Πρόσθεσα τον πλήρη κώδικα σε αυτό το βήμα, αφού έχω εξηγήσει όλα τα μέρη του σε προηγούμενα βήματα. Απλώς χρειάζεται είσοδος πληκτρολογίου για διαφορετικές συχνότητες και εξάγει τη συχνότητα αυτή στο PB6. Ελπίζω να σας άρεσε να διαβάζετε έναν διαφορετικό τρόπο κωδικοποίησης με το IDE!
Επίσης, ψηφίστε το στο διαγωνισμό Microcontroller: D
Συνιστάται:
Προγραμματισμός ενός Arduino χρησιμοποιώντας ένα άλλο Arduino για την εμφάνιση ενός κυλιόμενου κειμένου χωρίς βιβλιοθήκη: 5 βήματα
Προγραμματισμός ενός Arduino Χρησιμοποιώντας ένα άλλο Arduino για την εμφάνιση ενός κειμένου κύλισης χωρίς βιβλιοθήκη: Το Sony Spresense ή το Arduino Uno δεν είναι τόσο ακριβά και δεν απαιτούν πολλή ισχύ. Ωστόσο, εάν το έργο σας έχει περιορισμούς ισχύος, χώρου ή ακόμη και προϋπολογισμού, μπορείτε να χρησιμοποιήσετε το Arduino Pro Mini. Σε αντίθεση με το Arduino Pro Micro, το Arduino Pro Mi
Αποκωδικοποιητής πρωτοκόλλου τηλεχειριστηρίου RC5 χωρίς βιβλιοθήκη: 4 βήματα
Αποκωδικοποιητής Πρωτοκόλλου Τηλεχειριστηρίου RC5 Χωρίς Βιβλιοθήκη: Πριν από την αποκωδικοποίηση του rc5 συζητάμε πρώτα τι είναι η εντολή rc5 και ποια είναι η δομή της. βασικά, η εντολή rc5 χρησιμοποιείται σε τηλεχειριστήρια που χρησιμοποιούνται σε τηλεοράσεις, συσκευές αναπαραγωγής cd, d2h, συστήματα οικιακού κινηματογράφου κλπ. έχει 13 ή 14 bits διατεταγμένα σε ένα
Αισθητήρας εφέ Arduino Hall με διακοπές: 4 βήματα
Arduino Hall Effect Sensor With Interrupts: Γεια σε όλους, σήμερα θα σας δείξω πώς μπορείτε να συνδέσετε έναν αισθητήρα εφέ hall σε ένα Arduino και να τον χρησιμοποιήσετε με μια διακοπή. Εργαλεία και υλικά που χρησιμοποιούνται στο βίντεο (Συνδέσεις συνεργατών): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zKΑισθητήρες εφέ Hall: h
Μικροελεγκτής AVR. LED αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη. Διακοπές χρονοδιακόπτη. Λειτουργία χρονοδιακόπτη CTC: 6 βήματα
Μικροελεγκτής AVR. LED αναβοσβήνει χρησιμοποιώντας χρονοδιακόπτη. Διακοπές χρονοδιακόπτη. Λειτουργία χρονοδιακόπτη CTC: Γεια σε όλους! Τα χρονόμετρα είναι μια σημαντική έννοια στον τομέα των ηλεκτρονικών. Κάθε ηλεκτρονικό στοιχείο λειτουργεί σε χρονική βάση. Αυτή η χρονική βάση βοηθά να διατηρείται συγχρονισμένη όλη η εργασία. Όλοι οι μικροελεγκτές λειτουργούν σε κάποια προκαθορισμένη συχνότητα ρολογιού
Zero Cost Laptop Cooler / Stand (Χωρίς κόλλα, χωρίς διάτρηση, χωρίς παξιμάδια & μπουλόνια, χωρίς βίδες): 3 βήματα
Zero Cost Laptop Cooler / Stand (No Glue, No Drilling, No Nuts & Bolts, No Screws): ΕΝΗΜΕΡΩΣΗ: ΠΑΡΑΚΑΛΩ KINDLY VOTE FOR MY INSTRUCTABLE, THANKS ^ _ ^ YOU MAY MOTO LIKE ΕΙΣΟΔΟΣ ΣΤΟ www.instructables.com/id/Zero-Cost-Alumin-Furnace-No-Propane-No-Glue-/ ΜΠΟΡΕΙ ΝΑ VΗΦΙΣΕΤΕ ΓΙΑ ΤΟΝ ΚΑΛΥΤΕΡΟ ΦΙΛΟ ΜΟΥ