Εμφάνιση αποτελεσμάτων : 1 έως 7 από 7

Θέμα: μικρή βοήθεια με 8πλο 7 segmant display σε mega16

  1. #1
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2011
    Περιοχή
    Κρήτη
    Μηνύματα
    190

    Προεπιλογή μικρή βοήθεια με 8πλο 7 segmant display σε mega16

    .
    καλησπέρα,
    λόγο πτυχιακής θα προγραμματίσουμε σε atmega16 την εξίσωση του ηλιου ώστε βάση αζιμουθίου και altitube να γυρνάει ένα panel και να πάρουμε τις μετρήσεις που θέλουμε,αυτή την στιγμή είμαστε στην φάση του προγραμματισμού και σαν πρώτο βήμα είναι να τρέξουμε την εξίσωση του ήλου και να δούμε αν τα αποτελέσματα που μας δίνει ο mega 16 είναι ok,αλλα το πρόβλημα είναι πως να τα απεικονίσουμε,το board μου έχει το εξής 8 plo seven segment display,αν μπορεί κάποιος να μου εξηγήσει την φιλοσοφία του,έχω καταλάβει πως δουλεύει το 74HC595 και το 74ls138 αλλα δεν μπορώ να καταλάβω με πια φιλοσοφία πρέπει να προγραμματιστεί,προφανώς ο74hc595 θα δίνει τον αριθμό που θέλουμε να απεικόνιση και σαν ένας πολύ γρήγορος διακόπτης το 74ls138 θα ανάβει το display που θέλουμε να το απεικονίσουμε,επόμενος με το άναμμα του αντιστοιχου display κάθε φορα και με ταχύτητα που δεν πιάνει το μάτι θα μας φαίνεται ότι τα δείχνει ταυτόχρονα το αποτέλεσμα μας.προφανώς η έξοδος pin για την είσοδο του 74hc595 πρέπει να είναι συριακή.χρειάζεται κάποια βιβλιοθήκη να φορτώσω?γιατί έχω μια εντύπωση ότι είναι κάπως πολύ δύσκολο,η τέλος πάντων αν έχει κάποιος ένα πρόγραμμα όπου να μπορώ να το δω σαν παράδειγμα θα με βοηθούσε πολύ.

    board.jpg

    0 Not allowed! Not allowed!

  2. #2
    Μέλος Το avatar του χρήστη ptisi110
    Όνομα
    Κώστας
    Εγγραφή
    May 2004
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    186

    Προεπιλογή

    Γιώργο δεν είναι δύσκολο.. Αρχικά στην μνήμη του MCU σου θα πρέπει να φτιάξεις μια μάσκα (πχ μονοδιάστατος πίνακας 10 τιμών) η οποία θα έχει μέσα 10 ψηφία. Για κάθε προς απεικόνιση δεκαδικό ψηφίο στα LED πρέπει να ανάψουν τα κατάλληλα LEDs. Βάσει λοιπόν της οδήγης απο τα Q του 595 θα σου βγει η μάσκα με τους κωδικούς αριθμούς που θα αναπαρίσταται το κάθε ψηφίο. Έπειτα αφού θα έχεις ένα προς απεικόνιση αριθμό, θα σπάσεις τον αριθμό σε κομμάτια (μονάδες, δεκάδες, εκατοντάδες κλπ). Αφού πάρεις τον αριθμό που θες να απεικονίσεις τον δίνεις σαν είσοδο στη μάσκα και αυτή σου γυρνάει το 7segment κωδικό του. Τον σιφτάρεις μέσα στο 595 και ενεργοποιείς την έξοδο του 138 που αντιστοιχεί στο display του αριθμού. Βάζεις ένα delay και μετά κάνεις το ίδιο για το επόμενο display..

    Edit: Επειδή ανέφερες ότι ξέρεις τα 595 και 138 τα έγραψα πολύ συνοπτικά. Αν δυσκολευτείς έχω έτοιμη ρουτίνα με το 74164, αν είναι να στην στείλω όταν τη βρω..

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη ptisi110 : 17-06-11 στις 01:08

  3. #3
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2011
    Περιοχή
    Κρήτη
    Μηνύματα
    190

    Προεπιλογή

    ναι,αλλα σκέφτομαι ότι για να δώσει πχ. 1(άσσο) το 595 πρέπει να είναι πατημένο το σερ.αυτό πως γίνετε?πρέπει να μπει ένας timer?πχ όπως βλέπεις στο board μου το clk είναι στο pin1 το φόρτωμα γίνετε από το pin2 και το σερ είναι στο pin3(όλα αυτά βεβαια στο πόρτα)αυτός ο συγχρονισμός πως γίνετε?μου φαντάζει κάπως πολύ πολύπλοκο!να μου πεις εδώ έχουν θαύματα αλλα άμα είσαι σε αρχικό στάδιο σου φαίνονται λίγο δύσκολα.

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη ptisi110
    Όνομα
    Κώστας
    Εγγραφή
    May 2004
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    186

    Προεπιλογή

    ναι,αλλα σκέφτομαι ότι για να δώσει πχ. 1(άσσο) το 595 πρέπει να είναι πατημένο το σερ.αυτό πως γίνετε?
    Το φόρτωμα του bit γίνεται από το ser(14). Έπειτα δίνεις ένα παλμό clock στο SKC(11). Μετά βάζεις το επόμενο bit στο ser(14) και δίνεις ακόμα ένα clock και το ίδιο συνεχώς μέχρι να τα στείλεις όλα. Σε κάθε clock τα bit ολισθαίνουν μια θέση με τελευταίο να μπαίνει αυτό με τη μικρότερη βαρύτητα. Όταν περάσουν όλα πια πατάς ένα clock στο RCK(12) ώστε η πληροφορία να βγει στην έξοδο. Είναι πολύ απλό, δες επίσεις πως δουλεύουν τα D flip-flop και θα καταλάβεις

    edit: Αν θες να γλυτώσεις ένα πιν στον MCU μπορείς να ενώσεις το 12 με το 11 αλλά έχει μια ιδιαιτερότητα αυτό

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη ptisi110 : 17-06-11 στις 01:46

  5. #5
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2011
    Περιοχή
    Κρήτη
    Μηνύματα
    190

    Προεπιλογή

    βεβαια σκέφτηκα και το άλλο,να κάνω 3 πίνακες,ένας θα δίνει clock και ο άλλος θα δίνει παλμό στο σερ και ο 3os θα κάνει σετάρισμα,θα τρέχουν ταυτόχρονα ώστε να διαβάζει τις αντίστοιχες τιμές τον πινάκων,όπου κάθε τιμή θα αντιστοιχεί και σε ένα αριθμό,βεβαια με μασκάρισμα αυτό,αυτός πως σου ακούγεται?
    πχ
    πινακας a 1-1-1-1-1-1
    πινακας b 0-1-1-0-1-0
    πινακας c 0-0-0-0-0-1

    άρα το αποτέλεσμα θα είναι 010110
    λίγο μπακαλίστικος ο τρόπος μου αλλα αν ισχύει για αρχή κάτι είναι και αυτός.

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη ptisi110
    Όνομα
    Κώστας
    Εγγραφή
    May 2004
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    186

    Προεπιλογή

    Να δούμε ένα παράδειγμα, θες να βάλεις το '100' στο 595.. Ξεκινάς από το datasheet και βλέπεις ότι το 595 θέλει θετικό clock. Άρα κρατάς αρχικά τα πιν των clock στο '0'.. Επίσεις ξεκινώντας από το MSB πάντα βάζεις στο ser '1'. Δίνεις ένα παλμό clock δλδ ανεβάζεις το SCK και το ξανακατεβάζεις. Το πρώτο bit πέρασε.. Έπειτα θα φορτώσεις το '0' στο ser ξανά άλλο ένα clock. Κάνεις το ίδιο και για το τελευταίο bit μετά δίνεις ένα παλμό στο RCK και πέρασαν τα data στην έξοδο.

    Όσο για τον πίνακα (μάσκα). Έχεις κοινής ανόδου display άρα για να ανάψει ένα LED θέλεις λογικό '0'. ΑΝ θες να απεικονίσεις τον δεκαδικό '0' τότε πρέπει να ανάψουν όλα τα segments εκτός του G. Το G το οδηγείς απο το Qg άρα ο κωδικός αριθμός του δεκαδικού '0' σε δυαδικό είναι: '11000000'. Βρίσκω και για το δεκαδικό '1' '2' κλπ. Αν σε ένα πίνακα: mask[] = {κωδικός του '0', κωδικός του '1', κωδικός του 2, ....., κωδικός του 'n'};
    τότε temp = mask[0]; θα μου γυρίσει στην temp τον κωδικό που αντιστοιχεί για τον δεκαδικό '0'.. temp = '11000000'

    0 Not allowed! Not allowed!

  7. #7
    Μέλος
    Όνομα
    Γιώργος
    Εγγραφή
    Feb 2011
    Περιοχή
    Κρήτη
    Μηνύματα
    190

    Προεπιλογή

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

    0 Not allowed! Not allowed!

Παρόμοια Θέματα

  1. Μια μικρή βοήθεια σε arduino!
    By billtsig in forum Μικροελεγκτές
    Απαντήσεις: 11
    Τελευταίο Μήνυμα: 09-07-16, 09:38
  2. Μια μικρή βοήθεια σε κώδικα
    By hackertom in forum Μικροελεγκτές
    Απαντήσεις: 19
    Τελευταίο Μήνυμα: 22-07-15, 17:49
  3. Μια μικρή βοήθεια ...
    By Anritsu in forum Εξαρτήματα & Datasheets
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 09-03-14, 20:13
  4. Θα ήθελα μια μικρή βοήθεια
    By nology in forum Ηλεκτρονικά
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 07-09-06, 09:16
  5. Μία μικρή βοήθεια
    By nicklie in forum Ηλεκτρονικά
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 28-07-05, 21:23

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας