Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

I2C Bus Extender

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto Utentecarloc, Foto UtenteIsidoroKZ

0
voti

[121] Re: I2C Bus Extender

Messaggioda Foto Utentetheking0 » 25 ago 2024, 18:22

Vi aggiorno sulla situazione, ho cablato con il coassiale e portato il segnale alla scheda di acquisizione, per il momento sto facendo dei test con un Arduino DUE che avevo in casa, tanto per capire se i valori letti sono coerenti con i calcoli, ho scritto un programma per potermi calcolare l'tilizzo dell'intervallo ADC:

Codice: Seleziona tutto
const int analogPin = A0; // Usa il pin A0 per la lettura analogica

// Variabili per memorizzare il valore massimo e minimo
int minValue = 4095; // Inizialmente impostato al massimo possibile per un ADC a 12 bit
int maxValue = 0;    // Inizialmente impostato al minimo possibile

void setup() {
  // Inizializza la comunicazione seriale per il monitoraggio
  Serial.begin(115200);

  // Configura l'ADC
  configureADC();
}

void loop() {
  // Leggi il valore analogico direttamente dall'ADC in modalità Free-Running
  int analogValue = ADC->ADC_CDR[7]; // Leggi il valore dall'ADC Channel Data Register

  // Controlla se il valore letto è valido
  if (analogValue != 0) { // Assicurati che la lettura non sia 0
    // Aggiorna il valore minimo se il valore corrente è più basso
    if (analogValue < minValue) {
      minValue = analogValue;
    }

    // Aggiorna il valore massimo se il valore corrente è più alto
    if (analogValue > maxValue) {
      maxValue = analogValue;
    }
  }

  // Stampa i valori minimo e massimo
  Serial.print("Min: ");
  Serial.print(minValue);
  Serial.print("  Max: ");
  Serial.println(maxValue);
}

void configureADC() {
  // Abilita l'ADC
  pmc_enable_periph_clk(ID_ADC);

  ADC->ADC_CR = ADC_CR_SWRST; // Reset dell'ADC

  // Configura l'orologio per l'ADC
  ADC->ADC_MR = ADC_MR_PRESCAL(1) |    // Configura il prescaler per l'ADC
                ADC_MR_STARTUP_SUT64 | // Tempo di startup
                ADC_MR_FREERUN_ON |    // Abilita la modalità Free-Running
                ADC_MR_SETTLING_AST3;  // Settling time

  // Configura la risoluzione a 12 bit
  ADC->ADC_MR &= ~ADC_MR_LOWRES;

  // Abilita il canale 7 (A0) dell'ADC
  ADC->ADC_CHER = ADC_CHER_CH7;

  // Riabilita l'ADC
  ADC->ADC_CR = ADC_CR_START;
}


i valori ottenuti sono:
Min: 468 Max: 3914

quindi sarebbe:
Gamma effettiva utilizzata: 3914 - 468 = 3446
Percentuale di utilizzo: (3446 / 4095) ∗ 100% = circa 84%
il foglio di calcolo che mi ha gentilmente fornito Foto Utenteboiler, mi dava una percentuale teorica del 69%.

**Edit: pensandoci forse la mia percentuale non ha niente a che vedere con quella fornita dal foglio di calcolo, semplicemente non non riesco a sfruttare tutti i 3.3v, giusto ?

Quindi quell'errore si sommerebbe a quello del foglio di calcolo ?

Altra cosa che ho notato: il sensore è veramente sensibile, devo implementare un filtro bassa basso via codice per eliminare le vibrazioni che non mi interessano per i calcolo che devo fare, ma questo non è un problema, ho già fatto qualche prova e si aggira facilmente, con il senno di poi forse era meglio la versione dell'accelerometro a 5g, ma questa è una teoria tutta da verificare.
Avatar utente
Foto Utentetheking0
832 1 5 11
Master
Master
 
Messaggi: 321
Iscritto il: 11 feb 2012, 22:37

0
voti

[122] Re: I2C Bus Extender

Messaggioda Foto Utentetheking0 » 25 ago 2024, 19:34

analizzando bene la cosa e riguardando il foglio di calcolo i conti tornano, sono esattamente come calcolato:
calc.PNG

quindi dire che ci siamo.
Avatar utente
Foto Utentetheking0
832 1 5 11
Master
Master
 
Messaggi: 321
Iscritto il: 11 feb 2012, 22:37

1
voti

[123] Re: I2C Bus Extender

Messaggioda Foto Utenteattila666 » 26 ago 2024, 16:29

ho letto solo ora questa discussione (non tutta lo ammetto), e giusto per integrazione/curiosità, io ho realizzato proprio il tuo schema del primo post, mi serviva di estendere l' I2C di una 20ina di metri, e ho realizzato il PCB (che allego), e funzionava benissimo anche fino a 30mt, ovviamente ne servivano due (gemelle) una trasmittente e una ricevente, e bastavano cavi semplici (io ho usato il cavo allarme)
Allegati
Immagine WhatsApp 2024-08-26 ore 16.24.06_aae27c0d.jpg
Avatar utente
Foto Utenteattila666
70 3
New entry
New entry
 
Messaggi: 79
Iscritto il: 23 giu 2014, 13:59

2
voti

[124] Re: I2C Bus Extender

Messaggioda Foto Utentetheking0 » 26 ago 2024, 16:42

Foto Utenteattila666, si, l'idea iniziale era quella, poi seguendo i consigli mi sono orientato su una soluzione analogica per i sensori.
Per comodità abbiamo continuato la discussione in questo thread, ma effettivamente non ha più nulla a che vedere con l'I2C :mrgreen:
Avatar utente
Foto Utentetheking0
832 1 5 11
Master
Master
 
Messaggi: 321
Iscritto il: 11 feb 2012, 22:37

Precedente

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 76 ospiti