ΠΑΝΕΠΙΣΗΜΙΟ ΠΑΣΡΩΝ ΣΜΗΜΑ ΗΛΕΚΣΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ &ΣΕΧΝΟΛΟΓΙΑ Η/Τ ΣΟΜΕΑ ΗΛΕΚΣΡΟΝΙΚΗ ΚΑΙ ΤΠΟΛΟΓΙΣΩΝ (Η.&Τ.) ΔΙΠΛΩΜΑΣΙΚΗ ΕΡΓΑΙΑ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΠΑΝΕΠΙΣΗΜΙΟ ΠΑΣΡΩΝ ΣΜΗΜΑ ΗΛΕΚΣΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ &ΣΕΧΝΟΛΟΓΙΑ Η/Τ ΣΟΜΕΑ ΗΛΕΚΣΡΟΝΙΚΗ ΚΑΙ ΤΠΟΛΟΓΙΣΩΝ (Η.&Τ.) ΔΙΠΛΩΜΑΣΙΚΗ ΕΡΓΑΙΑ"

Transcript

1 ΠΑΝΕΠΙΣΗΜΙΟ ΠΑΣΡΩΝ ΣΜΗΜΑ ΗΛΕΚΣΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ &ΣΕΧΝΟΛΟΓΙΑ Η/Τ ΣΟΜΕΑ ΗΛΕΚΣΡΟΝΙΚΗ ΚΑΙ ΤΠΟΛΟΓΙΣΩΝ (Η.&Τ.) ΔΙΠΛΩΜΑΣΙΚΗ ΕΡΓΑΙΑ «χεδίαςη και Καταςκευή Ηλεκτρονικϊν Κυκλωμάτων και υςτημάτων» ΡΟΔΟΜΑΚΘΣ ΑΝΤΩΝΛΟΣ ΤΟΥ ΚΕΜΛΣΤΟΚΛΘ ΚΑΛΟΥΔΛΩΤΘΣ ΕΥΑΓΓΕΛΟΣ ΤΟΥ ΓΘΓΟΛΟΥ ΦΟΛΤΘΤΕΣ ΤΟΥ ΤΜΘΜΑΤΟΣ ΘΛΕΚΤΟΛΟΓΩΝ ΜΘΧΑΝΛΚΩΝ ΚΑΛ ΤΕΧΝΟΛΟΓΛΑΣ ΥΡΟΛΟΓΛΣΤΩΝ ΕΡΛΒΛΕΡΩΝ: ΕΥΣΤΑΚΛΟΥ ΚΩΝΣΤΑΝΤΛΝΟΣ, ΕΡΛΚΟΥΟΣ ΚΑΚΘΓΘΤΘΣ ΑΛΚΜΟΣ ΔΛΡΛΩΜΑΤΛΚΘΣ ΕΓΑΣΛΑΣ: /2012 Ράτρα, Λοφλιοσ 2012

2 1

3 ΠΙΣΟΠΟΙΗΗ Ριςτοποιείται ότι θ διπλωματικι εργαςία με κζμα : «χεδίαςη και Καταςκευή Ηλεκτρονικϊν Κυκλωμάτων και υςτημάτων» των φοιτθτϊν του Τμιματοσ Θλεκτρολόγων Μθχανικϊν και Τεχνολογίασ Υπολογιςτϊν ΡΟΔΟΜΑΚΘ ΑΝΤΩΝΛΟΥ του ΚΕΜΛΣΤΟΚΛΘ(ΑΜ:6071) ΚΑΛΟΥΔΛΩΤΘ ΕΥΑΓΓΕΛΟΥ ΤΟΥ ΓΘΓΟΛΟΥ(ΑΜ:6265) παρουςιάςκθκε δθμόςια και εξετάςτθκε ςτο Τμιμα Θλεκτρολόγων Μθχανικϊν και Τεχνολογίασ Υπολογιςτϊν ςτισ / / Ο Επιβλζπων Ο Διευκυντισ του Τομζα 2

4 3

5 Ευχαριςτίεσ Πρώτα και κφρια κα κζλαμε να ευχαριςτιςουμε τον επίκουρο κακθγθτι και επιβλζποντα ςτθ παροφςα εργαςία Κ. Ευςτακίου. Η βοικεια και παρουςία του κακ όλθ τθ διάρκεια τθσ εργαςίασ ιταν καταλυτικι ςτο να διεκπεραιώςουμε όλουσ τουσ ςτόχουσ που κζςαμε ςτθ πορεία τθσ. Κυρίωσ όμωσ κζλουμε να τον ευχαριςτιςουμε, γιατί κατάφερε με ζναν μοναδικό τρόπο να μασ μεταλαμπαδεφςει τθν αγάπθ και το πάκοσ του για τα θλεκτρονικά. Οι γνώςεισ και θ εμπειρία που αποκτιςαμε, υπό τθν κακοδιγθςι του, ιταν ανεκτίμθτεσ, όχι απλά για να φζρουμε εισ πζρασ τθ διπλωματικι εργαςία, αλλά και για τθ ςυνολικι μασ εξζλιξθ ωσ θλεκτρολόγοι μθχανικοί. τθ ςυνζχεια κα κζλαμε να ευχαριςτιςουμε τον κ. Γ. Καλφβα για τθν θκικι του υποςτιριξθ και βοικεια. Ευχαριςτοφμε πολφ τουσ κ. Π. Μθτρόπουλο, Θ. Μθτρόπουλο και Γ. Κωνςταντινίδθ για τισ ςυμβουλζσ τουσ, ιδιαιτζρα γφρω από τθ μθχανολογικι ςχεδίαςθ των ςυςτθμάτων, κακώσ για τουσ κυρίουσ Γ. Σηουρά και Α. Αςπιώτθ για τθ βοικεια τουσ ςτθν καταςκευι των πλακετών. Σζλοσ κζλουμε να ευχαριςτιςουμε κερμά το διδάκτορα (πλζον) Η. Κοκκίνθ, που μασ ςυμβοφλευςε ςτα κζματα που αφοροφςαν μεκόδουσ επεξεργαςίασ θχθτικών ςθμάτων. 4

6 5

7 Αρ. Διπλωματικισ Εργαςίασ: Θέμα: «Σχεδίαζη και καηαζκευή ηλεκηρονικών κυκλωμάηων και ζυζηημάηων» των φοιτθτϊν του Τμιματοσ Θλεκτρολόγων Μθχανικϊν και Τεχνολογίασ Υπολογιςτϊν ΡΟΔΟΜΑΚΘ ΑΝΤΩΝΛΟΥ του ΚΕΜΛΣΤΟΚΛΘ(ΑΜ:6071) ΚΑΛΟΥΔΛΩΤΘ ΕΥΑΓΓΕΛΟΥ ΤΟΥ ΓΘΓΟΛΟΥ(ΑΜ:6265) ΕΡΛΒΛΕΡΩΝ: ΕΥΣΤΑΚΛΟΥ ΚΩΝΣΤΑΝΤΛΝΟΣ, ΕΡΛΚΟΥΟΣ ΚΑΚΘΓΘΤΘΣ Περίληψη Στθν παροφςα διπλωματικι εργαςία, ςχεδιάηονται και υλοποιοφνται ςυςτιματα με βάςθ τθ πλατφόρμα του Arduino. Το πρϊτο ςφςτθμα αφορά ζνα Wireless Persistence of Vision Display, ουςιαςτικά μία οκόνθ, ςχιματοσ δίςκου, που αποτελείται από μία περιςτρεφόμενθ ςτιλθ LEDs. Συνεχίηουμε με το ςχεδιαςμό ενόσ ςυςτιματοσ ικανοφ για γριγορθ πρόβλεψθ και ανακαταςκευι ςθμάτων, με ςκοπό τθ μελλοντικι χριςθ του ςτο ςυγχρονιςμό ενεργειακϊν δικτφων. Φςτερα προχωράμε ςτθν υλοποίθςθ ενόσ ςυςτιματοσ εντοπιςμοφ διεφκυνςθσ πθγισ ιχου, μζςα από τθν ψθφιακι επεξεργαςία θχθτικϊν ςθμάτων. Τζλοσ, θ εμπειρία που αποκομίςκθκε με βάςθ το Arduino μασ οδιγθςε ςτθ μελζτθ μιασ εκπαιδευτικισ πλατφόρμασ βαςιςμζνθ ςε FPGA, το «F- Penguino», που ωσ ςτόχο ζχει να αναδείξει τθν ευελιξία και ταχφτθτα ςυςτθμάτων βαςιςμζνα ςε υλοποίθςθ με περιγραφι υλικοφ. Καλουδιώτθσ Ευάγγελοσ Προδρομάκθσ Αντώνιοσ Πάτρα, 2012 Abstract In this thesis, we design and implement various systems based on the Arduino platform. The first system is a Wireless Persistence of Vision Display, which is actually a round screen, made of a rotating column of LEDs. We also design a system capable of fast prediction and reconstruction of signals, with an utter goal, its future use in effectively connecting different power networks. Furthermore, we implement a sound source localization system, using DSP techniques and fundamental robotics. Finally, the experience obtained using the Arduino, led us to involve with an FPGA based platform, the F-Penguino, the goal of which is to indicate the versatility and speed of systems based on hardware-description implementations. Kaloudiotis Evangelos Prodromakis Antonios Patras,

8 7

9 Περιεχόμενα Ρρόλογοσ Ειςαγωγι Τι είναι και ποφ βρίςκονται τα ενςωματωμζνα ςυςτιματα Διάφορεσ προςεγγίςεισ των embedded systems Ανατομία ενόσ μικροελεγκτι Λογιςμικό Το μικροχπολογιςτικό ςφςτθμα Arduino Γενικζσ πλθροφορίεσ Το υλικό του Arduino Γενικά χαρακτθριςτικά: Τροφοδοςία Μνιμεσ Είςοδοι/ Ζξοδοι Το λογιςμικό του Arduino Ραράδειγμα: Blink LED ςε γλϊςςα Arduino και C χαμθλοφ επιπζδου Ραράδειγμα: Υλοποίθςθ ψθφιακοφ κερμομζτρου Wireless POV Display Ειςαγωγι Γενικι λειτουργία του ςυςτιματοσ Θ καταςκευι Θλεκτρονικι Σχεδίαςθ Το ςχθματικό διάγραμμα Σχεδίαςθ PCB Motor interface Power Shield Wireless POV Shield Λογιςμικό POV Image Maker Ειδικζσ λειτουργίεσ του ATmega328 [12] Timer/Counter1: Timer/Counter2: Serial Peripheral Interface USART και αςφρματθ επικοινωνία O κϊδικασ για το Arduino

10 Display_Image Display_String Αποτελζςματα Ρροβλιματα και περαιτζρω βελτιϊςεισ για το μζλλον Σφςτθμα Ρρόβλεψθσ και Ανακαταςκευισ Σιματοσ Ειςαγωγι Γενικι λειτουργία του ςυςτιματοσ Κεωρθτικι προςζγγιςθ του ςυςτιματοσ Μακθματικι ανάλυςθ του ςυςτιματοσ To PWM (Pulse Width Modulation ) Λογιςμικό Εξομοίωςθ ςε MATLAB και Simulink Κϊδικασ Matlab Υλοποίθςθ ςτο Arduino Λειτουργίεσ και ειδικοί καταχωρθτζσ του ATmega Κυρίωσ πρόγραμμα Κϊδικασ Διαςφνδεςθ Συςτιματοσ-Ρειραματικζσ Μετριςεισ Ρροβλιματα Ρεραιτζρω εξζλιξθ Σφςτθμα εντοπιςμοφ διεφκυνςθσ πθγισ ιχου Ειςαγωγι Γενικι λειτουργία του ςυςτιματοσ Κεωρθτικι προςζγγιςθ του ςυςτιματοσ Υπολογιςμόσ γωνίασ(2d) Correlation Θ καταςκευι Τα μζρθ από τα οποία αποτελείται θ καταςκευι μασ Ο Servo motor Θλεκτρονικι Σχεδίαςθ Το ςχθματικό διάγραμμα Σχεδίαςθ PCB Λογιςμικό Δθμιουργία ςθμάτων ςτο Microsoft Excel EXCEL Κϊδικασ ςε Visual Basic

11 Εξομοίωςθ ςε MATLAB Κϊδικασ Arduino Λδανικά (Κεωρθτικά) Σιματα Ρραγματικά ςιματα Κϊδικασ Αποτελζςματα - Φωτογραφίεσ Ρροβλιματα Βελτιϊςεισ F-Penguino: An FPGA based flexible development platform Υλοποίθςθ με υλικό Θ λογικι του F-Penguino Ρρογραμματιςμόσ και επικοινωνία μεταξφ PC και F-Penguino Ρρογραμματιςμόσ του F-Penguino Επικοινωνία μεταξφ PC και F-Penguino Ρεριγραφι υλικοφ του F-Penguino To GUI (Graphical User Interface) του F-Penguino Το ςχθματικό διάγραμμα, θ πλακζτα και οι αντιςτοιχίεσ των ακίδων Χριςθ του F-Penguino Ο κϊδικασ του Graphical User Interface του F-Penguino Ραράρτθμα Arduino Data Plotter Βιβλιογραφία

12 11

13 Πρόλογοσ Ξεκινϊντασ, κα κζλαμε να κάνουμε μία ιςτορικι αναδρομι από τθ ςτιγμι που ξεκινιςαμε να αναπτφςςουμε τθν παροφςα εργαςία. Ζχοντασ και οι δφο ακολουκιςει τον τομζα τθσ Θλεκτρονικισ και Υπολογιςτϊν, γνωρίηαμε πολφ καλά πωσ αυτόσ ο τομζασ αγγίηει και ςυνδζεται με μία πλθκϊρα εφαρμογϊν και πεδίων ςτο αντικείμενο του θλεκτρολόγου μθχανικοφ και όχι μόνο. Σε μία εποχι που ο κόςμοσ γίνεται κάκε μζρα όλο και πιο ψθφιακόσ, πλθμμυριςμζνοσ από χιλιάδεσ θλεκτρονικζσ ςυςκευζσ, από απλά gadgets μζχρι πολφπλοκα ςυςτιματα, απαραίτθτα πλζον ςτθ κακθμερινότθτά μασ, δεν υπιρχε άλλοσ δρόμοσ για εμάσ από το να αναμιχκοφμε ςτθ διαδικαςία ςκζψθσ, ςχεδιαςμοφ και υλοποίθςθσ τζτοιων ςυςτθμάτων. Οι εμπειρίεσ μασ όταν ξεκινοφςαμε ιταν ελάχιςτεσ. Ζτςι αποφαςίςαμε ο τίτλοσ τθσ διπλωματικισ να είναι τζτοιοσ ϊςτε να μασ δϊςει τθ δυνατότθτα να γίνει θ ίδια θ εργαςία ζνασ δρόμοσ απόκτθςθσ εμπειριϊν και γνϊςεων, αλλά κυρίαρχα ζνα μζςο να κατανοιςουμε και να εμβακφνουμε ςτο ςφνολο του τομζα αυτοφ. Ακολουκϊντασ πιςτά τθ ςυμβουλι του κακθγθτι μασ Κ. Ευςτακίου, ότι «οποιαδιποτε ιδζα ςκεφτοφμε μποροφμε να τθν υλοποιιςουμε μόνοι μασ», ξεκινιςαμε ςχεδιάηοντασ πετάλια για κικάρεσ (τα οποία δεν αναφζρουμε ςτθ παροφςα εργαςία). Θ εμπειρία αυτι, μασ ζφερε κοντά ςτα αναλογικά κυκλϊματα, αφοφ αποκτιςαμε ιδιαίτερεσ εμπειρίεσ ςτο ςχεδιαςμό αναλογικϊν φίλτρων και ενιςχυτϊν, αλλά και ςχεδιαςμοφ και εξομοίωςθσ ςχθματικϊν διαγραμμάτων και καταςκευισ πλακετϊν [1] [2]. Θ επαφι μασ αυτι, ιταν θ αρχι για να εμπλακοφμε και με άλλεσ πτυχζσ των ψθφιακϊν κυκλωμάτων και ςυςτθμάτων. Ζτςι λοιπόν, ςτόχοσ μασ ζγινε να αναμιχκοφμε με μικροχπολογιςτικά ςυςτιματα, ψθφιακι επεξεργαςία ςθμάτων (DSP), FPGAs και γενικότερα με εφαρμογζσ γφρω από τα ενςωματωμζνα ςυςτιματα [3]. 12

14 13

15 1. Ειςαγωγή 1.1 Σι είναι και ποφ βρίςκονται τα ενςωματωμζνα ςυςτήματα Ασ υποκζςουμε ότι ρωτάμε μια ςειρά ανκρϊπουσ να μασ δείξουν τα προϊόντα ςτα ςπίτια τουσ τα οποία περιζχουν «τςιπάκια». Ρικανϊσ κα μασ υποδείξουν ζνα Θ/Υ και να ςταματιςουν εκεί. Μςωσ κάποιοι να αναφζρουν μια παιχνιδομθχανι ι μια τθλεόραςθ. Σπανίωσ κα αναφζρουν τα κινθτά τθλζφωνα, τα οποία περιζχουν μεγάλο αρικμό μικροεπεξεργαςτϊν και χρθςιμοποιοφν μεγάλο κομμάτι τθσ ςυνολικισ τουσ ενζργειασ μόνο για τθν επικοινωνία, για να μθν αναφζρουμε τισ ενςωματωμζνεσ φωτογραφικζσ μθχανζσ, τα παιχνίδια και μια ςειρά εφαρμογϊν που χρθςιμοποιοφν τα ςφγχρονα κινθτά τθλζφωνα. Θ αλικεια είναι, ότι δφςκολα κα βροφμε μια θλεκτρικι ςυςκευι που να μθ χρθςιμοποιεί ψθφιακοφ ελζγχου και λογικισ components. Ενδεχομζνωσ να φαίνεται λογικό, ψθφιακά ολοκλθρωμζνα κυκλϊματα να περιζχονται ςε πλυντιρια ι DVD-players αλλά ςίγουρα δεν είναι προφανζσ για τθν κοινι λογικι γιατί ζνασ βραςτιρασ ι μια τοςτιζρα χρθςιμοποιοφν ψθφιακά θλεκτρονικά. Αν όχι όλεσ, οι περιςςότερεσ θλεκτρικζσ ςυςκευζσ που ςυναντάμε εμπεριζχουν ενςωματωμζνα θλεκτρονικά ςυςτιματα. Ο επεξεργαςτισ υποςτθρίηει τθ ςυνολικι λειτουργία μιασ τζτοιασ ςυςκευι αλλά δεν είναι ο κφριοσ λόγοσ επιλογισ τθσ. Σε κάκε Θ/Υ υπάρχουν πάρα πολλοί ενςωματωμζνοι επεξεργαςτζσ για τον ζλεγχο του πλθκτρολογίου, του ποντικιοφ, του CD drive κτλ ενϊ επίςθσ τα ςφγχρονα αυτοκίνθτα εμπεριζχουν μεγάλο αρικμό μικροεπεξεργαςτϊν για τον ζλεγχο των φϊτων, των υαλοκακαριςτιρων, των παρακφρων ακόμα και των φρζνων. Θ πρόκλθςθ για ζνα μθχανικό είναι κατά πόςο μποροφν τα ενςωματωμζνα ςυςτιματα να είναι «αόρατα», κατά πόςο δθλαδι μποροφν τα ςυςτιματα αυτά να γίνουν όλο και πιο μικρά, όλο και πιο ευζλικτα. Τα ενςωματωμζνα ςυςτιματα περιλαμβάνουν μικροχπολογιςτζσ με μεγάλθ γκάμα δυνατοτιτων. Μια πολφ απλουςτευμζνθ ταξινόμθςθ κα μποροφςε να είναι ο αρικμόσ των bits που χρειάηεται να επεξεργαςτοφμε κάκε ςτιγμι. Ρολλοί επεξεργαςτζσ υλοποιοφν πολφ απλζσ διαδικαςίεσ, για τισ οποίεσ 8 ι ακόμα και 4 bits είναι αρκετά. Ζνα παράδειγμα είναι μια ςυςκευι που παράγει ζνα θχθτικό ςιμα κάκε 30 δευτερόλεπτα. Τα θλεκτρονικά ςε ζνα τθλεκοντρόλ για παράδειγμα πρζπει να είναι περιςςότερο προθγμζνα. Ζνασ μεγαλφτεροσ επεξεργαςτισ των 8 bits χρειάηεται για κάτι περιςςότερο πολφπλοκο, όπωσ ζνα πλυντιριο πιάτων. Τζτοιασ υπολογιςτικισ δφναμθσ επεξεργαςτζσ χρθςιμοποιοφνταν ςτουσ πρϊτουσ προςωπικοφσ υπολογιςτζσ, αλλά οι «απόγονοι» αυτϊν των μικροεπεξεργαςτϊν χρθςιμοποιοφνται αρκετά ακόμα και ςιμερα. Το πρϊτο όχθμα που προςεδαφίςτθκε ςτον Άρθ, o Sojourner, χρθςιμοποιοφςε μια ζκδοςθ του μικροεπεξεργαςτι 8085 τθσ Intel [4] Διάφορεσ προςεγγίςεισ των embedded systems Μερικζσ από τισ βαςικζσ κατθγορίεσ ενςωματωμζνων ςυςτθμάτων είναι οι εξισ: Μικροελεγκτζσ (microcontrollers): Οι μικροελεγκτζσ ζχουν ςυγκεκριμζνο hardware που βρίςκεται γφρω από μια CPU. H CPU ελζγχει μια ςειρά από περιφερειακά, που παρζχουν αναλογικζσ και ψθφιακζσ λειτουργίεσ, όπωσ timers και analog-to-digital converters (ADCs). Επίςθσ ζχουν διαφόρων τφπων μνιμεσ. Θ λειτουργία τουσ ςυνικωσ προγραμματίηεται με τθ χριςθ μιασ γλϊςςασ προγραμματιςμοφ όπωσ θ C ι θ C++. Οι μικροελεγκτζσ δίνουν ζμφαςθ ςτο μικρό αρικμό ολοκλθρωμζνων κυκλωμάτων που χρειάηονται για τθν υλοποίθςθ μιασ εφαρμογισ, το χαμθλό κόςτοσ και τθν εξειδίκευςθ. Ζτςι είναι αυτόνομοι, ίςωσ δθλαδι να λειτουργοφν χωρίσ τθ χριςθ άλλου ολοκλθρωμζνου κυκλϊματοσ, ζχουν χαμθλό κόςτοσ (είτε ιςχφοσ είτε και παραγωγισ), ζχουν μικρό μζγεκοσ, μεγάλθ αξιοπιςτία κ.α. 14

16 Field-programmable gate arrays (FPGAs) και programmable logic devices (PLDs): Ουςιαςτικά είναι διατάξεισ πυλϊν και flip-flops, οι οποίεσ ςυνδζονται με τον προγραμματιςμό τθσ ςυςκευισ για να υλοποιθκεί θ επικυμθτι λειτουργία. Αυτό κακορίηεται από μια γλϊςςα περιγραφισ υλικοφ όπωσ είναι θ VHDL ι θ Verilog. Τα FPGAs πλζον μπορεί να περιζχουν περιςςότερα από ζνα διςεκατομμφριο τρανηίςτορ. Application-specific integrated circuits (ASICs): Σχεδιαςμζνα ειδικά για μια ςυγκεκριμζνθ εφαρμογι, όπωσ λζει και το όνομα τουσ. Ραρζχουν τθν καλφτερθ απόδοςθ αλλά είναι ιδιαίτερα ακριβά τόςο από άποψθ ςχεδίαςθσ αλλά και ελζγχου τουσ Ανατομία ενόσ μικροελεγκτή Εικόνα 1.1 Απαραίτητα ςτοιχεία ενόσ μικροελεγκτή Τα βαςικά χαρακτθριςτικά ενόσ μικροελεγκτι είναι τα ακόλουκα [5]: Κεντρική μονάδα επεξεργαςίασ (CPU) Βαςικά τθσ ςτοιχεία είναι: Arithmetic Logic Unit (ALU), θ οποία κάνει τουσ υπολογιςμοφσ. Καταχωρθτζσ. Χρειάηονται για τθν βαςικι λειτουργία τθσ CPU,όπωσ είναι ο program counter(pc),ο stack pointer (SP), και ο status register (SR). Επιπρόςκετουσ καταχωρθτζσ, για τθν αποκικευςθ των αποτελεςμάτων. Instruction decoder και άλλεσ λογικζσ, για τον ζλεγχο τθσ CPU, των resets, των interrupts κτλ. Μνήμη για το πρόγραμμα: Non-volatile μνιμθ (ROM), που ςθμαίνει ότι κρατά τα δεδομζνα τθσ όταν αποςυνδεκεί θ τροφοδοςία. Μνήμη για τα δεδομζνα: Γνωςτι και ωσ μνιμθ τυχαίασ προςπζλαςθσ (RAM) και ςυνικωσ είναι volatile. Ports ειςόδου εξόδου (Ι/O Ports): Για τθν παροχι ψθφιακισ επικοινωνίασ με τον «ζξω κόςμο». Address και data buses: Για τθ διαςφνδεςθ αυτϊν των υποςυςτθμάτων ϊςτε να μεταφζρονται τα δεδομζνα και οι εντολζσ. Ρολόι (Clock): Για να κρατά χρονιςμζνο το όλο ςφςτθμα. Μπορεί να παράγεται εςωτερικά ι να παρζχεται από ζνα κρφςταλλο εξωτερικά. 15

17 Είναι μάλλον απίκανο κάποιοσ επεξεργαςτισ να μθν διακζτει αυτά τα χαρακτθριςτικά, αν και θ υλοποίθςθ τουσ μπορεί να διαφζρει ςθμαντικά. Οι μεγάλεσ και ουςιαςτικζσ διαφορζσ εμφανίηονται όταν πάμε ςτο πεδίο των περιφερειακϊν που εμπεριζχουν. Αρχικά αυτζσ οι λειτουργίεσ χρειάηονταν εντελϊσ ξεχωριςτό εξοπλιςμό αλλά με τθ βελτίωςθ τθσ τεχνολογίασ και τα όλο μικρότερα μεγζκθ μπόρεςαν να ενςωματωκοφν ςτα chips των επεξεργαςτϊν. Ρλζον τα περιςςότερα περιφερειακά είναι ςτο ίδιο ολοκλθρωμζνο κφκλωμα με τον επεξεργαςτι. Ραρακάτω αναφζρονται τα πιο ςυνικθ περιφερειακά. Timers: Οι περιςςότεροι μικροελεγκτζσ ζχουν τουλάχιςτον ζνα timer λόγω τθσ μεγάλθσ γκάμασ λειτουργιϊν που παρζχουν. Ενδεικτικά: Ο χρόνοσ ςτον οποίο γίνονται οι μεταβάςεισ ςε μία είςοδο μποροφν να καταγραφοφν. Ζτςι μποροφμε να ςυμπεράνουμε τθν ταχφτθτα ενόσ ποδθλάτου, για παράδειγμα, αν θ είςοδοσ οδθγείται από ζναν αιςκθτιρα που παράγει ζνα παλμό κάκε φορά που θ ρόδα ολοκλθρϊςει μια περιςτροφι. Οι ζξοδοι μποροφν να γίνονται on ι off αυτόματα ςε ςυγκεκριμζνθ ςυχνότθτα. Αυτι θ λειτουργία χρθςιμοποιείται πολφ ςυχνά για ζνα PWM ςιμα, το οποίο για παράδειγμα ελζγχει τθν φωτεινότθτα ενόσ LED. Ραρζχουν τθ δυνατότθτα χριςθσ για προγραμματιςμζνεσ διαδικαςίεσ, όπωσ είναι ο ζλεγχοσ τθσ κερμοκραςίασ ενόσ δωματίου. Ζτςι μποροφμε το χρόνο που δεν ελζγχεται θ κερμοκραςία, ςτθν προκειμζνθ περίπτωςθ, να βάηουμε το ςφςτθμα μασ ςε sleep mode και να εξοικονομοφμε ενζργεια (ςθμαντικό όταν θ τροφοδοςία μασ είναι από μπαταρίεσ). Watchdog timer: Είναι ζνασ timer αςφαλείασ, ο οποίοσ κάνει reset ςτον επεξεργαςτι αν το πρόγραμμα εμπλακεί ςε ατζρμονα βρόγχο. Διεπαφζσ επικοινωνίασ: Υπάρχει διακζςιμθ μεγάλθ γκάμα τζτοιων διεπαφϊν για τθν ανταλλαγι πλθροφοριϊν με κάποιο άλλο IC ι ςφςτθμα. Κάποια από αυτά είναι: SPI(serial peripheral interface) Λnter-integrated circuit(ic 2 ι απλά IIC) Αςφγχρονεσ διεπαφζσ, όπωσ RS-232, USB(universal serial bus), Ethernet, CAN (controller area network), κ.ά. Analog-to-digital converter: Χρθςιμοποιείται ευρζωσ αφοφ οι ποςότθτεσ που διαβάηουμε από το εξωτερικό περιβάλλον μεταβάλλονται ςυνεχϊσ και μθ-ψθφιακά. Digital-to-analog converter: Χρθςιμοποιοφνται λιγότερο αφοφ μποροφμε να προςομοιάςουμε τισ περιςςότερεσ αναλογικζσ εξόδουσ χρθςιμοποιϊντασ ζνα PWM ςιμα. Αν και μια ςθμαντικι εξαίρεςθ ιταν για χρόνια ο ιχοσ πλζον με μια νζα γενιά ενιςχυτϊν, τουσ class D amplifiers,θ χριςθ του PWM για audio είναι πλζον εφικτι Λογιςμικό Υπάρχουν διάφορεσ γλϊςςεσ που μποροφμε να χρθςιμοποιιςουμε για να προγραμματίςουμε ζνα μικροελεγκτι: Γλϊςςα μηχανήσ (Machine code): Τα δυαδικά δεδομζνα που καταλαβαίνει ςτθν πραγματικότθτα ο επεξεργαςτισ. Κάκε εντολι ζχει μια δυαδικι τιμι που ονομάηεται «opcode». Δεν είναι αντιλθπτι από τον άνκρωπο εκτόσ αν κάποιοσ ζχει ξοδζψει πάρα πολφ χρόνο ςε debugging χαμθλοφ επιπζδου. Κάποιοι από τουσ πρϊτουσ υπολογιςτζσ προγραμματίηονταν ςε γλϊςςα μθχανισ, αλλά αυτι θ εποχι ζχει περάςει ανεπιςτρεπτί. Assembly: Σε λίγο υψθλότερο επίπεδο από τθ γλϊςςα μθχανισ και μεταφραςμζνθ ςτα Αγγλικά. Οι εντολζσ γράφονται ςαν λζξεισ που λζγονται mnemonics («μνθμονικά») και ζνα 16

18 πρόγραμμα που ονομάηεται «assembler» μετατρζπει τα mnemonics ςε γλϊςςα μθχανισ. Κάνει κάτι παραπάνω από απλι μετάφραςθ αλλά ςίγουρα όχι πολφ παραπάνω ςε ςφγκριςθ με ζναν compiler ςε μια γλϊςςα υψθλοφ επιπζδου. C: Θ πιο ςυχνι επιλογι για μικροελεγκτζσ ςιμερα. Ζνασ compiler μεταφράηει τθ C ςε γλϊςςα μθχανισ που μπορεί να αντιλθφκεί θ CPU. Αυτό μασ δίνει όλα τα πλεονεκτιματα μιασ γλϊςςασ υψθλοφ επιπζδου (δομζσ δεδομζνων, ςυναρτιςεισ κτλ). Αρχικά το compilation ζπρεπε πρϊτα να μετατρζψει τθ C ςε Assembly και μετά από εκεί ςε γλϊςςα μθχανισ αλλά πλζον ζχουμε μετατροπι από C ςε γλϊςςα μθχανισ απευκείασ. C++: Μια object-oriented γλϊςςα ι οποία χρθςιμοποιείται κυρίωσ για μεγαλφτερεσ εφαρμογζσ. Κάποια χαρακτθριςτικά τθσ μποροφν να χρθςιμοποιθκοφν και για μικροελεγκτζσ αλλά κάποια άλλα δθμιουργοφν προβλιματα ςτθν παραγωγι του κϊδικα. Για αυτό το λόγο δθμιουργικθκε θ embedded C++, που αποτελεί ζνα κομμάτι τθσ C++ που φτιάχτθκε για embedded ςυςτιματα. Ραρατθροφμε, λοιπόν, πόςο χριςιμοι είναι οι μικροελεγκτζσ ςτθν κακθμερινι ηωι, με όλεσ (και ςίγουρα πολφ περιςςότερεσ) τισ εφαρμογζσ που περιγράφθκαν παραπάνω. Στθ διπλωματικι μασ εργαςία επιλζξαμε να υλοποιιςουμε τζςςερα embedded ςυςτιματα με βάςθ τθν οικογζνεια AVR τθσ ATMEL, και ςυγκεκριμζνα ςε μία ειδικι υλοποίθςθ, ςτθν πλατφόρμα ανάπτυξθσ εφαρμογϊν Arduino. Στο παρακάτω κεφάλαιο δίνονται τα κφρια χαρακτθριςτικά αυτοφ του μικροελεγκτι. 17

19 2. Σο μικροχπολογιςτικό ςφςτημα Arduino 2.1. Γενικζσ πληροφορίεσ Σφμφωνα με το Massimo Banzi, ζναν από τουσ δθμιουργοφσ του, το Arduino αποτελεί μια open-source υπολογιςτικι πλατφόρμα βαςιςμζνθ ςε μια μθτρικι πλακζτα ειςόδων/εξόδων με ενςωματωμζνο επεξεργαςτι, και ζνα περιβάλλον ανάπτυξθσ βαςιςμζνο ςτθ γλϊςςα προγραμματιςμοφ Processing [6]. Μία από τισ βαςικζσ αρχζσ του Arduino είναι θ ιδζα του ελεφκερου λογιςμικοφ και υλικοφ. Ζτςι δίνεται θ ελευκερία ςτουσ χριςτεσ του για ανάπτυξθ εφαρμογϊν, μελζτθ, αλλαγζσ ακόμα και βελτίωςθ τθσ ίδιασ τθσ πλατφόρμασ. Από το 2005 μζχρι ςιμερα ζχει καταφζρει να διαμορφϊςει μία από τισ μεγαλφτερεσ Εικόνα 2.1 Arduino Uno SMD κοινότθτεσ χρθςτϊν, οι οποίοι μοιράηονται τισ προςπάκειεσ και γνϊςεισ τουσ πάνω ςτθν ανάπτυξθ εφαρμογϊν Arduino. Το μικροχπολογιςτικό αυτό ςφςτθμα αποτελεί το πυρινα ςε μία τεράςτια ποικιλία ςφγχρονων εφαρμογϊν, όπωσ επιςτθμονικζσ μελζτεσ μζςα από τθ ςυλλογι και επεξεργαςία δεδομζνων, ρομποτικι, αυτοματιςμοφσ, ακόμα και διαμόρφωςθ εςωτερικϊν και εξωτερικϊν χϊρων (π.χ. ζξυπνα ςπίτια). Με τθ ραγδαία ανάπτυξθ τθσ ςθμερινισ τεχνολογίασ ζχει δθμιουργθκεί μια μεγάλθ γκάμα μικροχπολογιςτικϊν ςυςτθμάτων (ARM, ςυςτιματα βαςιςμζνα ςε PIC, MSP430 τθσ TI). Γιατί λοιπόν διαλζξαμε το Arduino [7]: Είναι μία εφαρμογι ελεφκερου υλικοφ και λογιςμικοφ. Ωσ αποτζλεςμα είναι προςβάςιμο ςε όλα τα επίπεδα ανάπτυξθσ του, αλλά και δθμιουργεί μια ευελιξία ςτισ ανάγκεσ τθσ εκάςτοτε εφαρμογισ. Ρροςφζρει δυνατότθτεσ SPI (serial peripheral interface), I 2 C (Inter-Integrated Circuit), ςειριακι διεπαφι, PWM (pulse width modulation) outputs, ADC (analog to digital converters), ψθφιακζσ και αναλογικζσ Ε/Ε, κακϊσ και δυνατότθτα αξιοποίθςθσ των εςωτερικϊν και εξωτερικϊν interrupts και timers των AVR μικροεπεξεργαςτϊν. Μπορεί να προγραμματιςτεί ςε Processing (ελαφρϊσ τροποποιθμζνθ C++) αλλά και ςε C χαμθλοφ επιπζδου, κακϊσ επίςθσ περιζχει βιβλιοκικεσ για διεπαφι με θλεκτρονικζσ ςυςκευζσ (π.χ. LCD screens, motors, memories, wireless modules). Ζχει χαμθλό κόςτοσ (το οποίο διαμορφϊνεται ανάλογα με τθν ζκδοςθ, π.χ. το Arduino pro mini κοςτίηει 14 ευρϊ). Υπάρχει μια τεράςτια διαδικτυακι κοινότθτα θ οποία «ςυνεργάηεται» για τθν ανάπτυξθ εφαρμογϊν. Υπάρχει πλθκϊρα βιβλίων που μπορεί να χρθςιμοποιιςει κανείσ και να αποκτιςει εμπειρία πάνω ςτο ςφςτθμα αυτό. Μερικά από αυτά που χρθςιμοποιικθκαν κατά τθ διάρκεια αυτισ τθσ εργαςίασ είναι τα εξισ: 30 Arduino Projects for the Evil Genius, Arduino Cookbook, Beginning Arduino και φυςικά το Getting Started with Arduino [8] [9] [10] [6]. Οι δυνατότθτεσ του μποροφν να επεκτακοφν, με χριςθ shields (wi-fi, xbee, Bluetooth, mp3 shields κτλ) Σο υλικό του Arduino Υπάρχουν πολλζσ εκδόςεισ τθσ πλατφόρμασ του Arduino (Uno, Mega, Pro mini, FIO, Lilypad κτλ) [11], όλεσ βαςιςμζνεσ ςτον ίδιο πυρινα λογικισ, αλλά και κακεμία με τα δικά τθσ 18

20 χαρακτθριςτικά ϊςτε να εξυπθρετεί τισ απαιτιςεισ τθσ εκάςτοτε εφαρμογισ. Εμείσ κα ςτακοφμε περιςςότερο ςτο Arduino UNO και Arduino Pro mini. Οι δφο αυτζσ εκδόςεισ ζχουν παρόμοια χαρακτθριςτικά, αφοφ είναι και οι δφο βαςιςμζνεσ ςτον μικροεπεξεργαςτι ATmega328 τθσ Atmel [12]. Το πλεονζκτθμα του Pro mini ζναντι του Uno είναι το μικρό του μζγεκοσ (0.7" 1.3" ζναντι 2.1" 2.1"). To μειονζκτθμα είναι ότι δε διακζτει ενςωματωμζνο Usb-to-Serial chip Γενικά χαρακτηριςτικά: Το Arduino βαςίηεται ςτο μικροεπεξεργαςτι ATmega328P τθσ Atmel, ζναν 8-bit AVR RISCbased 8MHz μικροεπεξεργαςτι ο οποίοσ διακζτει 32ΚΒ ISP Flash μνιμθ με δυνατότθτεσ ανάγνωςθσ-εγγραφισ, 1KB EEPROM, 2KB SRAM, 23 Ε/Ε γενικοφ ςκοποφ, 32 καταχωρθτζσ γενικοφ ςκοποφ, ζναν 16-bit και δφο 8-bit ευζλικτουσ timers/counters, εςωτερικά και εξωτερικά interrupts, ςειριακι προγραμματιηόμενθ USART, SPI ςειριακι κφρα, 10-bit Α/D converter 6 καναλιϊν με δυνατότθτεσ μζχρι 200ΚΘz, προγραμματιηόμενο watchdog timer με εςωτερικό κρφςταλλο και 5 power saving λειτουργίεσ. Ζχει επίςθσ εξωτερικό 16 MHz κρφςταλλο, με δυνατότθτεσ επζκταςθσ ςτα 20 MHz. Ο κρφςταλλοσ αυτόσ ςυγχρονίηει τθ λειτουργία του Arduino, αφοφ ενεργεί ωσ πθγι ρολογιοφ, ςτζλνοντασ ςιματα ON-OFF τα οποία αλλάηουν τθ κατάςταςθ του ςυςτιματοσ. Reset button, όταν κλείνει το κφκλωμα του γίνεται reset ςτο ςφςτθμα. Διακζτει τζςςερα Status LEDs. To πρϊτο είναι ςυνδεμζνο ςτο pin 13, ςε ςυνδυαςμό με μία on-board αντίςταςθ του 1ΚΩ και χρθςιμοποιείται για ζλεγχο τθσ ςωςτισ λειτουργίασ του ςυςτιματοσ. Serial TX και Rx LEDs τα οποία υποδεικνφουν τθ ςωςτι επικοινωνία με το PC ι κάποια άλλθ ςειριακι ςυςκευι (μζςα από τα digital pins 0 και 1). Power LED, το οποίο γίνεται ON όταν υπάρχει τροφοδοςία ςτο Arduino. Είτε on-board(arduino Uno) είτε εξωτερικά (Arduino Pro Mini), για τθν επικοινωνία με τον υπολογιςτι μζςω τθσ κφρασ USB χρθςιμοποιείται κάποιο USB-to-serial chip (FT232RL, ATmega16U2 κτλ). O μικροεπεξεργαςτισ ζχει δυνατότθτα μόνο ςειριακισ επικοινωνίασ. Το FTDI chip μετατρζπει τα USB ςιματα ςε ςειριακά και αντίςτροφα. Επιπλζον ζχει ζναν on-chip regulator ςτα 3.3V, δίνοντασ τθ δυνατότθτα διαςφνδεςθσ με ςυςκευζσ που λειτουργοφν ςτα 3.3V όπωσ το Xbee για αςφρματθ επικοινωνία. Τζλοσ θ πλατφόρμα διακζτει διάφορα ςτοιχεία όπωσ πυκνωτζσ, διόδουσ και προςαρμοςτζσ τάςθσ, για τθ ςτακεροποίθςθ ι και υποβιβαςμό τθσ τάςθσ τροφοδοςίασ και προςταςίασ από βραχυκυκλϊματα. Συνοπτικά: Μικροεπεξεργαςτισ: ATmega328 Τάςθ Λειτουργίασ: 5V Ρροτεινόμενθ τάςθ ειςόδου: 7-12V Πρια τάςθσ ειςόδου: 6-20V Ψθφιακά I/O pins: 14 (of which 6 provide PWM output) Αναλογικά pins ειςόδου: 6 DC ρεφμα για κάκε I/O Pin: 40 ma DC ρεφμα για 3.3V Pin: 50 ma Μνιμθ Flash: 32 KB (ATmega328) of which 0.5 KB used by bootloader SRAM: 2 KB (ATmega328) EEPROM: 1 KB (ATmega328) Clock Speed: 16MHz Σροφοδοςία Το Arduino μπορεί να τροφοδοτθκεί μζςω κφρασ USB (5V regulated) ι με εξωτερικι τροφοδοςία (6-20V θ οποία υποβιβάηεται ςτα 5V από τον on-board regulator τάςθσ). Πταν ςυνδζονται και τα δφο, επιλζγεται αυτόματα θ εξωτερικι τροφοδοςία. Pins Τροφοδοςίασ: 19 Εικόνα 2.2 Arduino Pro Mini

21 VIN: Τάςθ τροφοδοςίασ του Arduino από εξωτερικό τροφοδοτικό. Αν θ τροφοδοςία παρζχεται από το DC Jack, ζχουμε πρόςβαςθ ςε αυτι, από αυτι τθν ακίδα. 5V: Ραρζχει 5V από τον on-board regulator. Το ςφςτθμα μπορεί να τροφοδοτθκεί από αυτι τθν ακίδα αν ςυνδζςουμε εξωτερικι τροφοδοςία 5V regulated. 3.3V: Ραρζχει 3.3V από τον on-board regulator. Το μζγιςτο ρεφμα που μπορεί να παρζχει είναι 50mA. GND: Θ γείωςθ του ςυςτιματοσ Μνήμεσ Ο μικροεπεξεργαςτισ ATmega328P διακζτει, όπωσ προείπαμε, τρεισ ομάδεσ μνιμθσ. Θ Flash μνιμθ χρθςιμοποιείται για τθν αποκικευςθ του Arduino sketch, δθλαδι του κϊδικα που κα ανεβάςουμε ςτθν πλατφόρμα. Τα 0.5 ΚΒ τθσ Flash χρθςιμοποιοφνται από τον bootloader (ζνα μικρό κομμάτι κϊδικα που δίνει τθ δυνατότθτα ανεβάςματοσ Arduino sketches ςτθ πλατφόρμα χωρίσ τθν ανάγκθ εξωτερικοφ προγραμματιςτι). Θ Flash memory δε μπορεί να αλλάξει κατά τθ διάρκεια εκτζλεςθσ του προγράμματοσ, οπότε χρθςιμοποιείται για τθν αποκικευςθ ςτακερϊν δομϊν δεδομζνων, όπωσ π.χ. πίνακεσ χαρακτιρων. Τθν SRAM ςτθν οποία δθμιουργείται το sketch και αποκθκεφει τισ μεταβλθτζσ όταν τρζχει. Τζλοσ τθν EEPROM, θ οποία χρθςιμοποιείται για τθν αποκικευςθ μακροχρόνιων πλθροφοριϊν Είςοδοι/ Ζξοδοι Κάκε μία από τισ 14 ψθφιακζσ ακίδεσ και τισ 6 αναλογικζσ μπορεί να χρθςιμοποιθκεί ωσ ψθφιακι είςοδοσ/ζξοδοσ λογικισ 5V. Κάκε ακίδα μπορεί να παρζχει ι να λάβει μζγιςτο ρεφμα 40mA (προτεινόμενο 20mA) και διακζτει εςωτερικι pull-up αντίςταςθ (αποςυνδεδεμζνθ εξ οριςμοφ) που ενεργοποιείται από το λογιςμικό. Οι περιςςότερεσ ακίδεσ ζχουν και επιπλζον εξειδικευμζνεσ λειτουργίεσ. ειριακζσ: 0 (Rx) και 1 (Tx). Χρθςιμοποιοφνται για τθν παραλαβι και αποςτολι ςειριακϊν δεδομζνων αντίςτοιχα. Αποτελοφν απαραίτθτθ ςυνκικθ για τθ ςφνδεςθ του Arduino με τθ USB κφρα, αφοφ ςυνδζονται με τισ αντίςτοιχεσ ακίδεσ του FTDI USB-to- Serial chip, αλλά και για αςφρματθ επικοινωνία (RF,Xbee,Bluetooth,κτλ). Εξωτερικά interrupts: Ακίδεσ 2 και 3. Αφοφ κακοριςτοφν ωσ ψθφιακζσ είςοδοι, μποροφν να προκαλζςουν εξωτερικά interrupts, ανάλογα με τθν τιμι τουσ. (LOW, HIGH, Μετάβαςθ από LOW ςε HIGH ι από HIGH ςε LOW). Εικόνα 2.3 ATmega328 Pin Mapping Input Capture: Ακίδα 8. Θ λειτουργία input capture χρθςιμοποιείται κυρίαρχα για τον υπολογιςμό τθσ ςυχνότθτασ ενόσ ςιματοσ. Αξιοποιεί, όπωσ κα δοφμε και παρακάτω τον 16-bit timer/counter 1 του ATmega328P. PWM: Ακίδεσ 3, 5, 6, 9, 10 και 11. Ραρζχουν οκτάμπιτθ(256 τιμζσ) παραγωγι PWM(pulse width modulation). Μια τεχνικι που ακολουκείται για τθ παραγωγι αναλογικϊν ςθμάτων με ψθφιακά μζςα. SPI: Ακίδεσ 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Οι ακίδεσ αυτζσ υποςτθρίηουν SPI επικοινωνία μεταξφ του Arduino και εξωτερικϊν ςειριακϊν περιφερειακϊν μονάδων, όπωσ εξωτερικζσ μνιμεσ και Shift Registers. 20

22 Αναλογικζσ Είςοδοι: Ακίδεσ Α0, Α1, Α2, Α3, Α4, Α5. Κακεμία από τισ οποίεσ παρζχει 10-bit ανάλυςθσ Αnalog to Digital μετατροπι με εξ οριςμοφ τάςθ αναφοράσ τα 5V. Θ τάςθ αναφοράσ μπορεί να αλλάξει, χρθςιμοποιϊντασ τθν ακίδα AREF. Ι 2 C: Ακίδεσ A4(SDA) και A5(SCL). Υποςτθρίηει I 2 C (TWI) επικοινωνία, χρθςιμοποιϊντασ τθν Wire library. Reset: Πταν τίκεται ςε LOW τιμι, κάνει reset τον μικροεπεξεργαςτι. ICSP: In-circuit Serial Programmer. Δίνει τθ δυνατότθτα άμεςου ανεβάςματοσ ενόσ sketch ςτο Arduino με χριςθ εξωτερικοφ προγραμματιςτι και του κατάλλθλου λογιςμικοφ (AVR Dude), χωρίσ τθν φπαρξθ bootloader, κερδίηοντασ ζτςι χϊρο μνιμθσ και χρόνο ανεβάςματοσ ενόσ sketch ςτθν πλατφόρμα. Επιπλζον παρζχει τθ δυνατότθτα «καψίματοσ» ενόσ νζου bootloader ςτον μικροεπεξεργαςτι Σο λογιςμικό του Arduino To δεφτερο βαςικό ςτοιχείο τθσ πλατφόρμασ του Arduino είναι το Arduino IDE, το οποίο περιζχει το απαραίτθτο λογιςμικό ϊςτε να μπορεί ζνασ υπολογιςτισ να επικοινωνιςει ι και να ανεβάςει ζνα sketch ςτο ςφςτθμα. Το Arduino IDE είναι γραμμζνο ςε JAVA, με αποτζλεςμα να μπορεί να «τρζξει» ςε Windows, Linux, MAC, ακόμα και ςε Android ςυςκευζσ. Υπάρχουν δφο τρόποι εγγραφισ κϊδικα ςτο Arduino IDE. Τθ γλϊςςα του Arduino, μία γλϊςςα βαςιςμζνθ ςτθ Processing, που υποςτθρίηει όλεσ τισ βιβλιοκικεσ που ζχουν διαμορφωκεί από τθ κοινότθτα του Arduino, δίνοντασ τθ δυνατότθτα ακόμα και ςε ζναν άπειρο χριςτθ να ελζγξει περίπλοκεσ ςυςκευζσ και λειτουργίεσ. Σε C χαμθλοφ επιπζδου, δίνοντασ τθ δυνατότθτα πιο γριγορθσ εκτζλεςθσ του προγράμματοσ (εκτζλεςθ ςε λιγότερουσ κφκλουσ μθχανισ Εικόνα 2.4 Arduino IDE ), αλλά και απευκείασ χειριςμοφ των καταχωρθτϊν του επεξεργαςτι, ακόμα και ςε λειτουργίεσ που δεν υποςτθρίηει το Arduino IDE (όπωσ θ input capture). H διαδικαςία του ανεβάςματοσ ενόσ sketch ςτο board, χρθςιμοποιϊντασ το Arduino IDE, περιζχει τα εξισ βιματα: Ο κϊδικασ μετατρζπεται ςε C χαμθλοφ επιπζδου και μετά μεταγλωττίηεται μζςω του avr-gcc (ενόσ ελεφκερου και ανοιχτοφ λογιςμικοφ compiler, βαςιςμζνου ςτον Gnu C Compiler gcc, ειδικά ςχεδιαςμζνο για AVR μικροελεγκτζσ). Ο παραγόμενοσ δυαδικόσ κϊδικασ αποκθκεφεται ςτθ μνιμθ του επεξεργαςτι από όπου και εκτελείται, μζςω τθσ USB ςφνδεςθσ. Θ ςφνδεςθ αυτι γίνεται μζςω του avrdude, ζνα πρόγραμμα που υλοποιεί το πρωτόκολλο επικοινωνίασ για τθν μεταφορά και αποκικευςθ του κϊδικα ςτθ μνιμθ του Arduino Παράδειγμα: Blink LED ςε γλϊςςα Arduino και C χαμηλοφ επιπζδου. Γλϊςςα Arduino: // Turns on an LED on for one second, then off for one second, repeatedly. void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinmode(13, OUTPUT); 21

23 void loop() { digitalwrite(13, HIGH); delay(1000); digitalwrite(13, LOW); delay(1000); C χαμηλοφ επιπζδου: // set the LED on // wait for a second // set the LED off // wait for a second ISR(TIMER1_COMPA_vect) { PORTB = ~PORTB; void setup() { DDRB = B ; cli(); TCCR1A = 0; TCCR1B = 0; OCR1A = 15624; TCCR1B = (1 << WGM12); TCCR1B = (1 << CS10); TCCR1B = (1 << CS12); TIMSK1 = (1 << OCIE1A); sei(); void loop(){ Εικόνα 2.5 Blink Led Παράδειγμα: Τλοποίηςη ψηφιακοφ θερμομζτρου #include <LiquidCrystal.h> #include <math.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); int backlight = 13; void setup(void) { pinmode(backlight, OUTPUT); digitalwrite(backlight, HIGH); lcd.begin(16,2); // rows, columns: 16,2 for a 16x2 LCD, etc. // start with a blank screen lcd.clear(); lcd.setcursor(0,0); // set cursor to column 0, row 0 double Thermister(int RawADC) { double Temp; Temp = log((( /rawadc) )); Temp = 1 / ( ( * Temp) + ( * Temp * Temp * Temp)); Temp = Temp ; // Convert Kelvin to Celcius return Temp; void printtemp(void) { double ftemp; double temp = Thermister(analogRead(0)); // Read sensor lcd.clear(); lcd.setcursor(0,0); lcd.print("temperature is:"); lcd.setcursor(0,1); lcd.print(temp); lcd.print(" C / "); ftemp = (temp * 1.8) ; lcd.print(ftemp); 22

24 lcd.print(" F"); if (ftemp > 68 && ftemp < 78) { lcd.setcursor(0,3); lcd.print("very comfortable"); void loop(void) { printtemp(); delay(1000); Εικόνα 2.6 Arduino και LCD Screen 23

25 3.1. Ειςαγωγή 3. Wireless POV Display Θ βαςικι ιδζα που υλοποιείται ςτο επόμενο ςφςτθμα είναι θ «χειραγϊγθςθ» τθσ αντιλθπτικισ λειτουργίασ που ονομάηεται «Persistence of Vision» («μεταίςκθμα») και ζχει να κάνει με το φαινόμενο τθσ παραμονισ για 40 milliseconds μιασ «μεταεικόνασ», πζραν τθσ αρχικισ, πάνω ςτον αμφιβλθςτροειδι του ματιοφ μασ [13]. Θ ιδιότθτα αυτι τθσ ανκρϊπινθ όραςθσ, ζχει εφαρμοςτεί ςε πολλά θλεκτρονικά ςυςτιματα, όπωσ ςε οκόνεσ υπολογιςτϊν (CRT, LCD monitors κ.ά.), ςε ςυςτιματα κινθματογράφθςθσ, cartoon animation, τυπωμζνα μζςα και φυςικά ςε POV displays. Μία από τισ πρϊτεσ εφαρμογζσ ενόσ τζτοιου ςυςτιματοσ ιταν το "Propeller Clock" Mechanically Scanned LED Clock [14], και αποτζλεςε πθγι ζμπνευςθσ για τθν υλοποίθςθ του ςυςτιματοσ μασ. Μια τζτοια οκόνθ, ζχει τθν ιδιότθτα να διαμορφϊνει τθν αντιλθπτι ωσ προσ το ανκρϊπινο μάτι εικόνα μζςα από τθ διαδοχικι προβολι ενόσ κλάςματοσ από τα ςυνολικά pixels με εναλλαγζσ κάκε λίγα χιλιοςτά του δευτερολζπτου. Το ςφςτθμα που υλοποιοφμε παρακάτω, εφαρμόηει τθ διςδιάςτατθ εκδοχι αυτισ τθσ κεωρίασ, δθλαδι με μία ςτιλθ από LEDs, κυκλικά ςτρεφόμενθ, δθμιουργείται θ εντφπωςθ μιασ οκόνθσ ςε ςχιμα δίςκου. Για να ςυμβεί αυτό, θ ελάχιςτθ ολοκλιρωςθ μιασ περιςτροφισ πρζπει να γίνεται το λιγότερο ίςθ με 25Hz, ϊςτε να μθν αλλοιϊνεται θ εικόνα. Επιπλζον θ οπτικι αντίλθψθ του ςυςτιματοσ, δίνει τθν εντφπωςθ μιασ «ολογραμματικισ» εικόνασ. Λόγω τθσ ταχείασ περιςτροφισ, αλλά και του φωτιςμοφ από τα LEDs, το υλικό ςφςτθμα δε γίνεται αντιλθπτό από το μάτι. Ωσ αποτζλεςμα, κατά τθ λειτουργία του ςυςτιματοσ, αντιλαμβανόμαςτε μόνο το φωσ που εκπζμπεται από τισ φωτοδιόδουσ. Θ τεχνικι αυτι ονομάηεται και «light writing» [15] Γενική λειτουργία του ςυςτήματοσ Το ςφςτθμα μασ ζχει ωσ πυρινα λειτουργίασ του το Arduino pro mini (ATmega328, 5V, 16MHz), μζςω του οποίου κακορίηουμε τθ ψθφιακι λογικι για τον ζλεγχο των 64 LEDs (smd). Θ πλθροφορία που κζλουμε να προβάλλουμε αποκθκεφεται ςτθ Flash memory του ATmega328. Το ςφςτθμα ζχει δφο βαςικζσ λειτουργίεσ, τθν προβολι εικόνων και τθν προβολι αλφαρικμθτικϊν. Θ λειτουργία και το περιεχόμενό τθσ κακορίηεται μζςω αςφρματθσ επικοινωνίασ με το PC. Για τθ ςωςτι προβολι είναι απαραίτθτο να γνωρίηουμε τθ ταχφτθτα περιςτροφισ του ςυςτιματοσ. Θ ταχφτθτα αυτι διαβάηεται από ζνα latched hall effect sensor, με τθ χριςθ 2 μαγνθτϊν με αντίκετθ, μεταξφ τουσ, πολικότθτα και ίςθσ ζνταςθσ μαγνθτικό πεδίο. Γνωρίηοντασ, λοιπόν τθ ταχφτθτα περιςτροφισ, μποροφμε να υπολογίςουμε ςφμφωνα, είτε με τθν επικυμθτι ανάλυςθ τθσ εικόνασ είτε με τθν επικυμθτι απόςταςθ των γραμμάτων ςε μία πρόταςθ, κάκε πότε πρζπει να ανάβουν τα LEDs Η καταςκευή Μία από τισ μεγαλφτερεσ δυςκολίεσ που ςυναντιςαμε ςτθν υλοποίθςθ του ςυςτιματοσ, ιταν θ μεταφορά ρεφματοσ ςτο ςτρεφόμενο κομμάτι τθσ καταςκευισ. Οι απαιτιςεισ και περιοριςμοί που προςδιορίςαμε για τθν επιτυχθμζνθ μεταφορά τάςθσ και ρεφματοσ ιταν θ απαίτθςθ τθσ χαμθλισ τριβισ (ϊςτε το ςφςτθμα να ςτακεροποιείται ςτθ μεγαλφτερθ δυνατι ταχφτθτα), του χαμθλοφ κορφβου, αλλά και μιασ επαφισ θ οποία κα μποροφςε να άγει ικανι ποςότθτα ρεφματοσ (1.5Α) και να μθ διακόπτεται κατά τθ περιςτροφι του ςυςτιματοσ. Για το λόγο αυτό, επιλζξαμε ζνα Pogo Pin με ςτρογγυλι επιφάνεια (ουςιαςτικά πρόκειται για μια ακίδα διαςτάςεων 33mm με εςωτερικό ελατιριο), για τθ ςυνεχι μεταφορά των 5V, κακϊσ και τον άξονα του DC Motor για τθ μεταφορά του GND. Το ςφςτθμά μασ απαρτίηεται από τρεισ πλακζτεσ. Θ πρϊτθ πλακζτα, θ οποία είναι ςτακερι, παίηει το ρόλο τθσ διεπαφισ του DC Motor (DC Motor 24

26 Interface) με το υπόλοιπο ςφςτθμα. Στθ πλακζτα αυτι τοποκετοφνται οι μαγνιτεσ, ζτςι ϊςτε να διαμορφϊνουν δφο, αντίκετθσ πολικότθτασ και ίςθσ ζνταςθσ, μαγνθτικά πεδία. Από το κζντρο τθσ πλακζτασ περνάει ο άξονασ του μοτζρ. Τζλοσ υπάρχει το Vcc (+5V) net, ςτο οποίο ςυνδζεται το Pogo Pin. Οι δφο αυτζσ επαφζσ ςυνδζονται ςτθ δεφτερθ πλακζτα (Power Shield), θ οποία ζχει διπλό ρόλο. Αφενόσ, δζχεται τα Vcc και GND, τα οποία ςυνδζονται με ζνα πυκνωτι, ωσ αςφάλεια ςε περίπτωςθ που για κάποια μsec χακεί θ επαφι μεταξφ Pogo Pin και πλακζτασ. Αφετζρου ςτθν πλακζτα αυτι ζχουμε τοποκετιςει τον hall effect sensor, ο οποίοσ ςτζλνει ζνα ςιμα HIGH όταν περνάει κοντά από τον ζνα μαγνιτθ και LOW όταν πλθςιάηει τον άλλο. Τα τρία αυτά ςιματα (+5V, GND, HALL) ςυνδζονται με τθν τρίτθ πλακζτα, ςτθν οποία ζχουν τοποκετθκεί το Arduino pro mini, ζνα xbee module για αςφρματθ επικοινωνία, κακϊσ και τα LEDs, οι αντιςτάςεισ και οι Shift Registers. Στο ςφςτθμά μασ χρθςιμοποιοφμε δφο τροφοδοτικά, για καλφτερθ ςτακερότθτα, ζνα 5V regulated για τθν τροφοδοςία του κυκλϊματοσ, ικανό να παρζχει μζχρι 2.5A και ζνα 12V ικανό να παρζχει ζνα 1A για τθν τροφοδοςία του DC motor. Οι γειϊςεισ των δφο τροφοδοτικϊν είναι βραχυκυκλωμζνεσ, ϊςτε να κλείνει το κφκλωμα μεταξφ του Vcc (+5V) που παρζχεται από το ζνα τροφοδοτικό και του GND ςτον άξονα του μοτζρ που παρζχεται από το άλλο. Ζνασ διακόπτθσ ζχει τοποκετθκεί για τον ζλεγχο τθσ λειτουργίασ του motor. Το μοτζρ, τα βφςματα των τροφοδοςιϊν κακϊσ και ο διακόπτθσ ζχουν τοποκετθκεί ςε ζνα μεταλλικό κουτί, με τζτοιο τρόπο ϊςτε να ελαχιςτοποιοφνται οι κραδαςμοί που οφείλονται ςτθν περιςτροφι. Τζλοσ, μείηονοσ ςθμαςίασ, ιταν ο κακοριςμόσ των διαςτάςεων των πλακετϊν κακϊσ και θ τοποκζτθςθ των υλικϊν ςε αυτζσ με τζτοιο τρόπο, ϊςτε το ςφςτθμα να ζχει κζντρο βάρουσ τον άξονα του μοτζρ. Σε διαφορετικι περίπτωςθ, λόγω τθσ μεγάλθσ ταχφτθτασ περιςτροφισ (1500 rounds per minute) ακόμα και μια απόκλιςθ λίγων χιλιοςτϊν του κζντρου βάρουσ από τον άξονα, ζχει ωσ αποτζλεςμα ςε ζκκεντρθ περιςτροφι, μείωςθ τθσ ταχφτθτασ, αφξθςθ κραδαςμϊν και αςτάκεια του ςυςτιματοσ Ηλεκτρονική χεδίαςη Σο ςχηματικό διάγραμμα Στο ςχθματικό διάγραμμα βλζπουμε τθν αντιςτοιχία μεταξφ των pins του Arduino και των Shift Registers. Οι Shift Registers τροφοδοτοφνται από το Arduino, ενϊ ςτισ εξόδουσ τουσ είναι ςυνδεδεμζνα τα LEDs με αρνθτικι λογικι. Δθλαδι, τα LEDs ανάβουν όταν οι καταχωρθτζσ ολίςκθςθσ ζχουν ζξοδο LOW. Τζλοσ, φαίνεται θ διαςφνδεςθ μεταξφ των Shift Registers (daisy Εικόνα 3.1 Σο ςχηματικό διάγραμμα 25

27 chain). Τα βαςικά ςτοιχεία τθσ καταςκευισ είναι τα εξισ: US1881 Latched Hall Effect Sensor [16] Pull up resistor 10KΩ Ρυκνωτισ 0.68 µf 64 smd κόκκινα Led (footprint: 1206) 64 smd αντιςτάςεισ 270Ω (footprint: 0805) 8 Shift Registers 74HC595 [17] Arduino pro mini (ATmega328,5V,16MHz) [18] Xbee series 1 [19] FTDI breakout board [20] χεδίαςη PCB Εικόνα 3.2 Hall Effect Sensor Για τθ ςχεδίαςθ των ςχθματικϊν και των PCB χρθςιμοποιιςαμε το Altium Designer [21]. Το τφπωμα των πλακετϊν ζγινε ςε πλακζτεσ με επίςτρωςθ φωτοευαίςκθτου ςπρζι. Ενϊ ακολουκιςαμε τθ μζκοδο του φωτιςμοφ από υπεριϊδθ ακτινοβολία και αποχάλκωςθσ με διάλυμα τριχλωριοφχου ςιδιρου Motor interface Ππωσ προείπαμε ςε αυτι τθ πλακζτα ζχουμε μόνο ζνα net, αυτό των 5V (Vcc) ςτο οποίο ςυνδζεται το Pogo Pin ϊςτε μζςω τθσ επαφισ του με τθν ςτρεφόμενθ πλακζτα να παρζχει τθν απαραίτθτθ τροφοδοςία ςτο ςφςτθμα. Επίςθσ ςτθ πλακζτα αυτι τοποκετοφμε και τουσ μαγνιτεσ Power Shield Hall Effect Sensor: Το US1881 είναι ζνασ ενςωματωμζνοσ Εικόνα 3.3 Motor Interface Hall effect latched sensor. Θ ζξοδοσ του αλλάηει καταςτάςεισ (LOW, HIGH) ςτθ παρουςία αντίκετων μαγνθτικϊν πεδίων. Ρεριζχει ζναν on-chip Hall voltage generator ο οποίοσ εξαρτάται από το μαγνθτικό πεδίο. Ζναν comparator για τθν ενίςχυςθ τθσ τάςθσ. Ζνα Schmitt trigger για τθ απόρριψθ κορφβου ςτισ μεταβάςεισ τθσ εξόδου, θ οποία είναι ανοιχτοφ ςυλλζκτθ. Επίςθσ περιζχει ζναν εςωτερικό bandgap regulator, ο οποίοσ επιτρζπει ζνα μεγάλο εφροσ τάςθσ λειτουργίασ. Εξωτερικά το ςτοιχείο αυτό ζχει τρεισ ακροδζκτεσ (Vcc, GND, Out). Συνδζουμε το Vcc και το GND ςτα 5V και ςτθ γείωςθ αντίςτοιχα, ενϊ το Out ςυνδζεται ςτο ICP Pin του ATmega328 δθλαδι το digital pin 8 του Arduino pro mini, ϊςτε να μποροφμε να αξιοποιιςουμε τθ λειτουργία input capture όπωσ κα δοφμε ςτθ ςυνζχεια. Ραράλλθλα με τα Vcc και GND του Hall Effect Sensor ςυνδζουμε μια pull-up αντίςταςθ των 10KΩ ϊςτε να προςδιορίηεται θ λογικι ςτάκμθ 1 όταν θ επαφι είναι ανοικτι. Ο αιςκθτιρασ τοποκετείται με τζτοιο τρόπο ϊςτε να περνάει ςε μικρι απόςταςθ από τουσ μαγνιτεσ που βρίςκονται ςτο Power shield, για μεγαλφτερθ αξιοπιςτία. Πυκνωτήσ 0.68μF: Οι ακροδζκτεσ του πυκνωτι ςυνδζονται ςτο Vcc και GND, ζτςι ϊςτε αν ςτιγμιαία χακεί θ επαφι μεταξφ τθσ πλακζτασ και του Pogo Pin να μθ χάςει τθ τροφοδοςία του το ςφςτθμα. Εικόνα 3.4 Power Shield 26

28 Wireless POV Shield Headers: Στθ πλακζτα αυτι τοποκετοφμε δυο headers. Ο πρϊτοσ header χρθςιμοποιείται για διεπαφι μεταξφ των ςθμάτων που χειρίηονται τθν αςφρματθ/ενςφρματθ επικοινωνία και προγραμματιςμό του Arduino. O header ςυνδζεται με τα αντίςτοιχα pins του Arduino (GRN, Tx, Rx, Vcc, GND, BLK), αλλά και του Xbee Breakout (DTR, Din, Dout, 5V, GND, GND) ι του FTDI breakout (DTR, Rx, Tx, 5V, Cts, GND). Ο δεφτεροσ header, υλοποιεί τθ διεπαφι του Wireless POV Shield με το Power Shield και περιζχει τα ςιματα Vcc, GND, και το Out του Hall Effect Sensor. Arduino Pro mini: Εκτόσ από τα pin που χρθςιμοποιιςαμε για τθ ςειριακι (ενςφρματθ και αςφρματθ) επικοινωνία, ςυνδζουμε το Vcc ςτα 5V, το GND με τθ γείωςθ, το D8 με τθν ζξοδο του Hall Effect Sensor και τα Pins D10, D11, D13 ωσ SS, MOSI, SCK ςιματα για SPI τα οποία ςυνδζονται με τουσ Shift Registers. Xbee Modules: Για τθν υλοποίθςθ τθσ αςφρματθσ επικοινωνίασ χρθςιμοποιοφμε δφο Xbee modules, τα οποία βαςίηονται ςτο πρωτόκολλο Zigbee (IEEE ) [22]. Το ζνα ςυνδζεται μζςω ενόσ FTDI breakout board με τθ κφρα USB του PC. Ενϊ το άλλο ςυνδζεται μζςω ενόσ breakout board, που περιζχει και Voltage regulator 3.3V με το Arduino. Θ ρφκμιςθ των Xbee ζγινε μζςω ενόσ open-source εργαλείου, του XBeeConfigTool [23]. Το Xbee που ςυνδζεται ςτο PC ρυκμίηεται με Baud rate 57600, PAN ID 1234, MY ID 0000, DL ID Ενϊ το Xbee που ςυνδζεται ςτο Arduino ρυκμίηεται με Baud rate 57600, PAN ID 1234, MY ID 0001, DL ID Εικόνα 3.6 Xbee Module Εικόνα 3.5 Xbee Configuration Tool Shift Registers: Χρθςιμοποιοφμε 8 Shift Registers ςε αλυςιδωτι ςυνδεςμολογία για να οδθγιςουμε τα 64 LEDs. Από τθ ςτιγμι που το Arduino δεν ζχει τόςα I/O Ports όςα τα LEDs που κζλουμε να οδθγιςουμε υπάρχουν δφο βαςικοί τρόποι με τουσ οποίουσ κα μποροφςε να επιτευχκεί θ ςυνδεςμολογία. Ο πρϊτοσ είναι με πολφπλεξθ των εξόδων, ζχει όμωσ ζνα βαςικό μειονζκτθμα, δε μποροφν να οδθγθκοφν όλα τα LEDs ταυτόχρονα. Σε κάποια άλλθ εφαρμογι, δε κα αποτελοφςε ιδιαίτερο μειονζκτθμα. Στο ςφςτθμα αυτό όμωσ, λόγω τθσ γριγορθσ περιςτροφισ, κα παραμόρφωνε τθν προβαλλόμενθ εικόνα. Ο δεφτεροσ τρόποσ είναι με Shift Registers. Με το τρόπο αυτό ςτζλνουμε τα δεδομζνα ςειριακά ςτουσ Registers. Μόλισ περάςουν και τα 64 bits τα οποία κακορίηουν αν κάκε LED κα είναι On ι Off, κάνουμε Latch τουσ Shift Registers και οι τιμζσ αυτζσ περνάνε ςτθν ζξοδο. Ζτςι μποροφμε να ελζγξουμε 64 LEDs χρθςιμοποιϊντασ μόνο τρεισ εξόδουσ του Arduino. Υπάρχουν δφο τρόποι ςφνδεςθσ των Shift Registers με το Arduino. Στον πρϊτο μποροφμε να τουσ ςυνδζςουμε με όποια Digital I/O Pins κζλουμε και να ελζγξουμε τθ λειτουργία τουσ από το λογιςμικό. Ο ATmega όμωσ προςφζρει τθ δυνατότθτα να γίνει ο ζλεγχοσ των Shift register με λειτουργία SPI (Serial Peripheral Interface). Ζτςι ο ATmega ςυμπεριφζρεται ςαν master και οι Shift Registers ςαν slaves, που ςυγχρονίηονται από το ρολόι του ATmega. Ζτςι μποροφμε να ελζγξουμε τθ λειτουργία των Shift Registers 27

29 κερδίηοντασ ςε ταχφτθτα πολλοφσ κφκλουσ μθχανισ από ότι αν τουσ ελζγχαμε μόνο μζςα από το software. Οι ακροδζκτεσ των Shift Registers ςυνδζονται ωσ εξισ: 1-7 και 15: ςυνδζονται με τισ αντιςτάςεισ των 270Ω οι οποίεσ είναι ςε ςειρά με τα LEDs. 8: GND 9: Συνδζεται με τον ακροδζκτθ 14 του επόμενου Shift register. Στον τελευταίο ακροδζκτθ δε ςυνδζουμε τίποτα. 10: Vcc 11: Συνδζεται με τον ακροδζκτθ 13 του Arduino (SCK). Χρθςιμοποιείται ωσ ρολόι για να ςταματιςει να δζχεται ςειριακά δεδομζνα και να τα ςτείλει παράλλθλα ςτισ εξόδουσ. 12: Συνδζεται με τον ακροδζκτθ 10 του Arduino (SS). Χρθςιμοποιείται ωσ ρολόι για το κάκε πότε δζχεται ςειριακά δεδομζνα. 13: GND 14: Ο πρϊτοσ Shift register ςυνδζεται ςτο pin 11 του Arduino (MOSI). Οι υπόλοιποι ςυνδζονται ςτον ακροδζκτθ 9 του κάκε φορά προθγοφμενου καταχωρθτι. Από τον ακροδζκτθ αυτόν ειςζρχονται ςειριακά τα δεδομζνα. 16: Vcc. Εικόνα HC595 LEDs και Αντιςτάςεισ: Σε κάκε ζξοδο των Shift Registers ςυνδζεται μία αντίςταςθ ςε ςειρά με ζνα LED. Τα LED ελζγχονται με αρνθτικι λογικι. Δθλαδι θ κάκοδοσ τουσ είναι ςυνδεδεμζνθ με τθν ζξοδο του Shift register και θ άνοδοσ του είναι πάντα HIGH. Ζτςι για να κάνουμε ζνα LED On, πρζπει ςτθν αντίςτοιχθ ζξοδο ενόσ καταχωρθτι ολίςκθςθσ να βγάλουμε λογικό Λογιςμικό Για τθν υλοποίθςθ του ςυςτιματοσ χρθςιμοποιοφμε δφο διαφορετικά προγράμματα. Το πρϊτο μετατρζπει μια εικόνα τφπου bitmap ςε πίνακα πολικϊν ςυντεταγμζνων. Το δεφτερο είναι ο κϊδικασ που φορτϊνεται ςτο Arduino για να εμφανίςει ςωςτά τισ εικόνεσ και τα αλφαρικμθτικά POV Image Maker Εικόνα 3.8 Wireless POV Shield To πρόγραμμα αυτό είναι γραμμζνο ςε Visual Basic ςτο αντίςτοιχο IDE τθσ Microsoft. Δζχεται ςαν είςοδο μία εικόνα τφπου bitmap και δθμιουργεί ζνα αρχείο τφπου header, διαμορφωμζνο ζτςι ϊςτε να το δζχεται το IDE του Arduino και να το ενςωματϊνει ςτον υπόλοιπο κϊδικα. Θ γραφικι διεπαφι του εκτελζςιμου αρχείου, μασ δίνει τθ δυνατότθτα να ορίςουμε των αρικμό των LEDs, ςε ποια απόςταςθ από το κζντρο ξεκινάνε, τθν ανάλυςθ τθσ εικόνασ, αλλά και τα κατϊφλια από τα οποία κακορίηουμε πιο χρϊμα (κόκκινο, πράςινο, μπλε) πρζπει να ανάψει. Επίςθσ μασ δίνει τθ δυνατότθτα να φορτϊςουμε τθν εικόνα με drag and drop ςτο παράκυρο του προγράμματοσ, να διαλζξουμε αν κζλουμε πολφχρωμθ ι μονόχρωμθ προβολι και τζλοσ πατϊντασ το κουμπί «Do it», να δθμιουργιςουμε αυτόματα το αρχείο <filename>.h το οποίο μποροφμε να ςυμπεριλάβουμε ςτον κϊδικα του Arduino. 28

30 Εικόνα 3.9 POV Image Maker Εικόνα 3.10 Image Preview Ο κϊδικασ ςε Visual basic: 'Structure that handles colour Type trgb Red As Long Green As Long Blue As Long End Type 'Variable to colour Function V2RGB(V As Long) As trgb Dim T As trgb T.Red = V And &HFF: V = (V - T.Red) / 256 T.Green = (V And &HFF): V = (V - T.Green) / 256 T.Blue = (V And &HFF) V2RGB = T End Function 'General Variables Dim tcolor As trgb Dim xleds As Long Dim xledo As Long Dim xspc As Long Dim afilename 'Pixel s color 'number of LEDs 'number of ommited LEDs 'Image resolution 'Filename Converts values to ON or OFF Private Function mcolor(c As Long) As Long Dim tc As trgb Dim xc As trgb Dim cc As Long tc = V2RGB(c) cc = 0 If tc.red > tcolor.red Then xc.red = 255: cc = cc + 1 If tc.green > tcolor.green Then xc.green = 255: cc = cc + 1 If tc.blue > tcolor.blue Then xc.blue = 255: cc = cc + 1 If xmono.value = 1 Then If cc > 1 Then mcolor = &HFFFFFF Else mcolor = &H0 Else mcolor = RGB(xC.Red, xc.green, xc.blue) End If End Function 'The main function, is being executed when we press the Do it Button. Makes all the necessary changes and creates the header file. Private Sub CMD1_Click() Dim afreefn As Long Dim R As Single Dim xbit As Long Dim xbyte As Long 29

31 Dim FF As Long Dim RR As Long Dim dr As Single Dim c As Long 'Prepare the File afreefn = FreeFile() Open afilename For Output As #afreefn 'Prepare the image P2.Visible = True P2.ZOrder 0 P2.ScaleMode = P1.ScaleMode P2.Width = P1.Width P2.Height = P1.Height DoEvents P2.Cls DoEvents 'Scale refers to the real dimensions of the image If P1.ScaleWidth < P1.ScaleHeight Then R = (P1.ScaleWidth / 2) - 1 Else R = (P1.ScaleHeight / 2) - 1 End If 'Computation of image s center(χ0,y0) X0 = (P1.ScaleWidth / 2) Y0 = (P1.ScaleHeight / 2) dr = R / (2 * xleds) 'dr is the pixel step for the radian xbit = 128 'xbit points the MSB of the byte xbyte = 0 'xbyte : 8 pixels For FF = 0 To xspc - 1 'for each radian For RR = xledo To xleds 'for each pixel X = X0 + RR * 2 * dr * Cos(6.28 * FF / xspc) Y = Y0 + RR * 2 * dr * Sin(6.28 * FF / xspc) c = P1.Point(X, Y) xc = mcolor(c) 'converts the color for the leds 'set Arduino bit depending on color If xc = 0 Then xbyte = xbyte + xbit 'makes the relative bit HIGH If xbit = 1 Then Print #afreefn, "0X" & Right$("00" & Hex$(xByte), 2) & ","; xbit = 128 xbyte = 0 Else xbit = xbit / 2 End If ' Image Preview P2.Line (X - dr, Y - dr)-(x + dr, Y + dr), xc, BF Next RR Print #afreefn, "" Next FF Close afreefn End Sub 'Initialization routine Private Sub Form_Load() P1.ZOrder 0 LedOm_Change LedCount_Change vcol_change (0) vcol_change (1) vcol_change (2) vspc_change afilename = "atest.h" End Sub 'drag and drop operation for loading images 30

32 Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) N_Files = Data.Files.Count If N_Files >= 1 Then f_file = Data.Files(1) End If P1.Visible = True P2.Visible = False P1.ZOrder 0 'On Local Error Resume Next P1.Picture = LoadPicture(f_file) afilename = f_file Dim alen As Long alen = InStr(aFileName, ".") afilename = Left$(aFileName, alen) & ".H" End Sub 'Number of LEDs Private Sub LedCount_Change() xleds = LedCount.Value Ledc.Caption = "Led bar count = " & xleds If LedOm.Value > xleds Then LedOm.Value = xleds End If If LedOm.Max < xleds Then LedOm.Max = xleds End If End Sub 'Number of Ommited LEDs Private Sub LedOm_Change() xledo = LedOm.Value LedO.Caption = "ommited leds = " & xledo End Sub 'Color s thresholds Private Sub vcol_change(index As Integer) Select Case Index Case 0 tcolor.red = vcol(0).value icol(0).caption = tcolor.red & " (Red)" Case 1 tcolor.blue = vcol(1).value icol(1).caption = tcolor.blue & " (Blue)" Case 2 tcolor.green = vcol(2).value icol(2).caption = tcolor.green & " (Green)" End Select End Sub 'Image s resolution Private Sub vspc_change() xspc = vspc.value ispc.caption = xspc & " Steps/Cycle" End Sub 31

33 Ειδικζσ λειτουργίεσ του ATmega328 [12] Timer/Counter1: Αρχιτεκτονικι 16-bit (Επιτρζπει 16-bit PWM) Δφο ανεξάρτθτεσ Output Compare μονάδεσ Double Buffered Output Compare καταχωρθτζσ Μία Input Capture μονάδα Input Capture Noise Canceler Clear Timer on Compare Match (Auto Reload) Glitch-free, Phase Correct Pulse Width Modulator (PWM) Variable PWM Period Σφνκεςθ ςυχνοτιτων Εξωτερικόσ μετρθτισ γεγονότων Τζςςερισ ανεξάρτθτεσ υπορουτίνεσ εξυπθρζτθςθσ διακοπϊν Εικόνα 3.11 Timer/Counter1 Block diagram Οι παραπάνω λειτουργίεσ προςφζρουν τισ εξισ δυνατότθτεσ: Μεγάλθ χρονικι ακρίβεια εκτζλεςθσ του προγράμματοσ μζςα από τθν ακριβι διαχείριςθ γεγονότων, παραγωγι κυμματομορφϊν, κακϊσ και μζτρθςθ τθσ ςυχνότθτασ ενόσ ςιματοσ. Στο ςφςτθμά μασ χρθςιμοποιοφμε τον Timer/Counter1 ζτςι ϊςτε, μζςω τθσ μζτρθςθσ τθσ ςυχνότθτασ περιςτροφισ, να μποροφμε να εκτελζςουμε το πρόγραμμα με τθν χρονικι ακρίβεια που απαιτείται για τθ ςωςτι προβολι εικόνων και αλφαρικμθτικϊν. Ο Timer/Counter1 περιζχει τθ μονάδα Input Capture. Θ μονάδα αυτι ζχει τθ δυνατότθτα να ανιχνεφςει εξωτερικά γεγονότα και να υπολογίςει τθν χρονικι διάρκεια ςτθν οποία ςυμβαίνουν. Το εξωτερικό ςιμα που υποδθλϊνει ζνα γεγονόσ, εφαρμόηεται είτε ςτο ICP pin, είτε ςτθ μονάδα του αναλογικοφ ςυγκριτι του ATmega328. Στθ περίπτωςθ μασ, ζχουμε ςυνδζςει ςτο ICP pin του ATmega328 (Pin D8 του Arduino), τθν ζξοδο του Hall Effect Sensor. Ζτςι κάκε φορά που ο αιςκθτιρασ περνάει κοντά από το κετικό μαγνθτικό πεδίο (κάνοντασ μια πλιρθ περιςτροφι), ςτζλνει ζνα ςιμα HIGH ςτο ICP pin δθμιουργϊντασ ζνα γεγονόσ (μετάβαςθ από LOW ςε HIGH). Μόλισ ςυμβεί το γεγονόσ αυτό, θ τιμι του καταχωρθτι TCNT1 (counter) περνάει ςτον καταχωρθτι ICR1 (input capture register 1). H ςθμαία Input Capture Flag γίνεται άςςοσ ςτον ίδιο παλμό ρολογιοφ με αυτόν ςτον οποίο αντιγράφεται θ τιμι του TCNT1 ςτον ICR1. Θ ςθμαία αυτι όταν γίνεται άςςοσ δθμιουργεί τθν Input Capture εςωτερικι διακοπι. Κατά τθν εκτζλεςθ τθσ υπορουτίνασ εξυπθρζτθςθσ τθσ διακοπισ θ ςθμαία κακαρίηεται αυτόματα. Κακοριςτικισ ςθμαςίασ είναι ο μθδενιςμόσ του TCNT1 κατά τθν ζναρξθ τθσ υπορουτίνασ εξυπθρζτθςθσ τθσ διακοπισ, ϊςτε ςε κάκε διακοπι ςτο ICR1 να περνάει ο ακριβισ χρόνοσ περιςτροφισ. Στθ περίπτωςθ που θ ταχφτθτα περιςτροφισ είναι αργι και ζχουμε υπερχείλιςθ ςτον TCNT1, δθμιουργείται διακοπι υπερχείλιςθσ, όπου χρθςιμοποιοφμε ζνα δικό μασ counter για να μετράμε πόςεσ υπερχειλίςεισ ζχουν γίνει κατά τθ διάρκεια μιασ περιςτροφισ. Ο prescaler του ρολογιοφ ςυςτιματοσ, που διαλζξαμε, κακορίηει το ρολόι του Timer/Counter1 ςτα 250KHz, ζτςι ϊςτε με μία ςυχνότθτα περιςτροφισ ςτα 25Hz o TCNT1 να μθν υπερχειλίηει και ταυτόχρονα να υπολογίηουμε τθ ταχφτθτα αυτι με μεγάλθ ακρίβεια, ενϊ τζλοσ είναι ζνασ prescaler με τον οποίο μποροφμε να ςυγχρονίςουμε το ρολόι του Timer/Counter1 με αυτό του Timer/Counter2 όπωσ κα δοφμε και παρακάτω. Οι καταχωρθτζσ που χρθςιμοποιοφμε για να κακορίςουμε τθ λειτουργία Input Capture είναι οι εξισ: TCCR1A: Αρχικοποιείται με τθν τιμι μθδζν, κακϊσ κακορίηει τισ Compare Output και Waveform Generation λειτουργίεσ που δε χρθςιμοποιοφνται ςτθ ςυγκεκριμζνθ υλοποίθςθ. 32

34 TCCR1B: Αρχικοποιοφμε το ICNC1 (noise canceller) με μθδζν. Το ICES1 με άςςο, κακορίηοντασ ζτςι ςαν γεγονόσ τθ μετάβαςθ από LOW ςε HIGH. Αν αρχικοποιοφςαμε το ICES1 με μθδζν, θ διακοπι κα προκαλοφνταν ςτο πζραςμα από το δεφτερο μαγνιτθ. Στα WGM13 και WGM12 βάηουμε μθδζν, αφοφ αφοροφν το Waveform Generation, ενϊ κακορίηουμε το clock του Timer ςτα 16MHz/64 =250 ΚΘz με CS10=1, CS11=1, CS12=0. TCCR1C: Αρχικοποιείται με τθ τιμι μθδζν, κακϊσ ςυνδζεται και αυτό με το Compare Output mode. TIMSK1: Στο ICIE1 βάηουμε άςςο, ϊςτε να ενεργοποιιςουμε το Input Capture mode. Τζλοσ άςςο βάηουμε και ςτο TOIE1, ϊςτε να ενεργοποιιςουμε και τθ διακοπι υπερχείλιςθσ, ςε περίπτωςθ που θ περιςτροφι γίνεται αργά και υπερχειλίηει ο TCNT Timer/Counter2: Counter μονοφ καναλιοφ Clear Timer on Compare Match (Auto Reload) Glitch-free, Phase Correct Pulse Width Modulator (PWM) Σφνκεςθ ςυχνοτιτων 10-bit Clock Prescaler Τρεισ ανεξάρτθτεσ υπορουτίνεσ εξυπθρζτθςθσ διακοπϊν (TOV2, OCF2A and OCF2B) Επιτρζπει χρονιςμό από εξωτερικό κρφςταλλο 32 khz O Timer/Counter2 είναι ζνασ γενικοφ ςκοποφ, 8-bit counter, μονοφ καναλιοφ με δυνατότθτεσ για Compare Output Mode, PWM και Waveform Generation. Αξιοςθμείωτο είναι ότι ο Timer/Counter2 παρζχει τθ δυνατότθτα και για αςφγχρονθ λειτουργία. Στθν υλοποίθςθ μασ χρθςιμοποιοφμε τθ λειτουργία Clear Timer on Compare (CTC), ϊςτε να κακορίηουμε κάκε πότε κα ανάβουν τα LEDs ςε κάκε περιςτροφι. Στον καταχωρθτι OCR2A αποκθκεφουμε τθ τιμι ςφγκριςθσ του μετρθτι. Θ τιμι αυτι υπολογίηεται ςε κάκε περιςτροφι ςτθ ρουτίνα εξυπθρζτθςθσ τθσ διακοπισ του Timer/Counter1 ωσ εξισ: Διαιροφμε τθν τιμι του ICR1, δθλαδι το χρόνο περιςτροφισ, με τθν ανάλυςθ τθσ εικόνασ. Ο 8-bit ςυγκριτισ ςε κάκε παλμό του ρολογιοφ ςυγκρίνει τθ τρζχουςα τιμι του TCNT2 με αυτι του OCR2A. Aν ζχουμε ιςοτιμία ενεργοποιείται θ 33

35 ςθμαία OCF2A ςτον επόμενο κφκλο ρολογιοφ, θ οποία προκαλεί μία Compare Output διακοπι. Θ ςθμαία κακαρίηεται αυτομάτωσ μόλισ εκτελείται θ διακοπι. Με τθ CTC λειτουργία, κάκε φορά που ζχουμε ιςότθτα μεταξφ του TCNT2 και του OCR2A, o TCNT2 μθδενίηει. Κάκε φορά που εξυπθρετείται θ διακοπι κάνουμε τθ μεταβλθτι SetFlag=1, θ οποία ςτο κυρίωσ πρόγραμμα εκκινεί το φόρτωμα των Shift Registers με τισ τιμζσ του πίνακα πολικϊν ςυντεταγμζνων και ανάβει τα αντίςτοιχα LEDs. Για παράδειγμα αν υποκζςουμε ότι θ ανάλυςθ μασ είναι 360, τότε κάκε γράμμα του πίνακα προςπελαφνεται κάκε t = χρόνοσ περιςτροφισ/360. Άρα ζχουμε ανάλυςθ μίασ μοίρασ (δθλαδι ςε μία περιςτροφι μποροφμε να προβάλουμε 360 διαφορετικζσ γραμμζσ). Οι καταχωρθτζσ που χρθςιμοποιοφμε για να κακορίςουμε τθ λειτουργία Compare Match είναι οι εξισ: Clear Timer on TCCR2A: Κζτουμε το WGM21 με άςςο για να ενεργοποιιςουμε τθ λειτουργία CTC, όλα τα υπόλοιπα bits τα αφινουμε μθδζν. TCCR2B: Κζτουμε το CS22 με άςςο, ϊςτε να ζχουμε prescaler 64. Με αυτό το τρόπο λειτουργοφν και οι δφο timers ςτα 250ΚΘz, ϊςτε να μποροφμε να υπολογίηουμε ςωςτά ςε κάκε περιςτροφι το OCR2A. Πλα τα άλλα bits τα μθδενίηουμε. TIMSK2: Κζτουμε το OCIE2A με άςςο για να ενεργοποιιςουμε το Compare Output A mode. Μθδενίηουμε τα υπόλοιπα bits Serial Peripheral Interface Full-duplex, Three-wire Synchronous Data Transfer Master or Slave Operation LSB First or MSB First Data Transfer Seven Programmable Bit Rates End of Transmission Interrupt Flag Write Collision Flag Protection Wake-up from Idle Mode Double Speed (CK/2) Master SPI Mode Θ λειτουργία SPI επιτρζπει υψθλισ ταχφτθτασ μεταφορά δεδομζνων μεταξφ του ATmega328 και περιφερειακϊν ςυςκευϊν. Υπάρχουν δφο είδθ διαςυνδζςεων ςτθν SPI λειτουργία, ςτθ πρϊτθ θ CPU λειτουργεί ωσ Master, ενϊ ςτθ δεφτερθ ωσ Slave. Στο ςφςτθμά μασ χρθςιμοποιοφμε τθν CPU ωσ master και τουσ Shift Registers ωσ slave. Στθν SPI master λειτουργία ξεκινά ο κφκλοσ επικοινωνίασ όταν το slave select pin (SS) τθσ ςυςκευισ που ορίηουμε ωσ slave γίνεται LOW. Θ 34

36 CPU προετοιμάηει τα δεδομζνα που είναι προσ αποςτολι ςτουσ εςωτερικοφσ Shift Registers, ζπειτα δθμιουργεί τουσ παλμοφσ ρολογιοφ ςτθ γραμμι SCK για να αποςτείλει (ι και να λάβει ) τα δεδομζνα. Τα δεδομζνα ολιςκαίνουν πάντα από το master προσ το slave ςτθ γραμμι MOSI (master out slave in), ενϊ από το slave ςτο master από τθ γραμμι MISO (master in slave out). Επειδι όμωσ, μασ ενδιαφζρει μόνο θ αποςτολι δεδομζνων προσ τουσ Shift Registers, αφινουμε τθ γραμμι MISO ανοιχτι. Μετά τθν αποςτολι κάκε πακζτου δεδομζνων, ο master ςυγχρονίηεται με το slave, κάνοντασ τθ γραμμι SS HIGH. Θ διαδικαςία αυτι δε γίνεται αυτόματα. Ο ζλεγχοσ του SS γίνεται μόνο μζςα από το λογιςμικό μασ. Αφοφ κάνουμε LOW τθ γραμμι SS, γράφοντασ ζνα byte δεδομζνων ςτον SPI Data Register ξεκινάει αυτόματα ο SPI clock generator και με βάςθ αυτό το ρολόι τα 8 bits ολιςκαίνουν προσ το slave (Shift Registers). Μόλισ αποςταλεί ζνα byte ο SPI clock generator ςταματάει, κζτοντασ τθ ςθμαία Transmission Flag (SPI) με άςςο. Στθ περίπτωςθ μασ, που χρθςιμοποιοφμε 8 bytes, θ ςθμαία αυτι εξυπθρετεί τον ζλεγχο τθσ ολοκλιρωςθσ τθσ αποςτολισ ενόσ byte, πριν τθν αποςτολι του επόμενου. Θ λειτουργία SPI, όςον αφορά τθν αποςτολι δεδομζνων από τον master είναι single buffered. Αυτό ςθμαίνει πωσ δε μποροφμε να φορτϊςουμε νζα δεδομζνα πριν τθν αποςτολι ενόσ ολόκλθρου byte. Οι καταχωρθτζσ που χρθςιμοποιοφμε για να κακορίςουμε τθ λειτουργία master SPI είναι οι εξισ: SPCR: Κζτουμε το SPE με άςςο, ϊςτε να ενεργοποιιςουμε τθ λειτουργία SPI, κζτουμε το DORD με άςςο, ϊςτε θ αποςτολι να ξεκινάει από το LSB. Κζτουμε το MSTR με άςςο, ϊςτε ενεργοποιιςουμε το master SPI mode. Τα CPOL και CPHA τα αφινουμε μθδζν, ϊςτε τα δεδομζνα να ολιςκαίνουν ςτθν ανιοφςα παρυφι του ρολογιοφ και να γίνονται Latched ςτθν κατιοφςα. Τζλοσ, κζτουμε ςτα SPR1 και SPR0 μθδζν, ϊςτε να επιτφχουμε ςυχνότθτα αποςτολισ f osc /4, δθλαδι 4 MHz. SPSR: Από το register αυτόν διαβάηουμε το SPIF, για να ελζγξουμε τθν επιτυχθμζνθ αποςτολι ενόσ byte. SPDR: Σε αυτόν το καταχωρθτι γράφουμε το προσ αποςτολι byte USART και αςφρματη επικοινωνία Full Duplex Operation (Independent Serial Receive and Transmit Registers) Asynchronous or Synchronous Operation Master or Slave Clocked Synchronous Operation High Resolution Baud Rate Generator 35

37 Supports Serial Frames with 5, 6, 7, 8, or 9 Data Bits and 1 or 2 Stop Bits Odd or Even Parity Generation and Parity Check Supported by Hardware Data Over-Run Detection Framing Error Detection Noise Filtering Includes False Start Bit Detection and Digital Low Pass Filter Three Separate Interrupts on TX Complete, TX Data Register Empty and RX Complete Multi-processor Communication Mode Double Speed Asynchronous Communication Mode Ππωσ προείπαμε, το Arduino pro mini διακζτει 2KB μνιμθ RAM. Το μζγεκοσ αυτό δεν αρκεί για τθν αποκικευςθ εικόνων. Οι εικόνεσ αποκθκεφονται κατά τθ διάρκεια φόρτωςθσ του προγράμματοσ ςτθν Flash memory. Αυτό περιορίηει τθ ςειριακι επικοινωνία με τον υπολογιςτι μόνο ςτο πζραςμα του προγράμματοσ ςτο Arduino και το κακοριςμό τθσ εικόνασ που προβάλλουμε. Οι απαιτιςεισ ςε ταχφτθτα για αυτζσ τισ λειτουργίεσ δεν είναι μεγάλεσ, ωσ αποτζλεςμα για τθν επικοινωνία με το PC χρθςιμοποιοφμε τισ βιβλιοκικεσ του Arduino IDE. H βιβλιοκικθ Serial του Arduino υποςτθρίηει τθ ςειριακι επικοινωνία μζςω των pin 0 και 1, τα οποία ςυνδζονται και με το PC, μζςα από τθ USB ςφνδεςθ, αξιοποιϊντασ τθ USART. Tα Xbee modules ςυνδζονται με τα αντίςτοιχα pins του FT232 chip και του Arduino, δθμιουργϊντασ μια εικονικι ενςφρματθ ςφνδεςθ. Το Baud rate που χρθςιμοποιοφμε είναι bps, κάνοντασ ζνα trade off μεταξφ ταχφτθτασ και απόςταςθσ. Οι ςυναρτιςεισ που χρθςιμοποιοφμε είναι οι εξισ: Serial.begin(57600): Ενεργοποιοφμε τθ ςειριακι επικοινωνία κατά τθ διάρκεια εκτζλεςθσ του προγράμματοσ ςτα bps. Serial.available(): Αν θ επιςτρεφόμενθ τιμι είναι κετικι ςθμαίνει πωσ υπάρχουν δεδομζνα προσ μετάδοςθ. Serial.read(): Το Arduino διαβάηει τα δεδομζνα που αποςτζλλονται από το PC. Serial.print(): Το Arduino αποςτζλλει δεδομζνα προσ το PC. Εδϊ αξίηει να αναφερκεί πωσ το Arduino IDE περιζχει ενςωματωμζνο serial monitor, για τθν αποςτολι ι τθν ανάγνωςθ των δεδομζνων προσ και από το ςφςτθμα O κϊδικασ για το Arduino Display_Image #include <stdio.h> #include <avr/pgmspace.h> #include <avr/io.h> #include "Image1.h" //image created from POV Image Maker // Define Shift Register Pins for SPI Mode // #define SHIFT_REGISTER DDRB #define SHIFT_PORT PORTB #define DATA _BV(3) //MOSI (SI) #define LATCH _BV(2) //SS (RCK) #define CLOCK _BV(5) //SCK (SCK) // Define Shift Register Pins for SPI Mode // #define icppin 8 #define resolution 320 //Input Capture Pin //Image Display Resolution // Variables // volatile int SetFlag,StartPoint; volatile unsigned int Overflows; //counter in case of slow speed 36

38 volatile unsigned int CheckPoint; volatile int SetPicture; volatile int Picture; volatile int frames; volatile int Repeat; volatile int Flag; // Variables // // Overflow interrupt vector // ISR(TIMER1_OVF_vect){ Overflows++; // Overflow interrupt vector // // ICR interrupt vector // ISR(TIMER1_CAPT_vect){ TCNT1 = 0; Overflows=0; CheckPoint= ICR1; StartPoint=0; Flag = 1/(CheckPoint%resolution); if(repeat==flag){ OCR2A = (CheckPoint/resolution)+1; Repeat=0; else{ OCR2A = (CheckPoint/resolution); Repeat++; if (Serial.available() > 0) { int input=serial.read(); if ((input==49) (input==50) (input==51) (input==52)){ SetPicture = input; // ICR interrupt vector // // Timer2 CTC interrupt vector // ISR(TIMER2_COMPA_vect){ SetFlag=1; // Timer2 CTC interrupt vector // // Setup // void setup(){ Serial.begin(57600); pinmode(icppin, INPUT); //Setup I/O SHIFT_REGISTER = (DATA LATCH CLOCK); SHIFT_PORT &= ~(DATA LATCH CLOCK); //Setup SPI SPCR = (1<<SPE) (1<<MSTR) (1<<DORD); //Start SPI as Master Overflows=0; SetFlag=0; frames=0; SetPicture=49; //Timer1 setup to input capture TCCR1A = 0 ; //disable interrupts TCCR1B = 0 ; //disable interrupts 37

39 TCCR1B = (1<<CS10); // Set CS10 and CS11 bits for 64 prescaler TCCR1B = (1<<CS11); // Set CS10 and CS11 bits for 64 prescaler TCCR1B = (1<<ICES1); // enable input capture on rising edge TIMSK1 = (1<<ICIE1); // enable input capture interrupt for timer 1 TIMSK1 = (1<<TOIE1); // enable overflow interrupt //Timer2 setup on CTC mode TCCR2A = 0 ; //disable interrupts TCCR2B = 0 ; //disable interrupts TCCR2A = (1<<WGM21); //turn on CTC mode TCCR2B = (1<<CS22); //CS22 bits for 64 prescaler TIMSK2 = (1<<OCIE2A); // enable timer2 compare interrupts Serial.println("Setup complete"); // Loop // void loop(){ while (SetFlag==0){ SHIFT_PORT &= ~LATCH; for(int j=7; j>=0; j--){ if(setpicture==49){ SPDR = ~(pgm_read_byte(&imagea[startpoint][j])); if(setpicture==50){ SPDR = (pgm_read_byte(&imagea[startpoint][j])); if(setpicture==51){ SPDR = (pgm_read_byte(&imageb[startpoint][j])); if(setpicture==52){ SPDR = ~(pgm_read_byte(&imageb[startpoint][j])); while(!(spsr & (1<<SPIF))); SHIFT_PORT = LATCH; SHIFT_PORT &= ~LATCH; StartPoint++; SetFlag=0; //Start SPI // Loop // Το αρχείο που περιζχει τον πίνακα ςυντεταγμζνων τθσ εικόνασ: #ifndef Image1_H #define Image1_H #include <Arduino.h> #include <avr/pgmspace.h> #define resolution 320 PROGMEM prog_uint8_t imagea[resolution][8] ={ 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,... 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF; #endif 38

40 Display_String #include <stdio.h> #include <avr/io.h> // Define Shift Register Pins for SPI Mode // #define SHIFT_REGISTER DDRB #define SHIFT_PORT PORTB #define DATA _BV(3) //MOSI (SI) #define LATCH _BV(2) //SS (RCK) #define CLOCK _BV(5) //SCK (SCK) // Define Shift Register Pins for SPI Mode // #define icppin 8 #define Width 8 //Input Capture Pin //Letter Width // Variables // volatile int SetFlag; //Control iterations volatile double Value; //milliseconds per rotation volatile unsigned int Overflows; //counter in case of slow speed volatile uint16_t num1,num2,num3; //Variables for letters volatile int SetPicture; //Control Picture over Serial Monitor // Variables // // Font Array // uint16_t font[95][8] = { {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // {0x0000,0x0000,0x7e02,0x7fe7,0x7e02,0x0000,0x0000,0x0000, //! {0x0000,0xc800,0xf000,0x0000,0xc800,0xf000,0x0000,0x0000, // " {0x0020,0x083e,0x0fe0,0x7820,0x083e,0x0fe0,0x7820,0x0800, // # {0x1c38,0x2224,0x4104,0xffff,0x4104,0x2888,0x1870,0x0000, // $ {0x3c03,0x421c,0x4260,0x3dbc,0x0642,0x3842,0xc03c,0x0000, // % {0x0038,0x3cc4,0x4304,0x44e4,0x3918,0x01e8,0x0104,0x0000, // & {0xc800,0xc800,0xf000,0x0000,0x0000,0x0000,0x0000,0x0000, // ' {0x0000,0x0000,0x0000,0x0ff0,0x300c,0x4002,0x8001,0x0000, // ( {0x8001,0x4002,0x300c,0x0ff0,0x0000,0x0000,0x0000,0x0000, // ) {0x06c0,0x0280,0x0920,0x1ff0,0x0920,0x0280,0x06c0,0x0000, // * {0x0100,0x0100,0x0100,0x1ff0,0x0100,0x0100,0x0100,0x0000, // + {0x0019,0x0019,0x001e,0x0000,0x0000,0x0000,0x0000,0x0000, //, {0x0100,0x0100,0x0100,0x0100,0x0100,0x0100,0x0100,0x0000, // - {0x000c,0x001e,0x000c,0x0000,0x0000,0x0000,0x0000,0x0000, //. {0x0003,0x000c,0x0030,0x01c0,0x0e00,0x3000,0xc000,0x0000, // / {0x0000,0x0ff0,0x300c,0x4002,0x4002,0x300c,0x0ff0,0x0000, // 0 {0x0000,0x2004,0x2004,0x7ffc,0x0004,0x0004,0x0000,0x0000, // 1 {0x0000,0x180c,0x2834,0x4044,0x4184,0x2204,0x1c1c,0x0000, // 2 {0x1830,0x2008,0x4104,0x4104,0x4104,0x2288,0x1c70,0x0000, // 3 {0x01c0,0x0640,0x1844,0x2044,0x7ffc,0x0044,0x0040,0x0000, // 4 {0x7f30,0x4228,0x4404,0x4404,0x4404,0x4208,0x01f0,0x0000, // 5 {0x0ff0,0x3108,0x4204,0x4204,0x4204,0x5108,0x30f0,0x0000, // 6 {0x7000,0x4000,0x4000,0x401e,0x41e0,0x4e00,0x7000,0x0000, // 7 {0x1c70,0x2288,0x4104,0x4104,0x4104,0x2288,0x1c70,0x0000, // 8 {0x1e10,0x2108,0x4084,0x4084,0x4084,0x2108,0x1ff0,0x0000, // 9 {0x0000,0x0000,0x060c,0x060c,0x060c,0x0000,0x0000,0x0000, // : {0x0000,0x0000,0x0619,0x061f,0x061c,0x0000,0x0000,0x0000, // ; {0x0000,0x0000,0x0180,0x0660,0x1818,0x6006,0x8001,0x0000, // < {0x0440,0x0440,0x0440,0x0440,0x0440,0x0440,0x0440,0x0000, // = {0x8001,0x6006,0x1818,0x0660,0x0180,0x0000,0x0000,0x0000, // > {0x1800,0x2800,0x4002,0x4067,0x4082,0x2300,0x1c00,0x0000, //? {0x1ff0,0x2008,0x47c4,0x4824,0x4824,0x4444,0x3fe8,0x0000, {0x003c,0x07c4,0x3840,0x4040,0x3840,0x07c4,0x003c,0x0000, // A 39

41 {0x4004,0x7ffc,0x4104,0x4104,0x4104,0x2284,0x1c78,0x0000, // B {0x0fe0,0x3018,0x4004,0x4004,0x4004,0x2004,0x7038,0x0000, // C {0x4004,0x7ffc,0x4004,0x4004,0x4004,0x3018,0x0fe0,0x0000, // D {0x4004,0x7ffc,0x4104,0x4104,0x47c4,0x4004,0x703c,0x0000, // E {0x4004,0x7ffc,0x4104,0x4104,0x47c0,0x4000,0x7000,0x0000, // F {0x07e0,0x1818,0x2008,0x4004,0x4104,0x2108,0x71fc,0x0100, // G {0x4004,0x7ffc,0x4204,0x0200,0x0200,0x4204,0x7ffc,0x4004, // H {0x4004,0x4004,0x4004,0x7ffc,0x4004,0x4004,0x4004,0x0000, // I {0x0070,0x0008,0x0004,0x4004,0x4004,0x4008,0x7ff0,0x4000, // J {0x4004,0x7ffc,0x4204,0x0300,0x0cc0,0x7030,0x400c,0x0004, // K {0x4004,0x7ffc,0x4004,0x4004,0x0004,0x0004,0x003c,0x0000, // L {0x7ffc,0x2004,0x1c00,0x0380,0x1c00,0x2004,0x7ffc,0x0000, // M {0x7ffc,0x2004,0x1c00,0x0380,0x0070,0x4008,0x7ffc,0x4000, // N {0x1ff0,0x2008,0x4004,0x4004,0x4004,0x2008,0x1ff0,0x0000, // O {0x4004,0x7ffc,0x4084,0x4084,0x4080,0x2100,0x1e00,0x0000, // P {0x0fe0,0x3018,0x4024,0x4024,0x4026,0x3019,0x0fe1,0x0000, // Q {0x4004,0x7ffc,0x4104,0x4100,0x4180,0x2270,0x1c0c,0x0004, // R {0x1c7c,0x2208,0x4204,0x4104,0x2104,0x7088,0x0070,0x0000, // S {0x7000,0x4004,0x4004,0x7ffc,0x4004,0x4004,0x7000,0x0000, // T {0x4000,0x7ff8,0x4004,0x0004,0x0004,0x4004,0x7ff8,0x4000, // U {0x7c00,0x43c0,0x0030,0x000c,0x0030,0x43c0,0x7c00,0x0000, // V {0x7fe0,0x401c,0x00e0,0x0700,0x00e0,0x401c,0x7fe0,0x0000, // W {0x400c,0x7034,0x4dc0,0x0200,0x4dc0,0x7034,0x400c,0x0000, // X {0x6000,0x5c04,0x0304,0x00fc,0x0304,0x5c04,0x6000,0x0000, // Y {0x700c,0x4034,0x40c4,0x4704,0x5804,0x6004,0x403c,0x0000, // Z {0x0000,0x0000,0x0000,0xffff,0x8001,0x8001,0x8001,0x0000, // [ {0x6000,0x1800,0x0600,0x0180,0x0060,0x0018,0x0006,0x0000, // "\" {0x8001,0x8001,0x8001,0xffff,0x0000,0x0000,0x0000,0x0000, // ] {0x1000,0x2000,0x4000,0x8000,0x4000,0x2000,0x1000,0x0000, // ^ {0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0000, // _ {0x0000,0x0000,0xf000,0xc800,0x0000,0x0000,0x0000,0x0000, // ` {0x0038,0x0244,0x0484,0x0484,0x0484,0x0488,0x03fc,0x0004, // a {0x4000,0x7ffc,0x0404,0x0404,0x0404,0x0208,0x01f0,0x0000, // b {0x01f0,0x0208,0x0404,0x0404,0x0404,0x0204,0x0718,0x0000, // c {0x01f0,0x0208,0x0404,0x0404,0x0404,0x7ffc,0x4004,0x0000, // d {0x01f0,0x0288,0x0484,0x0484,0x0484,0x0284,0x0198,0x0000, // e {0x0400,0x0404,0x0404,0x3ffc,0x4404,0x4404,0x4400,0x2000, // f {0x000e,0x03b1,0x0451,0x0451,0x0451,0x0389,0x0406,0x0400, // g {0x4004,0x7ffc,0x0204,0x0400,0x0400,0x0404,0x03fc,0x0004, // h {0x0004,0x0404,0x0404,0xc404,0xc7fc,0x0004,0x0004,0x0004, // i {0x000c,0x0002,0x0401,0x0401,0x0401,0xc402,0xc7fc,0x0000, // j {0x4004,0x7ffc,0x0044,0x0080,0x0180,0x0260,0x041c,0x0004, // k {0x0004,0x4004,0x4004,0x4004,0x7ffc,0x0004,0x0004,0x0004, // l {0x03fc,0x0404,0x0400,0x03fc,0x0404,0x0400,0x03fc,0x0004, // m {0x0404,0x07fc,0x0204,0x0400,0x0400,0x0404,0x03fc,0x0004, // n {0x01f0,0x0208,0x0404,0x0404,0x0404,0x0208,0x01f0,0x0000, // o {0x0401,0x07ff,0x0409,0x0409,0x0408,0x0210,0x01e0,0x0000, // p {0x01e0,0x0210,0x0408,0x0409,0x0409,0x07ff,0x0401,0x0000, // q {0x0404,0x0404,0x07fc,0x0204,0x0404,0x0404,0x0300,0x0000, // r {0x001c,0x0388,0x0444,0x0444,0x0444,0x0244,0x0738,0x0000, // s {0x0400,0x0400,0x3ff8,0x0404,0x0404,0x0404,0x0018,0x0000, // t {0x0400,0x07f8,0x0004,0x0004,0x0004,0x0408,0x07f8,0x0004, // u {0x0700,0x04e0,0x0018,0x0004,0x0018,0x04e0,0x0700,0x0000, // v {0x07e0,0x001c,0x0060,0x0780,0x0060,0x001c,0x07e0,0x0000, // w {0x0404,0x060c,0x05b4,0x0040,0x05b4,0x060c,0x0404,0x0000, // x {0x0406,0x0601,0x0582,0x004c,0x0030,0x04c0,0x0700,0x0400, // y {0x0004,0x060c,0x0414,0x0464,0x0584,0x0604,0x041c,0x0000, // z {0x0000,0x0000,0x0100,0x0280,0x7c7e,0x8001,0x8001,0x0000, // { {0x0000,0x0000,0x0000,0xffff,0x0000,0x0000,0x0000,0x0000, // {0x8001,0x8001,0x7c7e,0x0280,0x0100,0x0000,0x0000,0x0000, // {0x4000,0x8000,0x8000,0x4000,0x2000,0x2000,0x4000,0x0000, // ~ ; // Font Array // 40

42 // Overflow interrupt vector // ISR(TIMER1_OVF_vect){ Overflows++; // Overflow interrupt vector // // ICR interrupt vector // ISR(TIMER1_CAPT_vect){ TCNT1 = 0; Value = (Overflows*262.14) + (ICR1/250); Overflows=0; SetFlag=1; static int frames=0; if (frames<50){ SetPicture=49; else if(frames<100){ SetPicture=50; else if(frames<150){ SetPicture=51; else if(frames<200){ SetPicture=52; frames++; if(frames==250){ frames=0; // ICR interrupt vector // // Setup // void setup(){ Serial.begin(57600); pinmode(icppin, INPUT); //Setup I/O SHIFT_REGISTER =(DATA LATCH CLOCK);//Set control pins as outputs SHIFT_PORT &= ~(DATA LATCH CLOCK); //Set control pins low //Setup SPI SPCR = (1<<SPE) (1<<MSTR) (1<<DORD); //Start SPI as Master Overflows=0; SetFlag=0; //Timer1 setup to input capture TCCR1A = 0 ; //disable interrupts TCCR1B = 0 ; //disable interrupts TCCR1B = (1<<CS10); // Set CS10 and CS11 bits for 64 prescaler TCCR1B = (1<<CS11); // Set CS10 and CS11 bits for 64 prescaler TCCR1B = (1<<ICES1); // enable input capture on rising edge TIMSK1 = (1<<ICIE1); // enable input capture interrupt for timer 1 TIMSK1 = (1<<TOIE1); // enable overflow interrupt Serial.println("Setup complete"); // Setup // // Loop // void loop(){ while (SetFlag==0){ char buffer1[50]; char buffer2[50]; 41

43 char buffer3[50]; if(setpicture==49){ sprintf(buffer1," APEL LABORATORY "); sprintf(buffer2," VagAnt 2012 "); sprintf(buffer3," Diploma Thesis "); if(setpicture==50){ sprintf(buffer1," Prodromakis "); sprintf(buffer2," Antonis "); sprintf(buffer3," Diploma Thesis "); if(setpicture==51){ sprintf(buffer1," Kaloudiotis "); sprintf(buffer2," Vaggelis "); sprintf(buffer3," Diploma Thesis "); if(setpicture==52){ sprintf(buffer1," Efstathiou "); sprintf(buffer2," Kostas "); sprintf(buffer3," Proffesor: "); display1(buffer1,buffer2,buffer3); SetFlag=0; // Loop // // Display Function // void display1(char POVstring1[],char POVstring2[],char POVstring3[]){ for (int i=(strlen(povstring1)-1); i>=0; i--)//loop for each letter { for (int j=width-1; j>=0; j--) //loop for each letter's width { num1= ((font[(int)povstring1[i]-32][j])); num2= ((font[(int)povstring2[i]-32][j])); num3= ((font[(int)povstring3[i]-32][j])); writeregisters(num1,num2,num3); delaymicroseconds(100); num1=0x00; num2=0x00; num3=0x00; writeregisters(num1,num2,num3); delaymicroseconds(80); // Display Function // // Write to Shift Registers // void writeregisters(uint16_t image1,uint16_t image2,uint16_t image3){ SHIFT_PORT &= ~LATCH; //Start SPI SPDR = ~image1; while(!(spsr & (1<<SPIF))); SPDR = ~(image1>>8); while(!(spsr & (1<<SPIF))); SPDR = ~image2; while(!(spsr & (1<<SPIF))); SPDR = ~(image2>>8); while(!(spsr & (1<<SPIF))); SPDR = ~image3; while(!(spsr & (1<<SPIF))); SPDR = ~(image3>>8); 42

44 while(!(spsr & (1<<SPIF))); for(int i=0; i<2; i++){ SPDR = 0xFF; while(!(spsr & (1<<SPIF))); SHIFT_PORT = LATCH; SHIFT_PORT &= ~LATCH; // Write to Shift Registers // 3.6. Αποτελζςματα Στισ παρακάτω τρεισ εικόνεσ, βλζπουμε τθ καταςκευι και τα αποτελζςματα προβολισ μιασ εικόνασ και ενόσ αλφαρικμθτικοφ. Εικόνα 3.12 Wireless POV Display Εικόνα 3.13 Display String Εικόνα 3.14 Display Image 43

45 3.7. Προβλήματα και περαιτζρω βελτιϊςεισ για το μζλλον Ζνα από τα ςθμαντικότερα προβλιματα του Wireless POV Display, είναι θ ςτακερότθτα τθσ ταχφτθτασ του DC Motor. Επειδι θ προβολι τθσ εικόνασ ςε κάκε περιςτροφι βαςίηεται ςτον υπολογιςμό τθσ ταχφτθτασ τθσ προθγοφμενθσ, οποιαδιποτε απότομθ μεταβολι τθσ ταχφτθτασ περιςτροφισ του DC Motor επθρεάηει τθ ςτακερότθτα τθσ προβολισ τθσ εικόνασ. Μια αντιμετϊπιςθ αυτοφ το προβλιματοσ είναι θ χριςθ DC Motor με ενςωματωμζνο encoder για ςτακερι ταχφτθτα περιςτροφισ. Επίςθσ για μεγαλφτερθ ευκρίνεια, κα μποροφςε να χρθςιμοποιθκεί ζνασ ακόμα πιο γριγοροσ DC Motor (π.χ. 4500rpm), μια τζτοια ταχφτθτα όμωσ, κα ιταν απαγορευτικι για να μπορεί το Arduino με λειτουργία ςτα 16MHz να προβάλει μια εικόνα με τθν απαιτοφμενθ ανάλυςθ (π.χ. 320 προβολζσ ςε μία περιςτροφι). Ζνα άλλο πρόβλθμα που ςυναντιςαμε είναι θ περιοριςμζνθ μνιμθ SRAM του Arduino, θ οποία ζχει ωσ αποτζλεςμα τθν αδυναμία φόρτωςθσ πολλϊν εικόνων ςτθ μνιμθ του. Θ λφςθ ςε αυτό το μειονζκτθμα είναι θ χριςθ εξωτερικισ μνιμθσ SRAM. Αυτό κα ζδινε τθ δυνατότθτα, ακόμα και προβολισ κινοφμενων εικόνων (animation), αφοφ αφενόσ κα υπιρχε ο απαιτοφμενοσ χρόνοσ για τθν αποκικευςθ πολλϊν frames μιασ εικόνασ, αφετζρου λόγω τθσ χριςθσ SRAM μνιμθσ για αποκικευςθ, και όχι Flash όπωσ ςτθ ςυγκεκριμζνθ ζκδοςθ, κα είχαμε τθ δυνατότθτα να αλλάηουμε αςφρματα και ςε πραγματικό χρόνο τα ςτοιχεία του πίνακα τθσ κάκε εικόνασ. Τζλοσ θ επόμενθ ζκδοςθ κα είναι βαςιςμζνθ ςε RGB smd LEDs, με αποτζλεςμα να ζχουμε τθ δυνατότθτα για προβολι εικόνων με οκτϊ ι και παραπάνω διαφορετικζσ αποχρϊςεισ. Εδϊ αξίηει να αναφζρουμε, ότι μια λφςθ ςε πολλζσ αδυναμίεσ του Wireless POV Display, κα ιταν θ χριςθ ενόσ μικροχπολογιςτι με μεγαλφτερεσ δυνατότθτεσ. Ζνα τζτοιο ςφςτθμα, το οποίο είναι ςυμβατό με το Arduino και ςε επίπεδο καταςκευισ, αλλά και ςε επίπεδο προγραμματιςμοφ είναι το Maple από τθ Leaf Labs [24]. 44

46 45

47 4. φςτημα Πρόβλεψησ και Ανακαταςκευήσ ήματοσ 4.1. Ειςαγωγή Το πρόβλθμα το οποίο πραγματεφεται το ςυγκεκριμζνο ςφςτθμα είναι θ ςυγχρονιςμζνθ διαςφνδεςθ δφο διαφορετικϊν δικτφων όπωσ επί παραδείγματι το δίκτυο τθσ ΔΕΘ και το δίκτυο μιασ ανανεϊςιμθσ πθγισ ενζργειασ (φωτοβολταϊκά ςυςτιματα, αιολικά ςυςτιματα κ.ά.). Θ βαςικι ιδζα που υλοποιείται είναι θ πολφ γριγορθ ανακαταςκευι ενόσ ςιματοσ μζςω τθσ πρόβλεψισ του. Θ ςυγκεκριμζνθ ςφλλθψθ αποδίδεται ςτον επίκουρο κακθγθτι κ. Κϊςτα Ευςτακίου και ζχει μελετθκεί επίςθσ ςτθ διπλωματικι εργαςία του Σ. Κατςιδιμα με τίτλο «MODEM Γενικοφ Σκοποφ» [25] κακϊσ επίςθσ και ςτο paper με τίτλο «Implementation of a Bandwidth-Efficient M-FSK Demodulator for Powerline Communications» [26], αλλά είναι θ πρϊτθ φορά που υλοποιείται ςε ζνα αυτόνομο μικροχπολογιςτικό ςφςτθμα και ςυγκεκριμζνα ςτο Arduino τθσ περιοριςμζνθσ (2 ΚΒ) SRAM και των 16 MHz clock. Ζτςι, χωρίσ να περιμζνουμε να δειγματολθπτίςουμε (ςε μερικζσ περιπτϊςεισ ) αρκετζσ περιόδουσ ενόσ θμιτόνου, όπωσ γίνεται ςε ζνα PLL (Phase Locked Loop), δειγματολθπτοφμε αμζςωσ τρεισ τιμζσ του θμιτόνου, οι οποίεσ χρονικά απζχουν t=1/fs, όπου Fs θ ςυχνότθτα δειγματολθψίασ μασ και με τριγωνομετρικζσ εξιςϊςεισ, οι οποίεσ περιγράφονται παρακάτω, μποροφμε να ζχουμε πλθροφορίεσ για τθ ςυχνότθτα, τθ φάςθ και το πλάτοσ του θμιτόνου που κζλουμε να καταςκευάςουμε. Ζχουμε δθλαδι όλεσ τισ απαραίτθτεσ πλθροφορίεσ για να ανακαταςκευάςουμε το θμίτονο που ζχουμε ςαν είςοδο. Στθν τεχνολογία των PLL με τον πολλαπλαςιαςμό και τθ διαίρεςθ των υπό ςφνκεςθ ςθμάτων δθμιουργείται και θ άχρθςτθ πλθροφορία τθσ πρόςκεςθσ των φάςεων και χρειάηεται ζνα κατωδιαβατό φίλτρο (LPF) με αρκετά χαμθλι ςυχνότθτα αποκοπισ ϊςτε να ζχουμε μόνο τθν επικυμθτι πλθροφορία. Αυτό ζχει ςαν αποτζλεςμα τθν ςχετικά αργι απόκριςθ του PLL. Με τθ διαδικαςία τθν οποία υλοποιοφμε με το ςφςτθμα μασ κάτι τζτοιο αποφεφγεται, κακϊσ ακολουκοφμε μια εντελϊσ Εικόνα 5.1 Δειγματοληψία ημιτόνου διαφορετικι λογικι Γενική λειτουργία του ςυςτήματοσ Εικόνα 5.2 Σο block diagram του ςυςτήματοσ Θ διαδικαςία που ακολουκοφμε φαίνεται ςτο παραπάνω block diagram. Από μια γεννιτρια ςιματοσ παράγουμε το θμίτονο που κζλουμε να ανακαταςκευάςουμε. Μετά μζςω μιασ ςυνάρτθςθσ -που περιγράφεται παρακάτω- βγάηουμε τθν πλθροφορία για το πλάτοσ, τθ ςυχνότθτα και τθ φάςθ του θμιτόνου που κζλουμε να καταςκευάςουμε. Θ φάςθ προςτίκεται με 46

48 ζνα feedback από τθν ζξοδο του ςυςτιματοσ και περνάει από ζνα LPF και τζλοσ βγαίνει ςτθν ζξοδο αφοφ περάςει από ζνα VCO. H ςυχνότθτα επίςθσ περνά από ζνα LPF όταν διαπιςτϊνουμε ότι υπάρχει μεγάλθ διαφορά ςυχνότθτασ μεταξφ τθσ πραγματικισ και αυτισ που υπολογίηουμε και τελικά βγαίνει ςτθν ζξοδο αφοφ επίςθσ περάςει από το VCO. Το ςφςτθμα μασ ζχει ωσ πυρινα λειτουργίασ του το Arduino Uno (Αtmega328, 5V, 16MHz), μζςω του οποίου διενεργοφμε τισ μακθματικζσ πράξεισ αλλά και κακορίηουμε το χρονιςμό του ςυςτιματοσ. Σε μία αναλογικι είςοδο και ςυγκεκριμζνα ςτθν αναλογικι είςοδο που αντιςτοιχεί ςτο A0 pin του Arduino, βάηουμε ςαν είςοδο το αρχικό μασ ςιμα, το οποίο κζλουμε να ανακαταςκευάςουμε. Δειγματολθπτοφμε αυτό το ςιμα με ςυχνότθτα 400 Hz δθμιουργϊντασ ζνα buffer ςτον οποίο αποκθκεφουμε κάκε φορά τισ τρεισ τελευταίεσ τιμζσ. Αυτό γίνεται ςτθν αρχι τθσ κφριασ ςυνάρτθςθσ του προγράμματοσ μασ και μζςω τθσ διετζλεςθσ διαφόρων μακθματικϊν πράξεων, υπολογίηουμε δυναμικοφσ μζςουσ όρουσ των πλθροφοριϊν (ςυχνότθτα, φάςθ, πλάτοσ) καταχωρϊντασ τουσ ςε αντίςτοιχεσ μεταβλθτζσ. Στθν ζξοδο του ςυςτιματοσ και με τθν κατάλλθλθ ρφκμιςθ των counters του ATmega328 βγαίνει πλζον, ςε ζνα ψθφιακό I/O pin, ζνα μεταβλθτοφ duty cycle PWM ςιμα, το οποίο αφοφ οδθγιςουμε μζςα από ζνα RC φίλτρο παίρνουμε τελικά το επικυμθτό ανακαταςκευαςμζνο θμίτονο. Στθν περίπτωςι μασ χρθςιμοποιοφμε 2 θσ τάξθσ RC φίλτρο για να αποφφγουμε τον περιττό κόρυβο Θεωρητική προςζγγιςη του ςυςτήματοσ Μαθηματική ανάλυςη του ςυςτήματοσ Χρθςιμοποιϊντασ τισ βαςικζσ τριγωνομετρικζσ εξιςϊςεισ που φαίνονται παρακάτω προκφπτουν οι απαραίτθτεσ πλθροφορίεσ για τθν καταςκευι του θμιτόνου. [ ( )] ( ) [ ] ( ) [ ( )] ( ) όπου και Fs Αναπτφςςοντασ τθν (1) και (3) χρθςιμοποιϊντασ τισ γνωςτζσ ταυτότθτεσ ( ) και ( ) ζχουμε : ( ( ) ( ) ( ) ( )) ( ) ( ( ) ( ) ( ) ( )) ( ) Ρροςκζτοντασ κατά μζλθ τισ (4),(5) ζχουμε : ( ( ) ( )) ( ) ( ) ( ) Λφνοντασ ωσ προσ τθ ςυχνότθτα F: ( ) Αφαιρϊντασ επίςθσ τθν (4) από τθν (5) προκφπτει : ( ) ( ( ) ( )) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 47

49 ( ) ( ) ( ) και τελικά θ φάςθ κα είναι ( ) ( ) Τζλοσ εφκολα ςυνάγεται από τθ (2) ότι το πλάτοσ υπολογίηεται ωσ : To PWM (Pulse Width Modulation ) Το Pulse-width modulation (PWM), ι pulseduration modulation (PDM), είναι μια πολφ κοινι τεχνικι για τον ζλεγχο ιςχφοσ ςε αδρανειακζσ θλεκτρικζσ ςυςκευζσ, κάτι το οποίο υλοποιείται από θλεκτρονικοφσ διακόπτεσ ιςχφοσ. Θ μζςθ τιμι τθσ τάςθσ (και ρεφματοσ) που τροφοδοτείται ςτο φορτίο ελζγχεται από τθν γριγορθ εναλλαγι ςε off και on ενόσ διακόπτθ μεταξφ τθσ παροχισ και του φορτίου. Πςο περιςςότερο χρόνο είναι ςτο on ο διακόπτθσ ςε ςφγκριςθ με το πόςο χρόνο είναι ςτο off, τόςο περιςςότερθ ιςχφσ παρζχεται ςτο φορτίο. Θ ςυχνότθτα μεταβολισ του PWM πρζπει να είναι πολφ πιο γριγορθ από αυτι που κα επθρζαηε το φορτίο, δθλαδι τθ ςυςκευι τθν οποία καταναλϊνει τθν ιςχφ. Συνικωσ, οι ( ) Εικόνα 5.2 Ζνα παράδειγμα PWM ςε ζνα AC κινητήρα : η τάςη από φάςη ςε φάςη (μπλε γραμμή) διαμορφϊνεται ςαν μια ςειρά παλμϊν η οποία ζχει ςαν αποτζλεςμα μια ημιτονοειδή διακφμανςη (κόκκινη γραμμή) ςτο μαγνητικό κφκλωμα του κινητήρα. Η ομαλότητα τησ παραγόμενησ κυματομορφήσ μπορεί να ελεγχθεί από το πλάτοσ και τον αριθμό των παλμϊν. (ανά δεδομζνο κφκλο). εναλλαγζσ πρζπει να γίνουν πολλζσ φορζσ το λεπτό για μια θλεκτρικι κουηίνα, 120 Hz για ζνα dimmer λαμπτιρα ι τθσ τάξθσ των MHz για ενιςχυτζσ ιχου και παροχζσ ιςχφοσ υπολογιςτϊν. Ο όροσ duty cycle περιγράφει το ποςοςτό του χρόνου που ο διακόπτθσ μασ βρίςκεται ςτο on ωσ προσ το ςυνολικό χρόνο. Ζνα μικρό duty cycle αντιςτοιχεί ςε χαμθλι τάςθ εξόδου, αφοφ θ ιςχφσ μασ είναι ςτο off για τον περιςςότερο χρόνο. Το duty cycle εκφράηεται ςε ποςοςτό επί τοισ εκατό. Για παράδειγμα, duty cycle 100% ςθμαίνει ότι ζχουμε τθ μζγιςτθ δυνατι ιςχφ. Το PWM χρθςιμοποιείται επίςθσ για ελζγχουσ ςε ψθφιακά ςυςτιματα τα οποία λόγω τθσ HIGH/LOW λογικισ μποροφν εφκολα να αλλάηουν και να ρυκμίηουν το επικυμθτό duty cycle. Στθν περίπτωςθ μασ παράγουμε με το Arduino Uno Board ζνα πολφ γριγορο μεταβλθτοφ duty cycle PWM (20 KHz) Λογιςμικό Εξομοίωςη ςε MATLAB και Simulink Αρχικά, χρθςιμοποιϊντασ τισ μακθματικζσ εξιςϊςεισ που αναφζραμε ςτο προθγοφμενο υποκεφάλαιο, επιλζξαμε να υλοποιιςουμε το πρόγραμμα μασ ςε MATLAB και να κάνουμε τθν 48

50 εξομοίωςθ μασ ςτο Simulink, ϊςτε να μπορζςουμε να διαπιςτϊςουμε τθ γενικι ςυμπεριφορά του ςυςτιματοσ. Ζτςι δθμιουργιςαμε ζνα αρχείο ςυνάρτθςθσ ςτο ΜΑΤLAB(.m file) και ζνα μοντζλο εξομοίωςθσ ςτο Simulink το οποίο φαίνεται ςτο παρακάτω ςχιμα. Εικόνα 5.3 Simulink Model Στο μοντζλο αυτό ζχουμε ςαν είςοδο ζνα ιδανικό θμίτονο των 52Hz, πλάτουσ 1. Σε αυτό προςκζτουμε ςαν κόρυβο ζνα τριγωνικό ςιμα, πολλαπλαςιαςμζνο με ζνα πολφ μικρό gain (Κ=0.05). Ο κόρυβοσ προςτζκθκε με τθ λογικι τθσ προςομοίωςθσ πραγματικϊν ςυνκθκϊν. Στθ ςυνζχεια προςκζτουμε ςτο ςιμα μασ τον αρικμό «1» ϊςτε να του δϊςουμε ζνα DC offset και ζτςι το πλάτοσ του ςιματόσ μασ πλζον να κινείται από τθν περιοχι *-1,1+ ςτθν περιοχι *0,2+. Ρολλαπλαςιάηοντασ ςτθ ςυνζχεια με «512», φζρνουμε το πλάτοσ του ςιματόσ μασ ςτθν περιοχι *0, Ρροχωριςαμε ςε αυτιν τθν μετατόπιςθ και τον πολλαπλαςιαςμό κακϊσ ο A/D converter του Arduino Uno Board είναι 10-bit οπότε κζλαμε ςαν είςοδο να δϊςουμε ζνα ςιμα με πλάτοσ που να κινείται ςτθν περιοχι *0, Στθ ςυνζχεια δειγματολθπτοφμε το ςιμα μασ μζςω του Signal Specification block με ςυχνότθτα 20KHz και προωκοφμε τα δείγματα μασ ςτθ ςυνάρτθςθ που δθμιουργιςαμε. Ραρακάτω φαίνεται το.m αρχείο το οποίο δθμιουργιςαμε Κϊδικασ Matlab function yout = MyMbit(x) persistent xav freqav lastf ; persistent A cphase thphase dphase xphase signal_in_time; persistent Counter myout corphase freq; persistent x1 x2 x3 ; % initialization of values used % if isempty(xav), myout=zeros(7,1); %array for outcomes thphase=0; %theoretical phase value xav=zeros(105,2); %array for values for the weighted average lastf=0; xav(1:105,2)=1; dphase=0; A=1; %Amplitude initialization Counter=0; corphase=0; %variable used for phase correction freq=50; %frequency initialization freqav=50; %frequency average initialization x1=0; x2=0; x3=0; %three values sampled per period end % Initialization of values used % %loop to generate results after 40 periods Counter=Counter+1; 49

51 if Counter >=40, Counter=0; x3=x2; x2=x1; x1=x-512; %Normalization % Initialization of values used % % Frequency Calculation % if (x2 ~= 0), y = (x1+x3) / (2*x2); if (y >= -1) && (y <= 1), %for arcos(y) --> -1<=y<=1 tfreq=(500/(2*pi)) * acos(y); %Fsample(in loop)=500hz lastf=tfreq; else tfreq=lastf; x2=0; end else tfreq=lastf; x2=0; end % Frequency Calculation % % Weighted average % CA=abs(x2)/A; %filter using amplitude freqav=freqav*0.9 +tfreq*0.1*ca+freqav*0.1*(1-ca);%frequency average % Weighted average % % feedback % freq=freqav-dphase*4; % feedback % % theoretical phase calculation % thphase=thphase+(2*pi*freq/500); if thphase>2*pi, thphase=thphase-(2*pi); end corphase=thphase; %variable used later for phase correction myout(3)=thphase; %out 3 = theoretical value of phase % theoretical phase calculation % % real phase calculation % if x2~=0, pnom=(-sqrt(1-((x1+x3)/(2*x2))^2)); %phase nominator pden=((x3-x1)/(2*x2)); %phase denominator if pden~=0, cphase= atan(pnom/pden); else cphase=0; end else cphase=0; end %calculated phase %normalizing phase if x2>=0, if cphase<=0, cphase=cphase+pi; end else if cphase>0, cphase=cphase+pi; else % 0<phase<pi %p/2<phase< p %p<phase<2p %p<phase<3p/2 %3p/2<phase<2p 50

52 end end cphase=cphase+(2*pi); myout(4)=cphase; %out 4 = calculated value of phase % real phase calculation % % phase difference(theoretical phase-calculated phase)------% xphase=thphase-cphase; if xphase<-1.0*pi, xphase=xphase+2*pi; elseif xphase>pi, xphase=xphase-2*pi; end % phase difference(theoretical phase-calculated phase)------% % phase correction % dphase=(dphase*1.2 +xphase)/2.2; %using Ziegler-Nichols gain % phase correction % myout(5)=dphase; myout(6)=x2; %out 5 = phase error %out 6 = Generated Sinus % sinus amplitude calculation % anom=x2; %amplitude nominator adnom=sin(cphase); %amplitude denominator if adnom~=0, Ax=anom/adnom; else Ax=A; end A= A* Ax*0.01*CA + A*0.01*(1-CA); %amplitude average end % sinus amplitude calculation % corphase=corphase+(2*pi*freq/(500*40)); %final phase correction myout(1)=freq; %out 1 = frequency signal_in_time=sin(corphase+(2*pi*freq/500));%signal in time myout(2)=signal_in_time; %out 2 = signal in time myout(7)=a; %out 7 = Amplitude yout=myout; end Τλοποίηςη ςτο Arduino Αφοφ διαπιςτϊςαμε τθν ευρωςτία του ςυςτιματόσ μασ ςτο Matlab προχωριςαμε ςτθν υλοποίθςθ ςτο μικροχπολογιςτικό ςφςτθμα Arduino. Ρροςαρμόςαμε τον κϊδικά μασ ςε ςχζςθ με το.m file ςτισ απαιτιςεισ και τισ δυνατότθτεσ του Arduino. Για τθν υλοποίθςθ του ςυςτιματοσ φορτϊνουμε τον κϊδικα μασ (ο οποίοσ παρατίκεται παρακάτω) ςτο Arduino, ϊςτε να υλοποιθκοφν οι πράξεισ αλλά και να χρονιςτεί ςωςτά θ ζξοδοσ. Το πρόγραμμα μασ μπορεί να ςυνοψιςτεί ςτα παρακάτω: 51

53 Ζχοντασ ορίςει τον Timer/Counter 1 και τον Timer/Counter 2 του ATmega328 ςε ςυγκεκριμζνα mode (αναλφονται παρακάτω) δθμιουργοφμε ζνα interrupt για τον Timer/Counter 2 μζςα ςτο οποίο διενεργοφμε τζςςερισ διαφορετικζσ διαδικαςίεσ ( fastloop0, fastloop1, fastloop2 και μία διαδικαςία που αυξάνει το χρόνο δειγματολθψίασ μασ). Ανάλογα με τθν τιμι μιασ ςθμαίασ που ζχουμε δθμιουργιςει, τθσ T0FLAG, ενεργοποιείται θ αντίςτοιχθ από τισ τρεισ παρόμοιεσ διαδικαςίεσ (fastloop -x). Πταν θ ςθμαία μασ ξεπεράςει τον αρικμό «10» μπαίνει ςτθν τζταρτθ διαδικαςία μζςα ςτθν οποία, όταν ζνασ counter που ζχουμε δθμιουργιςει, ο scount, γίνει «50», ενεργοποιείται ζνα άλλο flag, το «SETFLAG». Αυτι θ ςθμαία, μασ «δίνει το πράςινο φωσ» να αρχίςουμε τισ πράξεισ ςτo κυρίωσ πρόγραμμά μασ. Χρθςιμοποιϊντασ ςαν ζλεγχο ειςόδου ςτθ διαδικαςία που ενεργοποιεί το SETFLAG, τθν ζκφραςθ Τ0FLAG=10 και scount=50 ουςιαςτικά πολλαπλαςιάηουμε τθ ςυχνότθτα δειγματολθψίασ μασ και εν τζλει θ ςυχνότθτα του παραγόμενου PWM είναι 20KΘz. Μζςα ςτθν ρουτίνα εξυπθρζτθςθσ διακοπισ και ςυγκεκριμζνα μζςα ςτο fastloop2 δίνουμε ςυνεχϊσ τιμι ςτο duty cycle του PWM μασ, μζςω του καταχωρθτι OCR1A. Θ διαδικαςία κατάτμθςθσ τθσ δουλειάσ που ζπρεπε να γίνει μζςα ςτθ ρουτίνα εξυπθρζτθςθσ διακοπισ του Timer/Counter 2 ( fastloop-0, 1, 2 ) ζγινε λόγω του ότι ο ATmega328 «by default» δεν υποςτθρίηει nested interrupts, και ζτςι κάκε κομμάτι ζπρεπε να «προλαβαίνει» να διεκπεραιωκεί μζςα ςτο χρόνο του κάκε interrupt του Timer/Counter 2, το οποίο ςυμβαίνει όπωσ αναφζραμε κάκε 20 KHz. Σε διαφορετικι περίπτωςθ το ςφςτθμα μασ κα αποςυγχρονιηόταν, πράγμα το οποίο διαπιςτϊςαμε κατά τθ διάρκεια των προςπακειϊν μασ. Ριο ςυγκεκριμζνα: Λειτουργίεσ και ειδικοί καταχωρητζσ του ATmega328 Timer/Counter1 set to phase and frequency correct PWM mode Στο ςφςτθμά μασ χρθςιμοποιοφμε τον Timer/Counter1 ςτο ςυγκεκριμζνο mode ζτςι ϊςτε να μποροφμε να δθμιουργιςουμε ζνα PWM μεταβλθτοφ duty cycle. Το ςυγκεκριμζνο mode μασ επιτρζπει επίςθσ να αλλάξουμε τθν μζγιςτθ τιμι του counter και να τθν ορίςουμε κατά το δοκοφν, ορίηοντασ ζτςι τθν ανάλυςθ του PWM κακϊσ επίςθσ και να ορίςουμε το duty cycle. Ειςάγοντασ, λοιπόν, ςτον καταχωρθτι ICR1 τθν τιμι 400, ορίηουμε τθ νζα μζγιςτθ τιμι που μπορεί να φτάςει ο counter και αφοφ φτάςει ςε αυτι τθν τιμι μθδενίηεται και ξεκινά από τθν αρχι. Αυτό γίνεται αυτόματα αφοφ και αυτι τθ λειτουργία μασ τθν παρζχει το ςυγκεκριμζνο mode. Το duty cycle του PWM 52 Εικόνα 5.4 Με κίτρινο χρϊμα φαίνονται τα interrupts και με πράςινο χρϊμα οι διαδικαςίεσ fastloop0, fastloop1 και fastloop2. Εικόνα 5.5 Σο παραχθζν PWM ςήμα. Παρατηροφμε την πολφ γρήγορη μεταβολή του duty cycle.

54 κακορίηεται ςτον καταχωρθτι OCR1A, ο οποίοσ παίρνει τιμι κάκε φορά που διεξάγεται θ κυρίωσ ςυνάρτθςθ loop(). Ζτςι ζχουμε κάκε φορά μια νζα τιμι για το duty cycle θ οποία μεταβάλλεται με θμιτονοειδι τρόπο. Για να κάνουμε πιο γριγορθ τθ διαδικαςία ζχουμε δθμιουργιςει ζνα look-up table ϊςτε να διαβάηουμε από εκεί τισ διάφορεσ δυνατζσ τιμζσ που μπορεί να λάβει θ μεταβλθτι που ορίηει το duty cycle. Συγκεκριμζνα, ο πίνακασ αυτόσ ζχει δθμιουργθκεί με βάςθ τθ ςυνάρτθςθ dutytable[i]=icr1/2*(1+0,8*sin(corphase)), όπου corphase είναι μια μεταβλθτι που χρθςιμοποιοφμε για να κακορίςουμε (διορκϊνουμε ςυνεχϊσ) τθν φάςθ του θμιτόνου που καταςκευάηουμε. Ζτςι ο πίνακασ γεμίηει με τιμζσ οι οποίεσ ιςχφουν για 0<corphase<360, κακϊσ υπολογίηουμε όλεσ τισ πικανζσ τιμζσ που μπορεί να πάρει το θμίτονο με βιμα μία μοίρα. Ζτςι ο counter ξεκινά να μετρά και μόλισ φτάςει ςτθν τιμι ICR1=400, θ ςθμαία του OC1A ενεργοποιείται, δίνοντασ ζτςι τιμι ςτον OCR1A που κακορίηει το duty cycle. H ςθμαία του OC1A κακαρίηεται αυτόματα. Κακοριςτικισ ςθμαςίασ είναι ο μθδενιςμόσ του TCNT1 πράγμα το οποίο όπωσ αναφζραμε παραπάνω γίνεται και αυτό αυτόματα. Οι καταχωρθτζσ που χρθςιμοποιοφμε για να κακορίςουμε τθ λειτουργία Phase and frequency correct PWM είναι οι εξισ: TCCR1A: Αρχικοποιοφμε με μθδζν και ςτθ ςυνζχεια κζτουμε το bit COM1A1 ςε λογικό «1» ϊςτε να ζχουμε non-inverting mode. TCCR1B: Αρχικοποιοφμε με μθδζν και ςτθ ςυνζχεια κζτουμε το bit WGM13 ςε λογικό «1» ϊςτε να ενεργοποιιςουμε το Phase and Frequency correct PWM mode. Επίςθσ κζτουμε το bit CS10 ςε λογικό «1» ϊςτε o timer να μετρά χωρίσ prescaler. Timer/Counter2 set to CTC mode (Clear Timer on Compare Match) Στθν υλοποίθςθ μασ χρθςιμοποιοφμε τθ λειτουργία Clear Timer on Compare (CTC), ϊςτε να κακορίηουμε κάκε πότε κα ενεργοποιείται θ διακοπι μζςα ςτθν οποία όπωσ αναφζραμε παραπάνω γίνονται οι διαδικαςίεσ που δίνουν τιμζσ ςτον καταχωρθτι OCR1A του Timer/Counter1. Ραρατθριςαμε επίςθσ, ότι καταςκευαςτικά ο OCR1A δεν μπορεί να πάρει τιμι μζςα ςε interrupt του Timer/Counter1, ζτςι του δίνουμε τιμζσ μζςα από τθ ρουτίνα εξυπθρζτθςθσ διακοπισ TIMER2 COMPA του Timer/Counter2. Στον καταχωρθτι OCR2A αποκθκεφουμε τθ τιμι ςφγκριςθσ του μετρθτι οποία είναι ςτακερι και ίςθ με 100, ενϊ θ μζγιςτθ που μπορεί να πάρει είναι, όντασ 8-bit, 255. Αυτό ςυμβαίνει ϊςτε να μπορζςουμε να παρακάμψουμε τθν 8-bit φφςθ του Timer/Counter2 και με τθ χριςθ του «Τ0FLAG» να μποροφμε να διενεργοφμε διαφορετικζσ διαδικαςίεσ μζςα ςτο interrupt, παρά τον περιοριςμό του μζγιςτου 255, όπωσ προαναφζραμε. Ο 8-bit ςυγκριτισ, ςε κάκε παλμό του ρολογιοφ, ςυγκρίνει τθ τρζχουςα τιμι του TCNT2 με αυτι του OCR2A. Aν ζχουμε ιςοτιμία ενεργοποιείται θ ςθμαία OCF2A ςτον επόμενο κφκλο ρολογιοφ, θ οποία προκαλεί μία Compare Output διακοπι, τθν TIMER2 COMPA. Θ ςθμαία κακαρίηεται αυτομάτωσ, μόλισ εκτελείται θ διακοπι, ευκολία θ οποία, και εδϊ, μασ παρζχεται από τθ CTC λειτουργία. Ππωσ αναφζρκθκε, κάκε φορά που εξυπθρετείται θ διακοπι ορίηουμε τθ μεταβλθτι SΕΤFLAG=1, θ οποία ςτο κυρίωσ πρόγραμμα εκκινεί τθ διαδικαςία των μακθματικϊν πράξεων. Οι καταχωρθτζσ που χρθςιμοποιοφμε για να κακορίςουμε τθ λειτουργία Compare Match (CTC) είναι οι εξισ: Clear Timer on TCCR2A: Κζτουμε το WGM21 ςε λογικό «ζνα» για να ενεργοποιιςουμε τθ λειτουργία CTC. Πλα τα υπόλοιπα bits τα αφινουμε ςε λογικό «μθδζν». TCCR2B: Κζτουμε το CS21 ςε λογικό «ζνα», ϊςτε να ζχουμε prescaler= 8. Με αυτό το τρόπο ο timer λειτουργεί ςτα 500ΚΘz, ϊςτε να προλαβαίνουμε να εκτελζςουμε τισ απαιτοφμενεσ διαδικαςίεσ. Πλα τα άλλα bits τα μθδενίηουμε. 53

55 TIMSK2: Κζτουμε το OCIE2A ςε λογικό «ζνα» για να ενεργοποιιςουμε το Compare Output A mode. Μθδενίηουμε τα υπόλοιπα bits Κυρίωσ πρόγραμμα Ζχοντασ ορίςει τισ μεταβλθτζσ μασ και, όπωσ αναφζρκθκε, τθν ρουτίνα εξυπθρζτθςθσ διακοπισ κακϊσ και τισ διαδικαςίεσ που διεξάγονται μζςα ςε αυτι, ζχοντασ ορίςει επίςθσ ςτθ void setup() ποιο pin είναι ζξοδοσ, ποιο είςοδοσ κακϊσ και τισ λειτουργίεσ των timers με τθ ρφκμιςθ των αντίςτοιχων καταχωρθτϊν και ζχοντασ υπολογίςει επίςθσ μζςα ςτθ void setup(), που ςθμειωτζον- εκτελείται μία φορά, κάποιεσ μεταβλθτζσ όπωσ θ slfreq, που υπολογίηεται με βάςθ κάποιεσ άλλεσ οριςμζνεσ μεταβλθτζσ και μασ δίνει τθν «αργι» ςυχνότθτα δειγματολθψίασ (τθν οποία αυξάνουμε μετά μζςω του scount ), περνάμε ςτο κυρίωσ πρόγραμμα. Δειγματολθπτοφμε από τθν είςοδο Α0 του ADC και δθμιουργοφμε ζνα κυκλικό buffer τριϊν κζςεων ϊςτε να κρατάμε πάντα τισ τρεισ τελευταίεσ τιμζσ. Επίςθσ από τθν κάκε φορά λθφκείςα τιμι αφαιροφμε τθν τιμι «512» ζτςι ϊςτε να κανονικοποιιςουμε τισ τιμζσ που δειγματολθπτοφμε ςτο διάςτθμα *-512,512) αφοφ ο ADC μασ παίρνει τιμζσ από το διάςτθμα [0,1024). Φςτερα, περνάμε ςτον υπολογιςμό τθσ ςυχνότθτασ ςφμφωνα με τισ μακθματικζσ πράξεισ που αναφζρκθκαν παραπάνω και αφοφ ζχουμε κάνει κάποιουσ ελζγχουσ, όπωσ πχ αν ο παρονομαςτισ βγαίνει μθδζν ι αν το όριςμα του τόξου ςυνθμίτονου είναι ςτο επιτρεπτό διάςτθμα. Επίςθσ δθμιουργοφμε και ζνα μζςο όρο για τισ διάφορεσ τιμζσ τθσ ςυχνότθτασ που υπολογίηουμε κάκε φορά που επαναλαμβάνεται θ κυρίωσ ςυνάρτθςι μασ. Ο μζςοσ όροσ που δθμιουργοφμε είναι ουςιαςτικά ζνα LPF φίλτρο το οποίο εκφράηεται από τθν εξισ ςυνάρτθςθ: mavgfreq=(mavgfreq*0.8+mfreq*0.2); Ζτςι, ςτο μζςο όρο θ νζα τιμι ζχει βάροσ 0,2, ςε αντίκεςθ με τον μζςο όρο τθσ προθγουμζνθσ loop που ζχει βάροσ 0,8. Στθ ςυνζχεια κάνουμε τθν παραδοχι ότι ο κεωρθτικόσ υπολογιςμόσ τθσ φάςθσ (ι αλλιϊσ θ τιμι τθσ φάςθσ που περιμζνουμε να ζχουμε ) είναι αποτζλεςμα τθσ παρακάτω ςυνάρτθςθσ: thphase = thphase+(phasecoef*thfreq); όπου PhaseCoef=360*PWMCount/interfreq και thfreq=50. (PWMCount=10 και interfreq=20.000, θ ςυχνότθτα του PWM). Κατόπιν υπολογίηουμε τθν τιμι τθσ φάςθσ ςφμφωνα με τισ τιμζσ που λάβαμε από τθ δειγματολθψία και τισ μακθματικζσ ςυναρτιςεισ. Επίςθσ κανονικοποιοφμε τθν υπολογιςκείςα τιμι τθσ φάςθσ ςτθν περιοχι *-π,π+. Αφοφ κάνουμε μια διόρκωςθ ϊςτε το λθφκζν και παραγόμενο ςιμα να είναι ςυμφαςικά, κάνουμε επίςθσ άλλθ μια κανονικοποίθςθ αφαιρϊντασ 2π όταν θ τιμι τθσ φάςθσ περνά το όριο των 2π. Στθ ςυνζχεια υπολογίηουμε τθν διαφορά μεταξφ «κεωρθτικισ» και υπολογιςκείςασ φάςθσ. Αφοφ ολοκλθρωκεί αυτι θ διαδικαςία υλοποιοφμε ζνα PI ελεγκτι ο οποίοσ ουςιαςτικά μασ δίνει ζνα feedback για τθ ςυχνότθτα ζτςι ϊςτε να μπορζςουμε ςυνεχϊσ να διορκϊνουμε τον υπολογιςμό τθσ. Τζλοσ υπολογίηουμε το πλάτοσ του παραγόμενου θμιτόνου, το οποίο όμωσ δεν χρθςιμοποιοφμε Κϊδικασ #include <avr/pgmspace.h> #include <avr/interrupt.h> #include <avr/io.h> #include <stdio.h> #include <stdlib.h> #include <math.h> int dutytable [] = { 54

56 200, 203, 206, 208, 211, 214, 217, 219, 222, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255, 257, 260, 263, 265, 268, 270, 273, 275, 278, 280, 282, 285, 287, 289, 292, 294, 296, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323, 324, 326, 328, 329, 331, 333, 334, 336, 337, 339, 340, 341, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 355, 356, 357, 357, 358, 358, 358, 359, 359, 359, 360, 360, 360, 360, 360, 360, 360, 360, 360, 359, 359, 359, 358, 358, 358, 357, 357, 356, 355, 355, 354, 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, 343, 341, 340, 339, 337, 336, 334, 333, 331, 329, 328, 326, 324, 323, 321, 319, 317, 315, 313, 311, 309, 307, 305, 303, 301, 299, 296, 294, 292, 289, 287, 285, 282, 280, 278, 275, 273, 270, 268, 265, 263, 260, 257, 255, 252, 249, 247, 244, 241, 239, 236, 233, 231, 228, 225, 222, 220, 217, 214, 211, 208, 206, 203, 200, 197, 194, 192, 189, 186, 183, 181, 178, 175, 172, 169, 167, 164, 161, 159, 156, 153, 151, 148, 145, 143, 140, 137, 135, 132, 130, 127, 125, 122, 120, 118, 115, 113, 111, 108, 106, 104, 102, 99, 97, 95, 93, 91, 89, 87, 85, 83, 81, 79, 77, 76, 74, 72, 71, 69, 67, 66, 64, 63, 61, 60, 59, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 45, 44, 44, 43, 42, 42, 42, 41, 41, 41, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 60, 61, 63, 64, 66, 67, 69, 71, 72, 74, 76, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 104, 106, 108, 111, 113, 115, 118, 120, 122, 125, 127, 130, 132, 135, 137, 140, 143, 145, 148, 151, 153, 156, 159, 161, 164, 167, 169, 172, 175, 178, 180, 183, 186, 189, 192, 194, 197 ; const float pi= ,twopi= ; const int scount=50; //counter to assign low sampling rate 50->400Hz const int PWMCount=10; //counter to assign low sampling rate 10 const float interfreq=20000; // PWM frequency float mfreq=50; //measured Frequency float mpfreq=50; //last measured Frequency float mavgfreq=50; //Average of measured frequency float mphase=0; //measured phase float mtphase=0; //temp measured phase float mlinphase=0; //linearized measured phase float thphase=0,amplitude=512,anom=0,adnom=0,pwmcoef,phasecoef; float dphase=0,ax=0,ca=0,thfreq=50,ipi=50,corphase=0; float slfreq; float xcorphase=0; //variable used to correct the phase float x1,x2,x3,y,err,pnom=0,pden=100; int SETFLAG=0,T0FLAG=0,dutycycle=400,Counter=0; ISR(TIMER2_COMPA_vect) //Interrupt service routine { switch (T0FLAG) // multitasking (ATMEGA328 doesn't support nested { // interrupts case 0: fastloop0(); break; case 1: fastloop1(); break; case 2: fastloop2(); break; T0FLAG++; if (T0FLAG >= PWMCount ) //each 10th time the interrupt hits {T0FLAG=0; //200*10 => 20khz 55

57 Counter++; if (Counter >= scount) { Counter=0; SETFLAG=1; void setup() { cli(); //clear interrupts Serial.begin(57600); //Start serial communication pinmode(a0,input); //A0 input pin DDRB =(1<< DDB1); //PB1(pin9) is output or pinmode(9,output) TCCR1A = 0; TCCR1B = 0; TCCR2A = 0; TCCR2B = 0; TCNT1 = 0; //initialize register //initialize register //disable interrupts //disable interrupts //clear timer ICR1=400; //counter1 top 400 OCR2A=100; //counter2 top 200 //Timer1 set up for phase and frequency correct PWM TCCR1B =(1<<WGM13); //set phase and frequency correct PWM mode //using ICR1 as TOP TCCR1A =(1<<COM1A1); //non-inverting mode TCCR1B =(1<<CS10); //START the timer with no prescaler //Timer2 setup to CTC mode (Clear Timer on Compare match) TCCR2A = (1<<WGM21); //turn on CTC mode TCCR2B = (1<<CS21); //CS21 bits for CLK/8 prescaling TIMSK2 = (1<<OCIE2A); //enable timer compare interrupt PWMCoef=360*PWMCount/interfreq; slfreq=interfreq/scount; //Sampling (low) Frequency PhaseCoef=(4*pi)/sLFreq; sei(); void fastloop0() //fast loop updates every 1/20000 of the PWM { xcorphase+=(pwmcoef*thfreq); //final phase correction //PWMCoef=360/sLfreq*sCount void fastloop1() { if (xcorphase>359) { xcorphase-=359; void fastloop2() { int x=xcorphase; OCR1A=dutytable[x]; //apply dutycycle // void loop() 56

58 { //Slow Loop: Every 1/50 and calculates phase, frequency and amplitude if (SETFLAG==1) { x1 = x2; //buffering the sampled values x2 = x3; //buffering the sampled values x3 = float(analogread(a0)-512); //buffering the sampled values // Frequency Calculation // if (x2!= 0) { y = (x1+x3)/(2*x2); if ((y >=-1) && (y <=1)) { mfreq = acos(y)/phasecoef; mpfreq = mfreq; else { mfreq = mavgfreq; x2 = 0; else { mfreq = mavgfreq; x2 = 0; // Frequency Calculation // // frequency average // mavgfreq=(mavgfreq*0.8+mfreq*0.2); // frequency average // // theoritical phase calculation // thphase=thphase+(phasecoef*thfreq); // measured phase (mphase) calculation // if (x2!=0 ) { pnom=(x1+x3)/(2*x2); pnom*=pnom; pnom=sqrt(1-pnom); pden=((x3-x1)/(2*x2)); if (pden!=0) {mtphase= atan(pnom/pden); //real phase is calculated else { mtphase+=mavgfreq*twopi/slfreq; // real phase cannot actually be calculated! It is estimated else { mtphase+=mavgfreq*twopi/slfreq; // real phase cannot be calculated!it is estimated // measured phase is in range -pi ~ +pi // estimation of the phase taking into account the X2 value // Now calculated phase is in range of 0-2pi if (x2>=0) //phase= 0 ~ pi { if (mtphase>=0) //phase= 0 ~ pi/2 { 57

59 mphase=mtphase+pi; else //phase= pi/2 ~ pi { mphase=mtphase+twopi; else //phase= pi ~ 2pi { if (mtphase<0) //phase= 3pi/2~ 2pi { mphase=mtphase+pi; else //phase= pi ~ 3pi/2 { mphase=mtphase; mphase=mphase-pi/2; //additional phase correction (-p/2=optimal) if (mphase>twopi) {mphase-=twopi; //Now mphase is 0 ~ 2pi // calculation of linearized measured phase while(mphase<mlinphase) //measured phase should always be bigger //than previous linear phase! {mphase+=twopi; mlinphase=mphase; //phase value relaxation:if both phases are too big subtracts of 2pi if(thphase>twopi) { if(mlinphase>twopi) { thphase-=twopi; mlinphase-=twopi; // phase difference (theoretical phase-measured phase----// dphase=thphase-mlinphase; // PI controller ipi += 6.28*dPhase; thfreq=ipi *dPhase; err=abs((mavgfreq-thfreq)/mavgfreq); // non linear correction //if frequency calculation error is large (20%) apply current // measurements if ((err>0.2) && (abs(x2)>0.1)) { thfreq=mavgfreq; thphase=mphase; mlinphase=thphase; ipi=thfreq; corphase=(360*thphase/twopi); xcorphase=corphase; // sinus amplitude calculation // anom=x2; adnom=sin(mphase); if (adnom!=0) { Ax=anom/adnom; else 58

60 { Ax=Amplitude; CA=abs(x2)/Amplitude; Amplitude=Amplitude* Ax*0.01*CA + Amplitude*0.01*(1-CA); // sinus amplitude calculation // SETFLAG=0; //end SETFLAG //endloop 4.5. Διαςφνδεςη υςτήματοσ-πειραματικζσ Μετρήςεισ Αφοφ πλζον φορτϊςουμε τον κϊδικα μασ ςτο Arduino, οδθγοφμε μζςω του Α0 pin του ADC ζνα θμίτονο τυχαίασ ςυχνότθτασ, πλάτουσ 5V Pk-Pk και με ζνα DC offset 2,5 V ϊςτε να γίνει αντιλθπτό από τον ADC. Στθ ςυνζχεια οδθγοφμε τθν ζξοδο(pin 9) του ςυςτιματοσ μασ ςε ζνα 2 θσ τάξθσ LPF πακθτικό φίλτρο, με ςυχνότθτα αποκοπισ τα 72 Hz. Τα αποτελζςματα φαίνονται παρακάτω: Εικόνα 5.6 Σο ςήμα με το πράςινο χρϊμα είναι το ημίτονο με το οποίο τροφοδοτοφμε το ςφςτημα και με κίτρινο το παραχθζν. Η ςυχνότητα των ςημάτων είναι 28 Ηz. Εικόνα 5.7 Λάθοσ το οποίο ςυμβαίνει κατά την ανακαταςκευή του ημιτόνου. 59

61 Εικόνα 5.8 Δειγματοληφθζν (πράςινο χρϊμα) και παραγόμενο (κίτρινο χρϊμα) ημίτονο ςτη ςυχνότητα των 50Ηz. Κατά τθ διενζργεια των πειραματικϊν μετριςεων παρατθριςαμε τα εξισ: Το ςφςτθμα μασ αποκρίνεται ςε όλεσ τισ ςυχνότθτεσ μεταξφ 25 και 70 Hz Ακόμα και ςε γριγορεσ (απότομεσ) αλλαγζσ τθσ ςυχνότθτασ το ςφςτθμα μασ αποκρίνεται εξίςου καλά Προβλήματα Περαιτζρω εξζλιξη Ζνα από τα ςθμαντικότερα προβλιματα που ςυναντιςαμε, ιταν, θ μθ δυνατότθτα υποςτιριξθσ, λόγω καταςκευαςτικοφ περιοριςμοφ, nested interrupts από το Arduino. Αργότερα διαπιςτϊςαμε, ότι με κάποιεσ τροποποιιςεισ ςτα αρχεία ςυςτιματοσ του Arduino, αυτό ίςωσ είναι δυνατό, αλλά επιλζξαμε να ακολουκιςουμε άλλθ διαδικαςία. Ζτςι χρειάςτθκε να κάνουμε τθ διαδικαςία κατάτμθςθσ τθσ δουλειάσ που περιγράφεται ςτο υποκεφάλαιο Ζνα άλλο πρόβλθμα που αντιμετωπίςαμε ιταν θ ςχετικά μικρι υπολογιςτικι δφναμθ του Arduino για τθ ςυγκεκριμζνθ εφαρμογι, αλλά ξεπεράςαμε και αυτό το εμπόδιο, με τθ δθμιουργία look-up tables και προ-υπολογίηοντασ ςτακερζσ τιμζσ όπωσ 2π, π/2 κτλ. Εφόςον λοιπόν αποδείξαμε ότι θ ιδζα μασ είναι λειτουργικι και ζχει πολφ ικανοποιθτικά αποτελζςματα, το επόμενο βιμα είναι το πζραςμα ςε υψθλότερεσ τάςεισ για να διαπιςτϊςουμε κατά πόςο το ςφςτθμά μασ μπορεί τελικά να χρθςιμοποιθκεί και ςτθ βιομθχανία, αντικακιςτϊντασ (γιατί όχι) τα PLL, ςτισ ςυγκεκριμζνεσ εφαρμογζσ. Το βαςικό πλεονζκτθμα του ςυςτιματόσ μασ ζναντι του PLL, είναι τελικά το πολφ γριγορο κλείδωμα τθσ φάςθσ δφο μθ ςυγχρονιςμζνων ςθμάτων και άρα πολφ λιγότερθ παραγωγι άεργου ιςχφοσ, ςτθν περίπτωςθ των δικτφων μεταφοράσ θλεκτρικισ ενζργειασ. 60

62 61

63 5. φςτημα εντοπιςμοφ διεφθυνςησ πηγήσ ήχου 5.1. Ειςαγωγή Θ βαςικι ιδζα που υλοποιείται ςτο επόμενο ςφςτθμα είναι θ δθμιουργία μιασ ςυςκευισ, θ οποία κα μπορεί να αναγνωρίηει τθ διεφκυνςθ από τθν οποία παράγεται ζνα θχθτικό ςιμα ςτον τριςδιάςτατο χϊρο. Με τθ χριςθ μιασ διάταξθσ μικροφϊνων που λαμβάνουν το θχθτικό ςιμα ζχουμε τθ δυνατότθτα εφρεςθσ τθσ διεφκυνςθσ τθσ θχθτικισ πθγισ με τον εξισ τρόπο: Tο κάκε μικρόφωνο ανάλογα με τθ κζςθ του ςτθ διάταξθ λαμβάνει το ίδιο θχθτικό ςιμα με μια κακυςτζρθςθ (delay) από τα άλλα μικρόφωνα τθσ διάταξθσ. Ζτςι αν μποροφμε να υπολογίςουμε το delay, με δεδομζνθ τθν ταχφτθτα του ιχου και με γεωμετρικοφσ υπολογιςμοφσ, μποροφμε να κακορίςουμε τθ διεφκυνςθ προζλευςθσ του θχθτικοφ ςιματοσ. Τζτοιεσ ςυςκευζσ χρθςιμοποιοφνται ιδθ ςε αίκουςεσ τθλεδιάςκεψθσ (teleconference rooms), όπου μια κάμερα ςτρζφεται και «τραβά» τον εκάςτοτε ομιλθτι. Ι πάλι ςε μια τθλεδιάςκεψθ, ο ομιλθτισ μπορεί να περπατά άνετα μζςα ςτο χϊρο και ταυτόχρονα μια κάμερα να τον ακολουκεί οπουδιποτε μζςα ςτο χϊρο. Μια άλλθ εφαρμογι κα μποροφςε να είναι μια ιδζα του επιβλζποντά μασ, κ. Ευςτακίου θ οποία είναι να μπορεί να βρίςκει κάκε ςτιγμι ποιοσ μιλάει μζςα ςτθν αίκουςα εν ϊρα μακιματοσ και μια ακτίνα λζιηερ να τον καταδεικνφει(!). Άλλθ εφαρμογι κα μποροφςε να είναι θ αναγνϊριςθ του ςθμείου πρόςκρουςθσ ι κίνθςθσ ενόσ αντικειμζνου πάνω ςε μια επιφάνεια, όπωσ πχ ζνα τραπζηι. Σχετικζσ διπλωματικζσ εργαςίεσ είναι υπό υλοποίθςθ ςτο τμιμα μασ [27]. Το ςφςτθμα, λοιπόν, που υλοποιοφμε παρακάτω, εφαρμόηει αυτι τθν ιδζα με τθ χριςθ τριϊν μικροφϊνων ςε τριγωνικι διάταξθ (ορκογϊνιο τρίγωνο με κάκετεσ πλευρζσ μικουσ 5cm) και του Arduino Uno Γενική λειτουργία του ςυςτήματοσ Το ςφςτθμα μασ ζχει ωσ πυρινα λειτουργίασ του το Arduino Uno (ATmega328, 5V, 16MHz) μζςω του οποίου ελζγχουμε τθν κίνθςθ δφο κινθτιρων τφπου servo (servo motors) ϊςτε θ πλακζτα μασ με τα μικρόφωνα να γυρίςει ςτθ γωνία παραγωγισ του θχθτικοφ ςιματοσ. Οι δφο κινθτιρεσ είναι τοποκετθμζνοι ςε μια pan & tilt διάταξθ ζτςι ϊςτε να ζχουμε κίνθςθ ςτο οριηόντιο και ςτο κάκετο επίπεδο και ζτςι να καλφψουμε όλο το χϊρο ενόσ δωματίου, επί παραδείγματι. Ο πρϊτοσ servo ελζγχει τθν κίνθςθ για το οριηόντιο επίπεδο και ο δεφτεροσ ελζγχει τθν κίνθςθ ςτο κάκετο επίπεδο. Θ διάταξθ ςτθν οποία τοποκετιςαμε τα μικρόφωνά μασ φαίνεται ςτο διπλανό ςχιμα. Από τα τρία μικρόφωνα δειγματολθπτοφμε τα θχθτικά ςιματα με ςυχνότθτα 20 ΚΘz, τα οποία οδθγοφμε ςε αντίςτοιχου αρικμοφ Analog Inputs του Arduino. Από εκεί αφοφ διεξάγουμε μεταςχθματιςμοφσ Fourier ςτα ςιματά μασ, τα φζρνουμε πλζον ςτο πεδίο τθσ ςυχνότθτασ. Υπολογίηουμε τθ ετεροςυςχζτιςθ (correlation) μεταξφ των ςθμάτων από το micα και το micb (εικόνα 5.1) και μετά, το correlation μεταξφ των ςθμάτων που παίρνουμε από το micc και το micb. Τα αποτελζςματα του correlation αποκθκεφονται ςε ζνα πίνακα. Ο Εικόνα 5.1 Διάταξη μικροφϊνων πίνακασ αυτόσ περνάει από ζνα αντίςτροφο μεταςχθματιςμό Fourier (FFT) και ζτςι ερχόμαςτε πάλι ςτο πεδίο του χρόνου. Τϊρα πλζον ο pointer τθσ μεγίςτθσ τιμισ του πίνακα αυτοφ αποτελεί το delay μασ. Γνωρίηοντασ το delay, μποροφμε πλζον να υπολογίςουμε τθ γωνία από τθν οποία καταφκάνει το θχθτικό μασ ςιμα και να δϊςουμε αυτι τθν πλθροφορία ςτουσ servo motors ϊςτε να ςτρζψουν κατάλλθλα. 62

64 5.3. Θεωρητική προςζγγιςη του ςυςτήματοσ Τπολογιςμόσ γωνίασ(2d) Με τθ χριςθ δφο μικροφϊνων μποροφμε να υπολογίςουμε τθν γωνία άφιξθσ του ιχου ςτισ δφο διαςτάςεισ (επίπεδο). Κεωροφμε τα παρακάτω δεδομζνα: Ζχουμε τα μικρόφωνα ςτα ςθμεία Μ1 και Μ2 Θ απόςταςθ των μικροφϊνων είναι 2a Θ αρχι των αξόνων είναι ςτο μζςο των μικροφϊνων (x,y)=(0,0) Θ πθγι ιχου P βρίςκεται ςτο ςθμείο (x,y) Θ απόςταςθ τθσ πθγισ ιχου P από : τθν αρχι των αξόνων είναι r το M1 είναι s+d το Μ2 είναι s Μικρζσ λεπτομζρειεσ που διευκολφνουν τθν κατανόθςθ: Στο ςφςτθμα αξόνων το x είναι κετικό (+a) ςτο M2, και αρνθτικό (-a) ςτο Μ1. Θ τιμι του y είναι πάντα κετικι (Κεωροφμε ότι θ πθγι ιχου μπορεί να βρίςκεται μόνο μπροςτά από τα μικρόφωνα). Με βάςθ τα παραπάνω, χρθςιμοποιϊντασ το Ρυκαγόρειο κεϊρθμα μποροφμε να υπολογίςουμε: ( ) ( ) ( ) ( ) ( ) Αφαιρϊντασ κατά μζλθ τισ δφο παραπάνω ςχζςεισ καταλιγουμε ότι: ( ) Κεωρϊντασ τϊρα ότι θ απόςταςθ τθσ πθγισ ιχου P από τα μικρόφωνα είναι πολφ μεγαλφτερθ από τθ μεταξφ τουσ απόςταςθ, δθλαδι, μποροφμε να κεωριςουμε ότι. Ζτςι με τθ χριςθ αυτϊν των προςεγγίςεων μποροφμε να καταλιξουμε ότι: Εικόνα 5.2 Γεωμετρική αναπαράςταςη με δφο μικρόφωνα ( ) Άρα μποροφμε να υπολογίςουμε με αρκετά καλι ακρίβεια τθν γωνία τθσ πθγισ ιχου θ οποία δίνεται από τον προςεγγιςτικό τφπο: ( ) ( ) Θ ακρίβεια του υπολογιςμοφ τθσ γωνίασ από πρόχειρεσ εξομοιϊςεισ βρζκθκε ιδιαίτερα καλι και κεωρείται ικανοποιθτικι για μία μεγάλθ γκάμα εφαρμογϊν. Ειδικά ςε εφαρμογζσ όπου δεν είναι εφκολο (ι χρονοβόρο ι «μνθμοβόρο») να υπολογιςτεί θ τιμι του arccos() (όπωσ απλζσ εφαρμογζσ ςε μικρά embedded ςυςτιματα) μποροφμε να χρθςιμοποιιςουμε τον πρϊτο όρο τθσ ςειράσ του arcos ι οποία φαίνεται παρακάτω: 63

65 Εικόνα 5.3 H ςειρά του τόξου ςυνημίτονου (arccos) Ζτςι μποροφμε να καταλιξουμε ότι: ( ) ( ) Και ς' αυτι τθν περίπτωςθ προςζγγιςθσ, θ ακρίβεια είναι πολφ καλι όταν θ πθγι ιχου P είναι γφρω από τθν ευκεία x=0 (και προφανϊσ ιςχφει ότι y>>2a). Ασ κεωριςουμε τϊρα ότι ο χρόνοσ για να φτάςει το θχθτικό ςιμα ςτο Μ1 είναι t1 και αντίςτοιχα ο χρόνοσ για να φτάςει το ςιμα ςτο Μ2 είναι t2. Θ ταχφτθτα του ιχου μασ είναι γνωςτι: U sound = m/s. Άρα μποροφμε να ποφμε ότι: ( ) και ( ) Αφαιρϊντασ τθν ( ) από τθν ( ) ζχουμε ότι : 64 ( ) όπου Δt είναι θ κακυςτζρθςθ (delay) με τθν οποία φτάνει το θχθτικό ςιμα ςτο Μ1 ςε ςχζςθ με το Μ2. Ζτςι πλζον θ ( ) με τθ χριςθ τθσ ( ) γίνεται Correlation ( ) Ο εντοπιςμόσ τθσ διεφκυνςθσ μιασ πθγισ ιχου από τον άνκρωπο είναι μία ςυνθκιςμζνθ, κακθμερινι λειτουργία που γίνεται ςχεδόν αςυναίςκθτα από κάκε άνκρωπο. Ο εντοπιςμόσ τθσ διεφκυνςθσ τθσ πθγισ ιχου γίνεται διότι ο άνκρωποσ ζχει αναπτφξει τθν ικανότθτα να αντιλαμβάνεται τθν μικρι διαφορά χρόνου άφιξθσ ενόσ ακουςτικοφ ςιματοσ που παράγεται ςε διαφορετικι γωνία από αυτι που ορίηεται από αυτό που λζμε «ευκεία μπροςτά». Είναι δυνατόν να εξομοιϊςουμε τθν λειτουργία αυτι με τθ χριςθ θλεκτρονικϊν ςυςτθμάτων. Δειγματολθπτϊντασ ταυτόχρονα τα ςιματα δφο γειτονικϊν μικροφϊνων, που βρίςκονται ςε μικρι απόςταςθ μεταξφ τουσ, είναι δυνατόν να δοφμε τθν χρονικι διαφορά άφιξθσ ενόσ ακουςτικοφ ςιματοσ ςτα δφο μικρόφωνα [28]. Θ διαδικαςία που χρθςιμοποιοφμε για τθν εφρεςθ τθσ χρονικισ διαφοράσ άφιξθσ ενόσ ακουςτικοφ ςιματοσ ςε δφο μικρόφωνα βαςίηεται ςτθ μζκοδο τθσ ετεροςυςχζτιςθσ (correlation) και περιγράφεται ςυνοπτικά παρακάτω. Βαςική αρχή ετεροςυςχζτιςησ Ασ κεωριςουμε ότι ζχουμε δφο μικρόφωνα το ςιμα των οποίων το ςιμα δειγματολθπτοφμε με ςυχνότθτα Fs. Για να διεκπεραιϊςουμε τθν διαδικαςία ετεροςυςχζτιςθσ του ςιματοσ των δφο μικροφϊνων κα πρζπει να ακολουκιςουμε τα παρακάτω βιματα:

66 Ραίρνουμε για το κάκε ζνα μικρόφωνο S δείγματα (όπου S=2 N-1 ), και τα αποκθκεφουμε ςε δφο πίνακεσ (Μ1 και Μ2 αντίςτοιχα). Ρροςκζτουμε ςτον πίνακα των δειγμάτων από το κάκε μικρόφωνο 2 Ν-1 μηδενικά δείγματα. Συνεπϊσ για κακζνα από τα δφο μικρόφωνα ζχουμε ζνα πίνακα (Μ1 και Μ2 αντίςτοιχα) με 2 Ν ςτοιχεία που περιγράφουν το ςιμα κάκε μικροφϊνου ςτο χρόνο. Εφαρμόηουμε μεταςχθματιςμό Fourier (FFT) ςτουσ πίνακεσ Μ1 και Μ2. Ρροκφπτουν δφο πίνακεσ (fm1 και fm2) με 2 Ν-1 μιγαδικά ςτοιχεία. Ρολλαπλαςιάηουμε τα ςτοιχεία του πίνακα fm1, ζνα προσ ζνα, με τα ςυηυγι ςτοιχεία του πίνακα fm2 και αποκθκεφουμε το αποτζλεςμα του πολλαπλαςιαςμοφ ςτον πίνακα fc12 που και αυτόσ κα περιζχει 2 Ν-1 μιγαδικά ςτοιχεία. Εφαρμόηουμε αντίςτροφο μεταςχθματιςμό Fourier (ifft) ςτο πίνακα fc12. Ρροκφπτει ο πίνακασ C12 που περιζχει 2 Ν πραγματικά ςτοιχεία που αντιπροςωπεφουν τθν ετεροςυςχζτιςθ των ςθμάτων M1 και M2. Εικόνα 5.4 το πάνω ςφςτημα αξόνων φαίνονται δφο ςήματα με ζνα delay μεταξφ τουσ ενϊ ςτο κάτω ςφςτημα φαίνεται το correlation των ςημάτων αυτϊν. Ακριβήσ προςδιοριςμόσ τησ καθυςτζρηςησ Θ κακυςτζρθςθ άφιξθσ του ςιματοσ ςτο ζνα μικρόφωνο από το άλλο εκτιμάται βρίςκοντασ το χρόνο που θ correlation δίνει peak. Δθλαδι θ κακυςτζρθςθ εκτιμάται βρίςκοντασ το index (Ic) του πίνακα που απεικονίηει τθν correlation και ζχει τθν μζγιςτθ τιμι. Το index αναπαριςτά τθν κακυςτζρθςθ αν το πολλαπλαςιάςουμε με τθν περίοδο τθσ δειγματολθψίασ TCd=2/FSample. Από τα παραπάνω είναι ςαφζσ ότι θ κακυςτζρθςθ που προκφπτει από το correlation είναι κβαντιςμζνθ ςε πολλαπλάςια του TCd. Επιπλζον για τιμζσ του Index<2Ν-1 θ κακυςτζρθςθ είναι κετικι δθλαδι ιςχφει: ενϊ για τιμζσ του Index>2 Ν- 1 θ κακυςτζρθςθ είναι: Interpolation 65 ( ) ( ) ( ) Για τον ακριβι προςδιοριςμό του ςθμείου που παρουςιάηει μζγιςτο θ correlation μποροφμε να εφαρμόςουμε πολυωνυμικό interpolation δευτζρου βακμοφ θ εξίςωςθ του οποίου είναι: ( ) Ασ υποκζςουμε ότι θ τιμι του correlation ςτο ςτοιχείο Ic που παρουςιάηεται το μζγιςτο είναι Y2. Εφκολα μποροφμε να ςυνάγουμε ότι θ τιμι του ςτοιχείου Ic-1 του πινάκα, που κεωροφμε ότι είναι το Y1, κακϊσ και θ τιμι του ςτοιχείου Ic+1 που κεωροφμε αντίςτοιχα ότι είναι το Y3, ζχουν μικρότερο πλάτοσ από το Y2. Εφκολα μποροφμε να υποκζςουμε ότι τα ςθμεία Y1, Υ2 και Y3 είναι ςθμεία που ανικουν ςε δευτεροβάκμια εξίςωςθ και ςυνεπϊσ μποροφμε να κεωριςουμε ότι: ( ) ( ) ( )

67 ( ) ( ) ( ) ( ) και να δοφμε ότι για τιμζσ του Λc που ικανοποιοφν τα Υ1, Υ2, Υ3 ζχουμε: Από τα παραπάνω εφκολα μποροφμε να ςυμπεράνουμε ότι: Το πραγματικό μζγιςτο παρουςιάηεται εκεί που θ παράγωγοσ μθδενίηεται δθλαδι για: ( ) ( ) 5.4. Η καταςκευή Σα μζρη από τα οποία αποτελείται η καταςκευή μασ Για τθν καταςκευι του ςυςτιματοσ μασ χρθςιμοποιιςαμε δφο servo motors HS-422 τθσ Hitec, Εικόνα 5.5 Ο servo motor που χρηςιμοποιήςαμε Εικόνα 5.5 Η pan&tilt διάταξη που χρηςιμοποιήςαμε Εικόνα 5.6 Πολλαπλήσ χρήςησ servo brackets Eικόνα 5.7 C τφπου servo bracket 66

68 ζνα Lynx B - Pan and Tilt Kit, τθσ Lynxmotion, το οποίο ςυναρμολογιςαμε, μια πλακζτα με τα μικρόφωνα και το κφκλωμα ενίςχυςθσ αυτϊν. O λόγοσ που χρθςιμοποιιςαμε servo motors είναι ότι οι ςυγκεκριμζνοι κινθτιρεσ ζχουν πολφ καλι απόκριςθ ακόμα και για πολφ μικρζσ μεταβολζσ τθσ γωνίασ, αλλά επίςθσ και το γεγονόσ ότι μποροφν να ελεγχκοφν με τθ χριςθ ενόσ PWM ςιματοσ, το οποίο μπορζςαμε πολφ εφκολα να δθμιουργιςουμε με το Arduino. Θ pan&tilt διάταξθ αποτελείται από ζνα πολλαπλισ χριςθ Servo Bracket από αλουμίνιο, ζνα C τφπου Servo Bracket επίςθσ από αλουμίνιο, διάφορα παξιμάδια, βίδεσ και διάφορα servo horns. Αφοφ ςυναρμολογιςαμε το pan & tilt, ςτθρίξαμε πάνω ςτο C bracket μια βάςθ, πάνω ςτθν οποία βιδϊςαμε τθν πλακζτα μασ. Τα τεχνικά χαρακτθριςτικά του κινθτιρα μασ φαίνονται παρακάτω: Control System: +Pulse Width Control 1500us Neutral Operating Voltage: Volts Operating Speed (4.8V): 0.21sec/60 at no load Stall Torque (4.8V): oz/in. (3.3kg.cm) Operating Angle: 45 Deg. one side pulse traveling 400us Direction: Clockwise/Pulse Traveling 1500 to 1900us Dead Band Width: 8us Potentiometer Drive: Indirect Drive Current Drain (4.8V): 8mA/idle&150mA no load operating Current Drain (6.0V):8.8mA/idle&180mA no load operating 67 Required Pulse: 3-5 Volt Peak to Peak Square Wave Operating Temperature Range: -20 to +60 Degree C Operating Speed (6.0V): 0.16sec/60 at no load Stall Torque (6.0V): oz/in. (4.1kg.cm) 360 Modifiable: Yes Gear Type: Nylon Motor Type: 3 Pole Ferrite Bearing Type: Dual Oilite Bushing Connector Wire Length: 11.81" (300mm) Weight: 1.6oz (45.5g) Εδϊ κα ιταν χριςιμο να αναφζρουμε κάποια γενικά χαρακτθριςτικά ςτοιχεία για τουσ servo motors Ο Servo motor O servo motor ζχει ςτθν καρδιά του ζνα DC κινθτιρα, αλλά επιπροςκζτωσ αποτελείται από ζνα κφκλωμα ελζγχου, ζνα μθχανιςμό ανάδραςθσ και ελζγχου του DC motor και διάφορα γρανάηια. Στθν εικόνα 5.8 φαίνεται καλφτερα από τι ακριβϊσ αποτελείται ζνασ servo motor. Κάκε servo ζχει ζνα καλϊδιο τριϊν pin (ζνα για το Vcc, ζνα για το GND και ζνα για το ςιμα ελζγχου), ενϊ ο τρόποσ ελζγχου ενόσ τζτοιου κινθτιρα είναι ο οριςμόσ ενόσ ςιματοσ ελζγχου (control signal). To ςιμα αυτό είναι λογικισ PWM(ςυγκεκριμζνα ονομάηεται PPM - Pulse Position Modulation-) με τθ διαφορά ότι δεν μασ ενδιαφζρει το duty cycle αλλά ο χρόνοσ που το ςιμα μασ βρίςκεται ςτο HIGH. Ζτςι ανάλογα με το χρόνο αυτό μποροφμε να ςτρζψουμε τον κινθτιρα μασ ςτθν κατάλλθλθ γωνία (βλζπε Εικόνα 5.9). Υπάρχουν κυρίαρχα δφο είδθ servo motors. Το ποιο ςυνθκιςμζνο είδοσ είναι αυτοί που Εικόνα 5.8 Εικόνα 5.9 Μηχανικά μζρη ενόσ servo motor Ζλεγχοσ κίνηςησ ενόσ servo motor

69 ζχουν περιοχι λειτουργίασ από 0 ζωσ 180 μοίρεσ (ςε μερικζσ περιπτϊςεισ και μεγαλφτερθ π.χ. 270 ι και 360) και το κφκλωμα ελζγχου ορίηει τθν κζςθ (γωνία) του κινθτιρα. Το δεφτερο είδοσ είναι οι servo motors ςυνεχοφσ κίνθςθσ όπου ελζγχουμε τθν ταχφτθτα περιςτροφισ τουσ και όχι τθ γωνία ςτθν οποία πρζπει να ςτραφοφν. Στθν περίπτωςθ μασ χρθςιμοποιιςαμε τθν πρϊτθ κατθγορία servo κινθτιρων Ηλεκτρονική χεδίαςη Σο ςχηματικό διάγραμμα Στο ςχθματικό διάγραμμα βλζπουμε το κφκλωμα ενίςχυςθσ και φιλτραρίςματοσ ενόσ εκ των τριϊν μικροφϊνων. Θ είςοδοσ του μικροφϊνου οδθγείται μζςα από τρεισ τελεςτικοφσ ενιςχυτζσ, που ουςιαςτικά υλοποιοφν ζναν ενιςχυτι με μζγιςτο κζρδοσ 3000 και ζνα κατωδιαβατό butterworth φίλτρο 5 ου βακμοφ ςτα 5 ΚΘz, πριν περάςει ςτθν ζξοδο. Ο τζταρτοσ ενιςχυτισ χρθςιμοποιείται για τθν AGC (Automatic Gain Control) λειτουργία τθσ ενίςχυςθσ των μικροφϊνων. Το AGC ουςιαςτικά ρυκμίηει τθν ζξοδο να ζχει τθν ίδια Pk-Pk τιμι ζτςι ϊςτε Εικόνα 5.10 Σο ςχηματικό διάγραμμα ενόσ μικροφϊνου ανεξαρτιτωσ τθσ ζνταςθσ που ζχει το θχθτικό ςιμα να ζχουμε ίδιασ ζνταςθσ ζξοδο του κυκλϊματοσ και άρα είςοδο ςτο μικροελεγκτι μασ. Το ςχθματικό αυτό υλοποιείται ςτο PCB τρεισ φορζσ ϊςτε να ζχουμε τελικά ζνα κφκλωμα ενίςχυςθσ για κάκε ζνα από τα μικρόφωνα. Τα βαςικά ςτοιχεία τθσ καταςκευισ είναι τα εξισ: 3 Electret μικρόφωνα 3 AD8544 smd το οποίο περιζχει τουσ τζςςερισ τελεςτικοφσ ενιςχυτζσ 3 1Ν4148 διόδουσ 3 BSS123 transistors Αντιςτάςεισ και πυκνωτζσ διαφόρων τιμϊν χεδίαςη PCB Για τθ ςχεδίαςθ των ςχθματικϊν και των PCB χρθςιμοποιιςαμε το Altium Designer. Το PCB τθσ πλακζτασ μασ, που φαίνεται ςτθν Εικόνα 5.12, αποτελεί τθν υλοποίθςθ του ςχθματικοφ διαγράμματοσ. Επιλζξαμε κυρίαρχα smd πυκνωτζσ και αντιςτάςεισ για οικονομία χϊρου. Θ απαιτοφμενθ μεγάλθ χωρθτικότθτα κάποιων πυκνωτϊν μασ οδιγθςαν ςτο να βάλουμε through-hole components για αυτοφσ τουσ πυκνωτζσ. Through-hole είναι επίςθσ και οι δίοδοι που χρθςιμοποιιςαμε, αλλά και τα μικρόφωνα. Τοποκετιςαμε επίςθσ το smd ολοκλθρωμζνο AD8544 τθσ Analog Devices που εμπεριζχει τουσ τζςςερισ τελεςτικοφσ ενιςχυτζσ που βρίςκονται ςτο κφκλωμα μασ. Ππωσ διαπιςτϊνουμε από το schematic αλλά και από τθν εικόνα 5.11 θ ζξοδοσ του πρϊτου τελεςτικοφ ενιςχυτι ςτο PIN 1 του AD8544 αποτελεί είςοδο για 68 Εικόνα 5.11 AD8544

70 τον επόμενο ενιςχυτι του οποίου θ ζξοδοσ που εμφανίηεται ςτο PIN 7 είναι επίςθσ είςοδοσ για τον τρίτο ενιςχυτι, θ ζξοδοσ του οποίου βγαίνει ςτο PIN 8. Αυτι είναι και ζξοδοσ του ςυςτιματοσ μασ ενϊ όπωσ αναφζρκθκε ο τζταρτοσ ενιςχυτισ με τθν ανάδραςθ που παρζχει μζςω του n-mos BSS123 transistor βοθκά ςτθν υλοποίθςθ του AGC. Στο PCB μασ τοποκετιςαμε επίςθσ ζνα polygon plane ςυνδεδεμζνο με το net του GND ζτςι ϊςτε να ζχουμε διακζςιμθ γείωςθ ςε όλθ τθν πλακζτα και να μθν χρειαςτεί να ςχεδιάςουμε ξεχωριςτι γραμμι για το GND net. Δυςτυχϊσ όμωσ όλα τα κομμάτια του PCB που δεν περιείχαν components ι γραμμζσ δεν μποροφςαν να «γεμίςουν» με αυτό το plane και να ζχουμε παντοφ GND, οπότε βάλαμε δφο jumpers ςτο top layer (το PCB μασ είναι ςχεδιαςμζνο ςτο bottom layer) για να ενϊςουμε τα απομονωμζνα κομμάτια. Εικόνα 5.12 To PCB του «Voice Locator» 69

71 5.6. Λογιςμικό Για να μπορζςουμε να υλοποιιςουμε το πρόγραμμα μασ αλλά και να ελζγξουμε τθν ευρωςτία του κϊδικά μασ ακολουκιςαμε τα παρακάτω βιματα: Δημιουργία ςημάτων ςτο Microsoft Excel Αρχικά χρειάςτθκε να δθμιουργιςουμε κάποια κεωρθτικά ςιματα. Ζτςι λοιπόν δθμιουργιςαμε ζνα αρχείο Excel το οποίο περιείχε τισ διάφορεσ τιμζσ που κα μποροφςαν να πάρουν τα ςιματα τα οποία κα παίρναμε από τα μικρόφωνά μασ. Στο αρχείο αυτό ςυνδζςαμε και ζνα κϊδικα ςε Visual Basic for Applications, ο οποίοσ μπορεί να μασ παράγει τα επικυμθτά ςιματα απλά με τθν ρφκμιςθ παραμζτρων. Οι παράμετροι που κζλουμε είναι των πόςων bit κα είναι το ςιματά μασ και πόςθ κακυςτζρθςθ κα ζχει το ςιμα Α από το ςιμα Β και αντιςτοίχωσ το ςιμα C από το ςιμα Β. Ζτςι δθμιουργικθκε το παραμετροποιθμζνο αρχείο excel, screenshots του οποίου, φαίνονται ςτθν Εικόνα 5.13 και Επίςθσ παρακζτουμε και τον κϊδικα τθσ Visual Basic EXCEL Εικόνα 5.13 Parameters sheet Εικόνα 5.14 Signals sheet Ραρατθροφμε ότι για να παράγουμε 8-bit ςιμα κζτουμε τον εκκζτθ ίςο με 8. Αυτό μασ δθμιουργεί ζνα πίνακα πλάτουσ 256 αλλά το δεφτερο μιςό του πίνακα περιζχει μόνο μθδενικά, όπωσ φαίνεται και ςτο γράφθμα ςτο signals sheet (Εικόνα 5.14). Εμείσ από τον παραχκζντα πίνακα παίρνουμε μόνο τα 128 πρϊτα δείγματα (αφινουμε τα μθδενικά) κακϊσ αυτό απαιτοφςε ο τρόποσ λειτουργίασ τθσ βιβλιοκικθσ για να διεξάγουμε τον FFT ςτο Arduino (περαιτζρω λεπτομζρειεσ ςε επόμενο υποκεφάλαιο). Επίςθσ αυτό που παρατθροφμε ςτο γράφθμα είναι ότι το ςιμα Α (μπλε χρϊμα) ζπεται του ςιματοσ Β (μωβ χρϊμα) κατά 3 τιμζσ, ενϊ το ςιμα C (κίτρινο χρϊμα) προθγείται του ςιματοσ Β κατά 5. Επίςθσ ςτισ ςτιλεσ D, E, F του signals sheet κανονικοποιοφμε τισ τιμζσ των ςθμάτων ϊςτε να μποροφν να είναι επεξεργάςιμεσ από το Arduino. Λόγω ζλλειψθσ μνιμθσ RAM (μόνο 2 ΚΒ) κζλουμε τα ςιματα μασ να είναι 8-bit 70

72 προςθμαςμζνοι αρικμοί. Ζτςι το κάκε cell τθσ ςτιλθσ D ζχει το ΛΝΤ((Αx-512)/4) αφοφ θ ςτιλθ Α ζχει τιμζσ που κινοφνται ςτο διάςτθμα *0,1024) δθλαδι το ςιμα μασ είναι 10-bit. Με τον ίδιο τρόπο, θ ςτιλθ Ε περιζχει τισ κανονικοποιθμζνεσ τιμζσ τθσ ςτιλθσ Β, και θ ςτιλθ F αυτζσ τθσ C. Αυτι θ διαδικαςία ζγινε γιατί ενϊ αρχικά γνωρίηαμε ότι o ADC του Arduino είναι 10-bit, διαπιςτϊςαμε ότι για να μπορζςουμε να χρθςιμοποιιςουμε τθν απαιτοφμενθ ςυχνότθτα δειγματολθψίασ για τθν καλι λειτουργία του ςυςτιματοσ, πρζπει να επεξεργαςτοφμε ςιματα μικρότερθσ ανάλυςθσ Κϊδικασ ςε Visual Basic Public Const Pi As Single = Public Sub DoTheJob() Dim T1 As Single Dim T3 As Single Dim fs As Single Dim dt As Single Dim N As Long Dim K As Long Dim M As Long Dim I As Long N = Sheets(1).Cells(2, 2) fs = 1000 * 2 ^ (N - 1) dt = 1 / fs T1 = Sheets(1).Cells(3, 2) * dt T3 = Sheets(1).Cells(4, 2) * dt K = 2 ^ (N - 1) M = 2 * K For I = 1 To K - 1 Sheets(2).Cells(I, 1) = xsign((i - 1) * dt, T1) Sheets(2).Cells(I, 2) = xsign((i - 1) * dt, 0) Sheets(2).Cells(I, 3) = xsign((i - 1) * dt, T3) Next I For I = K To M Sheets(2).Cells(I, 1) = 512 Sheets(2).Cells(I, 2) = 512 Sheets(2).Cells(I, 3) = 512 Next I End Sub Private Function xsign(t As Single, d As Single) As Long Dim Fh As Single Dim Fl As Single Dim c As Single Dim L As Single Dim ss As Single Dim N As Long Dim I As Long Fh = N = 20 Fl =

73 c = 1 / (2 * Fh) L = 1 / (2 * Fl) ss = 0 For I = 1 To N ss = ss + (2 / (I * Pi)) * ((-1) ^ I) * (Cos(I * Pi * c / L) - 1) * Sin(I * Pi * (t - d) / L) Next I ss = ss * 0.8 xsign = * ss End Function Εξομοίωςη ςε MATLAB Αρχικά, χρθςιμοποιϊντασ τθ κεωρία που περιγράφθκε ςτο υποκεφάλαιο 5.3 ςε ςυνδυαςμό με τθν μζκοδο GCC-PHAT (Generalized Cross Correlation with Phase Transform) αλλά και με τα ςιματα που παριχκθςαν ςτο Excel, προχωριςαμε ςτθν εξομοίωςθ του προγράμματόσ μασ ςε MATLAB ϊςτε να μπορζςουμε να διαπιςτϊςουμε τθ γενικι ςυμπεριφορά του ςυςτιματοσ. Ζτςι δθμιουργιςαμε ζνα αρχείο ςυνάρτθςθσ ςτο ΜΑΤLAB (.m file) με το οποίο μπορζςαμε να βγάλουμε χριςιμα ςυμπεράςματα. Ραρακάτω παρατίκεται ο κϊδικασ που ςυγγράψαμε Κϊδικασ A=[0,2,2,0,-2,-2,-1,1,2,0,-2,-3,-1,1,2,1,-2,-3,-2,1,2,1,-1,-3,-2,0, 2,2,-1,-3,- 3,0,2,2,0,-3,-3,-1,2,3,1,-3,-4,-2,2,4,2,-3,-5,-4,2,5,4, -3,-8,-6,2,9,7,-5,-15,-9,22,70,110,114,73,0,-74,-115,-111,-71,-23,8, 15,4,-8,- 10,-3,5,7,2,-4,-6,-3,3,5,2,-3,-5,-3,1,4,2,-2,-4,-3,0,3,2,-1, -3,-3,0,2,2,0,-3,- 3,-1,1,2,0,-2,-3,-1,1,2,1,-1,-3,-2,0,2,1,-1,-3,0]; A=A'; B=[0,-2,-2,-1,1,2,0,-2,-3,-1,1,2,1,-2,-3,-2,1,2,1,-1,-3,-2,0,2,2,-1,-3,- 3,0,2,2,0,-3,-3,-1,2,3,1,-3,-4,-2,2,4,2,-3,-5,-4,2,5,4,-3,-8,-6, 2,9,7,-5,-15,- 9,22,70,110,114,73,0,-74,-115,-111,-71,-23,8,15,4,-8, -10,-3,5,7,2,-4,-6,-3,3,5,2,-3,-5,-3,1,4,2,-2,-4,-3,0,3,2,-1,-3,-3, 0,2,2,0,-3,- 3,-1,1,2,0,-2,-3,-1,1,2,1,-1,-3,-2,0,2,1,-1,-3,-2,0,2,0]; B=B'; fa=fft(b); fb=fft(a); %creating fa %creating fb %pre-whitening fap=fa./abs(fa); fbp=fb./abs(fb); %dividing every element of fa with its abs %dividing every element of fb with its abs %frequency domain cross-correlation R=fA.*conj(fB); %multiplying every element of fa with the %conjugate of every element in fb %time domain cross-correlation rr=real(ifft(r)); %we only need the real parts of the numbers %find delay rr=[rr(end/2+2:end);rr(1:end/2+1)]; %flip the matrix containing the %correlation in order to [max_val, max_idx]=max(rr); %find the maximum value in this matrix %and its index delay=length(rr)/2-max_idx %finding delay Για τα σήματα αυτά πήραμε τα παρακάτω γραυήματα: 72

74 Εικόνα 5.15 Σα παραχθζντα από το Matlab γραφήματα Arduino Αφοφ διαπιςτϊςαμε τθν καλι λειτουργία του ςυςτιματοσ ςε αυτό το επίπεδο, με τθ διαδικαςία που περιγράφθκε παραπάνω, προχωριςαμε ςτθν υλοποίθςθ ςε Arduino. Αρχικά για να βγάλουμε ςυμπεράςματα για τθ ςυμπεριφορά του ςυςτιματοσ ειςάγαμε ιδανικά ςιματα ςαν ειςόδουσ και ςτθ ςυνζχεια προχωριςαμε ςτισ πειραματικζσ μετριςεισ. Σε πρϊτο επίπεδο παίρναμε τα δεδομζνα από το serial monitor του Arduino και παράγαμε αντίςτοιχα plots ςτο Matlab, ϊςτε να ζχουμε ζλεγχο τθσ ςυμπεριφοράσ του ςυςτιματοσ. Ζτςι, όμωσ, μποροφςαμε να βλζπουμε τα αποτελζςματα μόνο μιασ δεδομζνθσ χρονικισ ςτιγμισ και όχι τθν αλλαγι των δεδομζνων ςε πραγματικό χρόνο ϊςτε να βγάλουμε πιο αςφαλι και ακριβι ςυμπεράςματα για το ςφςτθμά μασ. Για αυτό το λόγο δθμιουργιςαμε ςε Visual Basic ζνα πρόγραμμα το οποίο διαβάηει τισ τιμζσ τθσ serial port και δθμιουργεί ζνα γράφθμα κακϊσ οι τιμζσ αυτζσ ανανεϊνονται ςυνεχϊσ (βλζπε Ραράρτθμα: Arduino Data Plotter). Κάτω φαίνεται ζνα παράδειγμα από τα plots που δθμιουργιςαμε ςτο Matlab. Εικόνα 5.15 Matlab Plots 73

75 Ιδανικά (Θεωρητικά) ήματα Κζτοντασ ςαν ειςόδουσ από τα μικρόφωνα ςυγκεκριμζνα ςιματα, τα οποία όμωσ παράλλθλα προγραμματίςαμε το Arduino να δθμιουργοφν διαφορετικό delay (προςομοιάηοντασ ζτςι μια κινοφμενθ ιδανικι πθγι ιχου) κάκε φορά που επαναλαμβανόταν θ void loop(), μπορζςαμε ςε πραγματικό χρόνο να παρατθριςουμε πωσ κινείται το correlation και τα delay. Επίςθσ δθμιουργιςαμε και ζνα μικρό πίνακα, τον «Corr_Add», ςτον οποίο βάηουμε τθν πρόςκεςθ των τιμϊν του correlation ςε ζνα παράκυρο γφρω από τθν κεντρικι τιμι, ϊςτε να αποφφγουμε glitches και λάκθ του Correlation που διαπιςτϊςαμε ςτισ πειραματικζσ μασ μετριςεισ. Ζχοντασ ελζγξει και ςτο Matlab το correlation και το delay που κα ζπρεπε να ζχουμε, πιραμε τα παρακάτω αποτελζςματα: Εικόνα 5.16 ήμα Α Εικόνα 5.17 ήμα Β Εικόνα 5.18 Σο Correlation των ςημάτων Εικόνα 5.19 Πίνακασ Corr_Add Δεν παρακζτουμε τον κϊδικα που δθμιουργιςαμε για τα κεωρθτικά ςιματα κακϊσ διαφζρει μόνο ςτον οριςμό των ςθμάτων ςε ςχζςθ με τον κϊδικα που δθμιουργιςαμε για τα πραγματικά ςιματα Πραγματικά ςήματα Περιγραφή του προγράμματοσ μασ Αφοφ ορίςουμε και αρχικοποιιςουμε τισ μεταβλθτζσ μασ, αυξιςουμε τθ default ςυχνότθτα δειγματολθψίασ του Arduino ςτα 20 ΚΘz και ανακζςουμε τισ ειςόδουσ και τισ εξόδουσ ςε αντίςτοιχα pins, περνάμε ςτο κυρίωσ πρόγραμμα. Αρχικά δειγματολθπτοφμε από τα μικρόφωνα μασ, κανονικοποιϊντασ ταυτόχρονα τισ τιμζσ που παίρνουμε από τον 10-bit ΑDC, ϊςτε να γίνουν 8-bit. Στθ ςυνζχεια αφοφ διεξάγουμε ζνα ζλεγχο ϊςτε να αποφφγουμε το κόρυβο από πολφ χαμθλισ ιςχφοσ ςιματα, εναλλάςςουμε, κάκε φορά που τρζχει θ loop, ζνα flag ϊςτε να δειγματολθπτίςουμε, είτε από το οριηόντιο, είτε από το κάκετο επίπεδο κινϊντασ τον αντίςτοιχο servo. Σε αυτό το ςθμείο διεξάγουμε μεταςχθματιςμό Fourier (FFT) των ςθμάτων και περνάμε ςτο πεδίο τθσ ςυχνότθτασ. Θ βιβλιοκικθ για τον FFT που χρθςιμοποιοφμε, χρειάηεται τθ 74

76 δθμιουργία δφο πινάκων, ζνα για τα πραγματικά μζρθ και ζνα για τα φανταςτικά μζρθ των παραγόμενων μιγαδικϊν αρικμϊν. Στθ ςυνζχεια διενεργοφμε τθν ετεροςυςχζτιςθ (correlation) μεταξφ των ςθμάτων και τα κανονικοποιοφμε ςε μζγεκοσ 3-bits. Δθμιουργοφμε ζτςι δφο νζουσ πίνακεσ: τον Correlation_real[ ] και τον Correlation_imag* ] όπου αποκθκεφουμε πάλι τα πραγματικά και τα φανταςτικά μζρθ αντίςτοιχα. Στουσ πίνακεσ του correlation διεξάγουμε αντίςτροφο μεταςχθματιςμό Fourier (IFFT) και πλζον ζχουμε επιςτρζψει ςτο πεδίο του χρόνου. Ζτςι ο πρϊτοσ πίνακασ περιζχει πλζον τα αποτελζςματα του correlation ςτο πεδίο του χρόνου (μόνο πραγματικζσ τιμζσ δθλαδι) ενϊ ο Correlation_imag[ ] περιζχει πλζον μόνο μθδενικά. Εδϊ κάνουμε αυτό που εμείσ ονομάηουμε «flip», φζρνουμε δθλαδι τα 65 τελευταία ςτοιχεία του πίνακα ςτθν αρχι και τα 63 πρϊτα ςτο τζλοσ (ο πίνακασ μασ περιζχει 128 ςτοιχεία). Αυτό γίνεται λόγω τθσ ςυμμετρίασ του FFT. Πταν κάνουμε πολλαπλαςιαςμό ςτο πεδίο τθσ ςυχνότθτασ, δθλαδι ςυνζλιξθ ςτο πεδίο του χρόνου, τα ςτοιχεία των πινάκων αντιμετατίκενται, οπότε ακολουκοφμε τθ διαδικαςία του «flip» για να τα επαναφζρουμε ςτθ ςωςτι κζςθ. Τϊρα ςφμφωνα με τθ κεωρία, το index του ςτοιχείου του πίνακα με τθν μεγαλφτερθ τιμι αποτελεί το delay μασ. Επειδι όμωσ θ κεωρία πάντα απζχει από τθν πράξθ (και το χρζοσ του μθχανικοφ είναι να γεφυρϊςει αυτό το χάςμα), κατά τθν υλοποίθςθ του προγράμματόσ μασ αντιμετωπίςαμε κάποια glitches και λάκθ ςτο correlation, όπωσ αναφζραμε παραπάνω. Ζτςι δθμιουργιςαμε ζνα παράκυρο 20 τιμϊν γφρω από το ςθμείο που περιμζναμε να βγει το ςωςτό correlation και δθμιουργιςαμε τον Corr_Add, ζνα πίνακα ςτον οποίο προςκζτουμε όλεσ τισ αντίςτοιχεσ τιμζσ του correlation ςτο παράκυρο αυτό, κάκε φορά που επαναλαμβανόταν θ loop() μασ. Ζτςι θ ςωςτι τιμι, που εμφανιηόταν τισ περιςςότερεσ φορζσ, γινόταν αρκετά μεγάλθ ϊςτε να μασ δϊςει το επικυμθτό peak. Επειδι όμωσ πάλι κζλουμε να ζχουμε πιο ακριβζσ αποτζλεςμα, προχωριςαμε ςτθ διαδικαςία του Interpolation που περιγράψαμε ςτο υποκεφάλαιο Ζτςι μποροφμε πλζον να βροφμε το επικυμθτό delay, το οποίο και πάλι ςφμφωνα με τθ γεωμετρικι ανάλυςθ που κάναμε ςτο υποκεφάλαιο μασ οδθγεί ςτον υπολογιςμό τθσ γωνίασ τθσ διεφκυνςθσ τθσ πθγισ ιχου. Μποροφμε πλζον να τροφοδοτιςουμε τουσ servo motors μασ με αυτι τθν γωνία. Κανονικά κα ζπρεπε να προχωριςουμε και ςτθ διαδικαςία παραγωγισ ενόσ PPM ςιματοσ για τον ζλεγχο των servo motor μασ αλλά το Arduino IDE παρζχει μια πολφ απλι και χρθςτικι βιβλιοκικθ μόνο για τον ζλεγχο ςερβοκινθτιρων, τθν οποία και χρθςιμοποιιςαμε. Στισ παρακάτω εικόνεσ φαίνονται τα ςιματα που λάβαμε από δφο μικρόφωνα, το correlation και ο πίνακασ Corr_Add. Εικόνα 5.19 To ςήμα που δειγματοληπτοφμε από ζνα μικρόφωνο Εικόνα 5.21 Σο correlation ςημάτων δφο δειγματοληφθζντων 75

77 Κϊδικασ #include <fix_fft.h> #include <Servo.h> #define N 128 Εικόνα 5.22 Ο πίνακασ Corr_Add // define ADC sample rate // #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif Εικόνα 5.3 Εικόνα 5.2 #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) = _BV(bit)) #endif // define ADC sample rate // // Arrays // char mica_real[n]; //array for signals from microphone A char mica_imag[n]; //array for imaginary numbers produced by FFT char micb_real[n]; //array for signals from microphone A char micb_imag[n]; //array for imaginary numbers produced by FFT char Correlation_real[N]; //array for the real parts of correlation char Correlation_imag[N]; //array for the imaginary of correlation double Cor_Add_AB[20];//array to add the correlation of mica and micb double Cor_Add_BC[20];//array to add the correlation of micc and micb // Arrays // // Create Servo objects // Servo myservo1; Servo myservo2; // Create Servo objects // // Variables // byte xflag=0; //iteration or single run byte Status_Flag=0; //up down or right left byte i; //iterations byte j; //iterations unsigned int MicSum; //value to avoid noise int t; //Normalization int tmax; //Normalization char temp63; //flip char temp64; //flip char tempab; //flip short tempab; //Max Corad short maxval; //Max Corad byte index; //Max Corad float A; //Interpolation 76

78 float B; //Interpolation float Ic; //Interpolation float delayab; //final delay1 float delaybc; //final delay2 float angleab=90; //final angle1 float anglebc=100; //final angle2 // Variables // // Setup // void setup() { Serial.begin(115200); // ADC sampling rate // cbi(adcsra,adps2) ; sbi(adcsra,adps1) ; cbi(adcsra,adps0) ; // ADC sampling rate // myservo1.attach(9); // attaches the servo on pin 9 to the servo myservo2.attach(10); // attaches the servo on pin 10 to the servo pinmode(a0,input); //A0 is an input pinmode(a5,input); //A4 is an input pinmode(a4,input); //A5 is an input pinmode(8,output); //digital pin 8 is an output byte i; for(i =0; i<20; i++)cor_add_ab[i]=0; // Setup // // Loop // void loop(){ // Initialization // for(i=0; i<n; i++) { mica_imag[i]=0; micb_imag[i]=0; // Initialization // // Sampling // for (i=0;i<n;i++) { digitalwrite(8,high); mica_real[i]=(analogread(a4)-512)/4; digitalwrite(8,low); if(status_flag==0)micb_real[i]=(analogread(a1)-512)/4; if(status_flag==1)micb_real[i]=(analogread(a5)-512)/4; // Sampling // // Servo Control // MicSum=0; for(i=0; i<n; i++)micsum+=abs(mica_real[i]); if(micsum>800) { if(status_flag==0)myservo1.write(angleab); if(status_flag==1)myservo2.write(anglebc); // Servo Control // // fft // fix_fft(mica_real,mica_imag,7,0); fix_fft(micb_real,micb_imag,7,0); // fft // 77

79 // freqeuncy cross-correlation // // multiply with conjugate and normalization // tmax=0; for (i=0;i<n;i++) { t=abs(int(micb_real[i])*int(mica_real[i])+ +int(micb_imag[i])*int(mica_imag[i])); if(t>tmax)tmax=t; t=abs(int(micb_imag[i])*int(mica_real[i])- -int(micb_real[i])*int(mica_imag[i])); if(t>tmax)tmax=t; for (i=0;i<n;i++) { t=int(micb_real[i])*int(mica_real[i])+ +int(micb_imag[i])*int(mica_imag[i]); Correlation_real[i]=char(t*7/tmax); t=int(micb_imag[i])*int(mica_real[i])- -int(micb_real[i])*int(mica_imag[i]); Correlation_imag[i]=char(t*7/tmax); // multiply with conjugate and normalization // // ifft(time domain cross correlation) // fix_fft(correlation_real,correlation_imag,7,1); // ifft(time domain cross correlation) // // freqeuncy cross-correlation // // flip // temp63=correlation_real[n/2-1]; temp64=correlation_real[n/2]; for (i=0;i<n/2-1;i++) { tempab=correlation_real[i]; Correlation_real[i]=Correlation_real[i+N/2+1]; Correlation_real[i+N/2-1]=tempab; Correlation_real[N-2]=temp63; Correlation_real[N-1]=temp64; // flip // // Horizontal Microphones // // Correlation average // if(status_flag==0){ j=0; for(i=54; i<74; i++){ Cor_Add_AB[j]*= 0.8; Cor_Add_AB[j] += float(correlation_real[i])*0.2; j++; // Correlation average // // MaxVal // maxval=cor_add_ab[0]; for (i=1;i<20;i++) { tempab=cor_add_ab[i]; if (tempab>maxval) { 78

80 maxval=tempab; index=i; // MaxVal // // Interpolation and delay // A= (Cor_Add_AB[index-1]+Cor_Add_AB[index+1]-(2*Cor_Add_AB[index]))/2; B= (Cor_Add_AB[index+1]-Cor_Add_AB[index-1])/2; Ic= B*(-1)/(2*A); delayab=index+ic; delayab=8-delayab; // Interpolation and delay // // angle // if(maxval>0){ if(delayab<=-0.15) { angleab=angleab+3; { if (angleab>150)angleab=150; else if(delayab>=0.15) { angleab=angleab-3; if (angleab<30)angleab=30; // angle // // Horizontal Microphones // // Vertical Microphones // // Correlation average // if(status_flag==1){ j=0; for(i=54; i<74; i++){ Cor_Add_BC[j]*= 0.8; Cor_Add_BC[j] += float(correlation_real[i])*0.2; j++; // Correlation average // // MaxVal // maxval=cor_add_bc[0]; for (i=1;i<20;i++) { tempab=cor_add_bc[i]; if (tempab>maxval) { maxval=tempab; index=i; // MaxVal // // Interpolation and delay // A= (Cor_Add_BC[index-1]+Cor_Add_BC[index+1]-(2*Cor_Add_BC[index]))/2; B= (Cor_Add_BC[index+1]-Cor_Add_BC[index-1])/2; Ic= B*(-1)/(2*A); delaybc=index+ic; 79

81 delaybc=8-delaybc; // Interpolation and delay // // angle // if(maxval>0){ if(delaybc<=-0.15) { anglebc=anglebc+3; { if (anglebc>150)anglebc=150; else if(delaybc>=0.15) { anglebc=anglebc-3; if (anglebc<75)anglebc=75; // angle // // Vertical Microphones // if(status_flag==0)status_flag=1; //move servo 1 else if(status_flag==1)status_flag=0; //move servo 2 // Loop // 80

82 5.7. Αποτελζςματα - Φωτογραφίεσ Εικόνα 5.20 Πλάγια όψη τησ καταςκευήσ μασ Εικόνα 5.21 Οπίςθια όψη τησ καταςκευήσ μασ - Σο κφκλωμα Εικόνα 5.22 Εμπρόςθια όψη τησ καταςκευήσ μασ Σα μικρόφωνα 5.8. Προβλήματα Βελτιϊςεισ Ζνα από τα ςθμαντικότερα προβλιματα του Voice Locator ιταν θ πολφ περιοριςμζνθ μνιμθ RAM του Arduino, πράγμα το οποίο μασ ανάγκαςε να κάνουμε τθν επεξεργαςία για το οριηόντιο και το κάκετο επίπεδο εναλλάξ και όχι ταυτόχρονα. Επίςθσ, ζνα άλλο πρόβλθμα ιταν, θ ειςαγωγι κορφβου από τθν κίνθςθ των servo motors, κακϊσ ςτθ διάταξθ τθσ καταςκευισ μασ οι motors βρίςκονταν πολφ κοντά ςτα μικρόφωνα. Μςωσ, το πρόβλθμα να λφνεται με επιλογι ακόρυβων, κατά τθν κίνθςθ, servo motors. Ζνα τρίτο πρόβλθμα, το οποίο ζκανε ςχετικά αργό το ςφςτθμα μασ, είναι θ πολφ αργι επεξεργαςία floating point αρικμθτικισ από το Arduino, διαδικαςία θ οποία κα είχε αποτζλεςμα πολφ πιο γριγορθ απόκριςθ του ςυςτιματοσ. Τζλοσ, ο κϊδικάσ μασ επιδζχεται βελτιϊςεων ςτο επίπεδο εφρεςθσ τθσ γωνίασ, κακϊσ κατά τθσ δοκιμζσ που κάναμε, ο υπολογιςμόσ τθσ, κάποιεσ φορζσ, ιταν μθ αποδεκτόσ. Το πρόβλθμα αυτό λφκθκε με τθν ειςαγωγι ενόσ ελζγχου που υποδεικνφει προσ τα ποφ κα πρζπει εν τζλει να κινθκεί ο motor, με ςυνεχείσ προςεγγίςεισ και διορκϊςεισ. 81

83 6. F-Penguino: An FPGA based flexible development platform 6.1. Τλοποίηςη με υλικό Κατά τθ ςχεδίαςθ ενόσ ςυςτιματοσ, πρωταρχικό ρόλο παίηει το ερϊτθμα, εάν για τθν υλοποίθςι του κα χρθςιμοποιθκεί λογιςμικό (software) υλικό (hardware) ι και τα δφο. Θ απάντθςθ εξαρτάται από το είδοσ και τθ λειτουργία του ςυςτιματοσ που κζλουμε να υλοποιιςουμε αφοφ και οι δφο λογικζσ προςφζρουν τα αντίςτοιχα πλεονεκτιματα και μειονεκτιματα. Θ υλοποίθςθ ενόσ ενςωματωμζνου ςυςτιματοσ με λογιςμικό (software) βαςίηεται ςτθν αρχιτεκτονικι του μικροεπεξεργαςτι, εκτελϊντασ ςειριακά εντολζσ από το ςφνολο εντολϊν που υποςτθρίηει και προκακορίηεται κατά τθν καταςκευι του. Τα πλεονεκτιματα μιασ τζτοιασ υλοποίθςθσ είναι θ ευελιξία, θ χριςθ ζτοιμων βιβλιοκθκϊν, το χαμθλό κόςτοσ, θ χαμθλι κατανάλωςθ κακϊσ και θ εφκολθ εντόπιςθ λακϊν ςτον κϊδικα (debugging). Αντικζτωσ, θ υλοποίθςθ με υλικό αναφζρεται είτε ςτθ δθμιουργία ολοκλθρωμζνων κυκλωμάτων, είτε ςτον προγραμματιςμό προγραμματιηόμενων ψθφιακϊν κυκλωμάτων όπωσ τα PAL, CPLD και FPGA. Σε αυτιν τθν περίπτωςθ, το μεγαλφτερο κζρδοσ βρίςκεται ςτθν ταχφτθτα, αφοφ αξιοποιοφν τθ λογικι του παραλλθλιςμοφ. Σο FPGA (Field Programmable Gate Array) είναι ζνασ τφποσ προγραμματιηόμενου ολοκλθρωμζνου κυκλϊματοσ γενικισ χριςθσ. Θ λειτουργία του δεν προκακορίηεται κατά το ςτάδιο τθσ καταςκευισ, αλλά αντίκετα μπορεί να επαναπρογραμματίηεται μζςω γλωςςϊν περιγραφισ υλικοφ (VHDL, verilog, systemc). Τα βαςικά ςτοιχεία ενόσ FPGA είναι το Configurable Logic Block (που περιζχει κυρίωσ Look-up tables, πολυπλζκτεσ, Flip-Flops και λογικζσ πφλεσ), τα Configurable I/O Blocks και τα προγραμματιηόμενα κυκλϊματα διαςφνδεςθσ (Programmable Interconnect). Τα ςφγχρονα FPGA παρζχουν ενςωματωμζνα πολφπλοκα κυκλϊματα όπωσ μνιμεσ RAM, ενςωματωμζνουσ πολλαπλαςιαςτζσ (embedded multipliers), ειδικζσ μονάδεσ διαχείριςθσ παλμϊν (Digital Clock Manager Blocks), υψθλισ ταχφτθτασ ςειριακοφσ διαφλουσ (Rocket I/O), ακόμα και επεξεργαςτζσ, δίνοντασ τθ δυνατότθτα ςυνδυαςμοφ hardware με software υλοποίθςθσ. Ζνα FPGA μπορεί να προγραμματιςτεί με δφο διαφορετικοφσ τρόπουσ, ανάλογα με τον τφπο του. Ο κυρίαρχοσ τφποσ FPGA χρθςιμοποιεί SRAMs. Ο προγραμματιςμόσ του γίνεται με αποκικευςθ των κατάλλθλων bits ςε κφτταρα SRAM, γεγονόσ που του δίνει τθ δυνατότθτα να επαναπρογραμματιςτεί. Ζνα μειονζκτθμα που παρουςιάηουν είναι θ ανάγκθ επαναπρογραμματιςμοφ κάκε φορά που διακόπτεται θ τροφοδοςία, κακϊσ τα ςτοιχεία αποκικευςθσ είναι τφπου static RAM [29]. Η Γλϊςςα περιγραφήσ υλικοφ VHDL χρθςιμοποιείται για τθ περιγραφι ενόσ ψθφιακοφ κυκλϊματοσ (από μία απλι λογικι πφλθ ωσ πολλαπλαςιαςτζσ, ψθφιακά φίλτρα, ακόμα και ολοκλθρωμζνα ψθφιακά ςυςτιματα). Το ψθφιακό κφκλωμα που ςχεδιάηεται, αποτελεί μια οντότθτα (entity) και μπορεί να εμπεριζχει μζςα τθσ διάφορα ςτοιχεία. Θ περιγραφι υλικοφ ςε VHDL αποτελείται από δφο βαςικά δομικά ςτοιχεία, το πρϊτο είναι ο κακοριςμόσ τθσ οντότθτασ, ςτον οποίο δθλϊνουμε το όνομα και τισ ειςόδουσ/εξόδουσ του ςυςτιματοσ. Το δεφτερο είναι το κομμάτι τθσ αρχιτεκτονικισ που κακορίηουμε τθν εςωτερικι λειτουργία τθσ οντότθτασ. Για τθ περιγραφι τθσ αρχιτεκτονικισ υπάρχουν οι εξισ τρόποι ςχεδίαςθσ: Δομικόσ τρόποσ ςχεδίαςησ (Structural Style of Modeling), όπου το κφκλωμα περιγράφεται ωσ ζνασ ςυνδυαςμόσ αλλθλοςυνδεόμενων ςτοιχείων. υμπεριφεριακόσ τρόποσ ςχεδίαςησ (Behavioral Style of Modeling), που χρθςιμοποιείται όταν υπάρχει θ ανάγκθ ακολουκιακισ εκτζλεςθσ κάποιων εντολϊν και χριςθσ FSMs. 82

84 χεδίαςη διαγράμματοσ ροήσ (Dataflow Style of Modeling), όπου περιγράφουμε τθ ροι των δεδομζνων μεταξφ ςτοιχείων ςυνδυαςτικισ λογικισ. υνδυαςμόσ όλων των παραπάνω (Mixed Style of Modeling) [30] Η λογική του F-Penguino Το ςφςτθμα αυτό είναι βαςιςμζνο ςτθ λογικι του Arduino, με τθ διαφορά ότι αποτελεί μία προςπάκεια να αξιοποιθκοφν τα πλεονεκτιματα τθσ υλοποίθςθσ με περιγραφι υλικοφ ςε ζνα ευζλικτο και εφχρθςτο εκπαιδευτικό board που κα μπορεί να αποτελεί το πυρινα του ςχεδιαςμοφ embedded ςυςτθμάτων. Στθν ζκδοςθ που ακολουκεί παρουςιάηουμε τα βαςικά components και τθ λογικι που είναι αναγκαία για το προγραμματιςμό του board και τθν επικοινωνία με το PC. Ο χριςτθσ ζχει τθ δυνατότθτα να προςκζςει τα δικά του components και να επεκτείνει τισ λειτουργίεσ του F-Penguino ανάλογα με τθν εκάςτοτε εφαρμογι. H διαδικαςία αυτι γίνεται είτε με τθ χριςθ schematic diagrams, είτε με κάποια γλϊςςα περιγραφισ υλικοφ. Θ πρϊτθ ζκδοςθ του F-Penguino είναι βαςιςμζνθ ςτο FPGA-chip EPF828ALC84-4 τθσ ςειράσ FLEX8000 τθσ Altera και για τον προγραμματιςμό του χρθςιμοποιοφμε το αντίςτοιχο λογιςμικό τθσ Altera, το MAX PLUS II [31] [32]. Το MAX PLUS II προςφζρει ζνα μεγάλο φάςμα από ςχεδιαςτικζσ δυνατότθτεσ. Ο χριςτθσ μπορεί να ςυνδυάηει κϊδικα μαηί με ςχθματικά διαγράμματα και ςτθ ςυνζχεια, με τθν εφαρμογι του εξομοιωτι, να δθμιουργεί το κατάλλθλο αρχείο που χρθςιμοποιείται για τθ διαμόρφωςθ (configuration) του ολοκλθρωμζνου. Εικόνα 6.1 Flex 8000 Device Block Diagram 83

85 Το κόςτοσ του EPF828ALC84-4 chip είναι πολφ μικρό, αλλά και οι δυνατότθτεσ του είναι περιοριςμζνεσ ςε ςφγκριςθ με FPGAs και CPLDs τελευταίασ γενιάσ. Χαρακτθρίηεται από λογικζσ πφλεσ, 282 Flip Flops, 26 Logic array blocks (LABs), 208 Logic elements (LEs), 68 I/O pins και τάςθ τροφοδοςίασ 5V, ενϊ δζχεται ρολόι από το FT232RL ςτα 6MHz. Κάποια από τα μειονεκτιματα τθσ ςειράσ αυτισ, είναι ότι δεν υποςτθρίηει block ενςωματωμζνθσ μνιμθσ RAM, ενϊ πρζπει να επαναπρογραμματίηεται κάκε φορά που κόβεται θ τροφοδοςία. Τζλοσ, δεν υποςτθρίηεται από τισ καινοφριεσ εκδόςεισ λογιςμικοφ τθσ Altera. Θ πρϊτθ ζκδοςθ του F- Penguino ζχει ςτόχο τθν υλοποίθςθ βαςικϊν κυκλωμάτων (counters, οδιγθςθ LED και 7-segment displays κτλ), ζτςι παρόλο που το FPGA περιζχει μικρό αρικμό Flip Flops και δεν υποςτθρίηει μεγάλο αρικμό πολφπλοκων κυκλωμάτων, αυτό δεν αποτελεί ιδιαίτερο μειονζκτθμα ςτθ ςυγκεκριμζνθ περίπτωςθ. Θ επόμενθ ζκδοςθ του F-Penguino κα είναι βαςιςμζνθ ςτθ ςειρά CPLD MAX ΛΛ τθσ Altera και ο ςχεδιαςμόσ του ζχει ιδθ ξεκινιςει ςτο Εργαςτιριο Εφαρμοςμζνων Θλεκτρονικϊν (APEL) του Τμιματοσ Θλεκτρολόγων Μθχανικϊν και Τεχνολογίασ Υπολογιςτϊν, υπό τθν επίβλεψθ του επίκουρου κακθγθτι Κ. Ευςτακίου. Το F-Penguino χαρακτθρίηεται από τζςςερισ βαςικζσ λειτουργίεσ: Προγραμματιςμόσ και επικοινωνία μεταξφ PC και F-Penguino: Για να είναι ευζλικτο το ςφςτθμα, να μπορεί να επαναπρογραμματίηεται αλλά και να ελζγχεται θ λειτουργία του, είναι απαραίτθτθ θ υλοποίθςθ ςειριακισ επικοινωνίασ με το PC. H ςειριακι επικοινωνία όπωσ βλζπουμε παρακάτω υλοποιείται με τθ χριςθ του chip FT232RL τθσ FTDI. Περιγραφή υλικοφ: Σε αυτό το ςτάδιο, αφενόσ ζχουν ςχεδιαςτεί τα βαςικά blocks, βάςθ των οποίων το F-Penguino αποκωδικοποιεί τθ πλθροφορία που δζχεται από ι ςτζλνει προσ το PC, αφετζρου, ανάλογα με τθν εφαρμογι, ο χριςτθσ ςχεδιάηει πωσ κα χρθςιμοποιιςει το κάκε pin του F-Penguino με βάςθ τθ ςυςκευι που ςυνδζει ςε αυτό. GUI-Graphical User Interface: Για να είναι το ςφςτθμα φιλικό προσ το χριςτθ, είναι απαραίτθτο ζνα γραφικό περιβάλλον, μζςω του οποίου κα φορτϊνουμε το αρχείο προγραμματιςμοφ και κα διαβάηουμε ι κα ςτζλνουμε πλθροφορίεσ ςτο board. Ζλεγχοσ περιφερειακϊν ςυςκευϊν: Θ υλοποίθςθ του υλικοφ ςε ςυνδυαςμό με τθ real-time επικοινωνία οδθγεί ςτον ζλεγχο των περιφερειακϊν ςυςκευϊν που ςυνδζουμε ςτθν πλακζτα ςτα αντίςτοιχα pins του FPGA. Τζτοιεσ ςυςκευζσ μπορεί να είναι από ζνα απλό LED μζχρι μνιμεσ RAM, Shift Registers, DC και Servo Motors, Analog to Digital και Digital to Analog Converters κτλ Προγραμματιςμόσ και επικοινωνία μεταξφ PC και F-Penguino Για τθν επικοινωνία μεταξφ PC και F-Penguino, χρθςιμοποιοφμε το FT232RL τθσ FTDI ςε λειτουργία Bit Bang. Στθ λειτουργία αυτι οι οκτϊ γραμμζσ τθσ UART μετατρζπονται ςε ζνα 8-bit I/O port γενικοφ ςκοποφ. Τα πακζτα δεδομζνων μποροφν να ςταλοφν ςτo FT232RL και ζπειτα να ςταλοφν ςειριακά ςτο F-Penguino υπό τον ζλεγχο ενόσ εςωτερικοφ timer. Το FT232RL παρζχει τρεισ λειτουργίεσ Bit Bang: τθ ςφγχρονθ, τθν αςφγχρονθ και τθ CBUS. Στο F-Penguino το FT232RL ζχει προγραμματιςτεί ςε ςφγχρονθ λειτουργία Bit Bang με τθν οποία ελζγχουμε τα 8 bits (Dbus) του FT232RL, ϊςτε να επιτφχουμε τθν μετάδοςθ πλθροφορίασ από το PC προσ το FPGA κακϊσ και αντίςτροφα. Ο προγραμματιςμόσ του FT232RL και του FPGA, κακϊσ και θ επικοινωνία μεταξφ FPGA και PC κατά τθ διάρκεια λειτουργίασ του FPGA, γίνεται μζςα από πρόγραμμα γραμμζνο ςε Visual Basic. Το πρόγραμμα βαςίηεται ςε δφο forms, ζνα για τον προγραμματιςμό και ζνα για επικοινωνία. Ο χριςτθσ δθλαδι, ζχει αφενόσ τθ δυνατότθτα να φορτϊςει ςτο GUI το αρχείο προγραμματιςμοφ του F-Penguino (με διαδικαςία «drag and drop») και να το κατεβάςει ςτθ ςυςκευι, αφετζρου μπορεί να ςτζλνει ι να διαβάηει δεδομζνα από τουσ εκάςτοτε καταχωρθτζσ. 84

86 Προγραμματιςμόσ του F-Penguino O προγραμματιςμόσ του ςυγκεκριμζνου FPGA χωρίηεται ςε δυο κατθγορίεσ, τα Active και τα Passive Configuration Modes. Σε ζναν Active Configuration Mode όλα τα ςιματα που χρειάηονται για τον προγραμματιςμό του FPGA δθμιουργοφνται από τθν ίδια τθ ςυςκευι κάκε φορά που γίνεται power up το ςφςτθμά μασ. Τα δεδομζνα που χρειάηονται βρίςκονται ςε μια εξωτερικι EEPROM με τισ κατάλλθλεσ προδιαγραφζσ, και διαβάηονται από το ολοκλθρωμζνο με τθ βοικεια των ςθμάτων που είναι αφιερωμζνα γι αυτό το ςκοπό. Σε Passive Configuration Mode ο προγραμματιςμόσ του FPGA γίνεται από εξωτερικζσ ςυςκευζσ οι οποίεσ είναι υπεφκυνεσ για τθ δθμιουργία των κατάλλθλων ςθμάτων. Τα δεδομζνα ςε αυτι τθν περίπτωςθ μποροφν να βρίςκονται αποκθκευμζνα ςε κάποιο ςκλθρό δίςκο ενϊ ο χριςτθσ ζχει επιπλζον τθ δυνατότθτα να επιλζξει ανάμεςα ςε ςειριακι θ παράλλθλθ προςπζλαςθ των δεδομζνων. Στθν περίπτωςι μασ οι απαιτιςεισ μασ επιβάλουν ζναν τρόπο με τον οποίο κα μποροφμε ςυνεχϊσ να διαμορφϊνουμε τθ ςυςκευι διαβάηοντασ το κατάλλθλο αρχείο που προκφπτει από τθ διαδικαςία του compiling. Επομζνωσ για το configuration επιλζγουμε κάποιο από τα Passive Configuration Modes ϊςτε θ διαμόρφωςθ του FPGA να γίνεται οποιαδιποτε ςτιγμι κζλουμε. Με βάςθ αυτι τθ λογικι ςχεδιάςτθκε και το GUI του F-Penguino, όπωσ κα δοφμε παρακάτω, για να μποροφμε να ελζγχουμε εμείσ τα ςιματα που προγραμματίηουν το FPGA. Οι δυνατοί τρόποι διαμόρφωςθσ των ςυςκευϊν Flex8000 είναι οι εξισ: Active Serial (AS) Active Parallel up (APU) Active Parallel down (APD) Passive Serial (PS) Passive Parallel Synchronous (PPS) Passive Parallel Asynchronous (PPA) Από αυτοφσ εμείσ επιλζγουμε τον Passive Serial, με τον οποίο τα δεδομζνα μεταφζρονται με ςειριακό τρόπο μζςα από το FT232RL. Θ Altera παρζχει τθ Εικόνα 6.2 Passive Serial Device Configuration δυνατότθτα configuration των ςυςκευϊν Flex8000 με τθ χριςθ και εναλλακτικϊν τρόπων. Τζτοιοι είναι θ χριςθ του MAX+PLUS II Programmer και τθσ PL-MPU Master Programming Unit μαηί με το FLEX Download Cable ι ακόμα και ενόσ RS-242 καλωδίου, του ALTERA BitBlaster Serial Cable. Οι τρόποι αυτοί όμωσ είναι περιοριςτικοί όςον αφορά το κζμα του hardware που απαιτοφν για τθν υλοποίθςι τουσ. Τα ςιματα DCLK, DATA0, nconfig, CONF_DONE και nstatus είναι αυτά που χρθςιμοποιοφνται κατά τθ διάρκεια του configuration τθσ ςυςκευισ. Από αυτά τα CONF_DONE και nstatus είναι ςιματα «open drain» και για ο λόγο αυτό είναι απαραίτθτθ θ χριςθ δυο pull up αντιςτάςεων 1 KΩ θ κάκε μία. Τα CONF_DONE και nstatus είναι ςιματα διπλισ κατεφκυνςθσ τα οποία είναι δεςμευμζνα από το FPGA για τθ διαδικαςία του προγραμματιςμοφ του. Εμείσ όμωσ τα χρθςιμοποιοφμε εδϊ ςαν εξόδουσ για να επιβεβαιϊςουμε το ςωςτό προγραμματιςμό τθσ ςυςκευισ. Ριο ςυγκεκριμζνα όταν θ ςυςκευι αρχίςει να τροφοδοτείται, τότε το ςιμα nstatus πθγαίνει ςτο 0 και παραμζνει εκεί για περίπου 100 ms. Κατά τθ διάρκεια τθσ διαμόρφωςθσ του FPGA το nstatus βρίςκεται ςε high ςτάκμθ και ςε περίπτωςθ που ςυμβεί κάποιο λάκοσ τότε το κατεβάηει ςε 0. Αυτό μπορεί να ςυμβαίνει και όταν θ τάςθ τροφοδοςίασ πζςει κάτω από τθν επιτρεπτι τιμι τθσ. Το ςιμα «ελευκερϊνεται» μόλισ δοκεί ζνασ παλμόσ (high, low, high) ςτο nconfig και τότε ξαναρχίςει ζνασ καινοφργιοσ κφκλοσ διαμόρφωςθσ. Επειδι το nstatus είναι ςιμα διπλισ 85

87 κατεφκυνςθσ μπορεί να κατζβει ςτο 0 και από κάποιο εξωτερικό κφκλωμα. Τότε θ ςυςκευι καταλαβαίνει ότι ζχει ςυμβεί κάποιο λάκοσ και ςταματάει τον προγραμματιςμό του. Το ςιμα CONF_DONE είναι ζνα ςιμα που χρθςιμοποιείται από το FPGA για να δθλϊςει ότι βρίςκεται ςε κατάςταςθ προγραμματιςμοφ. Κατά τθ διάρκεια μετάδοςθσ των δεδομζνων το ςιμα αυτό πθγαίνει ςτο 0 και παραμζνει εκεί μζχρι και 10 παλμοφσ του DCLK μετά το τελευταίο bit. Τότε το FPGA «ελευκερϊνει» το CONF_DONE το οποίο πθγαίνει ςε 1, δθλϊνοντασ ότι τελείωςε θ φάςθ τθσ διαμόρφωςθσ. Αν κάτι τζτοιο δεν ςυμβεί μζςα ςε αυτό το χρονικό διάςτθμα, τότε θ ςυςκευι διαπιςτϊνει πρόβλθμα και διακόπτει τθ διαδικαςία κατεβάηοντασ το nstatus ςε 0. Οι γραμμζσ DCLK, DATA0 και nconfig είναι «αποκλειςτικζσ είςοδοι» (dedicated inputs) ςτο ολοκλθρωμζνο και κακορίηονται από εμάσ κατά τθ διάρκεια του configuration. Ο τρόποσ κακοριςμοφ των ςθμάτων αυτϊν είναι ςυγκεκριμζνοσ και φαίνεται ςτθν εικόνα 6.3. Εικόνα 6.3 Passive Serial Configuration Mode Timing Waveforms Θ διαδικαςία τθσ διαμόρφωςθσ ζχει ωσ εξισ. Αρχικά ςτζλνουμε ζναν παλμό ςτο nconfig με τον οποίο γίνεται το reset τθσ ςυςκευισ ϊςτε να ξεκινιςει ο κφκλοσ διαμόρφωςθσ. Για όςο διάςτθμα κρατάμε το nconfig ςτο 0 ο κφκλοσ διαμόρφωςθσ κακυςτερείται, ενϊ με τθ μετάβαςι του ςε 1 ςθματοδοτείται θ ζναρξι τθσ. Αφοφ περάςει το πολφ 1 μs από τθν κατερχόμενθ παρυφι του nconfig, το CONF_DONE πθγαίνει ςε low και παραμζνει εκεί μζχρι να τελειϊςει το configuration. Τθν ίδια ςτιγμι ςτο nstatus δθμιουργείται ζνασ παλμόσ ςτο 0 με διάρκεια 2.5 μs περίπου και ςτθ ςυνζχεια πθγαίνει ςε high. Αν κατά τθ διάρκεια του configuration ςυμβεί κάποιο λάκοσ, τότε το nstatus πθγαίνει ςε low και παραμζνει εκεί μζχρι να αρχίςει καινοφργιοσ κφκλοσ διαμόρφωςθσ. Τα δυο αυτά ςιματα CONF_DONE και nstatus διαβάηονται από το FT232RL, κάκε φορά που τελειϊνει ο προγραμματιςμόσ του FPGA. Αν τα CONF_DONE και nstatus είναι 1 τότε κάτι τζτοιο ςθμαίνει ότι ο προγραμματιςμόσ ζχει γίνει ςωςτά και θ ςυςκευι είναι ζτοιμθ για περαιτζρω χριςθ. Σε διαφορετικι περίπτωςθ κάποιο λάκοσ ζχει ςυμβεί κατά τθ διάρκεια του προγραμματιςμοφ και κα πρζπει να επαναλθφκεί θ ίδια διαδικαςία. Θ μετάδοςθ των δεδομζνων από τον υπολογιςτι ςτο FPGA γίνεται ςειριακά μζςα από το ςιμα DATA0 με πρϊτο το λιγότερο ςθμαντικό bit του κάκε byte. Ππωσ φαίνεται και ςτθ εικόνα 6.3, τα δεδομζνα βγαίνουν ςτθ γραμμι DATA0 ςτθν πίπτουςα παρυφι του DCLK και μανδαλϊνονται από το ολοκλθρωμζνο ςτθν ανερχόμενθ παρυφι του DCLK. Μόλισ τελειϊςει θ μετάδοςθ ολόκλθρου του αρχείου τότε κα πρζπει να ακολουκιςουν 10 παλμοί ςτο DCLK, ζτςι ϊςτε το FPGA να ελευκερϊςει το CONF_DONE και να γίνει high. Θ μετάβαςθ αυτι του CONF_DONE από 0 ςε 1 μεταφράηεται από τισ ςυςκευζσ τθσ Flex800 ςα μια εντολι initialization, για να μπει θ ςυςκευι ςε κανονικι λειτουργία. Ραρακάτω ςτον πίνακα φαίνονται οι χρονιςμοί ςτον Passive Serial Configuration Mode. 86

88 Τα δεδομζνα που χρθςιμοποιοφμε για να προγραμματίςουμε το ολοκλθρωμζνο βρίςκονται αποκθκευμζνα ςε ζνα αρχείο το οποίο δθμιουργείται μζςα από τθ διαδικαςία του compilation του ςχεδίου που ζχουμε φτιάξει ςτο περιβάλλον του MAX+PLUS II. Αυτό είναι ζνα αρχείο τθσ μορφισ <filename>.ttf ςτο οποίο υπάρχουν τα δεδομζνα που χρειάηονται για τθ διαμόρφωςθ τθσ ςυςκευισ ςε ASCII χαρακτιρεσ. Το ςυγκεκριμζνο format μάλιςτα αποτελείται από τριάδεσ ASCII χαρακτιρων οι οποίοι χωρίηονται μεταξφ τουσ με κόμμα. Το μζγεκοσ των αρχείων αυτϊν είναι πάντα ςτακερό και είναι 20.4 Kbytes ενϊ ο ςυνολικόσ χρόνοσ που απαιτείται για τθν ολοκλιρωςθ του configuration είναι περίπου 100 ms [33] Επικοινωνία μεταξφ PC και F-Penguino Για τθν διεκπεραίωςθ τθσ επικοινωνίασ χρθςιμοποιοφμε τζςςερα ςιματα. Τα ςιματα αυτά (wclk, wdout, wdin, wclr) αντιςτοιχοφν ςτα bits 2, 3, 5 και 7 του 8 bit I/O port (Dbus). Εικόνα 6.4 Χρονιςμοί ςτο Passive Serial Configuration Mode wclk: (Working Clock) είναι το ςιμα ςυγχρονιςμοφ των δεδομζνων είτε αυτά αφοροφν είςοδο προσ το FPGA είτε αφοροφν ζξοδο. Το ςιμα αυτό παράγεται από το FT232RL και αποτελεί είςοδο για το FPGA. wdout: (Working Data Output). Το ςιμα αυτό παράγεται από το FT232RL και αποτελεί είςοδο δεδομζνων για το FPGA. Θ πλθροφορία του ςιματοσ αποκθκεφεται ςτο FPGA κατά τθν ανιοφςα παρυφι του wclk. Tο ίδιο pin και ςιμα (DPgm) χρθςιμοποιείται και για τθν μετάδοςθ δεδομζνων κατά τθν φάςθ προγραμματιςμοφ του FPGA. wdin: (Working Data Input). Το ςιμα αυτό παράγεται από το FPGA και αποτελεί είςοδο δεδομζνων για το FT232RL. Θ ςειριακι πλθροφορία είναι ςφγχρονθ με τθν ανιοφςα παρυφι του wclk. wclr: (Working Clear). Θ ανιοφςα παρυφι του ςιματοσ κακορίηει τθν ζναρξθ μια διαδικαςίασ εναλλαγισ δεδομζνων. Το ςιμα αυτό παράγεται από το FT232RL και αποτελεί είςοδο για το FPGA. Συνεπϊσ για τθν διακίνθςθ δεδομζνων μεταξφ PC και FPGA απαιτοφνται μόνο τζςςερα ςιματα εκ των οποίων τα τρία (wclk, wdin, wclr) είναι είςοδοι προσ το FPGA και το ζνα (wdout) είναι ζξοδοσ. Θ δομι των ςειριακϊν δεδομζνων που διακινοφνται ςτα τζςςερα προαναφερκζντα Pins είναι ςχεδιαςμζνθ ζτςι ϊςτε να δίνει τθν απαραίτθτθ ευελιξία ςτον χριςτθ, ϊςτε να διακινεί εφκολα και γριγορα ευζλικτεσ δομζσ δεδομζνων. Επίςθσ, θ οργάνωςθ τθσ διεπαφισ του FPGA με το PC είναι τζτοια ϊςτε να μθν υπάρχουν περιοριςμοί ςτθ διαχείριςθ οποιαςδιποτε πλθροφορίασ. Θ δομι τθσ πλθροφορίασ που διακινείται αποτελείται από τρία βαςικά πεδία: 87

89 Command Field: Το πεδίο εντολισ αποτελείται από ςτακερό, ακριβϊσ κακοριςμζνο αρικμό bits που κακορίηει το μζγιςτο αρικμό εντολϊν που μπορεί να δεχκεί το FPGA. Θ εντολι αποκθκεφεται μζςα ςε ειδικό καταχωρθτι του FPGA, τον Command Register. To Command Field, μπορεί να χρθςιμοποιθκεί ωσ address field, δθλαδι ςε ποιον register κα γίνει ανάγνωςθ ι εγγραφι δεδομζνων. Επίςθσ μπορεί να χρθςιμοποιθκεί ωσ εντολι για μια ενζργεια (π.χ. να κακορίηει τθ κζςθ μνιμθσ από τθν οποία κα αρχίςουν να διαβάηονται ι να εγγράφονται δεδομζνα ςε μια SRAM). Action Field: Το πεδίο ενζργειασ (action) είναι πλθροφορία ενόσ bit, και κακορίηει αν θ διαδικαςία που απαιτείται από τθν εντολι (Command) κα αποκθκευκεί ςε καταχωρθτι του FPGA, οπότε ζχουμε διαδικαςία Εγγραφισ (Write), ι κα διαβαςτεί από καταχωρθτι του FPGA, οπότε ζχουμε διαδικαςία Ανάγνωςθσ (Read). Data Field: Το πεδίο δεδομζνων είναι πλθροφορία που είτε αποκθκεφεται ςτο FPGA, είτε ανακτάται από το FPGA, ανάλογα με τθν τιμι του πεδίου Action. Το πλικοσ των ψθφίων (bits) των δεδομζνων είναι μεταβλθτό, δίδοντασ ζτςι μεγάλθ ευελιξία ςτον ςχεδιαςτι Περιγραφή υλικοφ του F-Penguino Στθ παράγραφο αυτι αναλφουμε τθν εςωτερικι οργάνωςθ του F-Penguino όςον αφορά τα βαςικά blocks που είναι απαραίτθτα για τθ λειτουργία του. Οι δομικζσ μονάδεσ που χρθςιμοποιοφνται είναι οι εξισ: Serial in Parallel out Shift Register, Serial in Serial out Register, Counter, Command Register, Control Box, Read και Write Registers. Serial in Parallel out Shift Register (SiPo) Επειδι θ πλθροφορία μεταξφ PC και F-Penguino διακινείται ςειριακά, δεν είναι δυνατόν να χρθςιμοποιθκεί, παρά μόνο όταν ςυγκεντρωκεί κατά τμιματα. Θ ςυγκζντρωςθ τθσ πλθροφορίασ, δθλαδι θ μετατροπι τθσ από ςειριακι παλμοςειρά ςε παράλλθλθ ψθφιακι λζξθ, γίνεται με τθ βοικεια ενόσ Serial-In / Parallel-out Shift Register (SiPo) που υλοποιικθκε με τθ χριςθ AHDL. Οι είςοδοι του SiPo είναι το wdout που φζρει τθν πλθροφορία από το USB, το wclk ςτθν ανιοφςα παρυφι του οποίου, θ πλθροφορία του wdout αποκθκεφεται ςτον register SiPo και το wce που επιτρζπει τθν λειτουργεί του όταν είναι ςτθ ςτάκμθ HIGH. Το μικοσ του register (xbits) μπορεί να επιλεγεί από το χριςτθ ζτςι ϊςτε να καλφπτει τισ ανάγκεσ τθσ εφαρμογισ. Ο κϊδικασ AHDL για τθν υλοποίθςθ του SiPo: PARAMETERS (xbits); subdesign SiPo ( Din, Clk, Clr: INPUT; Q[xBits-1..0]: OUTPUT; ) Variable QD[xBits-1..0] :DFF; Begin QD[].CLRN=Clr; QD[].CLK=Clk; QD[0].D=Din; for I in 1 to xbits-1 Generate QD[I].D=QD[I-1].Q; End Generate; Q[]=QD[].Q; End; Counter Μία βοθκθτικι ςυνάρτθςθ απαρικμθτι υλοποιικθκε και αυτι ςε AHDL και χρθςιμοποιείται για τθν απαρίκμθςθ των bits που ζρχονται ςε κάκε πακζτο πλθροφορίασ. Ο Counter παίηει 88

90 κακοριςτικό ρόλο ςτθ ςωςτι εξαγωγι των fields του πακζτου δεδομζνων. Τα πρϊτα 4 bits αποτελοφν το Command field, το επόμενο αποτελεί το action field και τα υπόλοιπα το data field. Ο κϊδικασ AHDL για τθν υλοποίθςθ του Counter: PARAMETERS (xbits); subdesign Counter ( Clk, Clr: INPUT; Q[xBits-1..0]: OUTPUT; ) Variable QD[xBits-1..0] :DFF; Begin QD[].CLRN=Clr; QD[].CLK=!Clk; QD[].D=QD[].Q+1; Q[]=QD[].Q; End; Command Register (creg) Θ αποκικευςθ του Command Field γίνεται ςτον ειδικό καταχωρθτι creg. Διαπιςτϊνουμε ότι θ καταχϊρθςθ του πεδίου απαιτεί τθ γνϊςθ τθσ εξόδου του Counter. Συνεπϊσ τα δεδομζνα του ςειριακοφ καταχωρθτι αποκθκεφονται ςτον Command Register (creg) όταν θ τιμι του απαρικμθτι είναι ncmd. Επιπλζον θ εντολι «κακαρίηεται» με το ςιμα wce. Αμζςωσ μετά τθν ολοκλιρωςθ τθσ εντολισ ακολουκεί το bit που κακορίηει αν τα δεδομζνα τθσ εντολισ κα αποκθκευκοφν ςτο FPGA ι κα διαβαςτοφν από αυτό. Ο κϊδικασ AHDL για τθν υλοποίθςθ του creg: PARAMETERS (ncmd=4,ncnt=6); ---Command Register--- --ncnt: Counter bits --ncmd: Command bits subdesign creg ( Clk, sq[ncmd-1..0], cntq[ncnt-1..0], Rst: INPUT; Q[nCmd-1..0]: OUTPUT; ) Variable QD[nCmd-1..0] :DFFE; Begin QD[].ENA=(cntQ[]==nCmd); QD[].CLK=Clk; QD[].D=sQ[]; QD[].CLRN=Rst; Q[]=QD[].Q; End; Control Box Τθν αποκωδικοποίθςθ του action field, δθλαδι αν κα ζχουμε διαδικαςία ανάγνωςθσ ι εγγραφισ, αναλαμβάνει θ ςυνάρτθςθ ctrlbox που ζχει υλοποιθκεί και αυτι ςε AHDL. Αν ζχουμε εγγραφι κζτει το Wr ςε HIGH, ενϊ όταν ζχουμε ανάγνωςθ κζτει το Rd ςε HIGH. Ο κϊδικασ AHDL για τθν υλοποίθςθ του ctrlbox: PARAMETERS (ncnt=6,ncmd=4); subdesign CtrlBox ( wclk, wdin, CntQ[nCnt-1..0], wce: INPUT; Wr, Rd: OUTPUT; ) Variable qwr:dffe; qrd:dffe; 89

91 Begin qwr.clk=wclk; qwr.d=!wdin; qwr.ena=(cntq[]==ncmd); qwr.clrn=wce; qrd.clk=wclk; qrd.d=wdin; qrd.ena=(cntq[]==ncmd); qrd.clrn=wce; Wr=qWr.Q; Rd=qRd.Q; End; Data Write and Read Registers Υπάρχουν δφο ςιματα ξεχωριςτά για κάκε μία από τισ διαδικαςίεσ εγγραφισ και ανάγνωςθσ. Για τθν υποςτιριξθ τθσ διακίνθςθσ των δεδομζνων αναπτφχκθκαν δφο ςυναρτιςεισ: Μία ςυνάρτθςθ υποςτθρίηει τθν διαδικαςία τθσ εγγραφισ δεδομζνων ςτο FPGA και ακόμθ μία υποςτθρίηει τθν διαδικαςία τθσ ανάγνωςθσ δεδομζνων. Να ςθμειωκεί ότι οι δφο αυτζσ ςυναρτιςεισ μπορεί να είναι ςε πολλαπλότθτα που εξαρτάται από τον αρικμό των δεδομζνων που κζλουμε να καταχωριςουμε ι να διακινιςουμε. Επιπλζον να ςθμειωκεί ότι ο χριςτθσ μπορεί να αναπτφξει, τισ δικζσ του ςυναρτιςεισ για τθν διακίνθςθ πλθροφορίασ από περιφερειακζσ ςυςκευζσ όπωσ RAM, ADC ι DAC. Θ αποκικευςθ των δεδομζνων μζςα ςτο FPGA γίνεται με τθ χριςθ τθσ ςυνάρτθςθσ dwreg που υλοποιικθκε με τθ χριςθ AHDL. Ραράμετροι που κακορίηουν τθν λειτουργία τθσ αφοροφν ςτο αρικμό των bits (dbits) που καταχωροφνται ςτον register, κακϊσ και θ command (Cmd) που τθν ενεργοποιεί. Τα δεδομζνα που βρίςκονται ςτον ςειριακό καταχωρθτι αποκθκεφονται ςτον dwreg ςτθν πίπτουςα παρυφι του τελευταίου wclk, ιτοι όταν ο απαρικμθτισ δείχνει τιμι ίςθ με ncmd+dbits (ςτθν προκείμενθ περίπτωςθ = 12). Ο κϊδικασ AHDL για τθν υλοποίθςθ του dwreg: PARAMETERS (dbits=8,ncnt=5,ncmd=4,cmd=1); ---DATA Register (write mode) dbits: Data bits TO handle -- ncnt: Counter bits -- ncmd: Command bits -- Cmd: Command to recognize subdesign DWReg ( Clk, dq[dbits-1..0], cntq[ncnt-1..0],cmdq[ncmd-1..0],wr: INPUT; Q[dBits-1..0]: OUTPUT; ) Variable QD[dBits-1..0] :DFFE; QE:DFF; Begin QE.D=(cntQ[]==dBits+nCmd-1) and (CmdQ[]==Cmd) and (WR); QE.CLK=!CLK; QD[].ENA=QE.Q; QD[].CLK=!Clk; QD[].D=dQ[]; Q[]=QD[].Q; End; Θ ανάγνωςθ δεδομζνων που είναι αποκθκευμζνα είτε μζςα ςε καταχωρθτι του FPGA είτε ςε περιφερειακό που ελζγχεται απ αυτό γίνεται με τθ χριςθ τθσ ςυνάρτθςθσ drreg που υλοποιικθκε ςε AHDL και δείχνεται ςτθν εικόνα. Ραράμετροι που κακορίηουν τθν λειτουργία τθσ αφοροφν ςτο αρικμό των bits (dbits) που καταχωροφνται ςτον register, κακϊσ και θ command (Cmd) που τθν ενεργοποιεί. Τα δεδομζνα που πρόκειται να μεταφερκοφν ςειριακά είτε από εςωτερικό καταχωρθτι είτε από περιφερειακό ελεγχόμενο από το FPGA, αποκθκεφονται 90

92 προςωρινά ςε ενςωματωμζνο ςτθ ςυνάρτθςθ καταχωρθτι όταν ικανοποιθκοφν οι κατάλλθλεσ ςυνκικεσ που αφοροφν τθν εντολι, τθν τιμι του απαρικμθτι και τθν επιλογι του action field. Στθ ςυνζχεια, τα δεδομζνα που βρίςκονται ςτον προςωρινό καταχωρθτι, μεταφζρονται ςειριακά ςτθν ζξοδο του FPGA ςε κάκε ανιοφςα παρυφι του wclk. Οι ζξοδοι όλων των ςυναρτιςεων τφπου drreg ςυγκεντρϊνονται και δρομολογοφνται ςτθν τελικι ςειριακι ζξοδο του FPGA μζςα από τθ ςυνάρτθςθ siso. Ο κϊδικασ AHDL για τθν υλοποίθςθ του drreg: PARAMETERS (dbits=8,ncnt=5,ncmd=4,cmd=1); ---DATA Register (read mode) dbits: Data bits TO handle -- ncnt: Counter bits -- ncmd: Command bits -- Cmd: Command to recognize subdesign DrReg ( Clk, dq[dbits-1..0], cntq[ncnt-1..0],cmdq[ncmd-1..0],rd: INPUT; sq: OUTPUT; ) Variable QD[dBits-1..0] :DFFE; Pset:Node; QE:DFF; Begin Pset=Clk and (CmdQ[]==Cmd) and (cntq[]==ncmd); QE.D=(cntQ[]>=nCmd) and (CmdQ[]==Cmd)and (RD); QE.CLK=!CLK; QD[].CLRN=!(Pset and!dq[]); QD[].PRN=!(Pset and dq[]); QD[].ENA=QE.Q and (cntq[]>=ncmd); QD[].CLK=!Clk; QD[0].D=GND; for i in 1 to dbits-1 generate QD[i].D=QD[i-1].Q; end generate; sq=qd[dbits-1].q; End; 6.5. To GUI (Graphical User Interface) του F-Penguino Ππωσ προείπαμε το λογιςμικό αυτό ζχει δφο ρόλουσ, αφενόσ τθ φόρτωςθ του αρχείου ttf που δθμιουργείται από το EDA τθσ Altera Max Plus II και περιζχει τθ πλθροφορία εκείνθ με βάςθ τθν οποία προγραμματίηεται το FPGA. Αφετζρου περιζχει τα fields, με βάςθ τα οποία αποςτζλλουμε δεδομζνα ςτο board ι διαβάηουμε δεδομζνα από το board. Τα fields αυτά ζχουν άμεςθ ςχζςθ, όπωσ φαίνεται από τθν εικόνα 6.5, με τθ διακίνθςθ τθσ πλθροφορίασ από και προσ το F- Penguino, και αποτελοφνται από: Address Field (Command Field): Στο οποίο ορίηουμε ςε δεκαεξαδικι (HEX) αναπαράςταςθ τθ διεφκυνςθ του register ςτον οποίο κα διατελζςουμε κάποια ενζργεια. Rd/Wr Field (Action Field): Στο οποίο δίνουμε τθ τιμι W για εγγραφι δεδομζνων, ι R για ανάγνωςθ δεδομζνων. 91 Εικόνα 6.5 F-Penguino Programmer

93 Data Field: Στο οποίο ορίηουμε ςε δεκαεξαδικι (HEX) αναπαράςταςθ τα δεδομζνα που αποςτζλλουμε. Process Command: Μόλισ πατθκεί το button αυτό, αρχίηει θ επικοινωνία και αποςτζλλονται ι διαβάηονται, ανάλογα με τι ορίςαμε ςτα προθγοφμενα fields. Response Field: Πταν πατθκεί το Process Command διαβάηουμε αυτομάτωσ τα δεδομζνα τθσ αντίςτοιχθσ address. Test Write Field: Χρθςιμοποιείται για testing και δίνει αυτόματα τθν εντολι Write ςτον Register με διεφκυνςθ 03H το byte 55H. Test Read Field: Χρθςιμοποιείται επίςθσ για testing, δίνει αυτόματα τθν εντολι ανάγνωςθσ από τον Register με διεφκυνςθ 06H. Εικόνα 6.6 F-Penguino Communication GUI 6.6. Σο ςχηματικό διάγραμμα, η πλακζτα και οι αντιςτοιχίεσ των ακίδων. Στθν εικόνα 6.7 βλζπουμε το ςχθματικό διάγραμμα του F-Penguino. Εδϊ ορίηεται θ φυςικι διαςφνδεςθ μεταξφ FT232RL και FPGA. Στο κφκλωμα χρθςιμοποιοφνται headers για τθν εφκολθ ςφνδεςθ περιφερειακϊν ςυςκευϊν με τθ πλακζτα. Tα δφο LEDs δείχνουν τθν κατάςταςθ προγραμματιςμοφ του F-Penguino. Τζλοσ ο κρφςταλλοσ ςυνδζεται ςτθν περίπτωςθ που κζλουμε να οδθγιςουμε το ρολόι του FPGA από εξωτερικό κρφςταλλο και όχι από τα ςιματα του FT232RL. 92

94 Εικόνα 6.7 χηματικό Διάγραμμα F-Penguino Στθν εικόνα 6.8 βλζπουμε το top layer τθσ πλακζτασ. Θ ςχεδίαςθ του PCB ζγινε με ςτόχο, αφενόσ θ πλακζτα να είναι μονισ όψθσ, αφετζρου να είναι ςτο ίδιο μζγεκοσ με αυτό του Arduino. Εικόνα 6.8 PCB 93

95 Στισ επόμενεσ εικόνεσ βλζπουμε τθν αντιςτοιχία των ακίδων τθσ πλακζτασ με αυτϊν του FPGA. Θ αντιςτοιχία αυτι είναι απαραίτθτθ για να μπορζςει ο χριςτθσ να ςυνδζςει ςωςτά εξωτερικζσ ςυςκευζσ ςτο F-Penguino. Header J1 J1 Αντιςτοιχία Με FPGA pins 1 VCC VCC GND GND 20 Εικόνα 6.9 Header J1 Header J2 J2 Αντιςτοιχία Με FPGA pins 1 VCC VCC GND GND 20 Εικόνα 6.10 Header J2 94

96 Header J3 J3 Αντιςτοιχία Με FPGA pins 20 GND GND VCC VCC 1 Εικόνα 6.11 Header J Χρήςη του F-Penguino Ππωσ προείπαμε, θ πρϊτθ ζκδοςθ του F-Penguino περιζχει απολφτωσ τα βαςικά components για τθ διεκπεραίωςθ του προγραμματιςμοφ του και τθσ επικοινωνίασ με το PC. Ο χριςτθσ όμωσ, μπορεί να προςκζςει τα δικά του components, ακόμα και να αλλάξει το ίδιο το GUI για να καλφψει τισ ανάγκεσ τθσ εφαρμογισ που κζλει να υλοποιιςει. Στθν ενότθτα αυτι κα δοφμε ζνα παράδειγμα χριςθσ του F-Penguino. Ξεκινάμε με τθ ςφνδεςθ δφο LEDs τα οποία κα ελζγχουμε με τθν εντολι Write ςτον Command Register 3. Φςτερα προςπακοφμε με ζναν prescaler να δθμιουργιςουμε ςυχνότθτεσ εξόδου, αρκετά χαμθλότερεσ από αυτζσ των 6MHz και να αναβοςβιςουμε ταυτόχρονα τζςςερα LEDs με διαφορετικζσ ςυχνότθτεσ. Ακολουκεί ο «αναλογικόσ» ζλεγχοσ μίασ εξόδου του F-Penguino με ψθφιακά μζςα, τον οποίο δοκιμάηουμε ελζγχοντασ τθ φωτεινότθτα ενόσ LED που ελζγχεται από τον Command Register 4. Ζπειτα, ελζγχουμε ζνα Servo Motor, μζςω του Command Register 5, δθμιουργϊντασ ςιματα PPM. Τζλοσ, φτιάχνουμε μια παλζτα χρωμάτων και ανάβουμε ζνα RGB LED, με βάςθ τθ κζςθ του ποντικιοφ πάνω ςτθ παλζτα. Θ διαδικαςία αυτι γίνεται αφοφ ζχουμε δθμιουργιςει τουσ αντίςτοιχουσ Command Registers (7, 8 και 9) και τρεισ accumulators. Για τθ ςφνδεςθ των δφο LEDs προςκζτουμε ςτο ςχθματικό διάγραμμα τα δφο logic cells να παίρνουν είςοδο από τθν ζξοδο του καταχωρθτι dwreg με Cmd 3. Ππωσ φαίνεται ςτθν εικόνα 6.12, το LED0 ςυνδζεται με το LSB τθσ εξόδου DD του καταχωρθτι, αυτό ςθμαίνει πωσ κα γίνεται ON, όταν δϊςουμε για είςοδο 3, W και xxxxxxx1. Το LED αυτό ςυνδζεται ςτθν ζξοδο 66 του FPGA που αντιςτοιχεί ςτο pin 13 (J3) του F-Penguino. To LED1 αντίςτοιχα ςυνδζεται με το δεφτερο LSB του καταχωρθτι, με αποτζλεςμα να 95 Εικόνα 6.12 φνδεςη 2 LEDs

97 γίνεται ON για είςοδο 3, W και xxxxxx1x. Το LED αυτό το ςυνδζουμε ςτο Pin 71 του FPGA που αντιςτοιχεί ςτο pin 15 (J3) του F-Penguino. Στθ ςυνζχεια με τθ χριςθ AHDL, δθμιουργοφμε ζναν 24bit counter με ρόλο frequency prescaler, ο οποίοσ δζχεται ςαν είςοδο το CBUS*0+, δθλαδι το ρολόι των 6MHz. Κάκε bit τθσ εξόδου από το LSB προσ το MSB παράγει ζνα παλμό ςυχνότθτασ υποδιπλάςιο από αυτό του προθγοφμενου bit. Στθ περίπτωςθ μασ, ςυνδζουμε τζςςερα LEDs ςτα bits 20, 21, 22 και 23, με αποτζλεςμα να ζχουμε ςυχνότθτεσ 2.8Hz,1.4Hz, 0.7Hz και 0.35Hz αντίςτοιχα. Θ φυςικι ςφνδεςθ των LEDs γίνεται ςτα pins 57, 58, 62 και 64 του FPGA που αντιςτοιχοφν ςτα 3, 5, 7 και 9 τθσ ακιδοςειράσ J3. Για να ελζγξουμε τθ φωτεινότθτα ενόσ LED, δθμιουργοφμε μία παλμοςειρά, θ οποία με τθ χριςθ ενόσ accumulator βγάηει ςε ζνα διάςτθμα 256 κφκλων ρολογιοφ τόςα HIGH, όςα θ τιμι που δίνουμε ςτον accumulator. Ζτςι θ χρονικι διάρκεια που το LED είναι ON ςε αυτό διάςτθμα, κακορίηεται ωσ θ τιμι του accumulator επί το βιμα ςυχνότθτασ (6MHz/256). O accumulator όπωσ φαίνεται παρακάτω ςχεδιάςτθκε με τθ χριςθ AHDL και ςυνδζεται ςτον καταχωρθτι dwreg με Cmd 5. Το LED ςυνδζεται ςτο pin 77 του FPGA που αντιςτοιχεί ςτο pin 16 τθσ ακιδοςειράσ J2 του F-Penguino. Τζλοσ για τισ ανάγκεσ τθσ εφαρμογισ, δθμιουργοφμε ςτθ Visual Basic ςτο F-Penguino Communication GUI, μία μπάρα κακοριςμοφ τθσ τιμισ του accumulator ςε πραγματικό χρόνο, θ οποία ςχεδιάηεται ϊςτε να δίνει πάντα τθ τιμι 5 ςτο Command Field. Ακολουκεί ο κϊδικασ του accumulator, το ςχθματικό διάγραμμα, αλλά και το τροποποιθμζνο GUI του F-Penguino. Ο AHDL κϊδικασ του ςυςςωρευτι: --myacc PARAMETERS (dbits=4); -- dbits: Data bits TO handle subdesign MyAcc ( Clk, dq[dbits-1..0]: INPUT; Cy: OUTPUT; ) Variable QD[dBits-1..0] :DFF; Ax[dbits..0]:NODE; Begin Ax[]=(0,QD[])+(0,dQ[]); QD[].CLK=Clk; QD[dBits-1..0].D=Ax[dBits- 1..0]; Cy=Ax[dBits]; End; Εικόνα 6.13 Frequency Prescaler Εικόνα 6.14 Accumulator Control Εικόνα 6.15 F-Penguino GUI με Accumulator Bar 96

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 1

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 1 Τμήμα Μησανικών Πληποφοπικήρ, Τ.Ε.Ι. Ηπείπος Ακαδημαϊκό Έτορ 2016-2017, 6 ο Εξάμηνο Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 1 Διδάςκων Τςιακμάκθσ Κυριάκοσ, Phd MSc in Electronic Physics (Radioelectrology)

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι Λογιςμικό (Software), Πρόγραμμα (Programme ι Program), Προγραμματιςτισ (Programmer), Λειτουργικό Σφςτθμα (Operating

Διαβάστε περισσότερα

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ Ω ΕΝΙΑΙΟ ΤΣΗΜΑ. ΚΕΦΑΛΑΙΟ 2: Σο Εςωτερικό του Τπολογιςτι

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ Ω ΕΝΙΑΙΟ ΤΣΗΜΑ. ΚΕΦΑΛΑΙΟ 2: Σο Εςωτερικό του Τπολογιςτι ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ ΚΕΦΑΛΑΙΟ 2: Σο Εςωτερικό του Τπολογιςτι 2.1 Ο Προςωπικόσ Υπολογιςτήσ εςωτερικά Σροφοδοτικό, Μθτρικι πλακζτα (Motherboard), Κεντρικι Μονάδα Επεξεργαςίασ (CPU), Κφρια Μνιμθ

Διαβάστε περισσότερα

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι Τλικό υπολογιςτι (Hardware), Προςωπικόσ Τπολογιςτισ (ΡC), υςκευι ειςόδου, υςκευι εξόδου, Οκόνθ (Screen), Εκτυπωτισ (Printer), αρωτισ

Διαβάστε περισσότερα

3 θ διάλεξθ Επανάλθψθ, Επιςκόπθςθ των βαςικϊν γνϊςεων τθσ Ψθφιακισ Σχεδίαςθσ

3 θ διάλεξθ Επανάλθψθ, Επιςκόπθςθ των βαςικϊν γνϊςεων τθσ Ψθφιακισ Σχεδίαςθσ 3 θ διάλεξθ Επανάλθψθ, Επιςκόπθςθ των βαςικϊν γνϊςεων τθσ Ψθφιακισ Σχεδίαςθσ 1 2 3 4 5 6 7 Παραπάνω φαίνεται θ χαρακτθριςτικι καμπφλθ μετάβαςθσ δυναμικοφ (voltage transfer characteristic) για ζναν αντιςτροφζα,

Διαβάστε περισσότερα

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν Τπόβακρο (1/3) τουσ παλαιότερουσ υπολογιςτζσ θ Κεντρικι Μονάδα Επεξεργαςίασ (Κ.Μ.Ε.) μποροφςε κάκε ςτιγμι να εκτελεί μόνο ζνα πρόγραμμα τουσ ςφγχρονουσ

Διαβάστε περισσότερα

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ ελιδοποίθςθ (1/10) Σόςο θ κατάτμθςθ διαμεριςμάτων ςτακεροφ μεγζκουσ όςο και θ κατάτμθςθ διαμεριςμάτων μεταβλθτοφ και άνιςου μεγζκουσ δεν κάνουν

Διαβάστε περισσότερα

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 3: Εργονομία

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 3: Εργονομία ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ Εργονομία, ωςτι ςτάςθ εργαςίασ, Εικονοςτοιχείο (pixel), Ανάλυςθ οκόνθσ (resolution), Μζγεκοσ οκόνθσ Ποιεσ επιπτϊςεισ μπορεί να ζχει θ πολφωρθ χριςθ του υπολογιςτι ςτθν

Διαβάστε περισσότερα

Virtualization. Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format.

Virtualization. Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format. Virtualization Στο ςυγκεκριμζνο οδηγό, θα παρουςιαςτεί η ικανότητα δοκιμήσ τησ διανομήσ Ubuntu 9.04, χωρίσ την ανάγκη του format. Το virtualization πρόκειται για μια τεχνολογία, θ οποία επιτρζπει το διαχωριςμό

Διαβάστε περισσότερα

Σο θλεκτρικό κφκλωμα

Σο θλεκτρικό κφκλωμα Σο θλεκτρικό κφκλωμα Για να είναι δυνατι θ ροι των ελεφκερων θλεκτρονίων, για να ζχουμε θλεκτρικό ρεφμα, απαραίτθτθ προχπόκεςθ είναι θ φπαρξθ ενόσ κλειςτοφ θλεκτρικοφ κυκλϊματοσ. Είδθ κυκλωμάτων Σα κυκλϊματα

Διαβάστε περισσότερα

Σχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων

Σχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων Σχεδίαςη Σφγχρονων Ακολουθιακών Κυκλωμάτων Πίνακεσ Διζγερςησ των FF Όπωσ είδαμε κατά τθ μελζτθ των FF, οι χαρακτθριςτικοί πίνακεσ δίνουν τθν τιμι τθσ επόμενθσ κατάςταςθσ κάκε FF ωσ ςυνάρτθςθ τθσ παροφςασ

Διαβάστε περισσότερα

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό Βαγγζλθσ Οικονόμου Περιεχόμενα Πλθροφορίεσ Μακιματοσ Δομθμζνοσ Προγραμματιςμόσ (Οριςμοί, Γενικζσ Ζννοιεσ) Αλγόρικμοι και Ψευδοκϊδικασ Γλϊςςα προγραμματιςμοφ C Πλθροφορίεσ

Διαβάστε περισσότερα

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι Παράςταςη κινητήσ υποδιαςτολήσ ςφμφωνα με το πρότυπο ΙΕΕΕ Δρ. Χρήστος Ηλιούδης το πρότυπο ΙΕΕΕ 754 ζχει χρθςιμοποιθκεί ευρζωσ ςε πραγματικοφσ υπολογιςτζσ. Το πρότυπο αυτό κακορίηει δφο βαςικζσ μορφζσ κινθτισ

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΘΜΙΟ ΔΤΣΙΚΘ ΜΑΚΕΔΟΝΙΑ ΣΜΘΜΑ ΜΘΧΑΝΙΚΩΝ ΠΛΘΡΟΦΟΡΙΚΘ ΚΑΙ ΣΘΛΕΠΙΚΟΙΝΩΝΙΩΝ. Λειτουργικά υςτιματα, 4 ο Εξάμθνο Ψθφιακι χεδίαςθ ΙΙ, 4 ο Εξάμθνο

ΠΑΝΕΠΙΣΘΜΙΟ ΔΤΣΙΚΘ ΜΑΚΕΔΟΝΙΑ ΣΜΘΜΑ ΜΘΧΑΝΙΚΩΝ ΠΛΘΡΟΦΟΡΙΚΘ ΚΑΙ ΣΘΛΕΠΙΚΟΙΝΩΝΙΩΝ. Λειτουργικά υςτιματα, 4 ο Εξάμθνο Ψθφιακι χεδίαςθ ΙΙ, 4 ο Εξάμθνο ΠΑΝΕΠΙΣΘΜΙΟ ΔΤΣΙΚΘ ΜΑΚΕΔΟΝΙΑ ΣΜΘΜΑ ΜΘΧΑΝΙΚΩΝ ΠΛΘΡΟΦΟΡΙΚΘ ΚΑΙ ΣΘΛΕΠΙΚΟΙΝΩΝΙΩΝ Λειτουργικά υςτιματα, 4 ο Εξάμθνο Ψθφιακι χεδίαςθ ΙΙ, 4 ο Εξάμθνο Νικόλασ Κυπαριςςάσ, 414 Τπεφκυνοι Κακθγθτζσ: Δρ. Μθνάσ Δαςυγζνθσ,

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ Αρχείο (File) Φάκελοσ (Folder) Διαχειριςτισ Αρχείων (File Manager) Τφποι Αρχείων Σε τι εξυπθρετεί θ οργάνωςθ των εργαςιϊν μασ ςτουσ υπολογιςτζσ; Πϊσ κα οργανϊςουμε

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ Ειρινθ Φιλιοποφλου Ειςαγωγι Ο Παγκόςμιοσ Ιςτόσ (World Wide Web - WWW) ι πιο απλά Ιςτόσ (Web) είναι μία αρχιτεκτονικι για τθν προςπζλαςθ διαςυνδεδεμζνων εγγράφων

Διαβάστε περισσότερα

Electronics μαηί με τα ςυνοδευτικά καλϊδια και το αιςκθτιριο κερμοκραςίασ LM335 που περιζχονται

Electronics μαηί με τα ςυνοδευτικά καλϊδια και το αιςκθτιριο κερμοκραςίασ LM335 που περιζχονται Σομζασ: Ηλεκτρονικόσ Εκπαιδευτικόσ: Μπουλταδάκθσ τζλιοσ Μάθημα: υλλογι και μεταφορά δεδομζνων μζςω Η/Τ, Αιςκθτιρεσ-Ενεργοποιθτζσ Αντικείμενο: α) Μζτρθςθ κερμοκραςίασ με το αιςκθτιριο LM335 και μεταφορά

Διαβάστε περισσότερα

Ακολουκιακά Λογικά Κυκλώματα

Ακολουκιακά Λογικά Κυκλώματα Ακολουκιακά Λογικά Κυκλώματα Τα ψθφιακά λογικά κυκλϊματα που μελετιςαμε μζχρι τϊρα ιταν ςυνδυαςτικά κυκλϊματα. Στα ςυνδυαςτικά κυκλϊματα οι ζξοδοι ςε κάκε χρονικι ςτιγμι εξαρτϊνται αποκλειςτικά και μόνο

Διαβάστε περισσότερα

Πωσ δθμιουργώ φακζλουσ;

Πωσ δθμιουργώ φακζλουσ; Πωσ δθμιουργώ φακζλουσ; Για να μπορζςετε να δθμιουργιςετε φακζλουσ ςτο χαρτοφυλάκιό ςασ ςτο Mahara κα πρζπει να μπείτε ςτο ςφςτθμα αφοφ πατιςετε πάνω ςτο ςφνδεςμο Mahara profiles από οποιοδιποτε ςελίδα

Διαβάστε περισσότερα

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν Τι είναι θ Γραμμι Εντολϊν (1/6) Στουσ πρϊτουσ υπολογιςτζσ, και κυρίωσ από τθ δεκαετία του 60 και μετά, θ αλλθλεπίδραςθ του χριςτθ με τουσ

Διαβάστε περισσότερα

x n D 2 ENCODER m - σε n (m 2 n ) x 1 Παραδείγματα κωδικοποιθτϊν είναι ο κωδικοποιθτισ οκταδικοφ ςε δυαδικό και ο κωδικοποιθτισ BCD ςε δυαδικό.

x n D 2 ENCODER m - σε n (m 2 n ) x 1 Παραδείγματα κωδικοποιθτϊν είναι ο κωδικοποιθτισ οκταδικοφ ςε δυαδικό και ο κωδικοποιθτισ BCD ςε δυαδικό. Κωδικοποιητές Ο κωδικοποιθτισ (nor) είναι ζνα κφκλωμα το οποίο διακζτει n γραμμζσ εξόδου και το πολφ μζχρι m = 2 n γραμμζσ ειςόδου και (m 2 n ). Οι ζξοδοι παράγουν τθν κατάλλθλθ λζξθ ενόσ δυαδικοφ κϊδικα

Διαβάστε περισσότερα

Ειςαγωγή ςτην πληροφορική

Ειςαγωγή ςτην πληροφορική Ειςαγωγή ςτην πληροφορική Δρ. Θεοδώρου Παύλοσ theodorou@uoc.gr Δομή ηλεκτρονικού υπολογιςτή - Υλικό Μια γενικι διάκριςθ ςυςτατικϊν που ςυνκζτουν ζναν Η/Υ (πόροι *resources]) Μονάδα ειςόδου (Input unit)

Διαβάστε περισσότερα

Ενσωµατωµένα Συστήµατα

Ενσωµατωµένα Συστήµατα Ενσωµατωµένα Συστήµατα για εφαρµογές πραγµατικού χρόνου Μικροελεγκτής Arduino Ιωάννης Καλόµοιρος Αναπληρωτής Καθηγητής Τµήµα Μηχανικών Πληροφορικής Μάθηµα 7ο Τι είναι το Arduino... Ένα open-hardware σύστηµα

Διαβάστε περισσότερα

1 0 ΕΠΑΛ ΞΑΝΘΗ ΕΙΔΙΚΟΣΗΣΑ : ΗΛΕΚΣΡΟΝΙΚΩΝ ΕΙΔΙΚΗ ΘΕΜΑΣΙΚΗ ΕΡΓΑΙΑ Β ΗΛΕΚΣΡΟΝΙΚΩΝ ΘΕΜΑ : ΚΑΣΑΚΕΤΗ ΠΟΜΠΟΤ FM

1 0 ΕΠΑΛ ΞΑΝΘΗ ΕΙΔΙΚΟΣΗΣΑ : ΗΛΕΚΣΡΟΝΙΚΩΝ ΕΙΔΙΚΗ ΘΕΜΑΣΙΚΗ ΕΡΓΑΙΑ Β ΗΛΕΚΣΡΟΝΙΚΩΝ ΘΕΜΑ : ΚΑΣΑΚΕΤΗ ΠΟΜΠΟΤ FM 1 0 ΕΠΑΛ ΞΑΝΘΗ ΕΙΔΙΚΟΣΗΣΑ : ΗΛΕΚΣΡΟΝΙΚΩΝ ΕΙΔΙΚΗ ΘΕΜΑΣΙΚΗ ΕΡΓΑΙΑ Β ΗΛΕΚΣΡΟΝΙΚΩΝ ΘΕΜΑ : ΚΑΣΑΚΕΤΗ ΠΟΜΠΟΤ FM ΣΙ ΕΙΝΑΙ ΠΟΜΠΟ FM; Πρόκειται για μια θλεκτρονικι διάταξθ που ςκοπό ζχει τθν εκπομπι ραδιοςυχνότθτασ

Διαβάστε περισσότερα

Συςκευζσ τθλεπικοινωνιϊν και δικτφωςθσ:

Συςκευζσ τθλεπικοινωνιϊν και δικτφωςθσ: Συςκευζσ τθλεπικοινωνιϊν και δικτφωςθσ: Σειριακι Θφρα (1/2): Σειριακι Θφρα Σειριακι (2/2): Σειριακι Θφρα Σειριακι Θφρα (1/2): Σειριακι Θφρα Ακροδζκτεσ Σειριακισ Θφρασ Σειριακι Θφρα Dial Up Mo.dem: Mo.dem:

Διαβάστε περισσότερα

Εφαρμογέσ Μικροχπολογιςτών ςτισ Τηλεπικοινωνίεσ. Έλεγχοσ ςειριακήσ θφρασ του 8051 (Serial Port)

Εφαρμογέσ Μικροχπολογιςτών ςτισ Τηλεπικοινωνίεσ. Έλεγχοσ ςειριακήσ θφρασ του 8051 (Serial Port) Εφαρμογέσ Μικροχπολογιςτών ςτισ Τηλεπικοινωνίεσ Έλεγχοσ ςειριακήσ θφρασ του 8051 (Serial Port) 8051 Serial Ports Port Bit Name Alternate Function P3.0 RxD Receive data for serial port P3.1 TxD Transmit

Διαβάστε περισσότερα

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν Παράλλθλεσ Διεργαςίεσ (1/5) Δφο διεργαςίεσ λζγονται «παράλλθλεσ» (concurrent) όταν υπάρχει ταυτοχρονιςμόσ, δθλαδι οι εκτελζςεισ τουσ επικαλφπτονται

Διαβάστε περισσότερα

Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ

Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ Internet a jeho role v našem životě Το Διαδίκτυο και ο ρόλοσ του ςτθ ηωι μασ Διαδίκτυο: μια πόρτα ςτον κόςμο Πϊσ μπορεί κανείσ ςε λίγα λεπτά να μάκει ποιεσ ταινίεσ παίηονται ςτουσ κινθματογράφουσ, να ςτείλει

Διαβάστε περισσότερα

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8 Δείκτεσ Διαχείριςθ Μνιμθσ Βαγγζλθσ Οικονόμου Διάλεξθ 8 Δείκτεσ Κάκε μεταβλθτι ςχετίηεται με μία κζςθ ςτθν κφρια μνιμθ του υπολογιςτι. Κάκε κζςθ ςτθ μνιμθ ζχει τθ δικι τθσ ξεχωριςτι διεφκυνςθ. Με άμεςθ

Διαβάστε περισσότερα

ΒΙΟΛΟΓΟΙ ΓΙΑ ΦΥΣΙΚΟΥΣ

ΒΙΟΛΟΓΟΙ ΓΙΑ ΦΥΣΙΚΟΥΣ ΦΥΣΙΚΗ vs ΒΙΟΛΟΓΙΑ ΒΙΟΛΟΓΟΙ ΓΙΑ ΦΥΣΙΚΟΥΣ «Προτείνω να αναπτφξουμε πρώτα αυτό που κα μποροφςε να ζχει τον τίτλο: «ιδζεσ ενόσ απλοϊκοφ φυςικοφ για τουσ οργανιςμοφσ». Κοντολογίσ, τισ ιδζεσ που κα μποροφςαν

Διαβάστε περισσότερα

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2 Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2 Δρ. Χρήζηος Ηλιούδης Μθ Προςθμαςμζνοι Ακζραιοι Εφαρμογζσ (ςε οποιαδιποτε περίπτωςθ δεν χρειάηονται αρνθτικοί αρικμοί) Καταμζτρθςθ. Διευκυνςιοδότθςθ.

Διαβάστε περισσότερα

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 2

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 2 Τμήμα Μησανικών Πληποφοπικήρ, Τ.Ε.Ι. Ηπείπος Ακαδημαϊκό Έτορ 2016-2017, 6 ο Εξάμηνο Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Εργαςτιριο 2 Διδάςκων Τςιακμάκθσ Κυριάκοσ, Phd MSc in Electronic Physics (Radioelectrology)

Διαβάστε περισσότερα

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν: Μζθοδος Simplex Η πλζον γνωςτι και περιςςότερο χρθςιμοποιουμζνθ μζκοδοσ για τθν επίλυςθ ενόσ γενικοφ προβλιματοσ γραμμικοφ προγραμματιςμοφ, είναι θ μζκοδοσ Simplex θ οποία αναπτφχκθκε από τον George Dantzig.

Διαβάστε περισσότερα

ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΙΣΟΤΣΟ ΚΤΠΡΟΤ Πρόγραμμα Επιμόρυωσης Τποψηυίων Καθηγητών Σεχνολογίας. Ηλεκτρονικά ΙΙ

ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΙΣΟΤΣΟ ΚΤΠΡΟΤ Πρόγραμμα Επιμόρυωσης Τποψηυίων Καθηγητών Σεχνολογίας. Ηλεκτρονικά ΙΙ ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΙΣΟΤΣΟ ΚΤΠΡΟΤ Πρόγραμμα Επιμόρυωσης Τποψηυίων Καθηγητών Σεχνολογίας Ηλεκτρονικά ΙΙ Πέμπτη 3/3/2011 Διδάζκων: Γιώργος Χαηζηιωάννοσ Τηλέθωνο: 99653828 Ε-mail: georghios.h@cytanet.com.cy Ώρες

Διαβάστε περισσότερα

Δίκτυα Μεταγωγισ Δεδομζνων

Δίκτυα Μεταγωγισ Δεδομζνων Δίκτυα Μεταγωγισ Δεδομζνων Χ.25 (1/9): Πρόκειται για ζνα πρωτόκολλο τθσ ITU για δίκτυα WAN, το οποίο κακορίηει πωσ ςυνδζονται οι ςυςκευζσ του χριςτθ και του δικτφου. Είναι ανεξάρτθτο από τον τφπο των ςυςτθμάτων

Διαβάστε περισσότερα

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 4

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 4 Τμήμα Μησανικών Πληποφοπικήρ, Τ.Ε.Ι. Ηπείπος Ακαδημαϊκό Έτορ 2016-2017, 6 ο Εξάμηνο Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 4 Διδάςκων Τςιακμάκθσ Κυριάκοσ, Phd MSc in Electronic Physics (Radioelectrology)

Διαβάστε περισσότερα

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ

ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ ΗΛΕΚΣΡΟΝΙΚΗ ΤΠΗΡΕΙΑ ΑΠΟΚΣΗΗ ΑΚΑΔΗΜΑΪΚΗ ΣΑΤΣΟΣΗΣΑ Οδηγός Χρήσης Εφαρμογής Ελέγχου Προσφορών Αφοφ πιςτοποιθκεί ο λογαριαςμόσ που δθμιουργιςατε ςτο πρόγραμμα ωσ Πάροχοσ Προςφορϊν, κα λάβετε ζνα e-mail με

Διαβάστε περισσότερα

EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS

EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS Οι μακθτζσ να μάκουν να χρθςιμοποιοφν ορκά και να διαβάηουν τθν ζνδειξθ των οργάνων για τθν μζτρθςθ: τθσ τάςθσ Σου ρεφματοσ

Διαβάστε περισσότερα

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 1: Εισαγωγή στα ενσωματωμένα συστήματα (embedded systems) Εργαστήριο Αυτομάτου Ελέγχου Ενσωματωμένα συστήματα (Embedded Systems) Ενσωματωμένα συστήματα (Embedded

Διαβάστε περισσότερα

Modellus 4.01 Συ ντομοσ Οδηγο σ

Modellus 4.01 Συ ντομοσ Οδηγο σ Νίκοσ Αναςταςάκθσ 4.01 Συ ντομοσ Οδηγο σ Περιγραφή Σο είναι λογιςμικό προςομοιϊςεων που ςτθρίηει τθν λειτουργία του ςε μακθματικά μοντζλα. ε αντίκεςθ με άλλα λογιςμικά (π.χ. Interactive Physics, Crocodile

Διαβάστε περισσότερα

Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7)

Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων. (v.1.0.7) Διαδικαςία Διαχείριςθσ Στθλϊν Βιβλίου Εςόδων - Εξόδων (v.1.0.7) 1 Περίληψη Το ςυγκεκριμζνο εγχειρίδιο δθμιουργικθκε για να βοθκιςει τθν κατανόθςθ τθσ διαδικαςίασ διαχείριςθσ ςτθλών βιβλίου Εςόδων - Εξόδων.

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε)

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε) ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ ΚΕΦΑΛΑΙΟ 6: Το γραφικό περιβάλλον Επικοινωνίασ (Γ.Π.Ε) Γραφικό Περιβάλλον Επικοινωνίασ Περιβάλλον Εντολϊν Γραμμισ (Graphical User Interface/GUI), (Command Line Interface),

Διαβάστε περισσότερα

Slide 1. Εισαγωγή στη ψυχρομετρία

Slide 1. Εισαγωγή στη ψυχρομετρία Slide 1 Εισαγωγή στη ψυχρομετρία 1 Slide 2 Σφντομη ειςαγωγή ςτη ψυχρομετρία. Διάγραμμα Mollier (πίεςησ-ενθαλπίασ P-H) Σο διάγραμμα Mollier είναι μία γραφικι παράςταςθ ςε ζναν άξονα ςυντεταγμζνων γραμμϊν

Διαβάστε περισσότερα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα 1ο ΕΠΑΛ Περάματος 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino.

Διαβάστε περισσότερα

Ειςαγωγι ςτο Arduino. Εκπαιδευτήσ: Λουκήσ Αγγελίδησ

Ειςαγωγι ςτο Arduino. Εκπαιδευτήσ: Λουκήσ Αγγελίδησ Ειςαγωγι ςτο Arduino Εκπαιδευτήσ: Λουκήσ Αγγελίδησ Τι είναι το Arduino To Arduino είναι ζνασ μικροελεγκτισ, προςαρμοςμζνοσ ςε μια πλακζτα και ζτοιμοσ προσ χριςθ. Μασ φώτιςεσ. Και τι είναι ζνασ μικροελεγκτήσ;

Διαβάστε περισσότερα

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο τησ Αριθμογραμμήσ

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

Διαβάστε περισσότερα

Ηλιακι Θζρμανςθ οικίασ

Ηλιακι Θζρμανςθ οικίασ Ηλιακι Θζρμανςθ οικίασ Δυνατότθτα κάλυψθσ κερμαντικϊν αναγκϊν ζωσ και 100% (εξαρτάται από τθν τοποκεςία, τθν ςυλλεκτικι επιφάνεια και τθν μάηα νεροφ αποκθκεφςεωσ) βελτιςτοποιθμζνο ςφςτθμα με εγγυθμζνθ

Διαβάστε περισσότερα

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές Εισαγωγή στο Arduino Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Τι είναι Μικροελεγκτής; Ηλεκτρονική συσκευή που διαχειρίζεται ηλεκτρονικά

Διαβάστε περισσότερα

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα Αυτζσ οι οδθγίεσ ζχουν ςτόχο λοιπόν να βοθκιςουν τουσ εκπαιδευτικοφσ να καταςκευάςουν τισ δικζσ τουσ δραςτθριότθτεσ με το μοντζλο του Άβακα. Παρουςίαςη

Διαβάστε περισσότερα

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ

Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ Μάθημα 9 ο ΤΕΧΝΙΚΕΣ ΔΙΑΧΕΙΡΙΣΗΣ ΕΙΚΟΝΙΚΗΣ ΜΝΗΜΗΣ Ειςαγωγό Όπωσ είδαμε, ο χϊροσ εικονικϊν διευκφνςεων μνιμθσ που χρθςιμοποιεί κάκε διεργαςία, είναι αρκετά μεγαλφτεροσ από το χϊρο των φυςικϊν διευκφνςεων.

Διαβάστε περισσότερα

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Ιοφνιοσ 2013 Περιεχόμενα: Ειςαγωγή... 3 1.Εθνικό Τυπογραφείο... 3 1.1. Είςοδοσ... 3 1.2. Αρχική Οθόνη... 4 1.3. Διεκπεραίωςη αίτηςησ...

Διαβάστε περισσότερα

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο)

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Εθνικό Τυπογραφείο) Πάτρα, 2013 Περιεχόμενα: Ειςαγωγή... 4 1. Επιμελητήριο... Error! Bookmark not defined. 1.1 Διαχειριςτήσ Αιτήςεων Επιμελητηρίου...

Διαβάστε περισσότερα

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V

Σ ΤΑΤ Ι Σ Τ Ι Κ Η. Statisticum collegium V Σ ΤΑΤ Ι Σ Τ Ι Κ Η i Statisticum collegium V Στατιςτική Συμπεραςματολογία Ι Σημειακζσ Εκτιμήςεισ Διαςτήματα Εμπιςτοςφνησ Στατιςτική Συμπεραςματολογία (Statistical Inference) Το πεδίο τθσ Στατιςτικισ Συμπεραςματολογία,

Διαβάστε περισσότερα

Εγχειρίδιο Χριςθσ: Εφαρμογι Αιτιςεων για τα Εκπαιδευτικά Προγράμματα του Προςωπικοφ των Επιχειριςεων Τροφίμων

Εγχειρίδιο Χριςθσ: Εφαρμογι Αιτιςεων για τα Εκπαιδευτικά Προγράμματα του Προςωπικοφ των Επιχειριςεων Τροφίμων Εγχειρίδιο Χριςθσ: Εφαρμογι Αιτιςεων για τα Εκπαιδευτικά Προγράμματα του Προςωπικοφ των Επιχειριςεων ΕΚΔΟΣΗ 1.0 Περιεχόμενα Εφαρμογι Αιτιςεων για τα Εκπαιδευτικά Προγράμματα του Προςωπικοφ των Επιχειριςεων...

Διαβάστε περισσότερα

Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ

Διαχείριςθ του φακζλου public_html ςτο ΠΣΔ Διαχείριςθ του φακζλου "public_html" ςτο ΠΣΔ Οι παρακάτω οδθγίεσ αφοροφν το χριςτθ webdipe. Για διαφορετικό λογαριαςμό χρθςιμοποιιςτε κάκε φορά το αντίςτοιχο όνομα χριςτθ. = πατάμε αριςτερό κλικ ςτο Επιςκεφκείτε

Διαβάστε περισσότερα

ΑΤΣΟΝΟΜΟΙ ΠΡΑΚΣΟΡΕ ΕΡΓΑΙΑ ΕΞΑΜΗΝΟΤ HEARTSTONE ΑΛΕΞΑΝΔΡΟ ΛΟΤΚΟΠΟΤΛΟ ΑΜ:

ΑΤΣΟΝΟΜΟΙ ΠΡΑΚΣΟΡΕ ΕΡΓΑΙΑ ΕΞΑΜΗΝΟΤ HEARTSTONE ΑΛΕΞΑΝΔΡΟ ΛΟΤΚΟΠΟΤΛΟ ΑΜ: ΑΤΣΟΝΟΜΟΙ ΠΡΑΚΣΟΡΕ ΕΡΓΑΙΑ ΕΞΑΜΗΝΟΤ HEARTSTONE ΑΛΕΞΑΝΔΡΟ ΛΟΤΚΟΠΟΤΛΟ ΑΜ: 2008030075 ΕΙΑΓΩΓΗ Το Heartstone είναι ζνα ψθφιακό παιχνίδι καρτϊν που διεξάγιεται πάνω ςτο Battle.net, ζναν διακομιςτι τθσ εταιρίασ

Διαβάστε περισσότερα

Ενδεικτικζσ Λφςεισ Θεμάτων

Ενδεικτικζσ Λφςεισ Θεμάτων c AM (t) x(t) ΤΕΙ Σερρών Τμήμα Πληροφορικής & Επικοινωνιών Σειρά Β Ειςηγητήσ: Δρ Απόςτολοσ Γεωργιάδησ ΕΠΙΚΟΙΝΩΝΙΕΣ Ι Ενδεικτικζσ Λφςεισ Θεμάτων Θζμα 1 ο (1 μον.) Ζςτω περιοδικό ςιμα πλθροφορίασ με περίοδο.

Διαβάστε περισσότερα

assessment.gr USER S MANUAL (users)

assessment.gr USER S MANUAL (users) assessment.gr USER S MANUAL (users) Human Factor January 2010 Περιεχόμενα 1. Γενικζσ οδθγίεσ ςυςτιματοσ... 3 1.1 Αρχικι ςελίδα... 3 1.2 Ερωτθματολόγια... 6 1.2.1 Τεςτ Γνϊςεων Γενικοφ Ρεριεχομζνου... 6

Διαβάστε περισσότερα

Περιεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1

Περιεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1 Περιεχόμενα Περιεχόμενα... 1 1. Ειςαγωγή... 2 1.1 Σχετικά... 2 2. Γενικέσ Πληροφορίεσ για τα Cookies... 2 2.1 Οριςμόσ... 2 2.2 Χρήςη... 3 2.3 Τφποι... 3 2.4 Έλεγχοσ... 3 3. Cookies Σχολήσ... 4 3.1 Ειςαγωγή...

Διαβάστε περισσότερα

Θεςιακά ςυςτιματα αρίκμθςθσ

Θεςιακά ςυςτιματα αρίκμθςθσ Θεςιακά ςυςτιματα αρίκμθςθσ Δρ. Χρήστος Ηλιούδης αρικμθτικό ςφςτθμα αρίκμθςθσ (Number System) Αξία (value) παράςταςθ Οι αξίεσ (π.χ. το βάροσ μιασ ποςότθτασ μιλων) μποροφν να παραςτακοφν με πολλοφσ τρόπουσ

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ

ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ. Φιλιοποφλου Ειρινθ ΕΦΑΡΜΟΓΕ ΒΑΕΩΝ ΔΕΔΟΜΕΝΩΝ ΣΗ ΝΟΗΛΕΤΣΙΚΗ Φιλιοποφλου Ειρινθ Προςθήκη νζων πεδίων Ασ υποκζςουμε ότι μετά τθ δθμιουργία του πίνακα αντιλαμβανόμαςτε ότι ζχουμε ξεχάςει κάποια πεδία. Είναι ζνα πρόβλθμα το οποίο

Διαβάστε περισσότερα

Οδηγίες αναβάθμισης χαρτών

Οδηγίες αναβάθμισης χαρτών Οδηγίες αναβάθμισης χαρτών Για να κάνετε τθν αναβάκμιςθ χαρτϊν Ελλάδοσ κα πρζπει να εγγραφείτε ωσ νζο μζλοσ ςτθν ιςτοςελίδα http://www.mls.gr. 1) Εγγραφή νέου μέλουσ ςτην ιςτοςελίδα αναβαθμίςεων Α) Αντιγράψτε

Διαβάστε περισσότερα

Ψθφιακά Ηλεκτρονικά. Ενότθτα 7 : Ελαχιςτοποίθςθ και κωδικοποίθςθ καταςτάςεων Φϊτιοσ Βαρτηιϊτθσ

Ψθφιακά Ηλεκτρονικά. Ενότθτα 7 : Ελαχιςτοποίθςθ και κωδικοποίθςθ καταςτάςεων Φϊτιοσ Βαρτηιϊτθσ Ελλθνικι Δθμοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Ψθφιακά Ηλεκτρονικά Ενότθτα 7 : Ελαχιςτοποίθςθ και κωδικοποίθςθ καταςτάςεων Φϊτιοσ Βαρτηιϊτθσ 1 Ανοιχτά Ακαδημαϊκά Μαθήματα ςτο ΤΕΙ Ηπείρου Τμιμα

Διαβάστε περισσότερα

Εργαστηριακή άσκηση στο μάθημα του Αυτομάτου Ελέγχου (ΜΜ803)

Εργαστηριακή άσκηση στο μάθημα του Αυτομάτου Ελέγχου (ΜΜ803) Εργαστηριακή άσκηση στο μάθημα του Αυτομάτου Ελέγχου (ΜΜ803) Το ςφςτθμα τθσ φωτογραφίασ αποτελείται από ζνα κινθτιρα ςτον άξονα του οποίου ζχουμε προςαρμόςει ζνα φορτίο. Στον κινθτιρα υπάρχει ςυνδεδεμζνοσ

Διαβάστε περισσότερα

Κάνουμε κλικ ςτθν επιλογι του οριηόντιου μενοφ «Get Skype»για να κατεβάςουμε ςτον υπολογιςτι μασ το πρόγραμμα του Skype.

Κάνουμε κλικ ςτθν επιλογι του οριηόντιου μενοφ «Get Skype»για να κατεβάςουμε ςτον υπολογιςτι μασ το πρόγραμμα του Skype. ΟΔΗΓΙΕ ΔΗΜΙΟΤΡΓΙΑ ΛΟΓΑΡΙΑΜΟΤ ΣΟ SKYPE Ανοίγουμε το πρόγραμμα περιιγθςθσ ιςτοςελίδων (εδϊ Internet Explorer). Κάνουμε κλικ ςτθ γραμμι διεφκυνςθσ του προγράμματοσ και πλθκτρολογοφμε: www.skype.com Κάνουμε

Διαβάστε περισσότερα

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε: ΔΟΜΗ ΑΠΟΦΑΗ Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε: Όταν το if που χρθςιμοποιοφμε παρζχει μόνο μία εναλλακτικι διαδρομι εκτζλεςθ, ο τφποσ δομισ

Διαβάστε περισσότερα

Σφντομεσ Οδθγίεσ Χριςθσ

Σφντομεσ Οδθγίεσ Χριςθσ Σφντομεσ Οδθγίεσ Χριςθσ Περιεχόμενα 1. Επαφζσ... 3 2. Ημερολόγιο Επιςκζψεων... 4 3. Εκκρεμότθτεσ... 5 4. Οικονομικά... 6 5. Το 4doctors ςτο κινθτό ςου... 8 6. Υποςτιριξθ... 8 2 1. Επαφζσ Στισ «Επαφζσ»

Διαβάστε περισσότερα

Μετατροπι Αναλογικοφ Σιματοσ ςε Ψθφιακό. Διάλεξθ 10

Μετατροπι Αναλογικοφ Σιματοσ ςε Ψθφιακό. Διάλεξθ 10 Μετατροπι Αναλογικοφ Σιματοσ ςε Ψθφιακό Διάλεξθ 10 Γενικό Σχιμα Μετατροπζασ Αναλογικοφ ςε Ψθφιακό Ψθφιακό Τθλεπικοινωνιακό Κανάλι Μετατροπζασ Ψθφιακοφ ςε Αναλογικό Τα αναλογικά ςιματα μετατρζπονται ςε

Διαβάστε περισσότερα

Διαχείριςη Αριθμοδεικτών (v.1.0.7)

Διαχείριςη Αριθμοδεικτών (v.1.0.7) Διαχείριςη Αριθμοδεικτών (v.1.0.7) Περιεχόμενα 1. Μενοφ... 5 1.1 Αρικμοδείκτεσ.... 5 1.1.1 Δθμιουργία Αρικμοδείκτθ... 6 1.1.2 Αντιγραφι Αρικμοδείκτθ... 11 2. Παράμετροι... 12 2.1.1 Κατθγορίεσ Αρικμοδεικτϊν...

Διαβάστε περισσότερα

Οδηγός χρήσης Blackboard Learning System για φοιτητές

Οδηγός χρήσης Blackboard Learning System για φοιτητές Οδηγός χρήσης Blackboard Learning System για φοιτητές Ειςαγωγή Το Blackboard Learning System είναι ζνα ολοκλθρωμζνο ςφςτθμα διαχείριςθσ μακθμάτων (Course Management System). Στισ δυνατότθτεσ του Blackboard

Διαβάστε περισσότερα

1o ΕΠΑΛ- Ε.Κ. υκεών -Σομζασ: Ηλεκτρονικισ, Ηλεκτρολογίασ και Αυτοματιςμοφ Εκπαιδευτικοί: Μπουλταδάκθσ τζλιοσ Καςάμπαλθσ τζλιοσ Μάκθμα: Αιςκθτιρεσ-Ενεργοποιθτζσ, Μθχατρονικι: Ανιχνευτισ Αντικειμζνων-Βοθκόσ

Διαβάστε περισσότερα

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Σχεδίαση και ανάπτυξη οχήματος που ακολουθεί μια γραμμή

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Σχεδίαση και ανάπτυξη οχήματος που ακολουθεί μια γραμμή ΤΕΙ ΑΝΑΤΟΛΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΚΑΙ ΘΡΑΚΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Σχεδίαση και ανάπτυξη οχήματος που ακολουθεί μια γραμμή Σπουδαστές: Ταβλάκης Γεώργιος ΑΕΜ:

Διαβάστε περισσότερα

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες)

Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες) Εγχειρίδιο Χρήςησ Προςωποποιημζνων Υπηρεςιών Γ.Ε.ΜΗ. (Περιφέρειες) Ιούνιοσ 2013 Περιεχόμενα: Ειςαγωγή... 3 1. Περιφζρεια... 3 1.1 Διαχειριςτήσ Αιτήςεων Περιφζρειασ... 3 1.1.1. Είςοδοσ... 3 1.1.2. Αρχική

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Δίκτυα Επικοινωνιών ΙΙ Διδάςκων: Απόςτολοσ Γκάμασ (Διδάςκων ΠΔ 407/80) Βοθκόσ Εργαςτθρίου: Δθμιτριοσ Μακρισ Ενδεικτική Λύση 3

Διαβάστε περισσότερα

EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS

EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS EUROPEAN TRADESMAN PROJECT NOTES ON ELECTRICAL TESTS OF ELECTRICAL INSTALLATIONS Οι μαθηηές να μάθοσν πώς να διενεργήζοσν

Διαβάστε περισσότερα

Ηλεκτρονικι Επιχειρθςιακι Δράςθ Εργαςτιριο 1

Ηλεκτρονικι Επιχειρθςιακι Δράςθ Εργαςτιριο 1 1. Εγκατάςταςη Xampp Προκειμζνου να γίνει θ εγκατάςταςθ κα πρζπει πρϊτα να κατεβάςετε και εγκαταςτιςετε το XAMPP ωσ ακολοφκωσ. 1.1. Πάμε ςτθν ακόλουκθ διεφκυνςθ https://www.apachefriends.org/download.html

Διαβάστε περισσότερα

Δομζσ Δεδομζνων Πίνακεσ

Δομζσ Δεδομζνων Πίνακεσ Δομζσ Δεδομζνων Πίνακεσ Διάλεξθ 2 Περιεχόμενα Πίνακεσ: Οριςμοί, Γενικζσ ζννοιεσ Αποκικευςθ πινάκων Ειδικζσ μορφζσ πινάκων Αλγόρικμοι Αναηιτθςθσ Σειριακι Αναηιτθςθ Δυαδικι Αναηιτθςθ Οριςμοί, Γενικζσ ζννοιεσ

Διαβάστε περισσότερα

Δίκτυα Υπολογιςτϊν 2-Rooftop Networking Project

Δίκτυα Υπολογιςτϊν 2-Rooftop Networking Project Ονοματεπώνυμα και Α.Μ. μελών ομάδασ Κοφινάσ Νίκοσ ΑΜ:2007030111 Πζρροσ Ιωακείμ ΑΜ:2007030085 Site survey Τα κτιρια τθσ επιλογισ μασ αποτελοφν το κτιριο επιςτθμϊν και το κτιριο ςτο οποίο ςτεγάηεται θ λζςχθ

Διαβάστε περισσότερα

-Έλεγχοσ μπαταρίασ (χωρίσ φορτίο) Ο ζλεγχοσ αυτόσ μετράει τθν κατάςταςθ φόρτιςθ τθσ μπαταρίασ.

-Έλεγχοσ μπαταρίασ (χωρίσ φορτίο) Ο ζλεγχοσ αυτόσ μετράει τθν κατάςταςθ φόρτιςθ τθσ μπαταρίασ. 1 -Έλεγχοσ μπαταρίασ (έλεγχοσ επιφανείασ) Ο ζλεγχοσ αυτόσ γίνεται για τθν περίπτωςθ που υπάρχει χαμθλό ρεφμα εκφόρτιςθσ κατά μικοσ τθσ μπαταρίασ -Έλεγχοσ μπαταρίασ (χωρίσ φορτίο) Ο ζλεγχοσ αυτόσ μετράει

Διαβάστε περισσότερα

17. Πολυδιάςτατοι πίνακεσ

17. Πολυδιάςτατοι πίνακεσ Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων 17. Πολυδιάςτατοι πίνακεσ Ιωάννθσ Κατάκθσ Πολυδιάςτατοι πίνακεσ o Μζχρι τϊρα μιλοφςαμε για μονοδιάςτατουσ πίνακεσ ι int age[5]= 31,28,31,30,31; o Για παράλλθλουσ

Διαβάστε περισσότερα

ςυςτιματα γραμμικϊν εξιςϊςεων

ςυςτιματα γραμμικϊν εξιςϊςεων κεφάλαιο 7 Α ςυςτιματα γραμμικϊν εξιςϊςεων αςικζσ ζννοιεσ Γραμμικά, λζγονται τα ςυςτιματα εξιςϊςεων ςτα οποία οι άγνωςτοι εμφανίηονται ςτθν πρϊτθ δφναμθ. Σα γραμμικά ςυςτιματα με δφο εξιςϊςεισ και δφο

Διαβάστε περισσότερα

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 8 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Α

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 8 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Α ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ 8 θ Διάλεξθ Ιδεατι Μνιμθ Μζροσ Α Βαςικι Ορολογία Ιδεατή Μνήμη: χιμα ανάκεςθσ αποκθκευτικοφ χϊρου, ςτο οποίο θ δευτερεφουςα μνιμθ μπορεί να διευκυνςιοδοτθκεί ςαν να ιταν μζροσ τθσ κφριασ

Διαβάστε περισσότερα

ΑΤΣΟΜΑΣΙΜΟ ΓΡΑΦΕΙΟΤ. 2 θ Διάλεξθ Μζρθ Τπολογιςτι

ΑΤΣΟΜΑΣΙΜΟ ΓΡΑΦΕΙΟΤ. 2 θ Διάλεξθ Μζρθ Τπολογιςτι ΑΤΣΟΜΑΣΙΜΟ ΓΡΑΦΕΙΟΤ 2 θ Διάλεξθ Μζρθ Τπολογιςτι Τπολογιςτισ υνοπτικό λεξικό Οξφόρδθσ: «θλεκτρονικι υπολογιςτικι μθχανι» Αρχικόσ ςτόχοσ: Δθμιουργία μιασ γριγορθσ υπολογιςτικισ μθχανισ ιμερα: Αφοροφν κυρίωσ

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟΥ ΠΕΛΟΠΟΝΝΗΣΟΥ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ Δίκτυα Επικοινωνιϊν ΙΙ Διδάςκων: Απόςτολοσ Γκάμασ (Διδάςκων ΠΔ 407/80) Βοθκόσ Εργαςτθρίου: Δθμιτριοσ Μακρισ Ενδεικτική Λύση 2

Διαβάστε περισσότερα

ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ

ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ ΑΛΕΞΑΝΔΡΕΙΟ ΣΕΙ ΘΕΑΛΟΝΙΚΗ ΣΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗ Σ.Ε. ΜΑΘΗΜΑ : ΑΛΓΟΡΙΘΜΙΚΗ ΚΑΙ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΔΙΔΑΚΩΝ : ΓΟΤΛΙΑΝΑ ΚΩΣΑ υνοπτικόσ Οδθγόσ για Γράψιμο Εκτζλεςθ Προγραμμάτων Java ςε Περιβάλλον DOS και NetBeans

Διαβάστε περισσότερα

ελ. 11/235, Περιεχόμενα Φακζλου "Σεχνικι Προςφορά"

ελ. 11/235, Περιεχόμενα Φακζλου Σεχνικι Προςφορά υντάκτθσ : Ευάγγελοσ Κρζτςιμοσ χόλιο: ΠΑΡΑΣΗΡΗΗ 1 ελ. 11/235, Περιεχόμενα Φακζλου "Σεχνικι Προςφορά" Για τθν αποφυγι μεγάλου όγκου προςφοράσ και για τθ διευκόλυνςθ του ζργου τθσ επιτροπισ προτείνεται τα

Διαβάστε περισσότερα

Τάξη Β. Φυςικθ Γενικθσ Παιδείασ. Τράπεζα ιεμάτων Κεφ.1 ο ΘΕΜΑ Δ. Για όλεσ τισ αςκθςεισ δίνεται η ηλεκτρικθ ςταιερά

Τάξη Β. Φυςικθ Γενικθσ Παιδείασ. Τράπεζα ιεμάτων Κεφ.1 ο ΘΕΜΑ Δ. Για όλεσ τισ αςκθςεισ δίνεται η ηλεκτρικθ ςταιερά Τάξη Β Φυςικθ Γενικθσ Παιδείασ Τράπεζα ιεμάτων Κεφ.1 ο ΘΕΜΑ Δ Για όλεσ τισ αςκθςεισ δίνεται η ηλεκτρικθ ςταιερά k 2 9 9 10 Nm 2 1. Δφο ακίνθτα ςθμειακά θλεκτρικά φορτία q 1 = - 2 μq και q 2 = + 3 μq, βρίςκονται

Διαβάστε περισσότερα

Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ

Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ Αυτόματη δημιουργία στηλών Αντιστοίχηση νέων λογαριασμών ΦΠΑ 1 Περίληψη Το ςυγκεκριμζνο εγχειρίδιο δημιουργήθηκε για να βοηθήςει την κατανόηςη τησ διαδικαςίασ αυτόματησ δημιουργίασ ςτηλών και αντιςτοίχιςησ

Διαβάστε περισσότερα

TIM Εικονικό Περιβάλλον Συνεργασίας Οδθγίεσ Χριςθσ

TIM Εικονικό Περιβάλλον Συνεργασίας Οδθγίεσ Χριςθσ www.timproject.eu www.tim.project-platform.eu TIM Εικονικό Περιβάλλον Συνεργασίας Οδθγίεσ Χριςθσ This project has been founded with support form the European Commission. This presentation reflects the

Διαβάστε περισσότερα

Αςκήςεισ. Ενότητα 1. Πηγζσ τάςησ, ρεφματοσ και αντιςτάςεισ

Αςκήςεισ. Ενότητα 1. Πηγζσ τάςησ, ρεφματοσ και αντιςτάςεισ Αςκήςεισ Ενότητα 1. Πηγζσ τάςησ, ρεφματοσ και αντιςτάςεισ 1. Ζςτω το ςιμα τάςθσ V(t)=V dc +Asin(ωt) που βλζπουμε ςτο επόμενο ςχιμα. Να προςδιορίςετε το πλάτοσ Α και τθν dc ςυνιςτώςα κακώσ και να υπολογίςτε

Διαβάστε περισσότερα

Γνωριμία με το Arduino

Γνωριμία με το Arduino Γνωριμία με το Arduino Τι είναι το Arduino; Το arduino είναι ένας μικρός υπολογιστής σε μέγεθος παλάμης που περιλαμβάνει ένα μικροελεγκτή (για εκτέλεση εντολών) και ένα σύνολο εισόδων/εξόδων για επικοινωνία

Διαβάστε περισσότερα

Ο ήχοσ ωσ φυςικό φαινόμενο

Ο ήχοσ ωσ φυςικό φαινόμενο Ο ήχοσ ωσ φυςικό φαινόμενο Φφλλο Εργαςίασ Ονοματεπώνυμο. Παραγωγή και διάδοςη του ήχου Ήχοσ παράγεται όταν τα ςωματίδια κάποιου υλικοφ μζςου αναγκαςκοφν να εκτελζςουν ταλάντωςθ. Για να διαδοκεί ο ιχοσ

Διαβάστε περισσότερα

Μακαίνοντασ τα ακουςτικά BlueBAND Sport. Ξεκινώντασ

Μακαίνοντασ τα ακουςτικά BlueBAND Sport. Ξεκινώντασ Μακαίνοντασ τα ακουςτικά BlueBAND Sport 1. Πλικτρο αφξθςθσ ιχου (+) / SRS πλικτρο 2. Ενδεικτικι Λυχνία 3. Πλικτρο Πολλαπλϊν Λειτουργιϊν (MFB) / Play/ Pause 4. Rewind 5. Fast Forward 6. Πλικτρο μείωςθσ

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 3: Χριςθ εργαλείων ζκφραςθσ, επικοινωνίασ, ανακάλυψθσ και δθμιουργίασ. ΚΕΦΑΛΑΙΟ 7: Υπθρεςίεσ Αναηιτθςθσ ςτον Παγκόςμιο Ιςτό

ΕΝΟΤΗΤΑ 3: Χριςθ εργαλείων ζκφραςθσ, επικοινωνίασ, ανακάλυψθσ και δθμιουργίασ. ΚΕΦΑΛΑΙΟ 7: Υπθρεςίεσ Αναηιτθςθσ ςτον Παγκόςμιο Ιςτό ΕΝΟΤΗΤΑ 3: Χριςθ εργαλείων ζκφραςθσ, επικοινωνίασ, ΚΕΦΑΛΑΙΟ 7: Υπθρεςίεσ Αναηιτθςθσ ςτον Παγκόςμιο Ιςτό Αναηιτθςθ πλθροφοριϊν, Διεφκυνςθ Ιςτοςελίδασ (URL), κεματικοί Κατάλογοι, Λζξεισ Κλειδιά, Μθχανζσ

Διαβάστε περισσότερα

Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων»

Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων» Εγχειρίδιο Χριςθσ τθσ διαδικτυακισ εφαρμογισ «Υποβολι και παρακολοφκθςθ τθσ ζγκριςθσ Εκπαιδευτικών Πακζτων» Το Πλθροφοριακό Σφςτθμα τθσ δράςθσ «e-κπαιδευτείτε» ζχει ςτόχο να αυτοματοποιιςει τισ ακόλουκεσ

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ΕΝΙΣΧΥΤΗΣ PUSH-PULL ΤΑΞΗΣ AB

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ΕΝΙΣΧΥΤΗΣ PUSH-PULL ΤΑΞΗΣ AB ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ΕΝΙΣΧΥΤΗΣ PUSH-PULL ΤΑΞΗΣ AB ΘΕΩΡΗΣΙΚΗ ΕΙΑΓΩΓΗ Οι ενιςχυτζσ ιςχφοσ αποτελοφν μια ιδιαίτερθ κατθγορία ενιςχυτϊν που χαρακτθριςτικό τουσ είναι θ μεγάλθ ιςχφσ που μποροφν να αποδϊςουν

Διαβάστε περισσότερα

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ

Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό. μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ Πόςο εκτατό μπορεί να είναι ζνα μη εκτατό νήμα και πόςο φυςικό μπορεί να είναι ζνα μηχανικό ςτερεό. Συνιςταμζνη δφναμη versus «κατανεμημζνησ» δφναμησ Για τθν ανάδειξθ του κζματοσ κα λφνουμε κάποια προβλιματα

Διαβάστε περισσότερα

Ιδιότθτεσ πεδίων Γενικζσ.

Ιδιότθτεσ πεδίων Γενικζσ. Οι ιδιότθτεσ των πεδίων διαφζρουν ανάλογα με τον τφπο δεδομζνων που επιλζγουμε. Ορίηονται ςτο κάτω μζροσ του παρακφρου ςχεδίαςθσ του πίνακα, ςτθν καρτζλα Γενικζσ. Ιδιότθτα: Μζγεκοσ πεδίου (Field size)

Διαβάστε περισσότερα

ΚΥΚΛΩΜΑΤΑ VLSI. Ασκήσεις Ι. Γ. Τσιατούχας. Πανεπιςτιμιο Ιωαννίνων. Τμιμα Μθχανικϊν Η/Υ και Πλθροφορικισ 8/11/18

ΚΥΚΛΩΜΑΤΑ VLSI. Ασκήσεις Ι. Γ. Τσιατούχας. Πανεπιςτιμιο Ιωαννίνων. Τμιμα Μθχανικϊν Η/Υ και Πλθροφορικισ 8/11/18 ΚΥΚΛΩΜΑΤΑ LSI Πανεπιςτιμιο Ιωαννίνων Ασκήσεις Ι Τμιμα Μθχανικϊν Η/Υ και Πλθροφορικισ 8/11/18 Γ. Τσιατούχας Άσκηση 1 1) Σχεδιάςτε τισ ςφνκετεσ COS λογικζσ πφλεσ (ςε επίπεδο τρανηίςτορ) που υλοποιοφν τισ

Διαβάστε περισσότερα

Πνομα Ομάδασ: Προγραμματιςμόσ ενόσ κινοφμενου ρομπότ

Πνομα Ομάδασ: Προγραμματιςμόσ ενόσ κινοφμενου ρομπότ Φφλλο Εργαςίασ : Ακολοφθηςε τισ εντολζσ μου! Τάξθ: Β Γυμναςίου Ενότθτα: Λφνω προβλιματα με υπολογιςτικά φφλλα Εμπλεκόμενεσ ζννοιεσ: ρομποτικι, Lego Mindstorms, υπολογιςτικά φφλλα, ςυναρτιςεισ, γραφιματα

Διαβάστε περισσότερα