Partitore resistivo.........

Da bravo elettronico (level -1), chiedo un consiglio.
Devo alimentare 2 brekoutboard una con un ITG3200 e una con un BMA180.
Tutte e due funzionano con una tensione di 3.3V mentre io avrei disponibile
una tensione di 5V.
Chiedo se posso alimentarli creando un partitore resistivo che mi dia i
3.3V richiesti e attivando i pullup interni di arduino per quanto riguarda
i segnali SDA/SCL.
Grazie.
Ciao.

No. La tensione di uscita di un partitore dipende dal carico e dalla corrente che passa attraverso il partitore (tutte due le resistenze). Ti serve un stabilizzatore per 3,3V. Potrebbe bastare quello resente su Arduino. Per i segnali del I2C puoi mettere le pullup solo se i ITG3200 e BMA180 reggono 5V sui pin SDA/SCL. Senó srve un adattatore di livelli.

Ciao Uwe

Stefanoxjx:
Chiedo se posso alimentarli creando un partitore resistivo che mi dia i
3.3V richiesti

Anche se la corrente richiesta da questi dispositivi è piccola non puoi realizzare un alimentatore con un partitore, usa il +3.3V di Arduino che ti fornisce qualche decina di mA senza problemi.

e attivando i pullup interni di arduino per quanto riguarda i segnali SDA/SCL.

Speravo di non vedere mai più una simile domanda dopo tutte le volte che ho puntualizzato questa cosa nel thread sui multicotteri, evidentemente mi sbagliavo :grin:
L’I2C è un bus che funziona tramite circuiteria open drain, cioè il driver Tx si limita a chiudere la sua linea verso GND, il livello logico 1 è garantito dalle resistenze di pull up, il driver si trova in condizione di alta impedenza quando c’è l’1 logico.
Dato che la corrente per caricare la capacità complessiva della linea, cioè cavi più device, la forniscono le resistenze di pull up quando il segnale torna a 1 logico è indispensabile che venga erogata abbastanza corrente per consentire un rapido ritorno a questo stato logico, se è troppo poca il segnale sale lentamente e ci sono errori di lettura.
Le specifiche I2C dicono che la condizione ideale per comunicare a 400 kHz è far scorrere sulle pull up 3 mA, in realtà ne bastano meno se la linea è molto corta e i device hanno una capacità parassita sugli ingressi bassa, diciamo che per l’uso con i nostri sensori vanno bene anche 1.5 mA se i cavi sono corti.
Riguardo la tensione è importante rispettare le specifiche dei costruttori, i sensori a 3.3V accettano al massimo 3.6V come tensione sul bus I2C, superare tale limite porta a malfunzionamenti e rischio reale di guasti.
Ti allego due immagini che ho trovato in rete, sono il collage di varie misure con il DSO su i segnali I2C con varie R di pull up, la prima immagine è col bus a 100 kHz, la seconda con il bus a 400 kHz, credo che valgono più di 1000 parole sugli effetti delle pull up sbagliate :smiley:

Grazie Uwe e Astro per la consulenza. Astro, porta pazienza, ma sono un elettronico per hobby e non ho moltissimo tempo da dedicare alle varie letture. Visto lo scarsissimo tempo a mia disposizione, devo accontentarmi di quello che riesco a fare oppure abbandonare tutto, cosa che vorrei evitare. Detto questo, vi dico che non posso prendere il 3.3V direttamente da Arduino perchè era mia intenzione fare un PCB che includesse anche il 328, ma per questioni di spazio/peso volevo evitare di mettere 2 regolatori di tensione (uno da 5V e l'altro da 3.3). Nella migliore delle ipotesi, userei un Arduino Pro Mini 5V che non ha uscita stabilizzata a 3.3. A questo punto, l'ultima possibilità che ho è forse questa:

Secondo voi è la soluzione al mio problema? Grazie. Ciao.

Stefanoxjx: Secondo voi è la soluzione al mio problema?

Quello è solo il traslatore di livelli per la I2C, con l'ATmega 328 non è indispensabile però se lo prevedi è meglio, SDA e SCL li colleghi tramite pull up da 1.5k al 3.3V. Per il 3.3 V sei obbligato a mettere il regolatore sul pcb, ne basta uno da 100 mA, p.e. puoi usare un LM2937 oppure quello utilizzato sulla UNO che è ancora più piccolo come dimensioni e non pesa nulla. Il 5V ti conviene ottenerlo da un BEC esterno al pcb, sono considerazioni che ho già fatto relativamente alla mia Qcopter, inserire sul pcb un regolatore lineare partendo da 3S, o peggio 4S, non va bene, anche se la corrente è poca scalderebbe tanto obbligandoti a metterci una aletta di raffredamento, per non parlare del filtro DC in ingresso per ripulire la tensione dai disturbi dovuti ai motori.

astrobeed:

Stefanoxjx: Secondo voi è la soluzione al mio problema?

Quello è solo il traslatore di livelli per la I2C, con l'ATmega 328 non è indispensabile però se lo prevedi è meglio, SDA e SCL li colleghi tramite pull up da 1.5k al 3.3V. Per il 3.3 V sei obbligato a mettere il regolatore sul pcb, ne basta uno da 100 mA, p.e. puoi usare un LM2937 oppure quello utilizzato sulla UNO che è ancora più piccolo come dimensioni e non pesa nulla. Il 5V ti conviene ottenerlo da un BEC esterno al pcb, sono considerazioni che ho già fatto relativamente alla mia Qcopter, inserire sul pcb un regolatore lineare partendo da 3S, o peggio 4S, non va bene, anche se la corrente è poca scalderebbe tanto obbligandoti a metterci una aletta di raffredamento, per non parlare del filtro DC in ingresso per ripulire la tensione dai disturbi dovuti ai motori.

Il BEC esterno l'avevo già previsto e infatti da qui nasce il discorso che avrò 5V in ingresso, poi per l'alimentazione non c'è problema perchè andrei ad alimentare il BEC con una 2S visto che tutto questo ciruito servirebbe solo per gestire il gimbal (atmega+senori+2 servocomandi). A questo punto non mi resta che mettermi in testa che devo prevedere un regolatore a 3.3, non c'è altra via a quanto pare.