Υλοποίηση preamplifier PGA23xx

Για πάρε τις δικές μου παρατηρήσεις.


C4-C5-C6 βάλε το C-EU050-030X075 πακέτο. Αν δεν κάνω λάθος αυτούς τους έχει ο Φανός από την Wima

Το ψηφιακό μπορείς να το μαζέψεις και άλλο (μικρότερο μέγεθος = φτηνότερη πλακέτα). Βάλε R3-R4-R5 κάθετα στο PGA και πιο κοντά.
Τα molex, έτσι όπως το έχω στο μυαλό μου, μπορείς να τα βάλεις όπως τα έχουν βάλει αυτοί
για να μην χρειάζεται καλώδια για να μπουν και άλλα. Άσε τα devices που έχεις ήδη και απλά βάλε τα στην κάτω και πάνω πλευρά του PCB.
Εδώ έχουν βάλει 12 σε σειρά. Κάτι αντίστοιχο
θα μπορούσε να γίνει και στην πλακέτα των relays.

Για το αναλογικό δεν έχω γνώσεις...

ΥΓ. Τί διαστάσεις βγαίνει τώρα η πλακέτα?
 
Παιδες αλλη μια φορα μπραβο για την προσπαθεια.. Εγω αν μπορω να προσθεσω κατι, θα λεγα να μη μπουν ολα τσιμα τσιμα, αλλα να χει χωρο για κανενα ποιοτικο υλικο.. Και φυσικα αν αποφυγω τα smd θα ναι θαυμα!!
 
Παιδες αλλη μια φορα μπραβο για την προσπαθεια.. Εγω αν μπορω να προσθεσω κατι, θα λεγα να μη μπουν ολα τσιμα τσιμα, αλλα να χει χωρο για κανενα ποιοτικο υλικο.. Και φυσικα αν αποφυγω τα smd θα ναι θαυμα!!

Στο ψηφιακό μπορούμε να να τα βάλουμε κοντά κοντά δεν θα είναι θέμα. Το μόνο SMD που θα έχει είναι το 2320 αν επιλέξει κάποιος να βάλει αυτό αντί των 2310-2311, οπότε μην ανησυχείς.
 
VFXCode πολύ χρήσιμος ο πρώτος σύνδεσμος, τουλάχιστον δίνει ονομασία υλικών και μπορώ να δω πως αναγράφει τον τύπο των συνδέσμων (θα τα ψάξω στο eagle για να δω πως θα τα έχει).
Στην αρχή μιλούσαμε για επάλληλες πλακέτες για αυτό επέλεξα αυτούς τους συνδέσμους, κανένα πρόβλημα και στο δίπλα-δίπλα.

Για τις κάθετες αντιστάσεις, μη σου πω ότι δεν έχω βρει ακόμη πως γίνεται στο eagle - ήταν ερώτημά μου εδώ και καιρό, το πως τις βάζεις κάθετα.
Για τις διαστάσεις θα δω το βράδυ που θα 'μαι σπίτι, δεν νομίζω να είναι μεγάλες.
Θα μπορούσε να μαζευτεί αρκετά, αλλά περιορίζει το διπλό αποτύπωμα του pga - έχει ήδη στριμώξει αρκετά τα πράγματα στο γύρω χώρο.

Μέχρι στιγμής smd είναι το δεύτερο αποτύπωμα του pga, κανένα άλλο!

Περιμένω και τις απόψεις των άλλων και κυρίως για το αναλογικό το οποίο με προβληματίζει ιδιαίτερα...
 
Re: Απάντηση: Υλοποίηση preamplifier PGA23xx

Προσπαθώ να ανεβάσω τους κώδικες από τα arduino.


//Selector7
// include the library code:
#include <LiquidCrystal595.h>

// initialize the library with the numbers of the interface pins + the row count
// datapin, latchpin, clockpin, num_lines
LiquidCrystal595 lcd(10,11,12);


//these pins can not be changed 2/3 are special pins
int encoderPin1 = 2;
int encoderPin2 = 3;

int SER_Pin = 7; //pin 14 on the 75HC595
int RCLK_Pin = 8; //pin 12 on the 75HC595
int SRCLK_Pin = 9; //pin 11 on the 75HC595


volatile int lastEncoded = 0;
volatile long encoderValue = 0;

long lastencoderValue = 0;
int counter = 0;
int lastCounter = 0;

int lastMSB = 0;
int lastLSB = 0;

int buttonPin = A0;
int buttonPinState = 0;
int lastButtonPinState = 0;

int muteAll = 0;

const int ledPin = 13; // the number of the LED pin

// Variables will change:
int ledState = LOW; // ledState used to set the LED


long previousMillis = 0;
long interval = 4000; // interval at which to blink (milliseconds)


//How many of the shift registers - change this
#define number_of_74hc595s 2

//do not touch
#define numOfRegisterPins number_of_74hc595s * 8

boolean registers[numOfRegisterPins];

void setup()
{
lcd.begin(20, 4);

// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("Input: 1");
lcd.setCursor(0, 1);
lcd.print("OUTPUT: ON");

pinMode(encoderPin1, INPUT);
pinMode(encoderPin2, INPUT);
pinMode(buttonPin, INPUT);

digitalWrite(encoderPin1, HIGH); //turn pullup resistor on
digitalWrite(encoderPin2, HIGH); //turn pullup resistor on

pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);


//reset all register pins
clearRegisters();
writeRegisters();
setRegisterPin(counter, HIGH);
setRegisterPin(12, HIGH);
writeRegisters();


//call updateEncoder() when any high/low changed seen
//on interrupt 0 (pin 2), or interrupt 1 (pin 3)
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);


}

//set all register pins to LOW
void clearRegisters(){
for(int i = numOfRegisterPins - 1; i >= 0; i--){
registers = LOW;
}
}

//Set and display registers
//Only call AFTER all values are set how you would like (slow otherwise)
void writeRegisters(){

digitalWrite(RCLK_Pin, LOW);

for(int i = numOfRegisterPins - 1; i >= 0; i--){
digitalWrite(SRCLK_Pin, LOW);

int val = registers;

digitalWrite(SER_Pin, val);
digitalWrite(SRCLK_Pin, HIGH);

}
digitalWrite(RCLK_Pin, HIGH);

}

//set an individual pin HIGH or LOW
void setRegisterPin(int index, int value){
registers[index] = value;
}




void loop(){
//Do stuff here






if (lastButtonPinState == 0) {
lastCounter = counter;
}



if (lastencoderValue != encoderValue) {



if (lastencoderValue < encoderValue) {
counter++;
if (counter == 12) {
counter = 0;
}
}
else if (lastencoderValue > encoderValue) {
counter--;
if (counter == -1) {
counter = 11;
}
}


//Serial.println(lastencoderValue);
//Serial.println(encoderValue);
//Serial.println(counter);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Input: ");
lcd.print(lastCounter+1);
lcd.setCursor(0,1);
lcd.print("NewInput: ");
lcd.print(counter+1);
lcd.setCursor(0,3);
lcd.print("Press to select");
lastButtonPinState = 1;


delay(100); //just here to slow down the output, and show it will work even during a delay

unsigned long currentMillis = millis();
previousMillis = currentMillis;



lastencoderValue = encoderValue;
}



// here is where you'd put code that needs to be running all the time.

// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.

if (lastButtonPinState = 1){

unsigned long currentMillis = millis();
//previousMillis = currentMillis;

if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED


lcd.setCursor(0, 1);
lcd.print("OUTPUT: ON ");
lcd.setCursor(0,3);
lcd.print(" ");
lastButtonPinState = 0;
counter = lastCounter;
//ledState = HIGH;}
//else {
//ledState = LOW;
//}

}


}














buttonPinState=digitalRead(buttonPin);

if(buttonPinState == lastButtonPinState && buttonPinState == HIGH) {


setRegisterPin(lastCounter, LOW);
setRegisterPin(12, LOW);
writeRegisters();

lastCounter = counter;

setRegisterPin(lastCounter, HIGH);
setRegisterPin(12, HIGH);
writeRegisters();

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Input: ");
lcd.print(lastCounter+1);
lcd.setCursor(0, 1);
lcd.print("OUTPUT: ON");
lastButtonPinState = 0;
}

//lcd.setCursor(3,1);
//lcd.print(" ");
//lcd.print(buttonPinState);
//lcd.setCursor(8,1);
//lcd.print(lastButtonPinState);

}



void updateEncoder(){
int MSB = digitalRead(encoderPin1); //MSB = most significant bit
int LSB = digitalRead(encoderPin2); //LSB = least significant bit

int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
int sum = (lastEncoded << 2) | encoded; //adding it to the previous encoded value

if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;

lastEncoded = encoded; //store this value for next time
//lastencoderValue = encoderValue;
}













Είναι το τελευταίο που χρησιμοποίησα πριν αρχίσω να δουλεύω σε πλακέτες.
Θέλει βέβαια δουλειά σχετικά με την σίγαση, αλλά το είχα αφήσει γιά αργότερα για να δουλεύω σε πιό πραγματικές συνθήκες.
 
Ωραίος peter52 :-)
Μπορείς να χρησιμοποιήσεις και το CODE tag

Code:
My blah blah code
Clickity click
 
Re: Απάντηση: Υλοποίηση preamplifier PGA23xx

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

Μην αλλάξεις υλικά. Απλά βάλε τα στην άκρη με τέτοιο τρόπο ώστε να μπορεί να μπει με τέτοιο τρόπο.

Καλύτερα όχι κάθετες αντιστάσεις, απλά γύρνα τες 90 μοίρες.
 
Τώρα διάβασα ότι εννοούσες όχι κάθετες...και όχι τίποτα άλλο αλλά το βρήκα.

Τέλος πάντων ρίξτε μια ματιά και πάλι σε μια εξέλιξή του, η πλακέτα μαζεύτηκε αρκετά και καλό είναι να μη τη μαζέψουμε άλλο!
¨Ηδη προβληματίζομαι πως θα βγει η diy πλακέτα εκεί στο διπλό αποτύπωμα, πολύ στρίμωγμα και ήδη το γεφύρωμα μεταξύ Pin1 & Pin4 είναι πάρα πολύ κοντά στα λοιπά pin...θα προβληματίσει αυτή η περιοχή στην εκτύπωση.

Οι πυκνωτές αποσύζευξης άνευ πολικότητας είναι αυτές που πρότεινε ο VFXCode, ο ηλεκτρολυτικός αποσύζευξης του ψηφιακού είναι διάσταση από Oscon (2,54mm grid, 5mm), οι άλλοι ηλεκτρολυτικοί αποσύζευξης έχουν υπολογισθεί και πάλι στο 2,54mm grid αλλά τοποθετήθηκαν αποτύπωματα και για 5mm.

Τα βύσματα σύνδεσης με τον ελεγκτή, αλλά και με τις άλλες πιθανές πλακέτες pga, αλλάχθηκαν σε τύπου γωνίας 90° για άρθρωμα δίχως την απαίτηση καλωδίωσης.
Οι διαστάσεις της πλακέτας είναι συνολικά 59,7Χ41,6mm
 

Attachments

  • dig_ground_zoom.jpg
    dig_ground_zoom.jpg
    100.6 KB · Views: 128
  • dig_ground.jpg
    dig_ground.jpg
    96.6 KB · Views: 129
ε μην την κάνεις και τόσο στριμωγμένη
όσο για το diy πλακέτα δεν νομίζω κάπου θα βρούμε να την στείλουμε και να πάρουμε πίσω κάτι κάλο
 
Εγω κατι πλακετιτσες που χρειαστικα ποιο παλια τις εκανα στον χρηστη Moutoulos..εμεινα πολυ ευχαριστημενος.. καλα θα ναι να κανουμε κατι ολοι μαζι ωστε και το κοστος να ναι μικροτερο..
Αληθεια τηλεχειρισμος θα μπει? αν ναι με τι τηλεκοντρολ?
 
Η πλακέτα δεν είναι και τόσο στριμωγμένη (για τα δικά μου γούστα δλδ). Νομίζω σας μπερδεύει το SOIC ενδιάμεσα.
DIY δεν ξέρω αν αξίζει. Λογικά θα βγαίνει αρκετά κάτω από 10 το κομμάτι σε αυτές τις διαστάσεις. Βάλτε την ταλαιπωρία και το κόστος υλικών και βγαίνει μια η άλλη.
Και βλέπω αρκετό ενδιαφέρον όποτε άμα μαζευτούμε δεν θα αξίζει με τπτ.

@lemon Να πάω να ρωτήσω στην Project Line (ή οπουδήποτε αλλού) πόσο έχουν οι πλακέτες να εκτυπώσουμε 1-2 να τις μετρήσουμε?
μόνο έτσι θα δούμε τι ψάρια πιάνουν και ποια υλοποίηση είναι καλύτερη.

@lemon Αν θές την κόκκινη γραμμή πέρνα την πάνω από τον φερίτη και όχι από μέσα του (μιλάω για την γραμμή που πάει στο JP4 δεύτερο pin από αριστερά).
Οι ηλεκτρολυτικοί μου φαίνονται λίγο μικροί όμως, στο ψηφιακό κομάτι σιγά τα αυγά οπότε άσε τον έτσι, στο αναλογικό όμως μάλλον δεν θα χωράνε καλής μάρκας.
Κάνε το εξής: Πέρνα τα signal lines (κόκκινα) ανάμεσα στους ηλεκτρολυτικούς και τις κλέμες, λογικά όντας κάθετα δεν θα πρέπει να δημιουργούν παρεμβολές,
μετά βάλε τις κλέμες πιο άκρη και κέντραρε τους ηλεκτρολυτικούς ανάμεσα.


ΥΓ το βρήκα και εγώ. είναι διαφορετικό device :P
 
Last edited:
Εγω κατι πλακετιτσες που χρειαστικα ποιο παλια τις εκανα στον χρηστη Moutoulos..εμεινα πολυ ευχαριστημενος.. καλα θα ναι να κανουμε κατι ολοι μαζι ωστε και το κοστος να ναι μικροτερο..
Αληθεια τηλεχειρισμος θα μπει? αν ναι με τι τηλεκοντρολ?

Άμα γίνει κάτι θα γίνει ομαδικά :)
Όσο για τον τηλεχειρισμό θα προσπαθήσω να δω πώς θα το κάνουμε universal και να παίρνει ότι τηλεκοντρόλ νάνε. Βρήκα βιβλιοθήκη που υποστηρίζει πολύ πράμα :).
 
Τώρα που το κοιτώ πρωί και ξεκούραστος, πρέπει να διορθώνεται η λεπτή γραμμή γεφυρώματος του pin1 & pin4 που περνά ανάμεσα στο sol αποτύπωμα.
Λέω να περιστρέψω κατά 90° δεξιόστροφα τον πυκνωτή C1 έτσι ώστε η γείωση να πάει κάτω από τη γείωση του JP2.
Ακολούθως θα τραβήξω κόκκινη διαδρομή από το pin4 έτσι όπως δείχνει τώρα η πορεία της γείωσης του C1 θα περάσει από πάνω από τη γραμμή γείωσης που πάει στο pin2 και με δεξιά στροφή θα καταλήξει και πάλι στο pin1.

Για το αναλογικό τώρα και τα σχετικά με τους δύο πυκνωτές C2, C3.
Για τους πυκνωτές δεν το πολυπαίδεψα γιατί πιστεύω ότι θα πάνε στο βρόντο με τροφοδοτικά salas (παλιότερα είχα πρόβλημα με Salas -5V επειδή μου είχε μείνει ένας πυκνωτής 0,1 και ταλάντωνε). Γράψτε μου τι διαστάσεις θα θέλατε να υπάρχουν εκεί για πυκνωτή αποσύζευξης (υπόψη μιλάμε για 10uF/25V max).

Για το layout και την πρότασή σου να τυπώσουμε δύο διαφορετικές εκδόσεις (προφανώς εννοείς μία με gound plane στο αναλογικό και μία χωρίς) για να μετρήσουμε - αυτός είναι και ο λόγος που αναφέρθηκα ότι πιθανόν θα προβληματίσει το γεφύρωμα pin1-pin4 για diy.
Σκεφτόμουν να φτιάξω δύο παραλλαγές και να μετρηθούν για να δούμε τι γίνεται...
Ρώτα, πάνω κάτω σε αυτές τις διαστάσεις και βλέπουμε, έαν δεν μας ζητά για 2-4 πλακέτες αρκετά.

Σκέφτομαι επίσης, ότι ίσως ειναι σωστότερο να πάει η είσοδος και η έξοδος στη δεξιά μεριά της πλακέτας έτσι ώστε τα σήματα να τρέχουν ισομήκη όσο είναι δυνατόν και όχι όπως τώρα που το ένα σήμα είναι δίπλα και το άλλο κάνει κύκλο για να πάει στην απέναντι μεριά.
Μάλλον είναι καλύτερο αυτό και ας τραβηχτεί η τροφοδοσία σε άλλη θέση, η οποία όπου και να πάει δεν θα προβληματίσει.
 
Last edited:
Re: Απάντηση: Υλοποίηση preamplifier PGA23xx

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

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

Για τη διάσταση 6,3mm σε διάμετρο και έτσι όπως είναι τώρα χωράει...για πιο μεγάλη διάμετρο εννοούσα. Στο pcb το σχήμα στις κλέμες μπερδεύει γιατί είναι ξαπλωτό, οι πραγματικές διαστάσεις είναι μικρότερες.

Πάντως βαδίζουμε σε καλό δρόμο ...
 
Για το IR ρώτησα τον τυπά που έφτιαξε αυτήν την βιβλιοθήκη https://github.com/shirriff/Arduino-IRremote αν μπορούμε να την ενσωματώσουμε στον κώδικά μας.
Η απάντηση ήταν θετική, παραθέτω τα emails που ανταλάξαμε.
Η βιβλιοθήκη υποστηρίζει όλα τα γνωστά προτόκολα από τηλεκοντρόλ. Το μόνο κακό είναι ότι από μόνη της τρώει ~10kbyte από την μνήμη του προγράματος, αλλά θα το δούμε παραπέρα όταν και αν υπάρξει πρόβλημα.

Hi,
my name is Stefanos and I am part of a group that aims to create an audio preamplifier based on
use of the PGA23xx family of attenuators from Texas Instruments.
The project is currently in development here (language is Greek btw)
http://www.avclub.gr/forum/showthread.php/104904-Υλοποίηση-preamplifier-PGA23xx
I would like to ask, if we can use and redistribute your IR Library https://github.com/shirriff/Arduino-IRremote along with the code of our project.
Code will be available for download to members of the above forum

Thank you for your time,
Stefanos
----------------------------------------------------------------------------------------

Sure. Thanks for asking.

----------------------------------------------------------------------------------------

Awsome thnx for your reply :)
 
Προσωπικά χρησιμοποιώ τον IR κώδικα του hifiduino, ο οποίος δεν έρχεται καν σε μορφή library.. απλά πράγματα.. δουλεύει out-of-the-box με το τηλεκοντρόλ της Apple αλλά και με οποιοδήποτε τηλεκοντρόλ παίζει με τους κώδικες της NEC. Εγώ το δουλεύω ακόμα με ένα τ/χ από BlueSky.. :p

Όσο αφορά το memory footprint, δεν έχω ιδέα. Ο κώδικας του βουβαλιού μου έχει περάσει πλέον τις 2200 γραμμές και τα 70ΚΒ οπότε τρέχα γύρευε.. Πάντως το κομμάτι του IR λογικά θα είναι πολύ πιο μικρό από 10Κ.

Περισσότερα εδώ: http://hifiduino.wordpress.com/code/
 
Σε μία με δυο ημέρες θα ανεβάσω το σχηματικό των εισόδων.
Είναι σχεδόν έτοιμο και θέλω να κάνω το τελικό έλεγχο.
Περιλαμβάνει 4 εισόδους Tape και 4 εισόδους Line, με ανεξάρτητη επιλογή αναπαραγωγής και ηχογράφησης, συνεπικουρούμενες από επίσης ανεξάρτητα μπάφερς. Οι αντιστάσεις εισόδου είναι όλες γύρω στα 45Κohm. Υπάρχει ξεχωριστός μεταβλητός εξασθενητής (έως -6db) σε κάθε είσοδο. Στη πλακέτα υπάρχουν και τα τρανζίστορ οδήγησης των ρελέ (έτοιμα για οδήγηση από το Arduino) καθώς και ότι μου έρθει τη τελευταία στιγμή.....
Μετά θα ακούσω τις διορθώσεις και τις προτάσεις της ομάδας, ώστε να προχωρήσω στο σχεδιασμό της παλέτας των εισόδων (θα μου πάρει 2 – 3 εβδομάδες).
Η παλέτα έχει γίνει με την προοπτική να μπορέι να χρησιμοποιηθεί και από άλλους προενισχυτές, ενώ μπορεί να παραμετροποιηθεί ανάλογα με τα υλικά που θα βάλουμε ή θα παραλείψουμε.