Ίσως να έχετε ακούσει για το Raspberry PI. Πρόκειται για μια κάρτα υπολογιστή μικρών διαστάσεων με πάρα πολύ καλά χαρακτηριστικά και χαμηλή τιμή ~40€. Σήμερα υπάρχουν 3 εκδόσεις και έχει ανακοινωθεί και η έκδοση PI Zero με πολύ χαμηλό κόστος. Αποφάσισα να φτιάξω μια απλή κάρτα επέκτασης ώστε να πειραματιστώ με την γλώσσα προγραμματισμού Python πάνω σε θέματα διαχείρισης υλικού. Η κάρτα μπορεί να τοποθετηθεί στο Raspberry 1 μοντέλο B και στο Raspberry 2, το οποίο έχει τετραπύρηνο ARM A7 και 1GB μνήμης καθώς και στο νεότερο Raspberry 3 με τον 64 μπιτο ARM V8 των 4 πυρήνων.
Όπως φαίνεται στο ακόλουθο θεωρητικό κύκλωμα, το IC1 είναι ένας καταχωρητής ολίσθησης 74HC595 από σειριακό σε παράλληλο. Η έξοδος GPIO2 του Raspberry δίνει σειριακά τα δεδομένα, ενώ το GPIO3 δίνει τους παλμούς ρολογιού. Όταν δοθούν 8 παλμοί, δηλαδή έχει ολισθήσει ένα ολόκληρο byte, τότε το GPIO4 δίνει ένα παλμό ώστε να συγκρατηθεί το byte στο latch εξόδου. Αυτά τα 8 bits πάνε στα 8 τμήματα των display μέσα από τις αντιστάσεις 100Ω. Τα συγκεκριμένα είναι κοινής καθόδου, επομένως τα 8 τμήματα είναι οι άνοδοι.
Το κύκλωμα λειτουργεί με σάρωση ώστε να εξοικονομήσουμε εξόδους GPIO. Δηλαδή τα όμοια τμήματα και των 4 display συνδέονται μεταξύ τους. Η ίδια πληροφορία πάει στις ανόδους και των 4 displays, αλλά το πρόγραμμα ενεργοποιεί την κατάλληλη κάθοδο, μέσω των NPN transistors. Αυτό επαναλαμβάνεται κάθε 16msec, δηλαδή με ρυθμό 60Hz, οπότε το μάτι μας δεν καταλαβαίνει το τρεμόσβημα. Το IC2 είναι ένας buffer των 8 bits με εξόδους 3 καταστάσεων. Τα 4 πρώτα bits οδηγούν τα 4 transistors. Το τελευταίο bit πηγαίνει στο GPIO24 το οποίο έχει προγραμματιστεί να λειτουργεί ως είσοδος. Οι αντιστάσεις R14 και R15 συνθέτουν έναν διαιρέτη τάσης, ο οποίος λειτουργεί ως level shifter μιας και το Raspberry λειτουργεί στα 3,3V ενώ η πλακέτα μας σε επίπεδα TTL δηλαδή 5V.
Τέλος στις 3 εξόδους του IC2 συνδέονται τα Push Buttons και όλα μαζί πάνε σε μια πύλη OR που υλοποιείται με τις 3 διόδους D1, D2, D3 και την αντίσταση R13. Η κοινή έξοδος πάει στην τελευταία είσοδο του IC2 ώστε να απομονωθεί από την θύρα GPIO του Raspberry.
Το κύκλωμα λειτουργεί με σάρωση ώστε να εξοικονομήσουμε εξόδους GPIO. Δηλαδή τα όμοια τμήματα και των 4 display συνδέονται μεταξύ τους. Η ίδια πληροφορία πάει στις ανόδους και των 4 displays, αλλά το πρόγραμμα ενεργοποιεί την κατάλληλη κάθοδο, μέσω των NPN transistors. Αυτό επαναλαμβάνεται κάθε 16msec, δηλαδή με ρυθμό 60Hz, οπότε το μάτι μας δεν καταλαβαίνει το τρεμόσβημα. Το IC2 είναι ένας buffer των 8 bits με εξόδους 3 καταστάσεων. Τα 4 πρώτα bits οδηγούν τα 4 transistors. Το τελευταίο bit πηγαίνει στο GPIO24 το οποίο έχει προγραμματιστεί να λειτουργεί ως είσοδος. Οι αντιστάσεις R14 και R15 συνθέτουν έναν διαιρέτη τάσης, ο οποίος λειτουργεί ως level shifter μιας και το Raspberry λειτουργεί στα 3,3V ενώ η πλακέτα μας σε επίπεδα TTL δηλαδή 5V.
Τέλος στις 3 εξόδους του IC2 συνδέονται τα Push Buttons και όλα μαζί πάνε σε μια πύλη OR που υλοποιείται με τις 3 διόδους D1, D2, D3 και την αντίσταση R13. Η κοινή έξοδος πάει στην τελευταία είσοδο του IC2 ώστε να απομονωθεί από την θύρα GPIO του Raspberry.
Στο σχέδιο τα δύο ολοκληρωμένα φαίνονται ότι είναι της σειράς LS. Καλύτερα είναι να χρησιμοποιήσουμε σειρά HC ή HCT.
Τα ονόματα των pins του GPIO για το Raspberry 2
Η κατασκευή έγινε σε μια διάτρητη πλακέτα γενικής χρήσης. Προσοχή, τα συρματάκια από κάτω είναι πηνιόσυρμα δηλαδή σύρμα μονωμένο με ρητίνη, ώστε να μην ενώνονται μεταξύ τους. Τέτοιο σύρμα μπορούμε να βρούμε αν ξετυλίξουμε έναν μετασχηματιστή ή ένα μοτέρ.
Η κάρτα από την πλευρά των εξαρτημάτων | Η κάρτα από την πλευρά των συνδέσεων |
Εδώ υπάρχει το πρόγραμμα σε Python 2.7 και εδώ το πρόγραμμα σε Python 3.2. Το δεύτερο λειτουργεί και στις δύο εκδόσεις της γλώσσας Python.
Παρουσίαση και λειτουργία |
Εδώ υπάρχει το συμπιεσμένο αρχείο zip με το παρόν άρθρο σε μορφή PDF και τον κώδικα σε γλώσσα Python.
(c)2016 Σταύρος Σ. Φώτογλου
SV6GMP
SV6GMP
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου