UPDATED 26/05/2007
Λόγο του ότι άλλαξα adsl router, είχα πρόβλημα στο να μπορώ να κάνω update στο DDNS, το οποίο ο πρώτος router μου (Linksys) υποστήριζε από μόνος του το DynDns.org... Επομένως, όταν το pc ήταν κλειστό και άλλαζε η IP μου δεν μπορούσα να συνδεθώ εξωτερικά και να το ανοίξω...
Πριν εξηγήσω την διαδικασία για ευκολία δίνω ένα διάγραμμα της λειτουργίας...
Στο διάγραμμα φαίνεται ο εξωτερικός χρήστης, ο update server του no-ip και ο adsl router του σπιτιού-γραφείουμ με ότι έχει από πίσω του...
Το DDNS για να έχει μονίμως ενημερωμένη την δυναμική ΙΡ του router θα πρέπει να υπάρχει ένας client o οποίος θα συνδέεται στον update server του φορέα που παρέχει την υπηρεσία και να τον ενημερώνει ανά τακτά χρονικά διαστήματα για ΙΡ που έχει την στιγμή της σύνδεσης...
Την διαδικασία αυτή την έκανε αυτόματα ο προηγούμενος router μου (Linksys) που υποστήριζε το DynDNS.org, αλλά ο καινούργιος (Tilgin) δεν παρέχει τέτοια δυνατότητα... επομένως ενσωμάτωσα στο software που τρέχει μέσα στον μικροελεγκτή (PSoC) της συσκευής την δυνατότητα να κάνει κάθε 10 λεπτά update στον no-ip server την ΙΡ του router...
Η διαδικασία του update για το DDNS είναι στην ουσία ένα HTTP request που κάνει η συσκευή στην πόρτα 80 του update server της no-ip... Το request αυτό πρέπει να περιέχει κάποιες πληροφορίες όπως είναι το username, password, host, (ip), User-Agent κλπ... Τα 3 πρώτα αφορούν το account του χρήστη στο no-ip, ενώ τα υπόλοιπα αφορούν την επικοινωνία του client με τον server... Το εμπόδιο στην όλη διαδικασία ήταν ότι σχεδών όλοι οι DDNS φορείς απαγορεύουν την διαδικασία του update από clients που οι ίδιοι δεν έχουν δώσει authorization, έτσι ώστε να μην πήζουν οι servers τους από requests πολλών clients... τελικά αυτό το παρέκαμψα διαβάζοντας το source code ενός update client του no-ip για linux... ευτυχώς στις διανομές των clients για linux δίνουν το source code ώστε να το κάνεις compile...

Τελικά, η συσκευή τώρα συμπεριφέρεται σαν ένας official update client για no-ip καθώς το User-Agent την εμφανίζει πλέον σαν έναν linux no-ip client... Δυστυχώς οι πληροφορίες που υπάρχουν στο internet είναι από λιγοστές μέχρι και ανύπαρκτες, αν και το no-ip standard protocol για clients το δίνει η no-ip είναι άχρηστο γιατί πρέπει να κάνει authorization η ίδια στο λογισμικό σου ή την συσκευή... τρέχα γύρευε δηλαδή...
Όσον αφορά την λειτουργία τώρα, η συσκευή είναι μονίμως συνδεδεμένη στον router και μονίμως έχει τάση (η μέση κατανάλωση που μέτρησα είναι 190mA στα 5V)... Ο υπολογιστής του σπιτιού είναι κλειστός... Επομένως η συσκευή κάνει κάθε 10 λέπτα update στον no-ip update server την τρέχουσα IP του router...
Aν τώρα ο χρήστης θέλει να ανοίξει το pc από ένα άλλο σημείο του.. "κόσμου" το pc του τότε συνδέεται στον υπολογιστή του μέσω ενός client (είτε software, είτε μέσω telnet, με password) δίνοντας το όνομα το οποίο κάνει resolve στην δυναμική του IP, πχ...
telnet enasserver.no-ip.org 10002
Με την εντολή αυτή μέσω του command prompt ανοίγουμε μια telnet σύνδεση μέσω TCP/IP στην TCP πόρτα 10002 από τον υπολογιστή μας στην συσκευή... Υπόψη πως η πόρτα 10002 θα πρέπει να έχει γίνει forward από τον router στην συσκευή...
Αφού γίνει η σύνδεση τότε μέσω ενός ρεπερτορίου εντολών που έχω προγραμματίζει μπορεί κανείς να ελέγξει το power και reset κουμπί του υπολογιστή του, έτσι ώστε να τον κάνει start αν είναι κλειστός, ή hard-shutdown ή reset αν έχει "μπετώσει"...
Η συσκευή δουλεύει σωστά, αλλά θεωρώ ακόμα τον κώδικα beta γιατί δεν έχω γράψει ακόμα εντολές που να μπορούν να αλλάξουν τα στοιχεία του no-ip host (username, password, host name), με αποτέλεσμα τα στοιχεία αυτά να πρέπει να "καούν" στην flash του PSoC κατά την διαδικασία του προγραμματισμού του... τις επόμενες μέρες (και με την ελπίδα λίγου ελεύθερου χρόνου) θα το κάνω και αυτό...
Ο κώδικας, τα schematics και το PCB είναι ελεύθερα προς χρήση, αλλά από την επόμενη εβδομάδα έτσι ώστε να προλάβω να τελειώσω με το ρεπερτόριο των εντολών... όποιος τα θελήσει pm me... Υπόψη πως απαγορέυεται η χρήση του για εμπορικούς σκοπούς...
UPDATE 28/10/2006
Λοιπόν, το project ξεκίνησε σήμερα και λόγος ότι μου ήρθε αυτήν την εβδομάδα ο λογαριασμός της ΔΕΗ... και πραγματικά ήταν
πολλά...! δεν λέει να μου τα παίρνει η ΔΕΗ...
Το πρόβλημα έχει ως εξής: έχω δυο υπολογιστές στο σπίτι οι οποίοι λειτουργούν σαν servers... ο ένας με windows xp pro έχει επάνω του όλο μου το storage, 3 δίσκοι με δεδομένα (ταινίες, μουσική, προγράμματα κ.λ.π.), ο άλλος φοράει Linux, μια διανομή της Fedora (core 4)... O Linux server παλιότερα πριν πάρω τον router της Linksys λειτουργούσε ως DHCP, DNS server, gateway για το internet και έχει πάνω του e-mule και torrent client...
Τελικά πήρα ένα router για να έχω wireless με WPA encryption απευθείας για τον φορητό και το dell axim x51v, οπότε το Linux έβλεπε μόνο το port 22 για να μπορώ να συνδεθώ με SSH χρησιμοποιώντας private/public keys στο εσωτερικό δίκτυο μέσω ενός VPN... Αυτό όμως θα αλλάξει και θα μείνει μόνο ο windows server και θα κάνω port tunneling στην 22 για να έχω SSH μέσω του cygwin στα xp, ώστε να μπορώ να συνδεθώ με remote desktop… Έτσι βγάζω έναν υπολογιστή εκτός...
Και οι δυο υπολογιστές ήταν 24/7 όποτε κάψανε τα έντερά τους, ο ένας είναι AthlonXP 2400+ και ο άλλος ένας ταπεινός PIII-500@650 MHz σε αέρα τρελό clocking... lol... Αυτοί οι δυο κύριοι καίνε πολύ... Οπότε μια είναι η λύση... ΟΙΚΟΝΟΜΙΑ...
Το πρόβλημα τώρα πιο είναι...? Πώς το κάνεις...! Η λύση που σκέφτηκα είναι μια, να μπορεί να ανοίγει ο υπολογιστής μόνο όταν το θέλω εγώ... το πρόβλημα είναι τώρα ότι εγώ θα χρειαστεί να τον ανοίξω και όταν λείπω από το σπίτι, οπότε εκεί τι κάνω...? σκέφτηκα να προσλάβω μια βουλγάρα και να την παίρνω τηλέφωνο όταν χρειάζεται να τον ανοίγει αυτή, αλλά είναι και αντι-οικονομικό, αλλά και τελικά θα την βάζω να ανοίγει άλλα πράγματα... Τελικά, η λύση που βρήκα είναι στον router...
Ο router μπορεί να μένει πάντα ανοικτός χωρίς να κάνει ευτυχισμένη την ΔΕΗ... αλλά εδώ υπάρχουν άλλα προβλήματα... πως μπορείς με ασφάλεια να ανοίξεις τον server από μακριά...? τα προβλήματα είναι πολλά, αλλά τελικά υπάρχει για όλα λύση... το καλύτερο είναι να έχει κάποιος στατική IP, αλλά επειδή δεν συμβαίνει στους περισσότερους μπορεί να γίνει και με όσους έχουν έναν router ο οποίος υποστηρίζει DDNS (dynamic DNS)... o linksys για παράδειγμα που έχω, υποστηρίζει από κληρονομικού του DDNS από την υπηρεσία της DynDNS.org και ΤΖΟ.com (για όσους δεν ξέρουν οι υπηρεσίες αυτές κάνουν IP redirection στην δυναμική μας IP σε μια στατική)... Αν υποστηρίζει ο adsl router αυτή την υπηρεσία, τότε αναλαμβάνει κάθε ένα προκαθορισμένο χρονικό διάστημα συνδέεται στον server της υπηρεσίας και να τον ενημερώνει ποια IP του έχει δώσει ο provider... Σε αντάλλαγμα αποκτάμε μια στατική IP η οποία δεν είναι αριθμός όπως συνήθως, αλλά αναλύεται για παράδειγμα σε servername.dyndns.org οπότε κάνοντας ping εκεί κάνουμε ping στον server μας...
Το πρώτο μέρος της επικοινωνίας έγινε, αφού τουλάχιστον τώρα έχω μια στατική IP... τώρα πάμε στο δύσκολο μέρος... κολλητήρι...! και όχι μόνο...
Το ότι υπάρχει επικοινωνία με τον router δεν σημαίνει ότι υπάρχει με τον server o οποίος είναι κλειστός... Την λύση μας την δίνουν κάτι ωραίες συσκευούλες οι οποίες λέγονται embedded device servers... μία από αυτές είναι το XPort της Lantronix (
http://www.lantronix.com/device-netw...ers/xport.html)
Το πραγματάκι αυτό που είναι όσο ένας μικρός BIC αναπτήρας το φέρνει η Radel (
www.radel.gr) σχετικά φθηνά για αυτά που κάνει... Τι κάνει αυτό το πράγμα τώρα... Στην ουσία είναι ένας microcontroller (ένας 16-bit 8086 υπερχρονισμένος στα 44 ή 88ΜΗz), ο οποίος υποστηρίζει ή έχει γραμμένο μέσα του το δικό του TCP/IP stack... υποστηρίζει full duplex 10Base-T και 100Base-TX και τα πρωτόκολλα TCP/IP, UDP/IP, ARP, ICMP, SNMP, TFTP, Telnet, DHCP, BOOTP, HTTP και AutoIP από τα οποία βέβαια δεν τα χρειαζόμαστε όλα, αλλά κυρίως το HTTP και TCP/IP... Το μαγικό με αυτό το σκ@τό είναι ότι λειτουργεί σαν ένας HTTP server και μπορεί να σερβίρει ένα HTML με ενσωματωμένο ένα java applet το οποίο προγραμματίζουμε εμείς... το HTML αυτό αποθηκεύεται σε ένα ή περισσότερα από τα 6 partitions της εσωτερικής flash του microcontroller το οποίο το καθένα έχει μέγεθος 64ΚΒ ή ένα partition με μέγιστο μέγεθος 384ΚΒ το οποίο είναι υπέρ αρκετό... αυτά όμως στην συνέχεια... επίσης στα θετικά η υποστήριξη AES 256bit encryption...
Αν και η χρήση του xport είναι για μετατροπή δεδομένων μεταξύ RS-232 και TCP/IP και data streaming, εδώ θα το χρησιμοποιήσουμε σαν έναν internet-ethernet ΟΝ/OFF switch... μαγικό...? βέβαια στην συνέχεια μπορείς να κάνεις παπάδες επάνω του και με εξωτερικά περιφερειακά, αλλά αυτό είναι για την ώρα άσχετο... τα χάπια μου...
Το xport υποστηρίζει και δυο GPIO (general purpose I/O) pins τα οποία είναι full programmable από το java applet... τώρα το δίλημμα έχει ως εξής, να χρησιμοποιηθεί και ένας εξωτερικός microcontroller ή να αρκεστούμε μόνο στο xport...? αυτό με προβλημάτισε πολύ και ακόμα δεν έχω σίγουρη απάντηση... οικονομοτεχνικά δεν πρέπει να μπει microcontroller για μείωση κόστους και εξαρτημάτων, αλλά κάτι στο πίσω μέρος του μυαλού μου θέλει να μπει... και αυτό βασικά για να είμαι ανεξάρτητος από το java applet και να μπορώ να κάνω τους χειρισμούς μου σε low level κατευθείαν από τον εξωτερικό microcontroller... θα δείξει...
Οι τρόποι λειτουργίας είναι δυο... ο ένας είναι να χρησιμοποιήσουμε τον HTML server του x-port και να συνδεόμαστε από έξω στην πόρτα 25 η οποία θα έχει γίνει forward από τον router στο x-port και θα την χειρίζεται πλέον αυτό... οπότε με το που συνδεθούμε θα μας σερβίρει το HTML με το java applet και χειριζόμενοι τα GPIO θα ανοίγουμε τον server...
O άλλος τρόπος είναι να συνδεθούμε σε ένα άλλο port το οποίο θα γίνει forward από τον router στο x-port και να μιλάμε απευθείας σε αυτό... βασικά γίνεται εύκολα με telnet, αλλά ύμαρτον, μακριά... μπορεί να γίνει και με ένα winsock από την
VB... οπότε στην πόρτα αυτή μπορούμε να στέλνουμε κάποια strings-εντολές που θα τα λαμβάνει πλέον σειριακά rs-232 ο microcontroller πίσω από το x-port και θα κάνει τις κατάλληλες ενέργειες...
Το δεύτερο τελικά μου φαίνεται πιο ασφαλές, οπότε και κάνας @#$@!$ να κοιτάει στην πόρτα εκείνη την στιγμή υπάρχει και μια τυπική 256-bit AES η οποία αν και είναι αστείο, κάτι μπορεί να κρύψει...
Το xport μπορεί να πάρει μια οποιαδήποτε IP που του ορίσουμε εμείς και να μιλάει και να ακούσει σε μια πόρτα την οποία μπορούμε πάλι να ορίσουμε... εδώ έχει αρκετά πράγματα για διάβασμα για τις δυνατότητες και τις ρυθμίσεις του:
http://www.lantronix.com/support/doc...ion.html#embds
Για να μην φάτε τον χρόνο σας άδικα, όποιος πραγματοποιήσει το project μην χάσει χρόνο με το serial και telnet setup... δεν χρειάζεται για εδώ και είναι και χρονοβόρο...
Αφού ορίσουμε την IP και την πόρτα μετά μπορούμε να κάνουμε ότι θέλουμε... θα ξεκινήσω πρώτα με την περίπτωση της χρήσης εξωτερικού microcontroller... προτιμώ embedded C για την ώρα, παρά java και html βραδιάτικα... θα το ποστάρω άλλη στιγμή και για java, ανάλογα και με το ενδιαφέρον...
Καταρχάς, χρειαζόμαστε ένα κύκλωμα για να κάνουμε την δουλειά μας και ένα PCB δυστυχώς για μερικούς... εγώ τα φτιάχνω μόνος μου με έναν laser printer, UV λάμπες, καυστική σόδα για developer και τριχλωριούχο σίδηρο για αποχάλκωση... υπάρχουν όμως και pcb-άδικα που τυπώνουν pcb με χαμηλό κόστος... όποιος θέλει μπορώ να αναφέρω μερικά... για γρήγορο layout χρησιμοποιώ το Eagle PCB της cadsoft.de (
ftp://ftp.cadsoft.de/eagle/program/4...eng-4.16r1.exe ) το οποίο για γρηγοροδουλειές είναι μανούλα... παρακάτω ακολουθεί το σχηματικό...
Στα γρήγορα εξηγώ τι κάνει το κύκλωμα... Την τροφοδοσία την παίρνω από τα 5V του USB... στον server μου όταν κλείνει η τάση παραμένει στα USB και αυτό με βολεύει γιατί μπορεί να δώσει μέχρι 500mA που είναι αρκετά για το κύκλωμα (το xport καίει κοντά στα 300mA και ο avr tiny λιγότερο από 1.5mA στο 1MHz)... Επίσης το ρεύμα από τα ρελέ είναι επίσης μικρό και περιορίζεται ούτος ή άλλως από τον περιοριστή του USB εσωτερικά...
Επειδή χρειάζομαι μόνο 3.3V από τα 5V που δίνει το USB έχω βάλει 2 διόδους σε σειρά για να μου ρίχνουν την τάση στα 3.6V που είναι κοντά στα 3.3V... γενικά δεν υπάρχει πρόβλημα στην τάση αυτή αντί για 3.3V, θα έχουμε απλά μεγαλύτερη τάση στο core σε περίπτωση που θέλουμε να κάνουμε overclocking στο xport να δούμε πόσο ανεβάζει...
Οι πυκνωτές C1 και C2 είναι coupling... οι δίοδοι D3, D4 είναι fast switching 4148 για προστασία των ρελέ από ανάστροφα ρεύματα στην αποφόρτιση του πηνίου κατά την επαναφορά... Τα τρανζίστορ είναι απλά BC337 τα οποία είναι NPN με μέγιστο ρεύμα συλλέκτη 800mA... μην σας φαίνεται μεγάλο, στιγμιαία μπορεί να δώσει τόσο ρεύμα το USB...
To X1 είναι ο USB connector και ο SV1 είναι ο connector που θα φύγουν τα καλώδια για το Power και Reset Switch πάνω στην motherboard, αντί των κλασικών καλωδίων που φεύγουν από το case...
Επομένως, συνδέουμε το USB της πλακέτας στο PC, το RJ-45 με ένα UTP καλώδιο Ethernet στον router και τέλος τα Reset και Power Switch της motherboard στον connector SV1...
Ακολουθεί και το layout...
Είμαστε έτοιμοι...!!!
Τώρα με ένα utility της Lantronix (
http://www.lantronix.com/device-netw...installer.html) τον DeviceInstaller δίνουμε μια IP στο xport, επιλέγουμε την πόρτα που θα μιλάει και ότι άλλες παραμέτρους θεωρούμε χρήσιμες...
Αφού του δώσουμε IP συνδεόμαστε στην πόρτα 25 του xport και αυτό μας σερβίρει το configuration html του... Στα γρήγορα οι πυθμίσεις που του έδωσα είναι οι παρακάτω:
Εδιτ: Στην παρακάτω φωτό έχω κάνει λάθος, το remote host δεν είναι η IP του server αλλά του router... προσοχή...
Από την πλευρά του router τώρα ενεργοποιούμε το DDNS και κάνουμε forward την πόρτα του xport στην IP του...
Μετά καίμε τον κώδικα στον AVR και είναι έτοιμο και λειτουργεί...
Την δική μου πλακέτα την έχω κάνει μόνο με SMD εξαρτήματα, αλλά έχω ποστάρει το PCB με THD (through hole devices) εξαρτήματα για όσους είναι τσακωμένοι με το κολλητήρι τους...
Σημειώνω ότι ο tiny11 δεν έχει ενσωματωμένο UART, αλλά σε συχνότητα λειτουργίας 1MHz μπορεί με soft mode uart, δηλαδή σε software uart μέχρι και 38.4Kbps Baud rate... (
http://www.atmel.com/dyn/resources/p...ts/DOC0941.PDF)
O κώδικας είναι τελείως ρουτίνας... σε assembly το soft uart και με το CodeVisionAVR ο υπόλοιπος κώδικας σε embedded C...
Επίσης για ασφάλεια καλύτερα την σύνδεση στον server από ένα άλλο pc να την κάνετε με ένα πρόγραμμα σε
VB το οποίο μπορεί να κουβαλάτε σε ένα USB Flash Stick... εγώ θα γράψω αυτές τις μέρες ένα σε VB6 το οποίο απλά θα ανοίγει ένα socket στην IP και την πόρτα του DDNS και θα στέλνει κάποιες encrypted εντολές με swift key για ανοίγει και να κλείνει τα ρελέ...
Μόλις ευκαιρήσω θα ποστάρω στο ίδιο thread και τους τελειωμένους κώδικες για την VB6 και τον AVR, εφόσον βέβαια υπάρξει και ενδιαφέρων...
Τυχών παρατηρήσεις και διορθώσεις ευπρόσδεκτες τώρα που το ξεκίνησα, γιατί μετά αν μπλέξω με άλλα, δύσκολα το ξαναπιάνω... δυστυχώς...
UPDATE 28/10/2006
Λοιπόν λόγο δουλειάς το πιάνω σε διάσπαρτα διαστήματα, οπότε υπομονή... Μετά από μια ιδέα που ειπώθηκε για έλεγχο του server μέσω τηλεφώνου, πάντρεψα ένα DTMF κύκλωμα με το xport... το αποτέλεσμα τώρα είναι να μπορεί κανείς να χειρίζεται το ON/OFF του υπολογιστή του είτε μέσω τηλεφώνου με ένα Pin code μερικών ψηφίων είτε μέσω internet... το αποτέλεσμα είναι το ίδιο... παραθέτω τις αλλαγές...
Το κύκλωμα ενώ δεν είναι ιδιαίτερα πολύπλοκο, η λειτουργία είναι πιο σύνθετη και πολύπλοκη, αλλά θα προσπαθήσω να την εξηγήσω όσο πιο απλά γίνεται... Η πολυπλοκότητα είναι μεγαλύτερη λόγο του ότι πολλά κυκλώματα και λειτουργίες έχουν ενσωματωθεί μέσα στον microcontroller ο οποίος είναι ο PSoC CY8C29466-PXI... Αυτός σε αντίθεση με τους υπόλοιπους microcontrollers είναι υβριδικός και περιέχει ξεχωριστά analog και digital blocks τα οποία μπορούμε να τα συνδυάσουμε εμείς όπως θέλουμε και να κάνουμε παπάδες...
Η λειτουργία όσων αφορά τον τηλεφωνικό έλεγχο χωρίζεται σε δυο μέρη, ένα είναι η αναγνώριση ότι το τηλέφωνο χτυπάει και δεύτερο ότι πρέπει το κύκλωμα να σηκώσει την γραμμή και να απαντήσει... σαν ένας αυτόματος τηλεφωνητής βρε αδερφέ... αυτό το πράγμα μπορεί να προγραμματιστεί να σηκώνει το τηλέφωνο μετά από 5 μ3 8 χτύπους για παράδειγμα και μετά να απαντάει με ένα κάποια προγραμματιζόμενα μπιπ και να του απαντάμε με τηλεφωνικούς τόνους από το πληκτρολόγιο του τηλεφώνου (DTMF)… το τι είναι το DTMF μπορείτε να το δείτε εδώ...:
http://en.wikipedia.org/wiki/DTMF
Επίσης πληροφορίες για τον PSoC εδώ...:
http://www.cypress.com/portal/server...&showall=false
Το κύκλωμα ακολουθεί παρακάτω..:
Ξεκινώντας από την τηλεφωνική γραμμή πέφτουμε σε μια γέφυρα ανόρθωσης... εν συντομία σε κατάσταση αναμονής η τηλεφωνική γραμμή έχει στα άκρα της 48VDC, όταν σηκώνουμε το τηλέφωνο πέφτει στα 10VDC, και όταν χτυπάει έρχεται ένα εναλλασσόμενο περίπου 70 ~ 90V... ο πυκνωτής C3 κόβει το DC, η γέφυρα ανορθώνει το εναλλασσόμενο μια zener το περιορίζει και με ένα optocoupler παίρνουμε στο pin P2_4 του PSoC τους παλμούς... το pin αυτό πέφτει σε 8-bit counter που μετράει τους παλμούς και ξέρει επομένως πόσες φορές χτύπησε το τηλέφωνο... Μετά από τον αριθμό παλμών που έχουμε καθορίσει ο PSoC με το pin P2_3 κλείνει το relay της εισόδου της τηλεφωνικής γραμμής και την περνάει στον έλεγχό του... Εκεί από το δευτερεύον του μετασχηματιστή μπορεί ο PSoC να ακούει και να απαντάει ταυτόχρονα... το πάνω μέρος είναι το LINE-IN το οποίο ακολουθεί μια περίεργη πορεία και το κάτω μέρος είναι το LINE-OUT...
To LINE-IN κατευθύνεται στο pin P2_1 το οποίο από πίσω έχει ένα switched-capacitor βαθυπερατό φίλτρο δευτέρου βαθμού σε ladder συνδεσμολογία... έτσι φιλτράρουμε την τηλεφωνική γραμμή ώστε να μην υπάρχουν αρμονικές που μπορεί να μπερδέψουν το MT8870P... Η έξοδος του φίλτρου είναι το pin P0_3 το οποίο στην συνέχεια συνδέεται στο MT8870P και ξανά στον PSoC στο pin P0_0... πίσω από το P0_0 υπάρχει ένας comparator ο οποίος μετατρέπει το DTMF σήμα σε παλμό και η έξοδος του είναι το pin P0_4... από εκεί συνδέεται στο pin P2_0 το οποίο έχει από πίσω έναν 8-bit counter που μετράει τους παλμούς... με τον τρόπο αυτό μαθαίνουμε την διάρκεια του παλμού και μπορούμε να ελέγχουμε με έναν εσωτερικό 16-bit counter αν τα σήματα που λαμβάνουμε είναι τα αναμενόμενα και σωστά, φτιάχνοντας κάποια timeouts με τα οποία καταφέρνουμε την σωστή ροή του κώδικα...
Επίσης όπως είπα και πιο πάνω το DTMF σήμα εισέρχεται και στο ρημάδι το MT8870P το οποίο είναι ένας απλός DTMF decoder της σειράς ο οποίος κωδικοποιεί τα DTMF σήματα σε 4-bit encoding το οποίο το λαμβάνουμε από τα pins P1_3, P1_4, P1_5, P1_6 και ένα σήμα STD στο pin P1_7... Το STD δεν είναι άλλο από ένα σήμα το οποίο γίνεται HIGH όταν υπάρχουν έτοιμα κωδικοποιημένα δεδομένα στον MT8870P...
Επίσης υπάρχει και το XPORT το οποίο πέφτει και αυτό πάνω στον PSoC... όλα τα υπόλοιπα είναι θέμα κώδικα και σωστού block programming του PSoC... H δομή των Analog και Digital blocks του PSoC είναι η παρακάτω...:
Ακολουθεί το pinout…:
Και το pcb...:
Φυσικά για τον κώδικα ούτε λόγος να γίνεται ακόμα... δεν έχω προλάβει αλλά θα γίνει και αυτό... όποιος θέλει να πειραματιστεί, ευχαρίστως... απλά να πω ότι επειδή είναι πολύ time critical εφαρμογή θέλει προσοχή στον χειρισμό των counters ώστε να λαμβάνονται σωστά τα σήματα...
ΕΔΩ το παραπάνω κύκλωμα alive 'n kicking, το οποίο συναρμολόγησε τελικά και ο Βαγγέλης (Bassjunkies) και κάναμε μερικές δοκιμές...