Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 16

Θέμα: Interrupt PCF8574T I2C

  1. #1
    Μέλος Το avatar του χρήστη ALAMAN
    Όνομα
    Γιώργος
    Εγγραφή
    Oct 2005
    Περιοχή
    -
    Μηνύματα
    2.525

    Προεπιλογή Interrupt PCF8574T I2C

    Θέλω να συνδέσω 5 chips PCF8574T σε έναν δίαυλο I2C. Ένα για οθόνη LCD 2x16 και 4 για εισόδους/εξόδους γενικού σκοπού.
    Το πρόβλημά μου είναι ότι έχω 1 διαθέσιμη γραμμή interrupt για τον μικροελεγκτή (ATMEGA32L).
    Οπότε σκέφτηκα κάποιο τρόπο ώστε να μπορώ να ξέρω ποιό chip δημιούργησε το interrupt όταν αυτό έρθει.

    bo9P2.png

    Σκέφτηκα αυτό το κύκλωμα. που θα μπεί επί τέσσερις φορές για κάθε ολοκληρωμένο PCF.
    Αριστερά το "PCF INT OpenDrain" θα συνδεθεί το INT pin του PCF (Η έξοδος του πιν είναι Open drain, σύμφωνα με το datasheet).
    Στο "PINx mcu" θα συνδεθεί ένα τυχαίο pin από κάποια θύρα του μικροελεγκτή, την οποία θα κοιτάμε όταν έρθει το interrupt.
    και το "mcu interrupt pin" θα συνδεθεί στο ποδαράκι interrupt του μικροελεγκτή όπως το INT0, INT1 κτλ που στην ουσία θα κάνει το interrupt.
    Τα σήματα "mcu interrupt pin" θα συνδεθούν μεταξύ τους εφόσον και τα 4 θα ελέγχουν την γραμμή εξωτερικού interrupt του atmega32l
    Όταν λοιπόν έρθει το interrupt θα από οποιοδήποτε chip, ανάλογα με την τιμή που θα δημιουργηθεί σε κάποια θύρα (που θα επιλέξουμε εμείς να συνδέσουμε τα "PINx mcu") θα διαβαστεί και το αντίστοιχο ολοκληρωμένο.
    Αυτό το κάνω για να μην διαβάζω συνεχώς ένα ένα τα ολοκληρωμένα και καταναλώνεται χρόνος μέχρι να βρεθεί το ολοκληρωμένο που προκάλεσε το interrupt.

    Η ερώτηση είναι, αν το κύκλωμα είναι σωστό για κάτι τέτοιο.

    0 Not allowed! Not allowed!
    Το μέλλον είναι πλέον παρόν, ας το κατακτήσουμε.
    Τα microchip είναι απο τα πιο περίπλοκα κυκλώματα που φτιάχτηκαν ποτέ στον κόσμο.

  2. #2
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Η πιο άμεση σκέψη που μπορώ να κάνω Γιώργο είναι η εξής: Αφού έχεις μόνο μια γραμμή διακοπής, μπορεί να κάνεις έναν έλεγχο σε όλα τα PCF την ώρα που αυτή σκάει, έχοντας όμως φροντίσει να "φωτογραφίζεις" όλες τις I/O's στην αρχή του προγράμματος και ακολούθως μετά αμέσως απο κάθε διακοπή. Τις συγκρίνεις με την προηγούμενη "φωτογραφία" και βρίσκεις τις διαφορές.

    0 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Υπάρχει και μια βιβλιοθήκη που ειδικότερα έχει ασχοληθεί με αυτό το θέμα μοναδικής γραμμής διακοπής απο πολλαπλές πηγές στο δίαυλο. Μελέτησε λίγο εδώ:

    https://github.com/skywodd/pcf8574_a...74/PCF8574.cpp

    Λέει ο τύπος:

    "Remarks: the interrupt "check and process" routine of the library is public and require the user to provide an "global scope" wrapping fonction to work. This is do in order to allow multiple PCF8574 to use the same interrupt pin ("INT" pin) on the Arduino board with call to multiple PCF8574 class instances."

    ...στη ρουτίνα voidPCF8574::checkForInterrupt() στο αρχείο pcf8574_arduino_library / PCF8574 / PCF8574.cpp μπορείς να το κάνεις. Δεν την έχω χρησιμοποιήσει και δεν μπορώ να σου πω αν δουλεύει.

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή

    Γιατι δεν βαζεις καποιο i2c io extender?

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη ALAMAN
    Όνομα
    Γιώργος
    Εγγραφή
    Oct 2005
    Περιοχή
    -
    Μηνύματα
    2.525

    Προεπιλογή

    Δεν κατάλαβα ακριβώς τί εννοείς να φωτογραφίσω και να συγκρίνω για διαφορές με τη προηγούμενη.
    Εννοείς να πάρω την κατάσταση τους ένα ένα ξεχωριστά και να τις συγκρίνω με τη νέα κατάσταση για να δώ τί θα αλλάξει και πού;
    Νομίζω πως όταν υπάρχει interrupt, στέλνεται acknowledge, που σημαίνει ότι, όταν στέλνεις μία-μία τις διευθύνσεις για το κάθε ολοκληρωμένο,
    εκεί που θα πάρεις acknowledge σημαίνει ότι εκείνο έχει το interrupt. αλλά και αυτό όπως λές είναι πολύ καλή λύση.
    Απλά ήθελα να γλυτώσω αυτό το χρόνο που χρειάζεται να αφιερώσει που θα είναι τετραπλάσιος.

    0 Not allowed! Not allowed!
    Το μέλλον είναι πλέον παρόν, ας το κατακτήσουμε.
    Τα microchip είναι απο τα πιο περίπλοκα κυκλώματα που φτιάχτηκαν ποτέ στον κόσμο.

  6. #6
    Μέλος Το avatar του χρήστη ALAMAN
    Όνομα
    Γιώργος
    Εγγραφή
    Oct 2005
    Περιοχή
    -
    Μηνύματα
    2.525

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από bchris Εμφάνιση μηνυμάτων
    Γιατι δεν βαζεις καποιο i2c io extender?
    Τί εννοείς; Αυτό είναι το PCF8574T, απλά έχω περισσότερα από 1 ολοκληρωμένα επάνω στο δίαυλο και πρέπει να ξέρω ποιό έκανε interrupt

    0 Not allowed! Not allowed!
    Το μέλλον είναι πλέον παρόν, ας το κατακτήσουμε.
    Τα microchip είναι απο τα πιο περίπλοκα κυκλώματα που φτιάχτηκαν ποτέ στον κόσμο.

  7. #7
    Μέλος Το avatar του χρήστη bchris
    Όνομα
    Χρηστος
    Εγγραφή
    Nov 2011
    Περιοχή
    Lugano
    Μηνύματα
    2.104

    Προεπιλογή

    Α, sorry δεν το ηξερα το ic. Βαλε καποιο λοιπον με πιο πολλα IOs

    0 Not allowed! Not allowed!

  8. #8
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Ναι, μέσες άκρες αυτό εννοώ. Την ώρα που παίρνεις μια διακοπή, καλείς μια μια τις διευθύνσεις απο τους expanders και παίρνεις ένα byte διαβάζοντας τα I/Os του καθενός. Στο setup του κώδικα έχεις φροντίσει να κάνεις ένα initial reading και μετά απο κάθε διακοπή που θα σκάει, θα συγκρίνεις ό,τι διαβάζεις απο το καθένα, με το byte που είχες στην προηγούμενη διακοπή. Κοιτάς τις διαφορές, αποθηκεύεις το νέο byte πάνω στο παλιό και συνεχίζεις έτσι.

    Κοίτα, αν το σετάρεις σε μέγιστη ταχύτητα (400KHz τα πάει, δεν νομίζω να έχει πρόβλημα με 5 expanders) νομίζω οτι κάτι θα γίνει και σχετικά γρήγορα. Αν τώρα είναι κρίσιμοι οι χρόνοι σου και βιάζεσαι ή δεν θες να χάνεις πολύ απο αυτούς, δεν ξέρω τι άλλο να σκεφτώ.

    0 Not allowed! Not allowed!

  9. #9
    Μέλος Το avatar του χρήστη ALAMAN
    Όνομα
    Γιώργος
    Εγγραφή
    Oct 2005
    Περιοχή
    -
    Μηνύματα
    2.525

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από manolena Εμφάνιση μηνυμάτων
    Ναι, μέσες άκρες αυτό εννοώ. Την ώρα που παίρνεις μια διακοπή, καλείς μια μια τις διευθύνσεις απο τους expanders και παίρνεις ένα byte διαβάζοντας τα I/Os του καθενός. Στο setup του κώδικα έχεις φροντίσει να κάνεις ένα initial reading και μετά απο κάθε διακοπή που θα σκάει, θα συγκρίνεις ό,τι διαβάζεις απο το καθένα, με το byte που είχες στην προηγούμενη διακοπή. Κοιτάς τις διαφορές, αποθηκεύεις το νέο byte πάνω στο παλιό και συνεχίζεις έτσι.

    Κοίτα, αν το σετάρεις σε μέγιστη ταχύτητα (400KHz τα πάει, δεν νομίζω να έχει πρόβλημα με 5 expanders) νομίζω οτι κάτι θα γίνει και σχετικά γρήγορα. Αν τώρα είναι κρίσιμοι οι χρόνοι σου και βιάζεσαι ή δεν θες να χάνεις πολύ απο αυτούς, δεν ξέρω τι άλλο να σκεφτώ.
    Ο τρόπος που αναφαίρεις φαίνεται αλάνθαστος. Αλλά έχει το μειονέκτημα να απαιτεί χρόνο... 4 expaders όχι 5, το 5ο είναι για την LCD 2x16.
    Το θέμα είναι ότι τα θέλω για GPIO θύρες. Ας πούμε ότι θα εκτελούν χρέη εισόδου σε ένα σύστημα "αυτόματου ελέγχου". Θεωρώ πως δεν είναι time critical το θέμα.
    Αν και δεν θα είναι και τα 4 πάντα είσοδοι, απλά θέλω να κάνω το κύκλωμα generic. Εαν θέλω κάποια στιγμή να τα σετάρω και τα 4 ως είσοδοι ή 2+2 άναλογα τις απαιτήσεις.
    Να μην "δεσμεύσω το κύκλωμα" ώστε κάποιο ή κάποια να είναι υποχρεωτικά είσοδοι ή έξοδοι.

    EDIT: Κάπως έτσι σκέφτηκα και το παραπάνω κύκλωμα, επειδή η έξοδος INT είναι open drain με δυσκόλεψε λίγο αλλά πιστεύω πως θα δουλέψει όπως το παρουσιάζω.
    Έχω αμφιβολίες όμως. Θα το δοκίμαζα αλλά δεν έχω το χρόνο και την ευκαιρία κατά συνέπεια θα βγεί απευθείας σε πλακέτα. Γιαυτό και έγινε λόγος συζήτησης.
    Το σκεπτικό είναι ότι ένα οποιοδήποτε expader ή περισσότερα από 1 μπορεί να κάνει interrupt, και τότε το μόνο που έχουμε να κάνουμε είναι να "κοιτάξουμε" την τιμή μιας θύρας να δούμε τί μας δίνει, αυτό που κάνει Interrupt αλλάζει και 1 bit στη θύρα (4bit θα χρησιμοποιούνται) και προφανώς θα αλλάζει ένα bit τη φορά, μόνο που περισσότερη σημασία έχει για μας το ποιό bit άλλαξε.

    Αν και το σκέφτομαι σοβαρά να το κάνω όπως λες, λόγω οτι είναι κάτι περισσότερο standar και λόγω ότι δεν χρειάζομαι time critical διαχείριση.
    Μέχρι τί συχνότητα θα μπορούσε να διαβάσει έναν τετραγωνικό παλμό;
    Θα μπορούσε να ελέγξει αισθητήρα υπερύθρων;

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη ALAMAN : 26-11-14 στις 22:48
    Το μέλλον είναι πλέον παρόν, ας το κατακτήσουμε.
    Τα microchip είναι απο τα πιο περίπλοκα κυκλώματα που φτιάχτηκαν ποτέ στον κόσμο.

  10. #10
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Σχεδόν όλοι οι σένσορες αυτού του τύπου, δουλεύουν με "ανθρώπινους" χρόνους στην έξοδό τους και όχι με χρόνους μ/Ε. Αυτό που εννοώ είναι οτι η υστέρηση που έχουν απο κατασκευής, μας επιτρέπει να τους διαβάζουμε με πολύ αργούς ρυθμούς, της τάξης ίσως και μερικών second. Είναι απίθανο να σκάει ένας τέτοιος αισθητήρας διακοπές στον μ/Ε με πολύ γρήγορα intervals. Άρα, νομίζω οτι έχεις άπλετο (σχεδόν) χρόνο να κάνεις τους ελέγχους σου όχι μόνον σε έναν αλλά σε περισσότερους απο αυτούς.

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

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

  1. INTERRUPT SERVICE RUTINE
    By NOE in forum Μικροελεγκτές
    Απαντήσεις: 24
    Τελευταίο Μήνυμα: 23-03-20, 13:26
  2. Plc και interrupt
    By info@kalarakis.com in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 4
    Τελευταίο Μήνυμα: 24-04-17, 20:43
  3. PIC16F84A Interrupt προβλημα
    By billtech in forum Μικροελεγκτές
    Απαντήσεις: 12
    Τελευταίο Μήνυμα: 20-10-14, 16:26
  4. Χρήση Timer overflow interrupt
    By Airwolf30 in forum Μικροελεγκτές
    Απαντήσεις: 10
    Τελευταίο Μήνυμα: 24-04-12, 12:13
  5. Pic18f4550 και external interrupt
    By antonis_x in forum Μικροελεγκτές
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 05-12-09, 13:59

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

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