PDA

Επιστροφή στο Forum : MAX7221 με δικό του LDO



jousis
20-05-19, 13:16
Καλησπέρα στην παρέα :)
Θα ήθελα την βοήθειά σας γιατί έχω φάει το ίντερνετς (εδώ και eevblog) μπας και βρω κάτι σχετικό, έχω τρελαθεί.

Σε ένα σχετικά απλό pcb ζυγαριάς* είπα να κάνω μια δοκιμή και να χωρίσω το MAX7221 με τα 7SEG απο τον κεντρικό LDO και να τους βάλω έναν δικό τους.
4-layer PCB με κοινό ground plane και σπασμένο "power" layer σε 3 κομμάτια (VIN , +3.3V, +3.3VA)

Πιο συγκεκριμένα, τα κύρια sections του pcb είναι:
1. κύκλωμα φόρτισης μπαταρίας
2. main LDO (+3.3V / 500mA) που παίρνει απο VIN (USB/Battery) και δίνει σε MCU (ESP32) και λοιπά digital
3. max7221 LDO (+3.3VMAX / 300mA) που παίρνει απο VIN και δίνει μόνο σε max7221 και 8*7SEG
4. analog LDO (+3.3VA / 200mA) που παίρνει απο VIN και δίνει μόνο στο analog κομμάτι του ADS1232 (και στο load cell)

Οι LDO των 3,4 έχουν συνδεδεμένο το enable pin σε ένα output του MCU και τους ανοιγοκλείνει κατά το δοκούν.

Στο παλιό revision (2-layer με 5 μόνο 7SEG) που λειτουργούσε τέλεια, το MAX7221 έπαιρνε απευθείας 3.3V απο τον κεντρικό LDO, μαζί με τοn MCU.
Οι πολύ απλές συνδέσεις που έκανα τώρα στο input VCC του MAX7221 φαίνονται στο schematic_7seg.pdf
VIN = ρεύμα απο μπαταρία ή USB που είναι το input και των 3 LDO.
Στην παρακάτω εικόνα φαίνεται και η τοποθέτηση.
Αριστερά ο main LDO που τροφοδοτεί το +3.3V power plane (πάει MCU/ADS1232 digital VCC/buttons/...) και δεξιά ο LDO του max που παίρνει απο VIN (plane) και δίνει απευθείας στο MAX.
78083

Ωραία, όταν τα συνδέσεσα όλα, το MAX7221 έδειχνε μόνο στο 1ο segment και τίποτα άλλο.
Βάζω Logic analyzer/oscilloscope, clock δείχνει υπέροχο, data in μια χαρά και το CS επίσης όπως πρέπει.
Χωρίς να αλλάξω τίποτα άλλο, κάνω bypass τον δικό του LDO και του δίνω ρεύμα απο τον κεντρικό, παίζουν όλα !
Ο LDO ενεργοποιείται κανονικά, δίνει μια χαρά 3.3V όπως και ο main.
Το ground plane θυμίζω είναι κοινό.


Τί μπορεί να φταίει ;




*αν ενδιαφέρει κάποιον:
https://gitlab.com/jousis/espresso-scale

SProg
20-05-19, 13:32
MCP1811A/11B/12A/12B
Absolute Maximum Ratings
Input Voltage, VIN .........+6.0V


Το τροφοδότησες από USB; Έχεις κάποια προστασία για spikes τάσης; Δοκίμασες να αλλάξεις το regulator μήπως και το κατέστρεψες κατά τη κόλληση από λάθος θερμοκρασία ή ESD;

jousis
20-05-19, 13:46
Επειδή ήταν η πρώτη φορά που χρησιμοποίησα αυτόν τον LDO σκέφτηκα ακριβώς τα ίδια. Μήπως τον έψησα κάπως, μήπως είναι πιο ευαίσθητος απο τους ΤΙ που έχω στα άλλα 2 σημεία.
Οπότε, έβαλα και τον κλασσικό TI που χρησιμοποίω παντού, τίποτα. Μέτρησα εξόδους,εισόδους, όλα δείχνουν νορμάλ.
Όταν έβαλα τον νέο TI έδωσα ρεύμα πρώτα απο μπαταρία για να σιγουρευτώ 100%, πάλι τα ίδια.

SProg
20-05-19, 13:53
Με τον παλμογράφο δες στο ένα κανάλι την τάση στο VCC pin του MAX7221CWG και στο άλλο κανάλι δες τη τάση στο Enable pin του MCP1812.

jousis
20-05-19, 13:58
OK, θα το κάνω, ευχαριστώ.
Τί ψάχνω να βρω;
Μήπως το EN πέφτει κάποιο απο κάποιο όριο όταν ζητάει ρεύμα το max ;

SProg
20-05-19, 14:05
Ναι ή δεν εχεις βυθισεις στην εξοδο.

SRF
20-05-19, 14:21
'Εχω πάνω από 15 έτη να ασχοληθώ με τα συγκεκριμένα ΜΑΧ (7219 & 7221) αλλά γιατί έγώ θυμάμαι ότι ήταν ΚΑΘΑΡΑ 5 βολτα ολοκληρωμένα? Εσύ το δουλεύεις στα 3.3 ? !!!
Είσαι σίγουρος ότι τα δουλεύεις σωστά, και δεν πέφτεις σε σημείο λειτουργείας τύπου brown out? Μάλιστα σύμφωνα με το datasheet θέλουν 3.5V ως ελάχιστο σήμα Η !
Αν όντως τα δουλεύειςστα 3.3 είσαι σίγουρα εκτός προδιαγραφών!

jousis
20-05-19, 14:32
Έχεις δίκαιο σε αυτό, αλλά παίζει σίγουρα σε 3.3 χωρίς θέμα.

Όταν πάρει ρεύμα απο τον κύριο LDO(που είναι και πιο μακριά) παίζει σούπερ.
Εκτός αυτού, στο ένα απο τα 2 test pcb έχω το AS1107 που είναι και επίσημα 3.3V logic και έχει ακριβώς την ίδια συμπεριφορά.
Δεν φταίει το κακόμοιρο το max, το οποίο να σημειώσω είναι 100% αυθεντικό, απο επίσημo reseller.
https://ams.com/documents/20143/36005/AS1106-07_DS000171_1-00.pdf/e382bb3c-e44f-74a2-519d-c1094eb7d523

SProg
20-05-19, 14:32
'Εχω πάνω από 15 έτη να ασχοληθώ με τα συγκεκριμένα ΜΑΧ (7219 & 7221) αλλά γιατί έγώ θυμάμαι ότι ήταν ΚΑΘΑΡΑ 5 βολτα ολοκληρωμένα? Εσύ το δουλεύεις στα 3.3 ? !!!
Είσαι σίγουρος ότι τα δουλεύεις σωστά, και δεν πέφτεις σε σημείο λειτουργείας τύπου brown out? Μάλιστα σύμφωνα με το datasheet θέλουν 3.5V ως ελάχιστο σήμα Η !
Αν όντως τα δουλεύειςστα 3.3 είσαι σίγουρα εκτός προδιαγραφών!

Όντως. Ακόμα και το VCC είναι εκτός. Στη σελίδα τους αναφέρουν κιόλας:

For applications requiring 3V operation or segment blinking, refer to the MAX6951 data sheet.

jousis
20-05-19, 15:27
Η τάση παντού (EN,VCC IN) είναι σταθερότατη και μάλιστα όταν έχω τον δικό του LDO είναι και λίγο πιο τσιμπημένο το minimum.

MAX7221 απευθείας στην έξοδο του main LDO με λεπτό καλωδιάκι "τσόντα" ==> 3.28V(max) - 3.12(min) , παίζουν και τα 7
AS1107 + dedicated LDO ==> 3.36V (max) - 3.20 (min) , δεν παίζει τίποτα
Το clock δείχνει ακριβώς ίδιο, το ίδιο και το data.

Δείτε εδώ, αυτό το αίσχος (MAX7221 / 7*7SEG), παίζει τέλεια:
78084
Αν στο ίδιο ακριβώς pcb, κολλήσω πάλι LDO και κόψω το καλωδιάκι, τίποτα.
Το ίδιο ακριβώς και με AS1107.

Περρισότερο με καίει να μάθω τί κάνω λάθος, παρά να βάλω δικό του LDO.

SRF
20-05-19, 15:32
Έχεις δίκαιο σε αυτό, αλλά παίζει σίγουρα σε 3.3 χωρίς θέμα.

Όταν πάρει ρεύμα απο τον κύριο LDO(που είναι και πιο μακριά) παίζει σούπερ.
Εκτός αυτού, στο ένα απο τα 2 test pcb έχω το AS1107 που είναι και επίσημα 3.3V logic και έχει ακριβώς την ίδια συμπεριφορά.
Δεν φταίει το κακόμοιρο το max, το οποίο να σημειώσω είναι 100% αυθεντικό, απο επίσημo reseller.
https://ams.com/documents/20143/36005/AS1106-07_DS000171_1-00.pdf/e382bb3c-e44f-74a2-519d-c1094eb7d523

Κοιτα...μπορεί να "παίζει" και στα 2V σε κάποιον στον κόσμο! Αυτό ΔΕΝ συνεπάγεται απολύτως τίποτα! Αν ο κατασκευαστής λέει 4-5V και εσύ το δουλεύεις αλλού, μην περιμένεις να "παίζει" ΠΑΝΤΑ και σωστά! Μέτρα λοιπόν το αρχικό σταθεροποιητικό σου με ένα ψηφιακό πολύμετρο καλής ακριβείας και δες τι τάση εμφανίζει τελικά στο πόδι τροφοδοσίας του 7221 με αυτό! Δες επίσης με παλμογράφο τα πόδια του 7221 DATA/CLOCK/EN τι ύψος παλμών έχουν με το δικό του σταθεροποιητικό (αρχικό δηλαδή που λες δουλεύει) ! Σύγκρινε τα παραπάνω με το τι θα μετράς με το "αυτόνομο" σταθεροποιητικό σου! ΑΝ δείς έστω και μερικά mV πιό κάτω οποιοδήποτε από τα προαναφερθέντα... τότε θα ξέρεις ότι απλά ΣΥΜΠΤΩΜΑΤΙΚΑ "παίζει" (στα όρια ανοχής του δηλαδή) με τα αρχικό! Επίσης αύριο μπορεί να βάλεις ένα άλλο 7221 και να μην παίζει ούτε αυτό με το αρχικό σταθεροποιητικό σου... απλά γιατί οι ανοχές εκτός προδιαγραφών είναι τυχαίες από παρτίδα σε παρτίδα παραγωγής! Πολλοί "σχεδιάζουν" κάτι στον πάγκο, αγγίζωντας τέτοια όρια "ανοχών", το κάνουν να "δουλεύει" και πιστεύουν ότι είναι ΟΚ. Το στέλνουν παραγωγή, και από την παραγωγή τους δεν δουλεύει ούτε το 5% και την πατανε!
Ο κατασκευαστή ΔΕΝ είναι ανόητος να μπορεί να δουλέψει το ολοκληρωμένο του και στα 3V ακόμα και αυτός να δηλώνει ότι θέλει 5V και να "χάνει" πελατεία ίσως απο αυτό! ΚΑΤΙ ΘΑ ΞΕΡΕΙ παραπάνω από εμένα, και ΣΙΓΟΥΡΑ και εσένα!

jousis
20-05-19, 15:44
Ξέχνα το 7221 εντελώς, την ίδια συμπεριφορά έχω με το AS1107WL-T, που επίσημα υποστηρίζει 3.3V.
Στο ίδιο pcb, μετά απο 10 λεπτά με LDO που του δίνει μικρότερη (ελάχιστα) τάση παίζει τέλεια.

Αλλά θα κάνω τις συγκρίσεις που λες το βράδυ μπας και βγάλετε άκρη.

SRF
20-05-19, 15:44
Αυτό με το AS1107 από την άλλη, προβληματίζει ολίγον! Αυτό είναι για 2.7 ως 5V οπότε έπρεπε να παίζει! Εκτός αν... τρώς βύθιση τασεως και θόρυβο από το LDO!

SRF
20-05-19, 15:47
.
Στο ίδιο pcb, μετά απο 10 λεπτά με LDO που του δίνει μικρότερη (ελάχιστα) τάση παίζει τέλεια.



"μετά παό 10λεπτά" ? Δεν κατάλαβα... στην αρχη ΔΕΝ παίζει και μετά από 10 λεπτά δουλεύει???

jousis
20-05-19, 15:51
Λάθος μου.

Εννοώ, έχω ένα pcb που δεν παίζει (με τον δικό του LDO).
Ξεκινάω τον αέρα, ξεκολάω LDO, βάζω τσόντα καλώδιο απο decoupling του chip προς τον output cap του main ldo χωρίς να αλλάξω τίποτα άλλο και παίζει.

Και ο main ldo του δίνει λίγο μικρότερη τάση !!!

jousis
20-05-19, 16:11
Έλα παιδιά, τον βρήκαμε τον ένοχο, ΧΙΛΙΑ ΕΥΧΑΡΙΣΤΩ !!!!
Κάτι δεν πάει καλά με την εντολή ΕΝ. Μόλις συνέδεσα το EN με το VIN απευθείας έπαιξε αμέσως.
Άρα το πρόβλημα είναι προφανώς στο trace. Θα το δω αναλυτικά όταν έχω χρόνο.

Όποιος απο τους δύο (η και οι δύο) θέλει, κερνάω ζυγαριά.


υγ. μην με ρωτάτε πως είχε σταθερή τάση το MAX, τάση σωστή στο ΕΝ αλλά δεν έπαιζε. Δεν έχω ιδέα. Θα το συγκεντρωθώ εκεί τώρα και θα το εντοπίσω :biggrin:

nkarama
20-05-19, 17:55
Μάλλον ο δεύτερος LDO ξεκινά λίγο αργότερα απο τον πρώτο (που τροφοδοτεί το MCU) και ως εκ τούτου το MAXIM δεν λαμβάνει εντολή να βγει απο shutdown.

Απο το datasheet:
Initial Power-Up
On initial power-up, all control registers are reset, the
display is blanked, and the MAX7219/MAX7221 enter
shutdown mode. Program the display driver prior to
display use. Otherwise, it will initially be set to scan one
digit, it will not decode data in the data registers, and
the intensity register will be set to its minimum value.

jousis
20-05-19, 18:41
Το περίεργο είναι οτι ο 2ος ldo ξεκινάει μετά, ο 1ος είναι του MCU και αυτός δίνει εντολή πρώτα στον LDO του MAX, μετά δίνει εντολή να βγει απο shutdown ο MAX.
Αλλά μου έδωσες μια ιδέα και αντί για pulldown που είχα στο πιν που ενεργοποιεί τον LDO, έβαλα pullup.
Όλα οκ γιατί όταν ξυπνάει το όλο σύστημα, by default παίρνει ρεύμα ο max.

Αν έστω και μία φορά κλείσω τον δικό του LDO, κάνει πάλι τα ίδια.

Μέτρησα λοιπόν το power pin του max όταν κλείνει ο ldo και είδα οτι έχει 1V+ !
Όταν έχει σήμα ο max στα data/clock, για κάποιον μαγικό λόγο, ζει, δεν ψοφάει.
Μήπως θα έπρεπε να βάλω pulldown σε clock/data/cs ?

ότι είπε ο nkarama.
Απλά το library που έχω, δεν υποστηρίζει re-initialization αν του κλείσεις το ρεύμα.
Το πείραξα λίγο και όλα οκ.
Θα γράψω πιο αναλυτικά το βράδυ.

Και πάλι ευχαριστώ !

lepouras
21-05-19, 00:25
ίσως πω χαζομάρα καθότι άσχετο με αυτά αλλά η συνθήκη αυτή τηρείτε στην ΕΝ πιν?

The SHDN input is an active-low input signal that turnsthe LDO on and off. The SHDN threshold is apercentage of the input voltage. The maximum input low logic level is 20% of VIN and the minimum high logiclevel is 70% of VIN.

επίσης μήπως δεν πρέπει να παραλλάζονται τα ΕΝ πιν από δύο (ή και περισσότερα) LDO και το ένα επηρεάζει το άλλο? μήπως πρέπει να απομονώνετε το σήμα μεταξύ του (ίσος με κάποια δίοδο πχ) ?

jousis
21-05-19, 01:59
Δεν είναι καθόλου χαζομάρα, το είδα κι εγώ αυτό μετά που έψαχνα τα πάντα και είναι ο λόγος που δεν θα χρησιμοποιήσω αυτόν τον LDO εκεί.
Οριακά ήμουν εντός (VIN 4.6-4.7) αλλά μπορώ πολύ εύκολα να βγω εκτός.
Δεν του είχα δώσει σημασία όταν πήρα τον LDO για δοκιμή. Θα χρησιμοποιήσω κι εκεί τον TPS7A0533PDBVR που το HIGH στο EN είναι >0.9V.



Λοιπόν, το πρόβλημα ήταν software-ικό όπως ανέφερε ο nkarama.

Η LedControl library (https://github.com/wayoda/LedControl/blob/master/src/LedControl.cpp) κάνει initialize το τσιπάκι (σωστά) την 1η φορά στον constructor και ορίζει το scan limit

Οπότε, όταν ξεκινάς με το MAX να έχει ρεύμα παρέα με τον MCU, με το initialization

LedControl lc=LedControl(LED_DIN_PIN,LED_CLK_PIN,LED_CS_PIN,1 );
όλα είναι όμορφα.

Όταν κλείσεις όμως το ρεύμα εντελώς, πρέπει να καλέσεις χειροκίνητα την setScanLimit για να πάει μέχρι τέρμα πάλι.
Aν έχεις μόνο 1 MAX, δεν πειράζεις τίποτα και απλά κάθε φορά που ανοίγεις τον LDO μαζί τρέχεις:


digitalWrite(LED_LDO_EN_PIN,LED_LDO_ENABLE);
delay(10); // 1ms works ok
lc.shutdown(0,false);
lc.setScanLimit(0,7);
lc.setIntensity(0,8);


Εναλλακτικά, αλλάζεις την library για ευκολία, προσθέτοντας την παρακάτω συνάρτηση


void LedControl::wakeUp(int intensity) {
for(int i=0;i<maxDevices;i++) {
shutdown(i,false);
setScanLimit(i,7);
setIntensity(i,intensity);
}
}


και καλείς:


digitalWrite(LED_LDO_EN_PIN,LED_LDO_ENABLE); //switch on LDO
delay(10); //1ms works ok
lc.wakeUp(8); //reset scan limit, wake up MAX

SProg
21-05-19, 08:35
Ειναι λαθος η όλη λογική.

Πρέπει ανά διαστήματα να κοιτάς τη κατάσταση και τους καταχωρητές του MAX για να εισαι βεβαιως πως 'τρεχει' κανονικα και όχι κρίνοντας μόνο από το πότε εσύ κάνεις Enable-Disable το LDO

nkarama
21-05-19, 11:54
Ειναι λαθος η όλη λογική.

Πρέπει ανά διαστήματα να κοιτάς τη κατάσταση και τους καταχωρητές του MAX για να εισαι βεβαιως πως 'τρεχει' κανονικα και όχι κρίνοντας μόνο από το πότε εσύ κάνεις Enable-Disable το LDO

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

Κατα τα άλλα, τελευταία τα έχω στείλει... Πανάκριβα και δυσκοίλια... shift registers καλύτερα...

SRF
21-05-19, 12:03
[FONT=Verdana]


Κατα τα άλλα, τελευταία τα έχω στείλει... Πανάκριβα και δυσκοίλια... shift registers καλύτερα...

Ισχύει!!!

jousis
21-05-19, 14:13
Υπέροχα όλα αυτά που λέτε, ελπίζω μια μέρα κάποιος να γράψει κώδικα για αυτό.
Πονοκέφαλος με έπιασε με τις χαζομάρες τα 7seg. :biggrin:


Με τον χαζοκώδικα που απλά ξαναξεκινάει το τσιπάκι παίζει μια χαρά, οπότε πάω παρακάτω.