PDA

Επιστροφή στο Forum : PIC16f84a && DS1621



Κρεμμύδας Δημήτρης
14-12-07, 16:08
Καλησπέρα

Μετά απο περίπου 3 ώρες άπειρων δοκιμών κατάφερα να διαβάσω απο ένα ds1621 στον pic 16f84a την θερμοκρασία και να την περάσω σε ένα lcd

Έκανα το εξής λάθος:
Συνέδεα το SDA και το SCL (το data bus και το clock bus) του ds1621 απευθυείας στο portA0 και portA1 του pic

τελικά έπρεπε να συνδέσω επίσης το SDA και το SCL στο +5 V μαζί με ένα pull-up resistor

Όμως ακόμα δεν έχω καταλάβει γιατί;
Αφού έθετα σε λογικό 1 τις πόρτες του pic, δεν θα έπρεπε να είναι σε λογικό 1 και οι πόρτες του ds1621 (sda, scl) ?

Γιατί θα έπρεπε να τις συνδέσω σώνει και καλά στο +5V ?

Αν υπάρχει κάποια σύντομη απάντηση ή κάποια παραπομπή στο ερώτημα μου ... θα σας είμαι ευγνώμων !

Anyway
η χαρά που το είδα να δουλεύει ήταν τεράστια !!!!!

DT200
14-12-07, 16:43
Αυτό αναφέρετε και στο τεχνικό φυλλάδιο του pic ότι Στα τεχνικά φυλλάδια
πάντα αναφέρετε ότι χρειάζονται δυο αντιστάσεις pull up ,
προφανώς διότι δεν μπορεί αυτού του είδους ο διάδρομος να κάνει 5v την έξοδο του.
Υ.Γ. αν έχεις γράψει σωστά τον pic (16F84A) βλέπω ότι δεν έχει τέτοιο
διάδρομο άρα το έχεις κάνει με προγραμματισμό , που κατά την γνώμη μου
θα έπρεπε τα pin του pic να γίνονται 5V αλλά
δεν θα μπορεί να κάνει το ίδιο το ds1621 άρα να το πρόβλημα και η λύση του.

panpanta
18-10-12, 02:47
Αν θυμάμαι καλά το i2c θέλει pull-up αντιστάσεις γιατί τα δεδομένα σχηματίζονται με μεταγωγή του διαύλου από λογικό 1 σε λογικό 0.

Εάν δεν θέσεις λογικό 1 με τις αντιστάσεις δεν μπορεί να παράξει λογικό 0 το εξάρτημα που θα ξεκινήσει μετάδοση δεδομένων στο δίαυλο.

Ελπίζω να βοήθησα.

Στην παρακάτω φωτό μέσω i2c διαβάζω την ώρα από ένα RTCC και την εμφανίζω σε LCD οθόνη.
Πρόσεξε τα δυο κόκκινα led κάτω από την lcd, είναι αναμένα γιατί τα κρατάνε αναμένα οι δυο pyll-up αντιστάσεις που έχω
για το λόγω που είπα πρίν. Εάν τις αφαιρέσω και σβήσουν τα led τότε δεν θα δουλεύει το i2c.
Στο μάτι βέβαια φαίνονται μόνιμα αναμένα τα led αλλα στην πραγματικότητα αναβοσβήνουν πολύ γρήγορα σε κάθε μεταφορά πληροφορίας.

panpanta
18-10-12, 03:01
Όμως ακόμα δεν έχω καταλάβει γιατί;
Αφού έθετα σε λογικό 1 τις πόρτες του pic, δεν θα έπρεπε να είναι σε λογικό 1 και οι πόρτες του ds1621 (sda, scl) ?

Γιατί θα έπρεπε να τις συνδέσω σώνει και καλά στο +5V ?



Πρέπει κάτι να κρατά την γραμμή του i2c σε λογικό ένα ώστε να μπορούν οι συσκευές που θέλουν να στείλουν πληροφορία να δημιουργούν τα μηδενικά bit
κατεβάζοντας την γραμμή πρόσκαιρα σε λογικό μηδέν. Ενώ όταν την ελευθερώνουν τότε δημιουργείται το λογικό ένα.
Διάβασε παρακάτω και θα καταλάβεις.

At the physical layer (http://en.wikipedia.org/wiki/Physical_layer), both SCL & SDA lines are of open-drain (http://en.wikipedia.org/wiki/Open-drain) design, thus, pull-up resistors (http://en.wikipedia.org/wiki/Pull-up_resistor) are needed. Pulling the line to ground is considered a logical zero while letting the line float is a logical one. This is used as a channel access (http://en.wikipedia.org/wiki/Channel_access) method. High speed systems (and some others) also add a current source (http://en.wikipedia.org/wiki/Current_source) pull up, at least on SCL; this supports faster rise times and higher bus capacitance.

klik
18-10-12, 03:50
Στο SCL δεν θα συμβεί πρόβλημα αν οδηγήσεις το Ι2C slave chip με τις push-pull εξόδους του pic, αλλά στο SDA υπάρχει πρόβλημα κατά το διάβασμα από τον PIC (στο γράψιμο από τον PIC δεν υπάρχει πρόβλημα).
Όταν θέλεις να διαβάσεις το SDA, θα το κάνεις INPUT (TRIS pin = 1) άρα αν δεν έχεις βάλει πόλωση στην γραμμή SDA, θα είναι ελεύθερη με άγνωστη (και απροσδιόριστη) τιμή. Οπότε ο pic διαβάζει χαζομάρες.

υγ. στο sda αν χρησιμοποιείς push-pull έξοδο του PIC, είναι καλά να βάζεις μια μικρή αντίσταση σε σειρά ώστε αν κατα λαθος πας να οδηγήσεις το SDA σε 1 και το άλλο IC σε 0, μην έχεις shoot thru με υψηλά ρεύματα. Άλλη λύση θα ήταν να μην οδηγείς ποτέ το sda σε 1, αλλά απλά να κάνεις το TRIS=1 (οπότε το ic θα διαβάζει το default δυναμικό 1 του pull up).