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

Δέκτης ATtiny85 IR USB: 11 βήματα (με εικόνες)
Δέκτης ATtiny85 IR USB: 11 βήματα (με εικόνες)

Βίντεο: Δέκτης ATtiny85 IR USB: 11 βήματα (με εικόνες)

Βίντεο: Δέκτης ATtiny85 IR USB: 11 βήματα (με εικόνες)
Βίντεο: ATtiny85 IR Remote Control for Room Automation, smallest Arduino 2024, Ιούλιος
Anonim
Δέκτης USB ATtiny85 IR
Δέκτης USB ATtiny85 IR

ΠΡΟΕΙΔΟΠΟΙΗΣΗ, ΑΥΤΟ ΤΟ ΟΔΗΓΙΟ ΕΧΕΙ ΓΙΝΕΙ ΑΠΟΛΥΤΟ

Η βιβλιοθήκη v-usb έχει σχεδιαστεί για να λειτουργεί με πρωτόκολλο USB 1.1 που σχεδόν δεν υπάρχει στις μέρες μας. Με την άφιξη του USB3 θα έχετε περισσότερο από έναν πονοκέφαλο προσπαθώντας να κάνετε τις συσκευές v-usb να λειτουργήσουν. Μετά την αλλαγή του κέντρου πολυμέσων, έχω πολλά προβλήματα σταθερότητας και παρόλο που ο δέκτης λειτουργεί, μετά από λίγο σταματά να λειτουργεί. Απέτυχα να το διορθώσω. Έφτιαξα επίσης μια έκδοση atmega328p, αλλά αυτή είχε τα ίδια προβλήματα. Η χρήση ενός χρονοδιακόπτη φύλαξης για την επαναφορά του πίνακα περιοδικά δεν βοήθησε ούτε αυτό, οπότε εγκαταλείπω το v-usb.

Κάντε τη χάρη στον εαυτό σας και μην προχωρήσετε με αυτό το διδακτικό, εκτός αν είναι για εκπαιδευτικούς σκοπούς. Προτείνω να αγοράσετε μια μονάδα τσιπ ATmega 32U4 που έχει ήδη ενσωματώσει τη διεπαφή usb και ακολουθήστε αυτόν τον οδηγό:

www.sparkfun.com/tutorials/337

Στη συνέχεια, ρίξτε έναν αισθητήρα IR TSOP31238 και είστε έτοιμοι.

Γεια σας κατασκευαστές! Αυτό είναι ένα οδηγό για την κατασκευή ενός λειτουργικού δέκτη IR IR χρησιμοποιώντας έναν μικροελεγκτή Attiny85. Ξεκίνησα αυτό το έργο για να ξεπεράσω την έλλειψη υποστήριξης (τουλάχιστον πλήρη υποστήριξη) για ορισμένα τηλεχειριστήρια IR στο λειτουργικό σύστημα GNU/Linux. Ακολουθώντας αυτές τις οδηγίες, μπορείτε να δημιουργήσετε έναν προγραμματιζόμενο δέκτη IR IR που λειτουργεί με οποιοδήποτε τηλεχειριστήριο IR για μερικά δολάρια.

Πρώτα απ 'όλα, αυτό το διδακτικό δεν θα υπήρχε χωρίς τη σκληρή δουλειά των ανθρώπων που δημιούργησαν τις βιβλιοθήκες που χρησιμοποιώ εδώ:

  • Ο David A. Mellis για τον πυρήνα του attiny
  • Λογισμικό Rowdy Dog για τη βιβλιοθήκη τους TinyTuner
  • Λογισμικό Rowdy Dog για το μικροσκοπικό πρόγραμμα εκκίνησης
  • Rancidbacon (https://rancidbacon.com/) για τη θύρα arduino της βιβλιοθήκης v-usb (https://code.google.com/archive/p/vusb-for-arduino/downloads)
  • seejaydee για τη βιβλιοθήκη IR του για μικροσκοπικούς πυρήνες που βρίσκονται στα σχόλια του εκπαιδευτικού https://www.instructables.com/id/Attiny-IR-librar… κώδικα στο https://www.instructables.com/id/Attiny-IR -βιβλιοθήκη…

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

Αυτός ο οδηγός υπάρχει επειδή δεν βρήκα ένα πλήρες σεμινάριο/οδηγό που να λειτουργεί εκτός πλαισίου (μπορεί να υπάρχει, αλλά δεν το βρήκα), έτσι συγκέντρωσα όλες τις διαθέσιμες πληροφορίες στον ιστό και μετά από αρκετές δοκιμές και λάθη Βρήκα έναν πλήρη οδηγό για τη δημιουργία ενός λειτουργικού δέκτη IR IR που λειτουργεί πραγματικά καλά.

Οι κύριες πηγές πληροφοριών που έχω ακολουθήσει:

  • https://nathan.chantrell.net/20121014/tinypcremot…
  • https://forum.arduino.cc/index.php?PHPSESSID=ap4jg…
  • https://blog.petrockblock.com/2012/05/19/usb-keybo…
  • https://learn.adafruit.com/using-an-infrared-libr…
  • https://codeandlife.com/2012/03/03/diy-usb-passwor…
  • https://codeandlife.com/2012/02/22/v-usb-with-atti…
  • https://www.instructables.com/id/Attiny-IR-librar…

Βήμα 1: Μερικές σκέψεις

  • Δεν έχω προγραμματιστή AVR ISP και δεν θέλω πραγματικά να αγοράσω έναν, οπότε χρησιμοποίησα ένα Arduino για να προγραμματίσω το attiny85
  • Δεν με ενδιαφέρει κανένα άλλο λειτουργικό σύστημα εκτός από το GNU/Linux, οπότε δεν ξέρω αν αυτό θα λειτουργήσει διαφορετικά.
  • υπάρχουν άλλες βιβλιοθήκες IR, αλλά δεν μπορούσα να τις κάνω να λειτουργήσουν ούτε με arduino. Σκεφτείτε όμως ότι ξεκίνησα με περιορισμένη γνώση σχετικά με τις βιβλιοθήκες IR. Maybeσως θα μπορούσα να τους κάνω να δουλέψουν τώρα μετά την εμπειρία που αποκτήθηκε για την αντιμετώπιση αρκετών θεμάτων. Τέλος πάντων, ήμουν χαμένος και απελπισμένος πριν βρω τη βιβλιοθήκη που παρείχε ο Seejaydee και το χρησιμοποιώ από τότε (ευχαριστώ πολύ φίλε!).
  • Υπάρχουν άλλες διαμορφώσεις υλικού, αλλά έχω χρησιμοποιήσει μόνο αυτήν που χρησιμοποιεί 5V για να τροφοδοτήσει το attiny85 και δύο δίοδοι zener 3,6V 0,5W για να σφίξει την τάση των γραμμών δεδομένων, λειτουργεί έξω από το κουτί, έτσι άλλες διαμορφώσεις.
  • Μπορείτε να χρησιμοποιήσετε ένα κρύσταλλο 16Mhz ή μπορείτε να χρησιμοποιήσετε τη βιβλιοθήκη tinytuner για να βαθμονομήσετε το εσωτερικό ρολόι της attiny85 σας. Σας συμβουλεύω ανεπιφύλακτα τη χρήση του κρυστάλλου, είναι πολύ πιο σταθερό και πιθανότατα θα σας γλιτώσει από πολλούς πονοκεφάλους.
  • Χρησιμοποιώ εδώ δύο διαφορετικούς bootloaders για το attiny85:

α) Έκδοση λογισμικού Rowdy Dog, έχει ενσωματώσει μια σειριακή διεπαφή που είναι πολύ δροσερή και είναι πολύ μικρή, ώστε να έχετε περισσότερο χώρο για το πρόγραμμά σας και άλλες βιβλιοθήκες. Το πρόβλημα είναι ότι για κάποιους λόγους παρόλο που λειτουργεί αρκετά καλά, μετά από λίγο καιρό η συσκευή usb αποσυνδέθηκε (μπορείτε να βρείτε τα προβλήματα με την εντολή dmesg). Δεν ξέρω αν αυτό είναι πρόβλημα του πυρήνα ή μικτός συνδυασμός του πυρήνα συν τις επιλεγμένες βιβλιοθήκες, οπότε μετά από λίγο αποφάσισα να χρησιμοποιήσω αυτόν τον πυρήνα μόνο για να αποκωδικοποιήσω τα τηλεχειριστήρια και να βαθμονομήσω το ρολόι (όταν δεν χρησιμοποιώ 16Mhz κρύσταλλο). Μετά από αυτό, απλώς καίω το πρόγραμμα εκκίνησης του Mellis και ανεβάζω το οριστικό σκίτσο που δεν χρησιμοποιεί τη σειριακή διεπαφή.

β) Έκδοση Mellis, σταθερός bootloader, το έχω χρησιμοποιήσει σε πολλά έργα. Θα χρησιμοποιούσα αυτό το πρόγραμμα εκκίνησης πάντα αν είχε συμπεριλάβει σειριακή διεπαφή. Χρησιμοποιώ αυτόν τον πυρήνα στο τελικό σκίτσο μετά την αποκωδικοποίηση όλων των κλειδιών στα τηλεχειριστήριά μου.

Βήμα 2: Ας ξεκινήσουμε με το υλικό

Ας ξεκινήσουμε με το υλικό
Ας ξεκινήσουμε με το υλικό
Ας ξεκινήσουμε με το υλικό
Ας ξεκινήσουμε με το υλικό
Ας ξεκινήσουμε με το υλικό
Ας ξεκινήσουμε με το υλικό

Εργαλεία που χρειάζεστε:

  • συμβατή πλακέτα με arduino
  • σειριακός προσαρμογέας usb για αποκωδικοποίηση των τηλεχειριστηρίων σας (απλά χρησιμοποιήστε ένα FT232RL)
  • έναν υπολογιστή με GNU/Linux εγκατεστημένο και το arduino IDE σωστά διαμορφωμένο, χρησιμοποιώ arduino IDE 1.8.0
  • ένα τηλεχειριστήριο IR για να δοκιμάσετε τη συσκευή σας (ακόμη και ένα χάλια όπως αυτά που βρίσκονται στα κιτ εκκίνησης arduino θα λειτουργήσει)
  • ένα πολύμετρο για να διορθώσετε τον πίνακα σας (ελπίζω να μην το χρειαστείτε, καλή τύχη!)

Ο κατάλογος των υλικών:

  • 1 attiny85
  • 2 αντιστάσεις 68R
  • 1 αντίσταση 1.5Κ
  • 1 αντίσταση 4,7K
  • 1 κρύσταλλο 16Mhz
  • 1 πυκνωτής 22pF
  • 1 πυκνωτής 0.1uF
  • 1 πυκνωτής 10uF
  • 2 δίοδοι zener 3,6V 0,5W
  • 1 αρσενικός σύνδεσμος USB τύπου A
  • 1 καρφίτσα λωρίδας με 6 ακίδες για προγραμματισμό και εντοπισμό σφαλμάτων στον πίνακα.
  • 1 αισθητήρας IR TSOP31238
  • πολύ καφέ για να σε κρατήσει ξύπνιο

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

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

Συγκολλήστε σε ένα μικρό κομμάτι από διάτρητο 4 πείρους, έπειτα κόψτε ένα παλιό καλώδιο USB και κολλήστε τους πείρους στα 4 από τα καλώδια μέσα στο καλώδιο usb:

  • το κόκκινο είναι VCC (5V)
  • το μαύρο είναι GND
  • το λευκό είναι D-
  • το πράσινο είναι D+

Κρατήστε τα πάντα μαζί με ζεστή κόλλα.

Τώρα πρέπει να συνδέσουμε τον προγραμματιστή ISP (Arduino), τον προσαρμογέα USB σε σειριακό (FT232RL) και τον αισθητήρα IR στο attiny85.

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

Προγραμματιστής ISP (Arduino): αυτό μας επιτρέπει να κάψουμε φορτωτές εκκίνησης και να φορτώσουμε σκίτσα

  • attiny85 PB0 (pin5) έως pin11 (MOSI) στο arduino
  • attiny85 PB1 (pin6) έως pin12 (MISO) στο arduino
  • attiny85 PB2 (pin7) έως pin13 (SCK) στο arduino
  • attiny85 RESET (pin1) με pullup (4.6k σε VCC) έως pin10 στο arduino
  • attiny85 VCC σε 5V στο arduino
  • attiny85 GND σε GND στο arduino

usb σε σειριακός προσαρμογέας (FT232RL): αυτό μας επιτρέπει να ελέγξουμε τη σειριακή θύρα

  • attiny85 PB0 (pin5 RX) έως TX στο FT232RL
  • attiny85 PB2 (pin7 TX) έως RX στο FT232RL
  • attiny85 GND (pin4) έως GND στο FT232RL
  • δεδομένου ότι το attiny85 τροφοδοτείται ήδη από το arduino, δεν χρειάζεται να συνδέσετε το 5v στο FT232RL, διαφορετικά συνδέστε: attiny85 VCC (pin8) σε 5V στο FT232RL

usb σε σειριακό προσαρμογέα (FT232RL) μόνο για τη βαθμονόμηση του ρολογιού (μόνο για τον φορτωτή εκκίνησης "ATtiny85 @ 8MHz (εσωτερικός ταλαντωτής, απενεργοποιημένο το BOD)")

  • PB4 (pin3 RX) έως TX στο FT232RL attiny85
  • PB3 (pin2 TX) έως RX στο FT232RL attiny85
  • GND (pin4) έως GND στο FT232RL
  • δεδομένου ότι το attiny85 τροφοδοτείται ήδη από το arduino, δεν χρειάζεται να συνδέσετε το 5v στο FT232RL, διαφορετικά συνδέστε: attiny85 VCC (pin8) σε 5V στο FT232RL

Εάν χρησιμοποιείτε κρύσταλλο 16Mhz, συνδέστε το με τις ακίδες Attiny85 PB3 (pin2) και PB4 (pin3) και συνδέστε κάθε πείρο στο GND, καθώς και μέσω ενός καπακιού 22pF το καθένα.

Φιλτράρετε το Attiny85 VCC με πυκνωτές 0.1uF και 10uF που τους συνδέουν παράλληλα με το GND

Συνδέστε τον πείρο εξόδου του αισθητήρα IR στο attiny85 PB1 (pin6), ενεργοποιήστε τον.

Δημιουργήστε και συνδέστε τη διεπαφή usb:

  • GND (μαύρο σύρμα): συνδέστε το με το κοινό GND (όλες οι βάσεις συνδέονται μεταξύ τους)
  • D- (λευκό σύρμα) συνδεδεμένο με attiny85 PB0 (pin5) μέσω αντίστασης 68R, συνδέστε το επίσης στη γείωση μέσω ζένερ 3,6V 0,5W και τραβήξτε το μέχρι VCC με αντίσταση 1,5K
  • D+ (πράσινο σύρμα) συνδεδεμένο στο PB2 μέσω αντίστασης 68R, συνδέστε το στη γείωση μέσω ζένερ 3,6V 0,5W
  • 5V, μπορείτε να το αφήσετε ασύνδετο αφού όλα τροφοδοτούνται από το Arduino σε αυτό το στάδιο, διαφορετικά συνδέστε το με το attiny85 VCC

Οι δίοδοι zener συνδέονται έτσι ώστε οι άνοδοι να συνδέονται με το GND και οι κάθοδοι να συνδέονται με τις γραμμές δεδομένων D+ και D-.

Βήμα 3: Τελικός σχεδιασμός

Τελικός Σχεδιασμός
Τελικός Σχεδιασμός
Τελικός Σχεδιασμός
Τελικός Σχεδιασμός
Τελικός Σχεδιασμός
Τελικός Σχεδιασμός

Για τον τελικό σχεδιασμό θα μπορούσατε να χρησιμοποιήσετε διάτρητο διάτρητο στοιχείο ή να χαράξετε τη δική σας σανίδα και να χρησιμοποιήσετε εξαρτήματα smd. Για να μάθετε πώς να χαράζετε έναν πίνακα, απλώς κάντε google, υπάρχουν φοβερά σεμινάρια διαθέσιμα στο διαδίκτυο.

Έχω χαράξει τον δικό μου πίνακα και είμαι πολύ ευχαριστημένος με τα τελικά αποτελέσματα (μικρός, σταθερός και στιβαρός πίνακας). Ναι, ξέρω ότι το κόψιμο είναι χάλια, αλλά δεν μπορούσα να χρησιμοποιήσω κανένα ηλεκτρικό εργαλείο τόσο αργά το βράδυ και απλά κόψτε τον πίνακα με το ψαλίδι μου με τσίγκινο.

Παρεμπιπτόντως, τα ίχνη στις εικόνες δεν είναι γυμνός χαλκός, έχουν υποστεί επεξεργασία με μια δυσάρεστη χημική ουσία που συγκολλά ελαφρώς τον χαλκό (υπάρχει υποψία ότι προκαλεί καρκίνο, οπότε χρησιμοποιήστε το με μεγάλη προσοχή, σφαίρες λατέξ και μάσκα σκόνης):

Χρησιμοποιήστε τα παραπάνω σχήματα για να σχεδιάσετε τη διάταξή σας ή μπορείτε απλά να χρησιμοποιήσετε το pcb footprint μου για να χαράξετε τον πίνακα σας.

Βήμα 4: Αντιμετώπιση του Λογισμικού

Το κύκλωμα σε αυτό το έργο είναι πολύ εύκολο, το λογισμικό αντίθετα απαιτεί μεγαλύτερη προσπάθεια.

Χρειαζόμαστε τουλάχιστον 2 βιβλιοθήκες (μία ακόμη εάν δεν χρησιμοποιείτε κρύσταλλο) συν 2 φορτωτές εκκίνησης για να γίνει αυτό. Όταν ξεκίνησα αυτό το έργο δοκίμασα μερικές βιβλιοθήκες, μερικές φορές δεν λειτούργησαν και πολλές φορές απλώς δεν είχαν διαμορφωθεί για να λειτουργούν με ένα Attiny85 εκτός κουτιού (δεν το ήξερα ακόμα). Στη συνέχεια, βρήκα προβλήματα με τις βιβλιοθήκες / τους εκκινητές που αλληλεπικαλύπτονται. Τέλος, έπρεπε να αντιμετωπίσω ένα αρκετά μεγάλο αριθμό σφαλμάτων όταν ένωσα το τελικό κύκλωμα στον υπολογιστή μου. Δεν είχα αυτόν τον οδηγό όμως, οπότε νομίζω ότι θα ήσουν καλά, απλώς ακολούθησε τα βήματα σε αυτό το διδακτικό, αν το κάνεις αυτό χωρίς να κάνεις λάθη θα πρέπει να είσαι καλά:)

Πρέπει τώρα να εγκαταστήσουμε και να διαμορφώσουμε μερικές βιβλιοθήκες:

  • v-usb για βιβλιοθήκη arduino: αυτή η βιβλιοθήκη επιτρέπει στον μικροελεγκτή να αναγνωριστεί από τον υπολογιστή ως πληκτρολόγιο HID USB και θα το χρησιμοποιήσουμε για την αποστολή πλήκτρων στο PC. Αυτή η βιβλιοθήκη χρειάζεται κάποιες αλλαγές για να είναι συμβατή με το attiny85
  • Βιβλιοθήκη tinytuner μόνο εάν δεν χρησιμοποιείτε κρύσταλλο 16Mhz. Στη συνέχεια, θα χρειαστεί να βαθμονομήσετε το εσωτερικό ρολόι του μικροελεγκτή. Αυτή η βιβλιοθήκη λειτουργεί έξω από το κουτί.
  • Βιβλιοθήκη Attiny-IR για αλληλεπίδραση με τον αισθητήρα IR. Αυτή η βιβλιοθήκη λειτουργεί έξω από το κουτί.

Χρειαζόμαστε επίσης 2 φορτωτές εκκίνησης:

  • Έκδοση λογισμικού σκύλου, με διαθέσιμη τη σειριακή διεπαφή. Αυτός ο φορτωτής εκκίνησης χρειάζεται ένα μικρό τσίμπημα για να λειτουργήσει με το attiny85 καθώς χρησιμοποιεί το timer1 για τη λειτουργία millis () και δεν θα λειτουργήσει με τη βιβλιοθήκη IR. Πρέπει να αλλάξουμε το χρονόμετρο σε timer0.
  • Έκδοση Mellis, σταθερός bootloader που θα χρησιμοποιήσουμε στο τελικό στάδιο. Αυτό λειτουργεί έξω από το κουτί.

Βήμα 5: Εγκατάσταση και διαμόρφωση της Βιβλιοθήκης V-usb

Κατεβάστε τη βιβλιοθήκη από τη διεύθυνση https://code.google.com/archive/p/vusb-for-arduin…. Αποσυμπιέστε το αρχείο και αντιγράψτε τις βιβλιοθήκες φακέλων/UsbKeyboard στο φάκελο βιβλιοθηκών sketchbook σας.

Τώρα πρέπει να επεξεργαστείτε μερικά αρχεία για να είναι συμβατά με το ATtiny85 (έχει ρυθμιστεί να λειτουργεί με arduino):

Α) Επεξεργασία usbconfig.h:

κάτω από την αλλαγή "Διαμόρφωση υλικού":

#define USB_CFG_IOPORTNAME Dto ## define USB_CFG_IOPORTNAME B

και

#ορίστε USB_CFG_DMINUS_BIT 4 για να#ορίσετε USB_CFG_DMINUS_BIT 0

στην ενότητα "Προαιρετική ρύθμιση παραμέτρων υλικού":

#define USB_CFG_PULLUP_IOPORTNAME Dto ## define USB_CFG_PULLUP_IOPORTNAME B

Για να δημιουργήσετε μια πλήρη προδιαγραφή "συμβατό με την εκκίνηση HID" (διαφορετικά δεν θα λειτουργήσει κανένα κλειδί πολυμέσων), αλλάξτε επίσης:

#define USB_CFG_INTERFACE_SUBCLASS 0 // Bootto#define USB_CFG_INTERFACE_SUBCLASS 0x01 // Boot

και

#define USB_CFG_INTERFACE_PROTOCOL 0 // Πληκτρολόγιο για#καθορισμό USB_CFG_INTERFACE_PROTOCOL 0x01 // Πληκτρολόγιο

Προαιρετικά, μπορείτε επίσης να αλλάξετε τον κατασκευαστή και το όνομα της συσκευής στα ακόλουθα όρια:

#ορίστε USB_CFG_VENDOR_NAME

#ορίστε USB_CFG_DEVICE_NAME

Β) επεξεργασία UsbKeyboard.h:

αλλαγή:

PORTD = 0; // TODO: Μόνο για ακίδες USB? DDRD | = ~ USBMASK;

προς το

PORTB = 0; // TODO: Μόνο για ακίδες USB? DDRB | = ~ USBMASK;

Για να επιτρέπεται η αλλαγή των κωδικών -κλειδιών πέραν των 101, πρέπει επίσης:

0x25, 0x65, // LOGICAL_MAXIMUM (101) έως: 0x25, 0xE7, // LOGICAL_MAXIMUM (231)

και

0x29, 0x65, // USAGE_MAXIMUM (Εφαρμογή πληκτρολογίου) έως: 0x29, 0xE7, // USAGE_MAXIMUM (Εφαρμογή πληκτρολογίου)

Mayσως χρειαστεί να επεξεργαστείτε και αυτά τα 3 αρχεία:

usbdrv.husbdrv.cUsbKeyboard.h

και κάθε φορά που βλέπετε το PROGMEM να προσθέτει "const" πριν από το όνομα τύπου μεταβλητής (π.χ. PROGMEN char usbHidReportDescriptor [35] ==> PROGMEM const char usbHidReportDescriptor [35])

Εάν αυτό δεν είναι σαφές, επισκεφτείτε τη διεύθυνση

Μπορείτε να αποφύγετε όλες αυτές τις αλλαγές εάν απλώς κατεβάσετε τη συνημμένη βιβλιοθήκη (έκανα όλες αυτές τις αλλαγές μόνος μου) και απλώς την εξαγάγετε μέσα στο φάκελο βιβλιοθηκών του sketchbook:

Το UsbKeyboard έχει διαμορφωθεί για το attiny85

Επεξεργασία: Πρόσφατα ανακάλυψα ότι ο Alejandro Leiva (https://github.com/gloob) έχει φροντίσει αυτήν τη βιβλιοθήκη και φαίνεται να λειτουργεί επίσης καλά. Μπορείτε επίσης να δοκιμάσετε την έκδοσή του με τις απαραίτητες αλλαγές που έκανα για να λειτουργήσει με το attiny, οπότε αν θέλετε να το ελέγξετε, απλά το εξαγάγετε μέσα στο φάκελο βιβλιοθηκών sketchbook.

UsbKeyboard διαμορφωμένο για attiny85 (έκδοση Alejandro Leiva)

Βήμα 6: Εγκατάσταση των βιβλιοθηκών Attiny-IR και Tinytuner

Α) βιβλιοθήκη Attiny-IR:

κατεβάστε το από τη διεύθυνση https://drive.google.com/open?id=0B_w9z88wnDtFNHlq… και, στη συνέχεια, αποσυμπιέστε το στο φάκελο βιβλιοθηκών του sketchbook.

Β) Βιβλιοθήκη Tinytuner:

Αυτό είναι απαραίτητο μόνο εάν δεν χρησιμοποιείτε κρύσταλλο 16 Mhz, αλλά πιστέψτε με, παρόλο που λειτουργεί και χωρίς κρύσταλλο, είναι πολύ πιο σταθερό με αυτό και κοστίζουν μερικά λεπτά, οπότε κρατήστε το απλό, χρησιμοποιήστε ένα κρύσταλλο και παραλείψτε αυτή τη βιβλιοθήκη.

Δεν έχετε πειστεί ακόμα; εντάξει, κατεβάστε τη βιβλιοθήκη από τη διεύθυνση https://storage.googleapis.com/google-code-archive…. στη συνέχεια αποσυμπιέστε τη στο φάκελο βιβλιοθηκών sketchbook.

Τελειώσαμε με τις βιβλιοθήκες, τώρα προχωράμε στην εγκατάσταση των bootloaders.

Βήμα 7: Εγκατάσταση και διαμόρφωση των Bootloaders

Θα εγκαταστήσουμε δύο φορτωτές εκκίνησης, ο Mellis σύμφωνα με την εμπειρία μου είναι πιο σταθερός και θα τον χρησιμοποιήσουμε στο τελικό σκίτσο. Το άλλο που αναπτύχθηκε από το Rowdy Dog Software είναι ένας φοβερός πυρήνας, πολύ μικρός και διαθέσιμος ενσωματωμένος σειριακός σύνδεσμος, αλλά το τηλεχειριστήριό μου συνετρίβη μετά από λίγο καιρό, οπότε θα χρησιμοποιήσουμε αυτό το bootloader μόνο για να βαθμονομήσουμε το εσωτερικό ρολόι attiny85 και να αποκωδικοποιήσουμε το τηλεχειριστήριό μας. κουμπιά.

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

Ας ξεκινήσουμε με την εγκατάσταση:

Α) Mellis bootloader:

απλώς ανοίξτε τις προτιμήσεις Arduino IDE και προσθέστε τις διευθύνσεις URL Πρόσθετοι πίνακες διαχείρισης:

raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Στη συνέχεια, ανοίξτε τον διαχειριστή πινάκων Arduino IDE και αναζητήστε attiny, εγκαταστήστε τους πίνακες από το Mellis. Τώρα θα πρέπει να δείτε το Arduino ID τους πίνακες ATtiny25/45/85 και ATtiny24/44/84.

Β) Μικρό bootloader του Rowdy Dog Software:

κατεβάστε το πρόγραμμα εκκίνησης από τη διεύθυνση

Αποσυμπιέστε το αρχείο και αντιγράψτε τον μικροσκοπικό φάκελο μέσα στο sketchbook/hardware (δημιουργήστε αυτόν τον φάκελο εάν δεν υπάρχει ακόμα). στη συνέχεια, μεταβείτε στο φάκελο sketchbook/hardware/tiny/avr/και:

1) αντιγράψτε το αρχείο Prospective Boards.txt στους πίνακες αρχείων.txt

2) επεξεργαστείτε το αρχείο platform.txt και κάντε μερικές αλλαγές:

Αποσυνδέστε τη μεταβλητή compiler.path και αφήστε την να δείχνει προς το φάκελο hardware/tools/avr/bin/στο φάκελο εγκατάστασης του arduino:

compiler.path = {PATH_TO_YOUR_ARDUINO_FOLDER}/hardware/tools/avr/bin/

αλλαγή alsocompiler. S.flags = -c -g -assembler-with-cpptocompiler. S.flags = -c -g -x assembler-with-cpp

Στη συνέχεια, αλλάξτε τις ακόλουθες μεταβλητές, βεβαιωθείτε ότι όλα είναι στη θέση τους (αυτά τα αρχεία πρέπει να υπάρχουν, διαφορετικά δείξτε τις μεταβλητές στις σωστές διαδρομές):

tools.avrdude.cmd.path = {runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path = {runtime.ide.path} /hardware/tools/avr/etc/avrdude.conf

tools.avrdude.cmd.path.linux = {runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path.linux = {runtime.ide.path} /hardware/tools/avr/etc/avrdude.conf

3) επεξεργαστείτε τους πυρήνες αρχείων/tiny/core_build_options.h και αλλάξτε:

#define TIMER_TO_USE_FOR_MILLIS 1 to#define TIMER_TO_USE_FOR_MILLIS 0

Αυτό είναι πολύ σημαντικό, διαφορετικά ο δέκτης IR θα βγάζει μηδενικά για κάθε κουμπί. Αυτή η δήλωση διαμορφώνει το timer0 για τη συνάρτηση millis () αφήνοντας το timer1 διαθέσιμο στη βιβλιοθήκη IR. Το τελικό σκίτσο θα απενεργοποιήσει το timer0 ούτως ή άλλως, ώστε να μην έχετε διαθέσιμες λειτουργίες ούτε millis () και καθυστέρηση (). Αντίθετα, μπορεί να έχετε διαθέσιμη τη λειτουργία delayMicroseconds ().

Αυτός ο φορτωτής εκκίνησης είναι ελάχιστος, αλλά περιλαμβάνει υποστήριξη σειριακών αντικειμένων:

Το Attiny85 PB2 (pin7) είναι TX και το PB0 (pin5) είναι RX

Μπορείτε να έχετε μια διαμόρφωση με τον προγραμματιστή ISP (arduino) και τον προσαρμογέα σειριακού σε usb συνδεδεμένο ταυτόχρονα, ώστε να μην χρειάζεται να αλλάζετε πολύ συχνά καλώδια:

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

Βήμα 8: Κάψιμο εκκινητών και μεταφόρτωση σκίτσων

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

Για να εγγράψετε ένα bootloader στο Attiny85 πρέπει να ανεβάσετε το παράδειγμα του ISP στο Arduino και μετά να επιλέξετε τον προγραμματιστή Arduino ως ISP.

Τώρα τοποθετήστε έναν πυκνωτή 10uF μεταξύ των ακίδων επαναφοράς και γείωσης στο arduino (δεν απαιτείται για τη διαδικασία καύσης, αλλά είναι να ανεβάσετε σκίτσα στο attiny85).

Τώρα το arduino είναι έτοιμο να κάψει bootloaders και να φορτώσει σκίτσα. Απλά πρέπει να επιλέξετε τη σωστή πλακέτα συμβατή με τη γυαλάδα σας και να την κάψετε.

Για να φορτώσετε ένα σκίτσο στο Attiny85, φορτώστε το στο arduino IDE και κάντε κλικ στο "Μεταφόρτωση χρησιμοποιώντας προγραμματιστή".

ΣΗΜΑΝΤΙΚΟ: κατά τη μεταφόρτωση του σκίτσου υπάρχουν 3 βήματα, σύνταξη, εγγραφή και επαλήθευση. Εάν η σύνταξη και η συγγραφή λειτουργούσαν με επιτυχία, αλλά η διαδικασία επαλήθευσης αποτύχει, είναι πιθανό το σκίτσο να λειτουργήσει ούτως ή άλλως.

Βήμα 9: Βαθμονομήστε το εσωτερικό ρολόι Attiny85 (παραλείψτε αυτό εάν χρησιμοποιείτε κρύσταλλο)

Σε περίπτωση που αποφασίσετε να μην χρησιμοποιήσετε το κρύσταλλο 16Mhz, πρέπει να βαθμονομήσετε το ρολόι attiny85, οπότε θα χρειαστούμε ένα bootloader με σειριακή διεπαφή διαθέσιμη και θα χρησιμοποιήσουμε τη βιβλιοθήκη tinytuner για να λάβουμε τη σωστή βαθμονόμηση.

Ακολουθήστε τα επόμενα βήματα

  • επιλέξτε κάτω από τα εργαλεία το Arduino ως προγραμματιστή ISP
  • επιλέξτε την πλακέτα "ATtiny85 @ 8MHz (εσωτερικός ταλαντωτής, BOD απενεργοποιημένο)"
  • Υποθέτω ότι έχετε τη σύνδεση ISP έτοιμη όπως περιγράφεται πριν συνδεθείτε αλλιώς κάντε τις συνδέσεις
  • εγγραφή bootloader
  • αυτός ο φορτωτής εκκίνησης έχει διαμορφώσει διαφορετικές ακίδες για τη σειριακή διεπαφή, χρησιμοποιήστε αυτήν τη διαμόρφωση μόνο για τον τρέχοντα φορτωτή εκκίνησης

- PB4 (pin3 RX) έως TX στο FT232RL attiny85 - PB3 (pin2 TX) έως RX στο FT232RL attiny85 - GND (pin4) έως GND στο FT232RL αφού το attiny85 τροφοδοτείται ήδη από το arduino που δεν χρειάζεται να συνδεθείτε το 5v στο FT232RL, αλλιώς συνδέστε: attiny85 VCC (pin8) σε 5V στο FT232RL

  • ανεβάστε το παράδειγμα tinytuner στο attiny85
  • ανοίξτε το πρόγραμμα οθόνης για να παρακολουθήσετε τη σειριακή επικοινωνία: screen /dev /ttyUSB0 9600
  • επαναφέρετε το attiny85 που συνδέει τον ακροδέκτη RESET (pin1) στο GND (μόλις μια στιγμή), θα εμφανιστεί ένα μήνυμα καλωσορίσματος στο παράθυρο της οθόνης
  • Συνεχίστε να στέλνετε μεμονωμένους χαρακτήρες «x» (χωρίς μεταφορά-επιστροφή, χωρίς τροφοδοσία γραμμής) μέχρι να ολοκληρωθεί η βαθμονόμηση
  • σχολιάστε κάπου την τιμή της βαθμονόμησης (OSCCAL = 0x). Αυτή είναι η τιμή που θα χρειαστεί να δηλώσετε στα τελικά σκίτσα

Βήμα 10: Αποκωδικοποιήστε τα απομακρυσμένα κουμπιά σας

Τώρα ήρθε η ώρα να αποκωδικοποιήσουμε τα κουμπιά του τηλεχειριστηρίου μας και να τα εκχωρήσουμε σε συγκεκριμένα πλήκτρα στον υπολογιστή, για να το κάνουμε αυτό ακολουθώντας τα επόμενα βήματα:

  • επιλέξτε την πλακέτα "ATtiny85 @ 16MHz (εσωτερικό PLL; 4.3V BOD)" εάν δεν χρησιμοποιείτε κρύσταλλο, "ATtiny85 @ 16 MHz (εξωτερικός κρύσταλλος; 4.3 V BOD" αλλιώς, στη συνέχεια κάψτε τον
  • φορτώστε το σκίτσο:
  • Εάν δεν χρησιμοποιείτε κρύσταλλο, αποσυνδέστε τη γραμμή που περιέχει τη μεταβλητή OSCCAL και εκχωρήστε την στην τιμή που βρήκατε όταν κάνατε τη βαθμονόμηση του ρολογιού
  • Υποθέτω ότι ο αισθητήρας είναι συνδεδεμένος όπως περιγράφηκε προηγουμένως, αλλιώς συνδέστε τον
  • Υποθέτω επίσης ότι ο σειριακός προσαρμογέας FT232RL σε usb είναι συνδεδεμένος, αλλιώς συνδέστε τον
  • επαναφέρετε το attiny85 που συνδέει τον ακροδέκτη RESET (pin1) στο GND (μόλις μια στιγμή)
  • πατήστε επανειλημμένα τα κουμπιά του τηλεχειριστηρίου σας και ελέγξτε το παράθυρο της οθόνης, πρέπει να σημειώσετε τον τελευταίο αριθμό για κάθε εγγραφή, κάθε κουμπί μπορεί να παράγει 2 διαφορετικούς αριθμούς

Παράδειγμα:

ΠΑΡΑΛΑΒΕΤΑΙ D44 3396 ΠΑΡΑΛΑΒΕ 544 1348

Σημειώστε 3396 και 1348 σε συνδυασμό με το κουμπί που μόλις πατήσατε, τότε πρέπει να αποφασίσετε τι θέλετε να κάνετε με αυτό το κουμπί. Για παράδειγμα, θα μπορούσα να θέλω αυτό το κουμπί για να στείλει τον κωδικό κλειδιού πολυμέσων "Αύξηση έντασης", τότε πρέπει να βρω το αναγνωριστικό για αυτόν τον κωδικό κλειδιού. Για να το κάνετε αυτό, κατεβάστε το PDF:

Προσέξτε την ενότητα "Σελίδα πληκτρολογίου/πληκτρολογίου" σελίδα 53 και χρησιμοποιήστε τους αριθμούς στη στήλη Αναγνωριστικό χρήσης (Δεκ) για να συνδέσετε τα τηλεχειριστήρια σας σε κωδικούς πληκτρολογίου. Στο παράδειγμά μας μπορούμε να δούμε ότι ο κωδικός -κλειδί για το "Volume up" είναι: 128.

Επεξεργαστείτε το αρχείο το αρχείο UsbKeyboard.h μέσα στη βιβλιοθήκη UsbKeyboard από το πακέτο v-usb που εγκαταστήσαμε πριν και προσθέστε στα υπάρχοντα ορισμούς εάν δεν είναι ήδη εκεί:

#define KEY_VOL_UP 128

Όταν τελειώσουμε με όλα τα κουμπιά του τηλεχειριστηρίου μας και όλα τα καθορισμένα στο αρχείο UsbKeyboard.h είναι έτοιμα μπορούμε να προχωρήσουμε στο τελευταίο βήμα.

Βήμα 11: Φόρτωση του τελικού σκίτσου και ελπίδα για το καλύτερο

Φόρτωση του τελικού σκίτσου και ελπίδα για το καλύτερο!
Φόρτωση του τελικού σκίτσου και ελπίδα για το καλύτερο!
Φόρτωση του τελικού σκίτσου και ελπίδα για το καλύτερο!
Φόρτωση του τελικού σκίτσου και ελπίδα για το καλύτερο!

Τώρα έχουμε όλα τα απομακρυσμένα κουμπιά αποκωδικοποιημένα, το αρχείο UsbKeyboard.h είναι γεμάτο με τους κωδικούς -κλειδιά μας, οπότε τώρα μπορούμε να φορτώσουμε στο arduino IDE το οριστικό σκίτσο από:

github.com/venumz/ATtiny85-USB-IR-receiver…

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

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

Παρατηρήστε ότι στη συνάρτηση βρόχου υπάρχουν πολλές προτάσεις όπως αυτή:

if (results.value == 3405 || results.value == 1357) {// βέλος προς τα επάνω

if (lastStroke! = results.value) UsbKeyboard.sendKeyStroke (KEY_ARROW_UP);

}

Πρέπει να δημιουργήσετε τις δικές σας δηλώσεις, μία ανά κουμπί στο τηλεχειριστήριό σας. Στη συνθήκη "αν" πρέπει να βάλετε τα αποτελέσματα.τιμήστε τις τιμές που έχετε εντοπίσει για την αποκωδικοποίηση του τηλεχειριστηρίου σας και ως όρισμα της μεθόδου UsbKeyboard.sendKeyStroke πρέπει να βάλετε έναν από τους ήδη καθορισμένους κωδικούς -κλειδιά στο αρχείο UsbKeyboard.h.

Η συνθήκη "if (lastStroke! = Results.value)" είναι απαραίτητη επειδή ορισμένα τηλεχειριστήρια στέλνουν τον ίδιο κωδικό δύο φορές ανά επίσκεψη και αυτό αποτρέπει το δεύτερο χτύπημα. Δεν είμαι απόλυτα σίγουρος και μπορεί να εξαρτάται από το πρωτόκολλο IR που έχει προγραμματιστεί στο τηλεχειριστήριό σας (δεν είμαι πραγματικά ειδικός στα πρωτόκολλα IR), αλλά σύμφωνα με την εμπειρία μου με τα δικά μου τηλεχειριστήρια, κάθε κουμπί μπορεί να παράγει 2 διαφορετικούς κωδικούς και ενώ πατάτε και κρατάτε πατημένο το κουμπί, στέλνει τον ίδιο κωδικό, αλλά αν ξαναπατήσετε το κουμπί στέλνει τον άλλο. Φαίνεται λοιπόν ότι οι κωδικοί αποστέλλονται με εναλλακτικό τρόπο, υποθέτω ότι είναι μια τυπική λειτουργία για να γνωρίζετε πόσες φορές πραγματικά χτυπήσατε το κουμπί.

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

Για αυτό το βήμα, είναι καλύτερο αν αποσυνδέσετε το arduino και το usb σε σειριακό προσαρμογέα και μόνο τότε, συνδέστε το USB στη θύρα του υπολογιστή σας (σε περίπτωση που κάτι πάει στραβά, το κύκλωμά σας θα είναι απλούστερο να διορθωθεί).

Εάν όλα λειτουργούσαν καλά, όταν ανοίγετε ένα τερματικό και στέλνετε την εντολή dmesg θα πρέπει να δείτε κάτι παρόμοιο με την πρώτη εικόνα σε αυτό το βήμα. Εάν υπήρχαν προβλήματα, θα πρέπει να έχετε σφάλματα όπως αυτά που βρέθηκαν στη δεύτερη εικόνα και πρέπει να ξεκινήσετε τον εντοπισμό σφαλμάτων στο κύκλωμα και/ή το λογισμικό. Μία από τις πηγές των αρχικών σφαλμάτων που είχα ήταν ένας διανομέας USB που δεν θα λειτουργούσε με τον δέκτη IR μου (άλλοι λειτουργούσαν όμως)… οπότε είναι καλύτερο για αυτό το τελευταίο βήμα να συνδέσετε τον δέκτη IR απευθείας στη θύρα του υπολογιστή σας. Τα τελικά λάθη μπορεί να είναι δύσκολο να βρεθούν, αλλά στο τέλος, όπως εγώ, θα μάθετε πολλά και το τίμημα που πληρώνετε αξίζει τον κόπο, σας διαβεβαιώ.

Αυτό είναι όλο το λαό, ενημερώστε με αν παρατηρήσετε σφάλματα σε αυτόν τον οδηγό και απολαύσετε τον ολοκαίνουργιο δέκτη IR USB σας!

Συνιστάται: