Calcolo resistenza pull-up/down

So che sto facendo una domanda forse un po' stupida, ma ora che ho finito il dovere all'uni coi tempi strettissimi che mi costringevano a dare per scontate alcune cose, purchè funzionanti, ora vorrei capire bene il loro funzionamento. Comincerei dal pull-up/down. So a cosa servono e come si mettono, di guide ce ne sono migliaia in giro. Non capisco però come vadano dimensionate. Suppongo si debba applicare la legge di Ohm V=RI, ma con quali valori di I?

Lascia perdere la legge di Ohm per questa problematica, basta attenersi ad una tipologia ormai universalmente riconosciuta, parlando di ingressi di tipo digitale: se si tratta di porte logiche TTL si usa il valore di 1 kohm, nel caso delle porte CMOS (tipologia a cui appartiene l'ATmega di Arduino) invece si usa il valore di 10 kohm. Diverso è il caso degli ingressi analogici, dove in genere la R di PU/D viene calcolata come sezione di partitore assieme al sensore, in quel caso allora iniziano i calcoli, ma questa è un'altra storia.... ;)

Per l'I2C si usano da 1.5 a 2.2K. C'è un vecchissimo topic di Astro che ne spiega il motivo con tanto di analisi all'oscilloscopio.

Il valore delle resistenze pullup/pulldown puó essere scelto in un ampio range di valori. Se sono troppo piccole la corrente a pulsante premuto é troppo grande e percui carica in modo ecessivo la fonte di alimentazione (non troppo importante se pochi pulsanti e un alimentatore dimensionato con riserve, controproduttivo se alimentato a batteria, tanti pulsanti o alimentatore al suo limite di potenza). Parliamo di valori sotto il kOhm. Se sono troppo grandi non riescono a portare l' entrata al potenziale definito. Questo succede quando il valore é nella grandezza della impedenza del entrata e la sua corrente nella grandezza delle correnti di dispersione del entrata. E si aggira nei CMOS intorno a qualche MOhm. Correnti meno di 1µA.

Tutti i valori in mezzo vanno bene. Valori sensati per la maggiore dei casi sono tra 10 e 100kOhm. Ciao Uwe

Grazie mille a tutti, siete stati più che esaurienti. Quindi io che uso di solito 4.7-10-22kOhm dovrei ridurre un po' sulle porte I2C e lasciar perdere la 4.7 sulle 'normali' CMOS, oppure tutte nel range 10-22?

Chiedo anche perchè essendo stato un po' l'avanguardia in un gruppo di lavoro sto scrivendo un po' di appunti su tutto quello che ho trovato e provato in modo che gli altri si trovino la strada spianata (poi se è valida la metterò volentieri anche qui) e non vorrei scrivere cavolate :D

Le resistenze per il I2C sono diverse. In questo caso devono essere considerati dei effetti dinamici. Semplicemente detto: le uscite dei dispositivi I2C mettono a massa i conduttri SCL e SDA e le resistenze pullup devono caricari (portarli a 5V) in un tempo utile da poter segnalare un HIGH entro il prossimo clock. Percui il loro valore dipende dalla distanza tra i dispositivi I2C (lunghezza dei conduttori e percui il loro valore capacitativo) e dal loro numero.

Ciao Uwe

Inoltre il bus I2C può pilotare linee con un quantitativo massimo di corrente che deve essere sui 3 mA. Con una R da 1K5 in su si ha giusto quel valore di mA (le pull-up interne che la lib Wire attiva automaticamente sono minime, 30/50K). Salendo troppo con la R si ha una commutazione lenta e si torna al problema spiegato da Uwe.

Maggiori info qui: http://www.nxp.com/documents/application_note/AN10216.pdf