Υλοποίηση preamplifier PGA23xx

Καλησπέρα στην παρέα,

Με τον Στέφανο λέμε να βρεθούμε για ένα καφεδάκι το Σάββατο απόγευμα (λογικά κάπου προς Β.Π.) για να κάνουμε χομπίστικη κουβεντούλα..

Θα ήταν μια καλή ευκαιρία να συναντηθούμε οι ενδιαφερόμενοι για το PGA. Πως σας ακούγεται;
 
Και από εμένα καλησπέρα.

Πολύ καλό μου ακούγεται εκτός απροόπτου.

Πέτρος
 
Μπαίνουμε στην τελική ευθεία.. η σχεδίαση της πλακέτας εισόδων έχει "κλειδώσει" και θα δοθεί για κατασκευή μέσα στο Σ/Κ.

input_v51.png

Τελικά υποστηρίζονται έως 6 είσοδοι, αλλά φυσικά θα μπορεί να μπει και δεύτερη πλακέτα σε περίπτωση που κάποιος θέλει περισσότερες.

Επίσης έγινε πρόβλεψη για ηλεκτρική απομόνωση του μικροελεγκτή από την πλακέτα με το PGA, η οποία αναγκαστικά θα μοιράζεται την ίδια γη με τα αναλογικά στάδια.

Οι διαστάσεις της πλακέτας είναι 10 χ 9 εκατοστά.
 
Βλέποντας το σχέδιο της πλακέτας εισόδων σκέφτομαι μήπως πρέπει να σχεδιαστεί έτσι ώστε τα ρελέ να είναι προς τα πίσω. Υπολογίζω ότι σε κουτί συνήθως δεξιά όπως βλέπουμε την πρόσοψη του κουτιού είναι συνήθως οι είσοδοι και αριστερά το το ρεύμα 230V. Δηλαδή η όψη που βλέπουμε να είναι η κατω.

ATTACH]
 
Να διορθώσω στα γρήγορα. Η εικόνα στο προηγούμενο ποστ μου είναι όπως προτείνω να γίνει. Η όψη αυτή, που θα είναι η πλευρά των εξαρτημάτων, θα είναι η πάνω.
 
Πέτρο, αν πάρεις την πλακέτα που σχεδιάσαμε και την στρίψεις 180 μοίρες παίρνεις λίγο πολύ αυτό που λες (και που λογικά θα κάνουμε όλοι μας..). :smile:

Τα gerbers είναι πλέον στο εργοστάσιο για κατασκευή.. Λογικά αρχές του νέου έτους θα έχουμε παραλαβή των prototypes.

Εν τω μεταξύ μπορούμε να ασχοληθούμε με το software (αν και τα πιο πολλά τα έχει ήδη κάνει ο Στέφανος :p)..
 
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Οδηγός στησίματος του microcontroller

Βήμα 1ο:
Παίρνουμε την πλακέτα από τον Δημήτρη (Δημητρακούδη, τον οποίο ευχαριστώ πολύ για την βοήθεια του), και αγοράζουμε το 1284p (της atmega, το οποίο πήρα από mouser με ~7e).
Για να το κολλήσω αγόρασα αυτό το flux και για να το καθαρίσω μετά την κόλληση με αυτό. Καλό είναι να έχετε και solder wick σε περίπτωση που δεν πετύχει η κόλληση με την πρώτη φορά.
Όλα αυτά μπορεί κάποιος να τα προμηθευτεί από το grobotronics ή από mouser. To video που τα εξηγεί όλα αυτά είναι

αυτό.

Εγώ κατάφερα να το κολλήσω με αυτό το κολλητήρι που εμπεριέχει αυτή τη μύτη.

Βήμα 2ο: Εγκατάσταση Bootloader από arduino uno στη πλακέτα του 1284p.
Συνδέουμε το arduino uno με την πλακέτα του microcontroller όπως φαίνεται στην εικόνα

pic1.jpg

Η όλη ιδέα για το bootloading είναι από αυτό το site.
Πηγαίνετε στη σελίδα https://github.com/nickgammon/arduino_sketches που σας λέει και πατάτε πάνω δεξιά για να κατεβάσετε το ZIP αρχείο.
Αφού το αποσυμπιέσετε πηγαίνετε στον φάκελο Atmega_Board_Programmer και ανοίγετε το sketch Atmega_Board_Programmer (έχω την έκδοση IDE 1.6.5).
Πρίν τρέξετε το sketch ανοίγετε Tools->Serial Monitor και θέτουμε baud 115200. Κατόπιν compile και uploanding. Το πρόγραμμα αναγνωρίζει το είδος του
επεξεργαστή από μόνο του και πατάτε "G" για να κάνει bootloading. Αν όλα πήγαν καλά γράφει

Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Done.
Type 'C' when ready to continue with another chip ...


Βήμα 3ο: Πραγραμματισμός του atmega 1284p
Κατεβάζουμε τον παρακάτω φάκελο https://github.com/maniacbug/mighty-1284p και τον αποσυμπιέζουμε. Τον τοποθετούμε μέσα στο φάκελο hardware arduino π.χ.
C:\Program Files\Arduino\hardware (αν δεν δουλέψει αυτός πείτε μου να σας στείλω τον δικό μου φάκελο). Χρησιμοποιούμε κάποιο usb to RT232L converter, εγώ χρησιμοποίησα αυτόν.
Εγκαθιστούμε τους drivers του. Συνδέουμε το pin RX-I του FTDI (USB converter) με το TXDO pin του atmega και το ΤΧ-Ο με το RXDO.
Επιλέγουμε στο IDE του arduino από τα Tools to σωστό Board (Atmega1284p 16MHz) και τη σωστό PORT ("COM3" για μένα). Ανοίγουμε το sketch που θέλουμε,
κάνουμε τις απαραίτητες συνδέσεις ( σας δίνω παρακάτω εικόνες για τα pins της πλακέτας ), πατάμε compile και κάνουμε upload. Προσοχή! με το που πατάμε upload
μόλις γράψει ο IDE από κάτω "uploading..." αμέσως πατάμε το reset της πλακέτας για περίπου 0.5-1sec και το αφήνουμε. Λογικά το έχετε ανεβάσει...

Pic_1284p_2.jpg

Pic_1284p_1.jpg

Την τελευταία εικόνα την βάζω για να βλέπετε ποιά pins του atmega αντιστοιχούν στα pin mode του arduino.

Pic_1284p_3.jpg

Καλή επιτυχία!
 
Last edited:
Re: Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Να προσθέσω στο σχέδιο της πλακέτας του 1284 τηναρίθμηση των πιν κατά Arduino καθώς και τα Interrupts και τα πιν τροφοδοσίας για διευκόλυνση στον προγραμματισμό.

Clipboard03.jpg
 
Θα προσθέσω αρίθμηση και για τα υπόλοιπα πινς μόλις τα επιβεβαιώσω. Δεν μπόρεσα να μεγαλώσω την εικόνα να χωράει μεγαλύτερες ετικέτες.
 
Για διευκόλυνση προγραμματισμού του 1284p έχω βάλει στο σχέδιο του controler την αρίθμηση κατά Arduino των ακίδων, καθώς και μερικές από τις λειτουργίες των, σύμφωνα με το στήσιμο που έκανε ο saganakis.


PinOut1284p.jpg
 
Απάντηση: Re: Υλοποίηση preamplifier PGA23xx

Μπράβο Πέτρο!!! Πολύ χρήσιμο. Προχωράμε καλά.
 
Εύγε Πέτρο και Σαγανάκη!! Χρειαζόντουσαν και τα δύο.

το έβαλα σε κανονικό κουτάκι πλέον αλλά ήδη πρόσεξα μερικά προβληματάκια στον ήχο.
1) hiss στην έξοδο το οποίο δεν υπήρχε με τους ενισχυτές απευθείας συνδεδεμένους στην κάρτα ήχου και δεν μεταβάλλεται με την αλλαγή έντασης του.
Να υποθέσω άθλιο PSRR από τα PGA σε συνδυασμό με τα LM317/LM337 που έχω βάλει προσωρινά...

2) θόρυβος στις αλλαγές έντασης. Αυτό ίσως να είναι μεγάλο πρόβλημα, ίσως να λυθεί με ένα απλό isolator, ίσως να θέλει και buffer στην είσοδο στην περίπτωσή μου we shall see.....


Πάτρε και μια φώτο για αρχή....

4 σετ PGA για 5.1 + 2 για τον ενισχυτή ακουστικών
Project 113 ακριβώς από κάτω από τα PGA
ATMEGA1284P για controller
LM317/337 για τροφοδοσία μέχρι να μπει κάτι πιο σοβαρό....

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

Αποκλείεται να οφείλεται στην απόριψη θορύβου των LM, εδώ ταπεινά 780Χ τα πήγαιναν μια χαρά δίχως προβλήματα.
Επίσης η ανάγκη buffer εισόδου-εξόδου του pga αφορά πολύ εξεζητημένες καταστάσεις και στο 95% των υλοποιήσεων δεν προβληματίζει.

Μάλλον κάτι στην υλοποίηση σου έχει ξεφύγει και πρέπει να το εξετάσεις βήμα-βήμα.
 
καμιά ιδέα? Μήπως κανένα ground loop?

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

Βασικά για το hiss γράψε λάθος.... Κάτι άλλο είναι....
 
Καλησπέρα στην παρέα.

Στην προσπάθειά μου να μεταφέρω τα προγράμματα που είχα φτειάξει για τον προηγούμενο ελεγκτή πανω σε ένα UNO, έχω κάποιο πρόβλημα με τον encoder πανω στα εξωτερικά interrupts του 1284p. Έτσι και ξεκινήσει δουλεύει συνέχεια και δεν μπορώ να πάρω έναν αριθμό για να επιλέγω την αντίστοιχη είσοδο. Δεν μπορώ να καταλάβω τι φταίει.

Φιλικά,

Πέτρος
 
Για βάλε τον κώδικα (και ένα πρόχειρο αλλά ακριβές σχηματικό αν σου είναι εύκολο) εδώ Peter να δούμε τί γίνεται.
Χωρίς κώδικα πολύ δύσκολο να βρούμε τι φταίει...
 
Ο κώδικας έχει ως εξής:

Code:
#include <SPI.h>

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins + the row count
// datapin, latchpin, clockpin, num_lines
LiquidCrystal lcd(0);

int encoderPin1 = 10;
int encoderPin2 = 11;
///int ledPin1     = 5; // PWM
 
volatile int lastEncoded = 0;
volatile long encoderValue = 0;
 
long lastencoderValue = 0;
 
int lastMSB = 0;
int lastLSB = 0;
 
void setup() {
  ///Serial.begin (9600);
 lcd.begin(20, 4);
 lcd.print("hello, world!");
  
  pinMode(encoderPin1, INPUT);
  pinMode(encoderPin2, INPUT);
  ///pinMode(ledPin1, OUTPUT);
 
  digitalWrite(encoderPin1, HIGH); //turn pullup resistor on
  digitalWrite(encoderPin2, HIGH); //turn pullup resistor on
  ///analogWrite (ledPin1,LOW);
 
  attachInterrupt(0, updateEncoder, CHANGE);
  attachInterrupt(1, updateEncoder, CHANGE);
 
}
 

void loop(){ 
  //Do stuff here
  lcd.setCursor(5, 3);
  lcd.print(lastEncoded);
  ///Serial.println(lastencoderValue);
  delay(10); //just here to slow down the output, and show it will work  even during a delay
}


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
}


Η οθόνη συνδέεται μεσω SPI στις ακίδες (0, 5, 7) και ο encoder στα 10 και 11 που έχουν εξωτερικό interrupt.