Ingresso analogico : come calcolare il valore della resistenza

Salve,

Vi chiedo un aiuto per la progettazione elettronica della seguente funzionalità su Arduino.

Vorrei che applicando una resistenza tra la vcc di alimentazione e il pin analogico di Arduino in modo da poter leggere al più 10 valori.

È chiaro che dovrò applicare la legge di ohm R=V/I (penso) - in questo caso I quanto vale? Devo inserire anche una resistenza verso massa e prelevare il valore tra le due resistenze?

Inoltre dovendo poi inserire queste resistenze sulla board ci sono dei connettori in cui è possibile inserire le resistenze?

Thanks

... puoi spiegare meglio cosa vuoi fare/ottenere ? :slight_smile:

Guglielmo

Scrivo da IPAD scusate eventuali errori di battitura...

In pratica, in ambito domotica, nel caso di utilizzo del bus RS485 avrò la necessità di assegnare un indirizzo ad ogni dispositivo collegato al bus.

Non penso sia congeniale doverlo cablare nel codice così ho pensato che la soluzione più semplice sia utilizzare un ingresso analogico di Arduino e alimentarlo con una tensione variabile in modo da assegnare ad ogni range di tensione un indirizzo.

Variando il valore resistivo che verrà applicato attraverso una resistenza inserita tramite un connettore (non saldato) assegnerà l'indirizzo al dispositivo.

È chiaro il concetto?

Partitore di tensione

Vin e R2 sono costanti, Vout lo ricavi mediante ADC e di conseguenza puoi calcolare il valore di R1. Scegli con saggezza il valore di R2 e i possibili valori di R1.

solo per aggiungere un'idea in più... hai pensato alla possibilità di memorizzare l'indirizzo del dispositivo nella EEPROM della MCU? Al primo avvio, se l'indirizzo non è presente (valore non coerente) ne imposti uno di default. Potresti poi impostare l'indirizzo attraverso un comando da inviare sul bus RS485.

ciao
Vittorio

vittorio68:
solo per aggiungere un'idea in più... hai pensato alla possibilità di memorizzare l'indirizzo del dispositivo nella EEPROM della MCU? Al primo avvio, se l'indirizzo non è presente (valore non coerente) ne imposti uno di default. Potresti poi impostare l'indirizzo attraverso un comando da inviare sul bus RS485.

ciao
Vittorio

Certo. Ma che ne sai se quel l'indirizzo non è stato preso casualmente da un'altro dispositivo?
Con il metodo sopra esposto, con pochi centesimi di euro in più (un paio di resistenze) sai in fase di installazione qual'e il dispositivo e puoi creare una interfaccia software /hardware dove configurare e comandarlo.

Ho provato a fare i compiti in albergo (visto che non sono a casa) :slight_smile:

R1 è collegata ai 5V e alla R2 mentre R2 è la resistenza verso massa.

Dite che va bene ?

L’intervallo di tensione sono troppo ravvicinate, questo sitema ma bene per selezionare 10-20 indirizzi , non lo userei per più finestre, ti allego una scheda che ho fatto tempo addietro per il settore automotive, con CAN bus e una RS485, l’indirizzo della scheda tra 5 indirizzi possibili si può selezionare in EEROM oppure tramite partitore sia a bordo scheda , sia con partitore esterno alla scheda (così sostituendo la scheda l’indirizzo è autoimpostato), solo appunto che va bene per pochi indirizzi , appunto 5 in questo caso

addr1.jpg

addr2.jpg

]http://www.wolframalpha.com/input/?i=Table[1200*%28%285-v0.4545%29%2F%28v0.4545%29%29%2C+{v%2C+10}]
Butta uno sguardo, cosi avresti un passo regolare di (5/11) cioè il passo per avere 10 valori utili su 5V

In realtà così sono 12 valori considerando anche 0V e 5V, bel sito di calcolo questo wolframalpha :slight_smile:

0 e 5 gli ho esclusi, corto circuito e circuito aperto non sarebbero da evitare su un sistema del genere?
icio sul serio non conoscevi WolframAlpha? O semplicemente ironizzi? XD

RobertoBochet:
0 e 5 gli ho esclusi, corto circuito e circuito aperto non sarebbero da evitare su un sistema del genere?

Non capisco, quale corto o circuito aperto? Sono semplicemente gli estremi del partitore resistivo ...
... e l'ADC ti darà rispettivamente 0 e 1023 :slight_smile:

Guglielmo

inter1908:
E' chiaro il concetto?

Metti l'address RS485 nella EEPROM così non sei legato al codice, lo aggiorni come e quando ti pare da seriale/RS485 tramite un comando dedicato.

Certo. Ma che ne sai se quel l'indirizzo non è stato preso casualmente da un'altro dispositivo?

Io immaginavo che la configurazione avvenisse collegando al bus un solo dispositivo alla volta... L'idea dell'indirizzo di default era invece per ovviare alla mancanza di configurazione iniziale (se non sbaglio i bytes della EEPROM sono a 255 dopo ogni upload del firmware se non diversamente specificato da un apposito fuse).

Se non ti piace l'idea di dover collegare un solo dispositivo alla volta per la configurazione, potresti prevedere un pulsante da collegare ad un piedino digitale. Non occupi un piedino in più perché sarebbe lo stesso che useresti per la lettura del partitore resistivo.

Alla pressione del tasto il dispositivo entra in uno stato in cui diventa sensibile al comando inviato sul bus per la configurazione dell'indirizzo. In questo modo tutti gli altri dispositivi sono sordi al comando e l'unico che cambierebbe indirizzo in EEPROM è quello sul quale è stato premuto il pulsante. Il dispositivo permane nello stato finchè non arriva il comando o fino allo spegnimento/riavvio in caso il comando non arrivi per qualsiasi motivo.

Con il metodo sopra esposto, con pochi centesimi di euro in più (un paio di resistenze) sai in fase di installazione qual'e il dispositivo e puoi creare una interfaccia software /hardware dove configurare e comandarlo.

Sono d'accordo, si tratta di una soluzione economica... tuttavia io avrei sempre paura di non trovarmi sottomano la resistenza necessaria al momento opportuno.

Ciao.
Vittorio.

gpb01:
Non capisco, quale corto o circuito aperto? Sono semplicemente gli estremi del partitore resistivo ...
... e l'ADC ti darà rispettivamente 0 e 1023 :slight_smile:

Guglielmo

Se vuoi ottenere i valori 0 o 1023 devi o porre un jumper al posto della R1 oppure lasciare vuoto lo slot per la resistenza. No effettivamente non dovrebbe essere un problema.

Se hai a disposizione altri pin di ingressi digitali o analogici usati come digitali, potresti usare un dip switch.

Con 4 pin avresti la possibilità di usare 16 indirizzi, mentre con 3 ne avresti 8.

RobertoBochet:
Se vuoi ottenere i valori 0 o 1023 devi o porre un jumper al posto della R1 oppure lasciare vuoto lo slot per la resistenza. No effettivamente non dovrebbe essere un problema.

... emmm ... ma usare un bel "trimmer multigiri" ed avere la possibilità di scegliersi i valori come ad uno meglio aggrada no ? ? ? :grin: :grin: :grin:

Guglielmo

io sono con @astro!

icio:
L'intervallo di tensione sono troppo ravvicinate, questo sitema ma bene per selezionare 10-20 indirizzi , non lo userei per più finestre, ti allego una scheda che ho fatto tempo addietro per il settore automotive, con CAN bus e una RS485, l'indirizzo della scheda tra 5 indirizzi possibili si può selezionare in EEROM oppure tramite partitore sia a bordo scheda , sia con partitore esterno alla scheda (così sostituendo la scheda l'indirizzo è autoimpostato), solo appunto che va bene per pochi indirizzi , appunto 5 in questo caso

Mi è chiaro quello che hai fatto ma vorrei campionare 10 valori per simulare 10 scelte (dopo spiego il perché).

RobertoBochet:
]http://www.wolframalpha.com/input/?i=Table[1200*%28%285-v0.4545%29%2F%28v0.4545%29%29%2C+{v%2C+10}]
Butta uno sguardo, cosi avresti un passo regolare di (5/11) cioè il passo per avere 10 valori utili su 5V

Per un mio limite non ho capito come utilizzare il sito. Me lo spieghi per favore?

[/quote]

astrobeed:
Metti l'address RS485 nella EEPROM così non sei legato al codice, lo aggiorni come e quando ti pare da seriale/RS485 tramite un comando dedicato.

Mi è chiaro cosa intendi ma al momento non penso risolva il problema dell’assegnazione dell’indirizzo alla prima accensione. Nella comunicazione RS485, il dispositivo SLAVE non può contattare il MASTER ma può al più limitarsi a rispondere dopo essere stato contattato. Il MASTER non può contattare lo SLAVE perché non conosce o non ha ancora assegnato l’indirizzo.

cyberhs:
Se hai a disposizione altri pin di ingressi digitali o analogici usati come digitali, potresti usare un dip switch.

Con 4 pin avresti la possibilità di usare 16 indirizzi, mentre con 3 ne avresti 8.

E’ uno scenario che prevede un dispendio di risorse di porte.

La mia idea è:

  • Usare due ingressi analogi con due partitori resistivi che dividono il segnale in 10 valori (da calcolare le resistenze --> Questo mi permette di creare 100 indirizzi (da 0 a 99)
  • Da valutare se è possibile riutilizzare via software i due pin analogici utilizzati per la creazione dell'indirizzo

Studio un altro pò ... e vi allineo. Apprezzo il contributo di tutti.

Alberto

Mi è chiaro cosa intendi ma al momento non penso risolva il problema dell'assegnazione dell'indirizzo alla prima accensione. Nella comunicazione RS485, il dispositivo SLAVE non può contattare il MASTER ma può al più limitarsi a rispondere dopo essere stato contattato. Il MASTER non può contattare lo SLAVE perché non conosce o non ha ancora assegnato l'indirizzo.

Puoi sempre dedicare un indirizzo fisso ai nuovi Slave, in modo che da Master ( se non vuoi farlo direttamente sullo Slave ) poi lo modifichi
Prevedi anche , sullo Slave, una procedura di Reset che riporti al valore iniziale detto indirizzo. Ad esempio premendo un pulsante