Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III, IIISE)

Πριν περίπου δύο ώρες ολοκλήρωσα με επιτυχία την πρώτη δοκιμή του συστήματος ελέγχου για βουβάλια που όπως ξέρετε μελετώ / αναπτύσσω εδώ και λίγο καιρό:

IMG_5251_resize.JPG
(αυτό που βλέπετε είναι το άψογο κλείδωμα με σήμα 192KHz από την on board κάρτα ήχου ενός PC, μέσω μάλιστα οπτικής ίνας, και μέσα από το 4-input board της TPA, με τις ιδανικές ρυθμίσεις για ελάχιστο jitter)


Μιλάμε για μια υλοποίηση βασισμένη πάνω στον κώδικα του HiFiDuino (http://hifiduino.wordpress.com/code/ , http://hifiduino.blogspot.com/) με κυριότερη διαφορά τη σύνδεση με έγχρωμη οθόνη TFT 2.8" αντί για απλή οθόνη τεσσάρων γραμμών.

Ο εν λόγω κώδικας υποστηρίζει τα παρακάτω:

- Επισήμως συμβατός με τα Buffalo II και III (θεωρώ ότι θα λειτουργήσει χωρίς πρόβλημα και με το Buffalo32s).
- Υποστήριξη ρολογιών στα 80MHz ή 100MHz (με πολύ εύκολη προσαρμογή του κώδικα).
- Υποστήριξη απλής λειτουργίας (μια πλακέτα Buffalo) ή dual mono λειτουργίας (με δύο πλακέτες Buffalo).
- Χειρισμός μέσω ενός rotary encoder.
- Τηλεχειρισμός μέσω IR.
- Πλήρης παραμετροποίηση όλων των παραμέτρων του ES9018. Οι αλλαγές γίνονται κανονικά ενώ το DAC είναι σε λειτουργία.
- Εμφάνιση ένδειξης Lock.
- Εμφάνιση του είδους σήματος (π.χ. s/pdif, I2S, DSD).
- Εμφάνιση του sample rate του σήματος εισόδου.
- Επιλογή εισόδου (για το Buffalo III). Υποστήριξη έως 8 εισόδων.
- Λειτουργία mute


Περισσότερες λεπτομέρειες:


Οθόνη

Επέλεξα να χρησιμοποιήσω μια έγχρωμη οθόνη TFT με διαγώνιο 2.8" και ανάλυση 320 x 240. Τη συγκεκριμένη οθόνη την αγόρασα από εδώ: https://www.adafruit.com/products/335
Αργότερα βρήκα μια φαινομενικά συμβατή στο ebay σε πολύ καλύτερη τιμή. Μόλις την παραλάβω και επιβεβαιώσω τη συμβατότητα θα σας ενημερώσω.
Υπόψη, η συγκεκριμένη οθόνη είναι touchscreen, κάτι που δεν εκμεταλλεύομαι στην τρέχουσα έκδοση του κώδικα αλλά εκτός απροόπτου θα φανεί χρήσιμο σε μελλοντική έκδοση. ;)


Microcontroller:

Ο μικροελεγκτής που θα χρησιμοποιήσουμε είναι το Arduino MEGA 2560, το οποίο έχει διαστάσεις περίπου 10cm x 5,3cm. Στην περίπτωση που ο διαθέσιμος χώρος είναι ελάχιστος, δεν έχει πρόβλημα να μονταριστεί ακόμα και κάθετα. Καλό είναι να μονταριστεί πίσω από την οθόνη ώστε να κρατηθεί μικρό το μήκος της καλωδιοταινίας που τα συνδέει. Μπορεί να βρεθεί στην εγχώρια αγορά (π.χ. http://www.skroutz.gr/c/146/mikrohlektronika.html?keyphrase=arduino+mega+2560) ή εναλλακτικά από το ebay σε πολύ καλύτερες τιμές (κλώνους ουσιαστικά, π.χ. αυτό: http://www.ebay.com/itm/Arduino-MEG...ltDomain_0&hash=item3a6ef1c658#ht_1716wt_1163).


Χειρισμός

Όλος ο έλεγχος γίνεται από έναν rotary encoder (π.χ. http://www.ebay.com/itm/2pcs-Rotary...ultDomain_0&hash=item256e00dc67#ht_846wt_1163) ο οποίος έχει ενσωματωμένο και διακόπτη (momentary contact). Πιέζεις δηλαδή το knob μέσα (ώστε να κάνεις select στην περίπτωσή μας). Μετά περιστρέφεις το knob για να μετακινηθείς στο μενού και να κάνεις αλλαγές στις ρυθμίσεις.


Τηλεχειρισμός
Ο αρχικός κώδικας ήταν γραμμένος ώστε να λειτουργεί με το Apple remote, το οποίο είναι μια εξαιρετική επιλογή (οικονομικό, μικρό, πανέμορφο). Δεν έχει όμως πολλά πλήκτρα. Γιαυτό το λόγο η δικιά μου υλοποίηση αυτή τη στιγμή υποστηρίζει το τηλεκοντρόλ του κλασικού BlueSky. :p
Αυτό όμως δεν σημαίνει πολλά πράγματα, καθότι ο κώδικας μπορεί σχετικά εύκολα να προσαρμοστεί σε οποιοδήποτε χειριστήριο δουλεύει με το πρότυπο NEC ή και να αλλάξει στην αρχική του μορφή (Apple remote). Σε αυτή την περίπτωση δεν θα υποστηρίζεται αλλαγή εισόδου (αν δεν κάνω λάθος περισσεύουν 2 πλήκτρα στο Apple remote τα οποία θα μπορούσαν να χρησιμοποιηθούν, αλλά δεν έχω τέτοιο τηλεχειριστήριο ώστε να μπορώ να δω τι μπορεί να γίνει).
Ως IR δέκτης μπορεί να χρησιμοποιηθεί κάποιο από τα κλασικά εξαρτήματα που κυκλοφορούν, π.χ. http://www.ebay.com/itm/IR-Receiver...263?pt=LH_DefaultDomain_0&hash=item3cbb23a187


Τροφοδοσία

Η τροφοδοσία του μπορεί να γίνει είτε με unregulated τάση 7-12V είτε με regulated 5V (προσωπικά συνιστώ το δεύτερο). Υπολογίζετε μέγιστη κατανάλωση της τάξης των 300mA. Ένας μικρό τροφοδοτικό με μετ/τη στα 7V+ και ανόρθωση / σταθεροποίηση με ένα 7805 είναι ότι πρέπει.


Σύνδεση με το Buffalo

Η σύνδεση με το βουβάλι επιτυγχάνεται μέσω πρωτοκόλλου I2C. Η σηματοδοσία γίνεται στα 5V που υποστηρίζει το Arduino και επίσης "καταλαβαίνει" το βουβάλι. Παρότι το ES9018 είναι επισήμως 5V tolerant στο I2C bus του, πολλοί προσθέτουν ένα μικρό κύκλωμα που προσαρμόζει τα 5V του Arduinο στα 3.3V που είναι το "απόλυτα σωστό" για το βουβάλι.
Ο μικροελεγκτής που βρίσκεται εγκατεστημένος στο βουβάλι (ένα ολοκληρωμένο με 8 pins που βρίσκεται πάνω σε βάση) αφαιρείται ώστε να αναλάβει το Arduino. Για τη σηματοδοσία απαιτούνται 3 καλωδιάκια, για τα σήματα SDA, SCL και GND.


Σύνδεση USB για το Arduino

Από τη στιγμή που έχει γίνει ο προγραμματισμός, δεν απαιτείται υπολογιστής για να δουλέψει το controller μας. Οπότε η εύκολη πρόσβαση στη USB θύρα του arduino δεν είναι υποχρεωτική, αλλά αν θέλουμε να ανεβάζουμε νέες versions του κώδικα χωρίς να ξεβιδώνουμε το σασί μας είναι καλή ιδέα να τη προβλέψουμε με κάποιο τρόπο. Ένας τρόπος είναι με USB extension το οποίο θα καταλήγει στο πίσω μέρος του σασί μας.


Αυτά για την ώρα.. Επισυνάπτω τον κώδικα για τους πιο ανήσυχους (v.0.51). Μετονομάστε το αρχείο σε B3_arduino_code_v0_51.zip και ανοίξτε το με το περιβάλλον ανάπτυξης του Arduino.

View attachment B3_arduino_code_v0_51.zip.pdf

Αύριο (ή αργότερα) θα συνεχίσουμε με λεπτομέρειες της κατασκευής.
 

supersonic

Μέλος Σωματείου
17 June 2006
49,045
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

μπράβο!!!
 

Chris1967

Supreme Member
11 September 2010
4,225
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

:worshippy::grinning-smiley-043-bye-
 

tmjuju

Administration Team
Staff member
21 January 2007
21,657
Απάντηση: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Καλή εβδομάδα!
Καλά νέα, Nice pics!
Βαλε και ένα κουμπί για σβήσιμο της οθόνης
Είπαμε όμορφη είναι
Αλλά έτσι θα γίνει πιο Hi end :p
 
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Ευχαριστώ παιδιά!

Το σβήσιμο της οθόνης είναι piece of cake.. Ή καλύτερα, το dimming της οθόνης.. ;) Θα μπει μέχρι να φτάσουμε σε v.1.

Επίσης, να συμπληρώσω ότι όπως είναι ο κώδικας στα 32s & II η επιλογή εισόδου είναι ουσιαστικά άχρηστη (πρακτικά δουλεύει μόνο η πρώτη είσοδος επειδή αυτή έχει συνδέσει η TP στο input pin). Είναι όμως πολύ εύκολο να τροποποιηθεί ο κώδικας ώστε να δουλεύει με κάποιο εξωτερικό MUX. Περισσεύει άφθονο I/O στο Arduino.
 
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Επίσης μελετώντας το datasheet του ES9018 παρατήρησα μερικά ενδιαφέροντα registers τα οποία δεν αξιοποιούνται από τον κώδικα του hifiduino και τα οποία θέλω να εξερευνήσω. Δεν είναι όμως πρώτη προτεραιότητα.
 

paull

Established Member
9 September 2008
185
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Συγχαρητήρια, εξαιρετική προσπάθεια! Ευχαριστούμε πάρα πολύ για τα links και τις χρήσιμες πληροφορίες που παραθέτεις!
 

tmjuju

Administration Team
Staff member
21 January 2007
21,657
Απάντηση: Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II,

Ευχαριστώ παιδιά!

Το σβήσιμο της οθόνης είναι piece of cake.. Ή καλύτερα, το dimming της οθόνης.. ;) Θα μπει μέχρι να φτάσουμε σε v.1.

Ναι, πατάς δύο φορές το Dim και βγαίνει ο DimDim :p

Ενώ για την ώρα μας δίνεις έκδοση .51 ??
Area 51? wtf? Tera Australis Incognita ? :D

Για ποια άλλα ενδιαφέροντα registers λές ?
 
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Σας δίνω v.0.51 για να έχετε κάτι λειτουργικό να παίζετε.. :D

Το Area 51 του πράγματος είναι happy coincidence! :D

Τα ενδιαφέροντα registers είναι τα 71 - 48, αν έχεις πρόχειρο το datasheet.. Απλά παρέχουν πολλές πληροφορίες για το s/pdif που βλέπει στην είσοδο το βουβάλι.
 
28 June 2006
2,928
Απάντηση: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Respect - που λέμε και στην Αρκαδία. Παρόλο που τα ψηφιακά δεν είναι "my cup of tea" - κι αυτό παλιά αρκαδική ρήση είναι :)
 

tmjuju

Administration Team
Staff member
21 January 2007
21,657
Απάντηση: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

(Κλέβω το quote από το δίπλα θέμα για να τα έχουμε εδώ συγκεντρωμένα)

Όσο αφορά την ένδειξη του lock στο Arduino, το refresh του lock και του sampling rate είναι ορισμένο στο software να γίνεται ανά 1 δευτερόλεπτο. Αλλάζει πολύ εύκολα. Επίσης είναι πολύ εύκολο να δοθεί απλά ένδειξη lock (στην οθόνη) διαβάζοντας απλά το ποδαράκι του σχετικού LED (για να μην τραβάμε διαρκώς δεδομένα από τον σχετικό register του 9018). Θα το υλοποιήσω στο επόμενο revision του κώδικα.

Καλή ιδέα!

Τώρα που παίζεις με το mega, Περισσεύουν πινάκια για έλεγχο ρελέ και ‛ενορχήστρωση’ bootstrap procedure?
 
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Ο HiFiDuino διαβάζει μέσω του lock LED (με καλώδιο προς άλλο arduino).

Μπορείς να πετύχεις το ίδιο διαβάζοντας τον Register 27 (Status Register) αλλά φοβάμαι ότι θα κάνει πολύ I2C traffic, πράγμα που ίσως δεν θέλουμε.

Τη στιγμή που ήδη υπάρχει το LED μάλλον είναι καλύτερα να "κλέψουμε" ένδειξη από εκεί. Το arduino mega που χρησιμοποιούμε έχει υπέρ αρκετό I/O.
 

tmjuju

Administration Team
Staff member
21 January 2007
21,657
Απάντηση: Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II,

Ο HiFiDuino διαβάζει μέσω του lock LED (με καλώδιο προς άλλο arduino).

Μπορείς να πετύχεις το ίδιο διαβάζοντας τον Register 27 (Status Register) αλλά φοβάμαι ότι θα κάνει πολύ I2C traffic, πράγμα που ίσως δεν θέλουμε.

Τη στιγμή που ήδη υπάρχει το LED μάλλον είναι καλύτερα να "κλέψουμε" ένδειξη από εκεί. Το arduino mega που χρησιμοποιούμε έχει υπέρ αρκετό I/O.

Ναι αν είναι bit δεν έχουμε λόγο να το διαβάζουμε συνέχεια από i2c.
Έλεγα ότι θα υπήρχε μετρητής- accumulator- κάτι
Άρα ναι με το Mega μπορούμε να κάνουμε μια προσθήκη στον κώδικα και για αυτό. Και μετά γραφήματα στην LCD :)
 
Re: Arduino based controller for Sabre ES9018 based DACs (Buffalo 32s, II, III)

Λοιπόν, χτες παρέλαβα την οθόνη 2.8" που περίμενα από το Ebay.

TFT280.jpg TFT280_1.jpg TFT280_2.jpg

Δεν πρόλαβα να την δοκιμάσω, αλλά έχω μερικές παρατηρήσεις:

1) Δέχεται input με 16bits και 8bits, αλλά δεν έχω βρει πως το ορίζεις ή ποιο είναι το default. Η οθόνη (και το library) της adafruit παίζει στα 8bits.
2) Ίσως λειτουργεί γενικότερα λίγο διαφορετικά από την οθόνη της adafruit. Ένα signal pin δεν μου κάθεται..
3) Έχει ενσωματωμένο και SD card reader. Πολύ χρήσιμο αν σκοπεύουμε να βάλουμε και γραφικά στον controller (που φυσικά και σκοπεύουμε! :D).

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

Ψάχνοντας περισσότερες πληροφορίες για την οθόνη, έπεσα εδώ: http://iteadstudio.com/store/index.php?main_page=product_info&cPath=57_58&products_id=525

Το hardware φαίνεται να είναι ακριβώς ίδιο με αυτό που μου ήρθε από το Ebay, αλλά το software είναι διαφορετικό..

Εδώ έχουμε να κάνουμε με αυτό το library: http://www.henningkarlsen.com/electronics/library.php?id=51

το οποίο φαίνεται να είναι αρκετά πιο ενδιαφέρον από αυτό της adafruit. Για παράδειγμα, έχει διαφορετικά fonts και έχει και εργαλεία για να φτιάξεις τα δικά σου.

Επίσης είναι συμβατό με πολλά και διάφορα displays, διαφορετικών μεγεθών και αναλύσεων. Καλό αυτό..

Οπότε, μου μπαίνουν ιδέες να μετατρέψω τον κώδικά μου ώστε να παίζει με αυτή τη library. Λογικά θα παίζει κανονικά και η οθόνη που έχω της adafruit αλλά και αυτή από το Ebay. Ειδικά αυτή του Ebay λογικά θα παίζει και πιο γρήγορα, εφόσον την κάνω interface με 16bits. Αυτό είναι ιδιαίτερα σημαντικό αν σκοπεύει κανείς να εμφανίζει και bitmaps (που προφανώς σκοπεύω.. :D).

Θα σας κρατήσω ενήμερους..