Υλοποίηση preamplifier PGA23xx

Παιδες οταν ερθει η ωρα, εγω προτειθομαι να το φτιαξω παντως! Με γνωσεις δε μπορω να συνεισφερω αλλανα το φτιαξω (εφοσον δε ξεφευγει οικονομικως) ναι! Οποτε for me oσο ποιο high tech γινεται!! :-)
 
Διπλά μπράβο για την όρεξή σας να το συνεχίσετε.
Ο Στέφανος το είχε ήδη προχωρήσει, αλλά πλέον το βάλατε σε άλλα δεδομένα.
 
Re: Απάντηση: Υλοποίηση preamplifier PGA23xx

Επανέρχομαι και εγώ. Είμαι διαθέσιμος για δοκιμές. Να οργανώσω λίγο την κατάσταση και να δοκιμάσω τον κώδικα.
 
Καλησπέρα και από εμένα,

το project αυτό πρέπει κάποια στιγμή να αρχίσει να αποκτάει φυσική μορφή.
Για τα PGA δεν χρειάζεται να πω πολλά, όλοι τα ξέρουμε λίγο πολύ, απλά το μόνο που θέλω να προσθέσω είναι ότι ακόμα και αυτά δεν είναι απαραίτητα για την υλοποίηση του project αυτό λόγω της modular/puzzle λογικής. Για παράδειγμα τον Δημητρακούδη τον κόβω να καταλήγει με R-2R attenuator.

Για την πλακέτα του μικροελεγκτή πήρα πολλές πρωτοβουλίες κυρίως προς εκεί που βολεύει εμένα. Είναι μια γενικής χρήσης πλακέτας με πολλές δυνατότητες (πρέπει να είναι ο πιο δυνατός 8bit microcontroller που κυκλοφορεί ). Γενικότερα σκεφτόμαστε διάφορα επιπλέον των κλασσικών απαιτήσεων, όπως Windows/Android/iOS εφαρμογή αντίστοιχη τηλεκοντρόλ (μέσω Ethernet/WiFi/Bluetooth) που χρειάζονται αρκετή RAM/FLASH. Επίσης σχετικά εύκολα θα μπορεί να συνδεθεί με άλλες συσκευές του συστήματος και να τις χειρίζεται αν αυτό επιθυμεί ο χρήστης.

Αν πάλι πιστεύετε ότι μπλέκει αρκετά το πράγμα μπορούμε να φτιάξουμε και μια εναλλακτική λύση είτε με μικρότερο (φτηνότερο) ATmega επεξεργαστή είτε με Arduino Shield (πολλαπλάσιο κόστος αλλά ΠΟΛΥ πιο απλό στην χρήση).

Σε κάθε περίπτωση θα είναι συμβατό με Arduino IDE ΚΑΙ Atmel Studio (εγώ προσωπικά το προτιμώ). Μπορώ επίσης να βοηθήσω σε όσους δεν πιστεύουν ότι μπορούν με το να κολλήσω το Chip στην πλακέτα και να το προγραμματίσω με τον απαραίτητο Arduino Bootloader.

Έχει μείνει η πλακέτα του InputSelector ή οποία μάλλον είναι η πιο δύσκολη από άποψη σκέψης ... . Θα ακολουθεί την λογική του υπόλοιπου project όμως για όσους ενδιαφέρονται για 20+ συσκευές εισόδου εξόδου :P..
 
Καλημέρα σε όλους,

Αν παρέλαβες αρκετές πλακέτες θα ήθελα ένα σετ.
Πες μου και το κόστος.

Ευχαριστώ εκ των προτέρων.
 
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Καλημέρα σε όλους,

Αν παρέλαβες αρκετές πλακέτες θα ήθελα ένα σετ.
Πες μου και το κόστος.

Ευχαριστώ εκ των προτέρων.

Παρακαλώ συνεννοηθείτε με προσωπικά μηνύματα.
 
Να διευκρινίσω εδώ (σε περίπτωση που δεν είναι ήδη σαφές) ότι το project είναι εντελώς ερασιτεχνικό, κανείς δεν πρόκειται να βγάλει χρήματα από αυτό.

Οι πλακέτες που έχουν παραχθεί έγιναν ως prototypes, για να δούμε αν δουλεύουν σωστά.

Αν όλα πάνε καλά θα τις δώσουμε (όπως και οτιδήποτε άλλο παραχθεί στα πλαίσια αυτού του project) σε τιμή κόστους. Το ίδιο θα ισχύσει και για μελλοντικές πλακέτες (π.χ. πλακέτα εισόδων).
 
Όπως βλέπετε, ο Στέφανος το έχει προχωρήσει πάρα πολύ με τον κώδικα του controller, ουσιαστικά έχουμε κάτι λειτουργικό, αν και σε επίπεδο prototype. Ο κώδικας φυσικά και θέλει ακόμα δουλειά ώστε να υποστηρίξει αυτά που έχουμε στο μυαλό μας, αλλά είναι σε πολύ καλό δρόμο.

Παράλληλα εξελίσσεται και η πλακέτα εισόδων, η οποία είναι ίσως και η πιο "ευαίσθητη" σαν σχεδίαση.

Με τον Στέφανο κυρίως έχουμε κάνει κάποιες σχεδιαστικές επιλογές:

1) Πλακέτα διάστασης έως 10cm x 10cm, για να κρατήσουμε το κόστος χαμηλά.
2) Όσο περισσότερες εισόδους μπορούμε, με δεδομένο ότι το κόστος της πλακέτας δεν αλλάζει για έως 10 χ 10. Ούτως ή άλλως, θα μπορούμε να υλοποιούμε όσες (από τις 8) εισόδους θέλουμε.
3) Επιλογή non-latching relays, κυρίως λόγω κόστους αλλά και δυνατότητας υποστήριξης περισσότερων εισόδων με ένα shift register.
4) Buffering μέσω ενός διπλού op-amp για όλες τις εισόδους.
5) Decoupling του op-amp μέσω SMD κεραμικών πυκνωτών κολλημένων σχεδόν πάνω στα σχετικά pins και επιπλέον ηλεκτρολυτικών.
6) Ρύθμιση κέρδους του op-amp μέσω αντιστάσεων. Οι εν λόγω αντιστάσεις θα πρέπει να επιλεγούν με βάση την πιο ασθενή πηγή. Οι στάθμες των διαφορετικών πηγών θα μπορούν να "ισοσταθμίζονται" μέσω λογισμικού, ορίζοντας gain ξεχωριστά για κάθε πηγή στο PGA.
7) Αντίσταση εισόδου ξεχωριστή για κάθε είσοδο.
8) Θέση για πυκνωτές DC blocking με (πολύ) μεγάλο footprint ώστε να χωράνε και HiEndάδικοι πυκνωτές. Φυσικά αν είμαστε σίγουροι ότι το DC coupling είναι ΟΚ για την αλυσίδα μας μπορούμε να τους βραχυκυκλώσουμε.
9) Ξεχωριστά ground planes για το κομμάτι των αναλογικών σημάτων και του shift register. Ground planes και στις δυο πλευρές της πλακέτας.
10) Καμία via στην πορεία του σήματος.

Αυτό είναι το PCB, όπως το έχουμε σχεδιάσει:

(χωρίς τα ground planes)
input_v31_no_GP.jpg


(με τα ground planes)
input_v31.jpg

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

Ευχαριστούμε προκαταβολικά. :smile:
 
Νταξ φτιάχνετε διαστημόπλοιο
Είμαι μέσα για δυο switch boards και εγώ
Θα ήθελα λίγο πιο εύκολη συνδεσιμότητα των LED πρως τα έξω για να μη γίνεται μακαρονάδα από τη μέση της πλακέτας
Λ.χ. εάν μπορούμε να βγάλουμε όλα τα led στο πάνω μέρος της πλακέτας κοντά στο TPIC6595, διάταξη καλωδιοταινίας
Εναλλακτικά, κάτι από spi,
Δηλαδή γενικά, τα περισσότερα Boards βγάζουν τα led όπως τα έχετε τώρα σχεδιάσει, και είναι ΙΜΗΟ κλασικό πρόβλημα.

Επίσης μιας και από όσο καταλαβαίνω σκέπτεστε R2R attenuator, θα με ενδιέφερε ειδικά εάν το κάναμε με smd
 
Σε έχασα... Ποια LEDs?

D3S - D3S1 - D3S2... LED δεν είναι ?
Αχεμ ... διοδος είναι ?
Καπου εκεί τα βάζουν όλοι :D νομιζα και εσείς

--- Αυτόματη συγχώνευση μηνύματος ---

Γενικά εύκολα led θελω με καλωδιοταινία :operator:
 
Protection diodes είναι για τα relay.
Για led από τον controller μαλλον θα πρέπει να παίξεις (νομίζω).
 
Νταξ φτιάχνετε διαστημόπλοιο
Είμαι μέσα για δυο switch boards και εγώ
Θα ήθελα λίγο πιο εύκολη συνδεσιμότητα των LED πρως τα έξω για να μη γίνεται μακαρονάδα από τη μέση της πλακέτας
Λ.χ. εάν μπορούμε να βγάλουμε όλα τα led στο πάνω μέρος της πλακέτας κοντά στο TPIC6595, διάταξη καλωδιοταινίας
Εναλλακτικά, κάτι από spi,
Δηλαδή γενικά, τα περισσότερα Boards βγάζουν τα led όπως τα έχετε τώρα σχεδιάσει, και είναι ΙΜΗΟ κλασικό πρόβλημα.

Επίσης μιας και από όσο καταλαβαίνω σκέπτεστε R2R attenuator, θα με ενδιέφερε ειδικά εάν το κάναμε με smd

Στην κουβέντα που κάναμε χτες (στο τηλέφωνο) δεν είχα καταλάβει ότι αναφερόσουν στις διόδους όταν έλεγες LED! Τώρα εξηγούνται πολλά.. :p

Τώρα που το βλέπω, για LEDs ένδειξης πηγής θα δούμε μήπως μπορούμε να χωρέσουμε μια ακιδοσειρά κάτω από το TPIC6595 μαζί με τις απαραίτητες αντιστάσεις, αν και τέτοιες ενδείξεις θα υπάρχουν ούτως ή άλλως στην LCD οθόνη.

Αυτά που σου έλεγα για R-2R είναι δικές μου σκέψεις (είχα ανοίξει και σχετικό νήμα) αλλά είναι για αργότερα, ως "επέκταση" του συγκεκριμένου project. Να τελειώσει πρώτα αυτό με το καλό και θα το πιάσω/ουμε..
 
Θα ήθελα να προτείνω - σχολιάσω τις σχεδιαστικές επιλογές, σύμφωνα με τα όσα έχω μέχρι τώρα αντιμετωπίσει σε διάφορες κατασκευές και σκέφτομαι ότι θα με βόλευαν ως επιπλέον δυνατότητες αν μπορούν να ενσωματωθούν, έτσι:
1) ΟΚ για Πλακέτα διάστασης έως 10cm x 10cm.
2) Θα προτιμούσα να θυσιάσουμε δύο από τις εισόδους μέσω relais για δύο εξόδους (με αντίστοιχη δυνατότητα delay on, mute, out1, out2, out1+2, μέσω του controler)
3) OK για Επιλογή non-latching relays
4) Θα πρότεινα εφόσον έχουμε το χώρο για daughter board πάνω από την περιοχή του buffer να δοθεί η δυνατότητα δοκιμής άλλου buffer (π.χ. discrete ) ή ακόμα και ενός 2ου ίδιου ώστε να έχουμε ballanced με τα μισά in-outs.
Επίσης θα προτιμούσα να υπάρχει δυνατότητα send-return με το PGA ώστε να μπορώ να επιλέξω αν θα βάλω το buffer πριν ή μετά (ή και πριν και μετά) το PGA.
Όσον αφορά το opamp η προσθήκη αποτυπώματος για dual smd opamp νομίζω είναι αναγκαία για όσους έχουν ήδη κάποια τέτοια διαθέσιμα. Νομίζω επίσης ότι αν είναι δυνατόν να ανοίξουν μεταξύ του οι C02 και C04 θα υπάρξει χώρος για δοκιμές με single opamps μέσω adapter board.
5),6),7) και 8) ΟΚ
9) Για τα ground planes έχω επιφυλάξεις και για το κομμάτι των αναλογικών σημάτων (κάτω από το opamp καλό θα ήτο μεν αλλά...) και του shift register (προτείνω μόνο από την μία πλευρά, με κατάλληλη διευθέτηση, ίσως στροφή του chip κατά 90 μοίρες). Ground planes και στις δυο πλευρές της πλακέτας δεν νομίζω ότι μπορούν να μπουν σε τόσο πυκνή πλακέτα και να καταφέρουμε να μην διακόπτονται. Αν και δεν μπορώ να διακρίνω καλά από τις φωτογραφίες και δεν διαθέτω και τις εξειδικευμένες γνώσεις δεν το βλέπω λογικό. Αν έχετε όρεξη για λίγο διάβασμα και ψάξιμο, αυτό το link είναι μια καλή αρχή: http://www.grimmaudio.com/site/assets/files/1088/supply_decoupling.pdf

Ευχαριστώ πολύ για τη φιλοξενία και για τη δουλειά σας που μοιράζεστε μαζί μας
Περικλής
 
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Ξεκίνησα να παίζω και γω με το συγκεκριμένο PGA. To άρχισα με τα βασικά για να μάθω τη λειτουργία του μέχρι να ολοκληρώσετε το project σας.
Το βασικό κύκλωμα και κώδικα τον δανείστηκα από http://irvolume.blogspot.gr/2014/02/this-project-remotely-controls-volume.html ενσωματώνοντας
και ένα rotary encoder. Μήπως Δημήτρη γνωρίζετε πως μπορούμε να περάσουμε τον κώδικα σε ένα Atiny2313 ώστε να λειτουργεί με αυτό το κύκλωμα και όχι με το arduino?

1.jpg

20151009_120407.jpg

20151009_120430.jpg

Παρακάτω ο κώδικας


#include <IRremote.h>

/*
Arduino pins:
- digital pin 13 (SCK) = SPI SCLK (PGA2311 pin 6)
- digital pin 12 (MISO) = not used
- digital pin 11* (MOSI) = SPI SDI/MOSI (PGA2311 pin 3)
- digital pin 10* (SS) = SPI \CS (PGA2311 pin 2)
- digital pin 9* = LCD Red (LCD pin RED)
- digital pin 8 = LCD RS (LCD pin RS)
- digital pin 7 = LCD Enable (LCD pin E)
- digital pin 6* = IR receiver data
- digital pin 5* = LCD D4 (LCD pin D4)
- digital pin 4 = LCD D5 (LCD pin D5)
- digital pin 3* = LCD D6 (LCD pin D6)
- digital pin 2 = LCD D7 (LCD pin D7)
- digital pin 1 = not connected
- digital pin 0 = not connected
* is a PWM pin

LCD schematic
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)

* IR detector data = pin 6

* PGA2311 gain: N = 1 to 255
* Gain (dB) = 31.5 − [0.5*(255 − N)]

* SPI interface:
* /CS (pin 2)
* SCLK (pin 6)
* SDI (pin 3)
* SDO (pin 7)

*/

#include <IRremote.h>
#include <LiquidCrystal.h>
#include <stdlib.h>
#include <SPI.h>

//int redPin = 9;
int red = 0;
const int slaveSelectPin = 10;
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;

LiquidCrystal lcd(8, 7, 5, 4, 3, 2); // RS, Enable, D4, D5, D6, D7

char cGain[17];
String gain;
char icGain[6];
float iGain = -95.5;
float nGain = 1;

unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 9; // pin 9
const int pin_B = 1; // pin 1
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;


boolean mute = false;
// custom LCD characters for the volume bar
byte v0[8] = {B00000,B00000,B00000,B00000,B00000,B00000,B00000};
byte v1[8] = {B00000,B00000,B00000,B00000,B00000,B00000,B11111};
byte v2[8] = {B00000,B00000,B00000,B00000,B00000,B11111,B11111};
byte v3[8] = {B00000,B00000,B00000,B00000,B11111,B11111,B11111};
byte v4[8] = {B00000,B00000,B00000,B11111,B11111,B11111,B11111};
byte v5[8] = {B00000,B00000,B11111,B11111,B11111,B11111,B11111};
byte v6[8] = {B00000,B11111,B11111,B11111,B11111,B11111,B11111};
byte v7[8] = {B11111,B11111,B11111,B11111,B11111,B11111,B11111};

void setup() {
lcd.createChar(0, v0);
lcd.createChar(1, v1);
lcd.createChar(2, v2);
lcd.createChar(3, v3);
lcd.createChar(4, v4);
lcd.createChar(5, v5);
lcd.createChar(6, v6);
lcd.createChar(7, v7);
lcd.begin(16, 2);

//pinMode(redPin, OUTPUT);
// analogWrite(redPin, red);
lcd.write(" HiFi IR Volume ");

irrecv.enableIRIn();


pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
currentTime = millis();
loopTime = currentTime;

pinMode(slaveSelectPin, OUTPUT);
SPI.begin();
}


void decodeIR(int value) {
switch (value) {
case 16748655:
mute = !mute;
lcd.setCursor(0, 0);
if (mute == true) {
lcd.write("Muted ");
setGain(1);
}
if (mute == false) {
setGain(nGain);
setVolumeBar(nGain);
}
delay(1000);
break;
case 16756815:
if (nGain < 255) {
nGain = nGain + 1;
setGain(nGain);
setVolumeBar(nGain);
}
else {
lcd.setCursor(0, 0);
lcd.write("Maximum Reached");
delay(500);
}
break;
case 16773390:
if (nGain > 1) {
nGain = nGain - 1;
setGain(nGain);
setVolumeBar(nGain);
}
else {
lcd.setCursor(0,0);
lcd.write("Minimum Reached ");
delay(500);
}
break;
}
// red = nGain;
// analogWrite(redPin, ~red);
}

void setGain(int nGain) {
digitalWrite(slaveSelectPin,LOW);
SPI.transfer(nGain); // right channel
SPI.transfer(nGain); // left channel
digitalWrite(slaveSelectPin,HIGH);
}

void setVolumeBar(int nGain) {
// convert gain to a decibal string, and write to the lcd
iGain = 31.5 - 0.5*(255 - float(nGain));
gain.toCharArray(icGain, 6);
dtostrf(iGain,4,1,icGain);
gain = String(icGain);
lcd.clear();
("Volume: " + gain + " dB").toCharArray(cGain,17);
lcd.setCursor(0, 0); //first line
lcd.write(cGain);
// write the volume bar
lcd.setCursor(0, 1); //second line
for (int i = 0; i < 16; i++) {
if (nGain/2 > i*8) {
lcd.setCursor(i, 1);
lcd.write(round(i/2));
}
}
}

void loop() {
// get the current elapsed time
currentTime = millis();
if(currentTime >= (loopTime + 5)){
// 5ms since last check of encoder = 200Hz
encoder_A = digitalRead(pin_A); // Read encoder pins
encoder_B = digitalRead(pin_B);
if((!encoder_A) && (encoder_A_prev)){
// A has gone from high to low
if(encoder_B) {
// B is high so clockwise

if (nGain < 255) {
nGain = nGain + 1;
setGain(nGain);
setVolumeBar(nGain);
}
else {
lcd.setCursor(0, 0);
lcd.write("Maximum Reached");
delay(500);
}
}
else {
// B is low so counter-clockwise
if (nGain > 1) {
nGain = nGain - 1;
setGain(nGain);
setVolumeBar(nGain);
}
else {
lcd.setCursor(0,0);
lcd.write("Minimum Reached ");
delay(500);
}
}

}
encoder_A_prev = encoder_A; // Store value of A for next time


loopTime = currentTime; // Updates loopTime
}
// receive an IR signal
if (irrecv.decode(&results)) {
decodeIR(results.value);
irrecv.resume();
}
}
 

Περικλή sorry για την καθυστερημένη απάντηση αλλά ο Δημήτρης που είναι στην ουσία ο μόνος που ασχολείται με την πλακέτα εισόδου τρέχει και δεν προλαβαίνει.
Θα προσπαθήσω να σου απαντήσω σε μερικά points από τις συζητήσεις που έχω κάνει με τον Δημήτρη.

2α) Χμμ οι δύο είσοδοι γίνονται εύκολα έξοδοι αλλά νομίζω ξεφεύγει λίγο από αυτό που θέλουμε. Απλές,μικρές και φτηνές πλακέτες μιας λειτουργίας.
Μίλα με τον Δημήτρη όμως μιας και 8 vs 6+2 δεν είναι τόσο τραγική διαφορά.
Θα μπορούσες βέβαια να βάλεις δύο PGA παράλληλα και ένα να οδηγεί τον ενισχυτή σου και ένα για τα out# για να έχεις και ξεχωριστώ volume/gain control.
2β) mute, out1, out2, out1+2 όλα αυτά υποστηρίζονται αυτόματα εφόσον θα φτιαχτεί η αντίστοιχη πλακέτα
4) Για balanced λίγο που το συζητήσαμε θα είναι πολύ πιο εύκολο να πάρουν απλά δύο πλακέτες.
9) Αυτό ... δυστυχώς θα πρέπει να βγουν οι πρώτες πλακέτες και να μετρηθούν. Χωρίς ground plane φοβάμαι πολύ για crosstalk, επειδή είναι αρκετά πυκνή πλακέτα.


Γιατί ATtiny saganakis ? Είναι αρκετά limiting σαν devices και δεν έχουν τόοοοσο μεγάλη διαφορά στο κόστος στην περίπτωσή μας 10 vs 3-4 .
Δεν έχω την υπομονή να ασχοληθώ με κώδικα για άλλα devices ΑΛΛΑ όποιος θέλει μπορώ να του δώσω άμεσα πρόσβαση στον ήδη υπάρχων κώδικα και να κάνει παιχνίδι.
Μοναδική απαίτηση να υποστηρίζει hardware SPI ο 8bit ATmega του....
 
Last edited:
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Γειά σου Στέφανε. Είσαι πολίτης πλέον;
Νόμιζα ότι είναι πιο εύκολο να προγραμματιστεί το ATtiny. O προγραμματισμός του ATmega 1284p είναι εύκολος; γίνεται μέσω του arduino uno ή θέλει κάποιον προγραμματιστή;
 
Re: Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Γειά σου Στέφανε. Είσαι πολίτης πλέον;
Νόμιζα ότι είναι πιο εύκολο να προγραμματιστεί το ATtiny. O προγραμματισμός του ATmega 1284p είναι εύκολος; γίνεται μέσω του arduino uno ή θέλει κάποιον προγραμματιστή;

Θεωρητικά ναι αλλά στην πράξη τα ενσωματωμένα hardware peripherals του atmega το κάνουν πιο απλό και ταυτόχρονα πιο γρήγορο.
Επίσης λόγο της πολύ περισσότερης RAM δεν χρειάζεται optimization σε μεγάλες προτάσεις / γραφικά για τις οθόνες.
Κατά τα άλλα είναι ίδια μιας και τα δύο υποστηρίζονται από το Arduino IDE.
Μπορείς να το προγραμματίσεις είτε με τον επίσημο AVRISP , arduino σε ρόλο ISP (δεν το έχω δοκιμάσει)
και ακόμα καλύτερα μέσω Serial όπως όλα τα arduino με την μόνη διαφορά ότι θα πρέπει να πατάς με το χέρι το reset.

Επίσης να ενημερώσω ότι ψάχνουμε "πειραματόζωα" για να αρχίσουν να στήνουν τον Pre. Στείλτε μνμ είτε σε εμένα είτε στον Δημήτρη να δούμε πως θα γίνει.
Όσοι δεν θέλετε να πάρετε τις πλακέτες που σχεδιάσαμε στείλτε μου μνμ να σας δώσω πρόσβαση στον κώδικα και τα σχεδιαγράμματα να κάνετε το δικό σας παιχνίδι.
 
Last edited by a moderator: