0
Φτιάχνω ένα project χρησιμοποιώντας τον mcu atmega328 (arduino) που για προγραμματισμό τον έχω συνδέσειμε έναν USB TTL UART controller CP2102 και το συνδέω όπως μπορείτε να δείτε στο breadboard παρακάτω:
ATMega328_USB_TTL_DTR.jpg
Το πρόβλημα γενικός με τον atmega328 (που παρουσιάζετε και σε όλα τα arduino boards) είναι ότι όποτε και να πάρει σήμα από HIGH σε LOW/HIGH το reset pin από το DTR (Data Terminal Ready) του USB controller, τότε ο MCU κάνει reset, συμπεριφορά που δεν είναι επιθυμητή για ολοκληρωμένα project που τροφοδοτούνται από USB θύρα ηλεκτρονικού υπολογιστή. Αυτή η κατάσταση μπορεί να συμβεί κατά την ενεργοποίηση/επανεκκίνηση του υπολογιστή, κατά την σύνδεση με την συριακή θύρα, ακόμα και με το serial monitor του arduino, και γενικώς οποιαδήποτε εφαρμογή προσπαθήσει να κάνει σύνδεση με την συριακή και ενεργοποιήσει το DTR. Σε μερικά φόρουμ γράφουν ότι το κάνει μόνο σε Mac και Linux, κάτι που όμως δεν ισχύει. Αυτό εξαρτάτε καθαρά από το state που έχει το DTR στην συριακή θύρα, κάτι που μπορεί να αλλάξει με πολλούς τρόπους και τίποτα δεν εγγυάται ότι το DTR δεν θα στέλνει σήμα.
Για να λύσω αυτό το πρόβλημα σε project που όταν ολοκληρωθεί θα τροφοδοτείτε από την θύρα USB του υπολογιστή μέσω του USB controller, έχω τοποθετήσει έναν διπλό διακόπτη που θα παίζει τον ρόλο του programmer, δηλαδή με κλειστό κύκλωμα στον διακόπτη, συνδέουμε το DTR στο reset pin με το ένα κανάλι του διακόπτη, και με το άλλο κανάλι το LED που έχουμε στο pin13 για την ένδειξη ότι είναι σε κατάσταση programmable, η οποία μέθοδος δουλεύει πολύ καλά με χειροκίνητο διακόπτη.
Και ρωτάω το εξής.
Είναι δυνατών να έχω software switch χρησιμοποιώντας digital pin του MCU για να ενεργοποιώ και να απενεργοποιώ το DTR του USB controller προς το reset pin και να έχω programmable mode που να το ενεργοποιώ από το πρόγραμμα με digital pin;
Το DTR ενεργό στέλνει συνέχεια 3.3V μέχρι να πάρει σήμα LOW και να αρχίσει ο MCU να διαβάζει τα data που είναι να γράψει στο μνήμη για το καινούργιο πρόγραμμα. Τα pin του MCU είναι 5V στο HIGH.
Το σημα του DTR για να κανει reset:
dtr_signal.jpg
Το έψαξα αρκετά και δεν έχω βρει κάτι. Δοκίμασα να το κάνω με NPN τρανζίστορ και το digital pin στο base και το DTR στο collector και το reset στο emitter, αλλά δεν δουλεύει γιατί όταν κάνει reset ο MCU το digital pin γίνετε LOW και το DTR αποσυνδέετε χωρίς να προλάβει να ολοκληρώσει το σήμα. Σκέφτηκα να δοκιμάσω με PNP transistor, αλλά διάβασα ότι η τάση πρέπει να είναι η ιδιά και στο base και στο collector, πράγμα που δεν ισχύει στη συγκεκριμένη περίπτωση.
Όλα αυτά με τα transistor τα σκέφτηκα εγώ διαβάζοντας για transistor switches, και δεν ξέρω κατά ποσό ισχύουν!
Θεωρητικά με PNP transistor θα μπορούσε να γίνει κάτι τέτοιο;
Προσπαθώ να βρω κάποιον τρόπο, αλλά οι γνώσεις μου δεν επαρκούν.