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

Θέμα: SPI ή I2C ????

  1. #1
    Νέο Μέλος
    Εγγραφή
    Jul 2005
    Μηνύματα
    21

    Exclamation SPI ή I2C ????

    Καλησπέρα σε όλους τους φίλους.
    Ειμαι σχετικά καινούργιος στους μικροελεγκτές και προσπαθώ να καταλάβω πως μπορω να επιτύχω επικοινωνία ανάμεσα σε 2 mcu.
    Από την μέχρι τώρα αναζήτηση έφτασα στο συμπερασμα οτι υπάρχουν 2 τρόποι :
    α) SPI
    β) Ι2C.

    Τα ερωτήματα είναι τα εξής :

    α) Σε 2 όμοιους mcu (PIC16F877A) πώς γίνεται ο ένας να διαβάζει καποια πληροφορία που θα του δίνει ο άλλος; (π.χ. Ο mcu "Α" να διαβάζει την τιμή της PORTC του mcu "Β")

    β) Με βάση ποια κριτήρια θα επιλέξω ανάμεσα σε SPI και I2C;

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Εγγραφή
    Apr 2006
    Περιοχή
    Κέρκυρα
    Μηνύματα
    5.962

    Προεπιλογή

    Το I2C είναι μάλλον αρκετά πολύπλοκο προτόκολο οπότε απέφυγέ το για την περίπτωση αυτή.
    Μπορείς να συνδέσεις της δύο πόρτες και η μία να είναι έξοδος και η άλλη είσοδος και να έχεις και ένα bit που θα δείχνει οτι ο πρώτος στέλνει δεδομένα στον δεύτερο. Αυτό το Bit θα πηγαίνει σε ένα flip flop το οποίο θα το κάνει clr το δεύτερος όταν διαβάσεις τα data για να ξέρει πότε πρέπει να ξαναδιαβάσει από την πόρτα.
    Για μεγαλυτέρη ταχύτητα μπορείς να βάλεις fifo μνήμη ανάμεσα στους δύο μικροελεγκτές.
    Για μικρή ταχύτητα μπορείς να συνδέσεις τους μικροελεγκτές μέσα από την σειριακή θύρα τους. (είτε RS232 είτε (αν έχει) spi)

    0 Not allowed! Not allowed!

  3. #3
    Νέο Μέλος
    Εγγραφή
    Jul 2005
    Μηνύματα
    21

    Προεπιλογή

    Η θύρα RS232 είναι δεσμευμένη για επικοινωνία με το pc. Οπότε σαν λύση βλέπεις το SPI;

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη lastid
    Όνομα
    Δημήτρης
    Εγγραφή
    Feb 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    841

    Προεπιλογή

    Αναλόγως με τις προτεραιότητες της εφαρμογής, μπορείς να επιλέξεις ανάμεσα σε I2C,SPI ή PSP (parallel slave port):
    - Αν δεν έχεις πολλά Ι/Ο διαθέσιμα, επιλέγεις I2C ή SPI.
    - Αν θέλεις την μέγιστη ταχύτητα επικοινωνίας, επιλέγεις PSP.
    - Αν υπάρχει πιθανότητα να συνδέσεις και τρίτο (,τέταρτο, πέμπτο, κλπ) PIC,επιλέγεις I2C. Εκτός και αν με τους πολλούς PIC θέλεις να υλοποιήσεις κάτι σαν έναν shift register πολλών bits, οπότε το SPI είναι καλύτερο.
    Πρέπει να έχεις υπόψιν σου ότι η βασική διαφορά όλων αυτών των τρόπων επικοινωνίας με τη σειριακή, είναι ότι ενώ στη σειριακή οι δύο μονάδες είναι ισότιμες, εδώ υπάρχει μία μονάδα master και μία ή περισσότερες μονάδες slave.
    Ακόμη, μπορεί ένα slave να ειδοποιεί με interrupt το master ότι έχει νέα δεδομένα να στείλει, απελευθερώνοντας το master από τη συνεχή επίβλεψη των slaves.

    Για να διαβάζεις την πόρτα του άλλου PIC, μπορείς να ορίσεις ένα πρωτόκολλο επικοινωνίας μεταξύ master και slave, π.χ. 3 bytes: Αν ας πούμε, ο master δέχεται τα bytes 01,03,78, τότε αυτό μπορεί να σημαίνει ότι στην είσοδο PortC (03) του πρώτου slave PIC (01), υπάρχει το byte 78.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη lastid : 26-05-09 στις 21:21

  5. #5
    Νέο Μέλος
    Εγγραφή
    Jul 2005
    Μηνύματα
    21

    Προεπιλογή

    Λέω να κάνω μια προσπάθεια να χρησιμοποιήσω το I2C για το οποίο όμως έχω μια απορία:

    Ως γνωστόν η διαδικασία για να χρησιμοποιήσεις το I2C στη Μikrobasic είναι η εξής :
    1. I2C_Init(100000)
    2. I2C_Start() Εναρξη επικοινωνίας
    3. I2C_Wr(XX) Εδώ, μέσα στη παρένθεση υπάρχουν 8 bit όπου τα πρώτα 7 δηλώνουν τη διεύθυνση της συσκευής με την οποία θέλουμε να επικοινωνήσουμε και το 8 αν θέλουμε να γράψουμε ή να διαβάσουμε.
    Το ερώτημα είναι πώς καθορίζεται η διεύθυνση της συσκευής?

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη lastid
    Όνομα
    Δημήτρης
    Εγγραφή
    Feb 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    841

    Προεπιλογή

    Στον Master, είναι καθαρά θέμα software με τις παραπάνω συναρτήσεις. Π.χ. αν ο Master θέλει να γράψει μερικά bytes στη συσκευή 8, θα εκτελέσει πρώτα I2C_Wr(16). Αν θέλει να διαβάσει μερικά bytes από τη συσκευή 8, θα εκτελέσει πρώτα I2C(17). Παίρνουμε δηλαδή τη διεύθυνση, την πολλαπλασιάζουμε επί 2 και προσθέτουμε 1 αν πρόκειται για read. Η διεύθυνση φυσικά ορίζεται αυθαίρετα από εμάς για κάθε slave...

    Στους Slave, τα πράγματα είναι λίγο διαφορετικά....
    Από όσο είδα με μία πρόχειρη ματιά, οι I2C συναρτήσεις της Mikrobasic είναι για master μόνο. Για slave η Mikrobasic δεν μας βοηθάει και θα πρέπει να γράψουμε εμείς τις αντίστοιχες υπορουτίνες. Άρα στο πρόγραμμα του slave, θα πρέπει να παίξουμε με τους registers μνήμης του PIC που σχετίζονται με το I2C.
    Συγκεκριμένα, στον register SSPADD γράφουμε τη διεύθυνση της συσκευής. Όταν ο slave PIC λάβει ένα I2C πακέτο, συγκρίνει το πρώτο byte (διεύθυνση) με το περιεχόμενο του SSPADD. Αν είναι ίδια, λέει: "A, μα τί βλέπω, ένα πακέτο για μένα!" και ειδοποιεί το πρόγραμμα εκτελώντας interrupt.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη lastid : 27-05-09 στις 01:40

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

  1. SD Card SPI
    By ALAMAN in forum Γενικά
    Απαντήσεις: 33
    Τελευταίο Μήνυμα: 17-12-14, 20:38
  2. I2C ή SPI επικοινωνία
    By VirusX2 in forum Ηλεκτρονικά
    Απαντήσεις: 8
    Τελευταίο Μήνυμα: 30-11-14, 19:18
  3. SPI Επικοινωνια 3.3V με 5V
    By billtech in forum Μικροελεγκτές
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 16-08-10, 11:49
  4. spi επικοινωνια
    By giannhssdra in forum Μικροελεγκτές
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 03-05-10, 20:36
  5. RF modules με I2C, SPI
    By billtech in forum Εξαρτήματα & Datasheets
    Απαντήσεις: 19
    Τελευταίο Μήνυμα: 13-03-10, 22:47

Tags for this Thread

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

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