Arduino standalone: condensatore 104 tra RTS e pin 1?
Moderatori:
carloc,
g.schgor,
BrunoValente,
IsidoroKZ
27 messaggi
• Pagina 2 di 3 • 1, 2, 3
1
voti
No, devi conoscere come funziona una rete RC, forse non hai letto il link a Wikipedia di prima, comunque basta un qualsiasi libro che tratti le basi su come funzionano i circuiti con i condensatori.
2
voti
savo98 ha scritto:Ho letto il link ma non capisco il motivo dei 100nF
I condensatori impiegano un certo tempo T a caricarsi/scaricarsi (cioè arrivare a un certo livello di tensione), secondo una curva esponenziale ; il valore di T dipende dal valore di R*C (resistenza per capacità) del circuito in cui è montato.
I progettisti elettronici sono sempre molto misteriosi e criptici quando parlano dei valori che scelgono per i componenti dei circuiti, quasi facessero parte di una setta massonica. Persino i professori che avevo all'università facevano i misteriosi: anzichè spiegare le ragioni delle loro scelte (ed erano PROFESSORI che stavano INSEGNANDO), a domanda specifica rispondevano "basta leggere sul datasheet".
"Ovviamente" nessun professore ha mai illustrato un datasheet a lezione e spiegato come si legge.Su internet invece trovi gente che dice "ho messo un condensatore da 100uf perché è quello che avevo nel cassetto", oppure frasi come "per questo circuito il valore della capacità in quel pin non è critico può essere scelto in un ampio range di valori", che ti lasciano basito e più perplesso di PRIMA di fare la domanda.
Poi c'è anche chi a una domanda risponde con due domande....
In quanto tempo si carica e scarica un condensatore? Cos'è tau?
Purtroppo Internet è una giungla!
Ma cerchiamo di fare un po' di luce.
Dai messaggi criptici che ho letto nel thread mi sembra di capire che il pin 1 è quello di reset, e che per attivare il reset bisogna collegare il pin a massa (= 0 volt) e tenercelo per almeno 2.5 microsecondi (*).
Sembra anche di capire che l'IDE, cioè semplicemente il programma che usi per scrivere i programmi per Arduino, quando clicchi su UPLOAD invii un impulso sul pin RTS della porta seriale in modo da impostare Arduino su modalità programmazione, ma forse questo impulso è troppo breve (?), quindi viene "prolungato" inserendo il condensatore: in questo modo, infatti, anche quando la tensione sul pin seriale collegato al PC non è più presente, il condensatore collegato al pin1 dell'Atmega risulta ancora carico, quindi sul pin 1 la tensione permane. (**)
"Per quanto tempo permane" dipende dal prodotto di R*C, dove C è la capacità del condensatore e R è la resistenza di "pull-up" (letteralmente "tira su"), cioè collegata tra il pin 1 e l'alimentazione: la resistenza fa sì che, in condizioni normali di funzionamento dell'Arduino, il pin1 risulti a tensione Vcc, quindi NON a massa, quindi NON in reset.
Il prodotto di R (in ohm) per C (in microFarad, uF) dà la costante di tempo in microsecondi (uS): bisogna fare in modo che sia maggiore di 2.5 uS, come da datasheet, così l'atmega capisce che gli viene richiesto di resettarsi.
Quindi deve essere:
T > 2.5 uS
cioè
R*C > 2.5
(Con R in ohm e C in uF)
Per indicare nella formula che R è espresso in ohm e C in uF si possono usare le parentesi quadre:
R[ohm] * C[uF] > 2.5 [uS]
Quindi, capovolgendo la formula, deve essere:
C > 2.5 / R
Non so da quanto è la resistenza di pullup; se valesse 1000 ohm:
C > 2.5 /1000
C > 0.0025 uF
0.0025 uF = 2.5 nF
Quindi se la resistenza è da 1000 ohm, il condensatore deve essere da almeno 2.5 nF, e siccome 100 uF è più di 2.5 nF, va bene; ma se il primo tizio che ha fatto esperimenti col cavo FTDI e Arduino avesse avuto nel cassetto un condensatore da 10 uF invece che da 100, probabilmente ora staremmo discutendo sul perché serve un condensatore da 10 uF!
-----------
(*) abbreviato con "us", anche se invece della "u" servirebbe il carattere greco "µ", cioè "mu", simbolo appunto di "micro", però sulla tastiera la µ non c'è e quindi si sostituisce con la "u" minuscola che gli assomiglia.
(**) anche se non capisco come farebbe a caricarsi a sufficienza, visto che la costante di tempo di carica è la stessa di quella di scarica... Mah. Forse perché una tensione di 5V "distribuita" su 1 microsecondo "equivale" a una tensione, che so, di 3V distribuita su 10 microsecondi (valori ipotetici buttati lì a caso), e all'atmega basta vedere più di 3V per interpretare il pin come "alto". Immagino che qualcuno abbia fatto i calcoli.... o più probabilmente provato una serie di condensatori a caso finché uno ha funzionato.
Ultima modifica di
jumpjack il 28 mar 2017, 12:39, modificato 1 volta in totale.
-- Jumpjack --
3
voti
Ah ecco, qui è spiegato bene, e c'è anche un'immagine:

Sembra che l'IDE lasci a 0V il pin RTS "per sempre", mentre invece deve starci per "poco tempo" (vorrei avere dei vlaori precisi...); la serie tra resistenza di pull-up e condensatore costringe invece la tensione a risalire gradualmente a Vcc "qualche tempo dopo" (cioè dopo un tempo RC) che RTS è stato messo a zero dall'IDE, così una volta che il caricamento dello sketch è finito, l'atmega non si trova in condizioni di reset ma di funzionamento normale.
Per inciso, 0.1 uF = 100 nF, che è comunque maggiore di 2.5 nF, quindi va comunque bene.

Sembra che l'IDE lasci a 0V il pin RTS "per sempre", mentre invece deve starci per "poco tempo" (vorrei avere dei vlaori precisi...); la serie tra resistenza di pull-up e condensatore costringe invece la tensione a risalire gradualmente a Vcc "qualche tempo dopo" (cioè dopo un tempo RC) che RTS è stato messo a zero dall'IDE, così una volta che il caricamento dello sketch è finito, l'atmega non si trova in condizioni di reset ma di funzionamento normale.
Per inciso, 0.1 uF = 100 nF, che è comunque maggiore di 2.5 nF, quindi va comunque bene.
-- Jumpjack --
2
voti
Si, il 100 nF perché nel cassetto aveva quello. Dissi alcuni post prima che si poteva mettere di altri valori in genere minori e non critici. Non fa male tenerlo alto, tanto prima o dopo e per effetto della pullup, torna a Vcc avviando il micro.
Ottima esposizione
jumpjack 
Ottima esposizione

Da soli conosciamo alcune cose.
In molti ne conosceremo molte di più.
In molti ne conosceremo molte di più.
2
voti
Sarebbe utile chiarire che il tempo minimo di reset è il minimo perché la circuiteria interna identifichi la situazione, dato che il micro può stare in condizione di reset per un tempo indeterminato.
RST (o DTR - Arduino2009 utilizza DTR di FTDI 232L) viene abbassato all'inizio della trasmissione ed è mantenuto basso per tutta la sua durata.
Siccome è necessario che il micro riparta dal vettore di reset per caricare dalla connessione seriale, si è fatto in modo che al fronte di discesa dell'RTS si abbia un impulso basso sulla linea RESET.
La cosa si può fare in molti modi e quello usato non è certo il più raffinato. Funziona dato che l'ingresso al pin 1 ha un ST interno che triggera sulla rampa di salita determinata dal condensatore in un punto abbastanza preciso.
E' una arduinata, ma per il genere di applicazione non occorrono sistemi più raffinati.
Il valore 100nF è dovuto al fatto che si tratta del valore di capacità più comune nelle applicazioni logiche, quindi economico e di facile reperibilità, e che la rampa prodotta è sufficientemente lunga, anche se capacità minori andrebbero altrettanto bene.
Preciso che non è il metodo che utilizzerei in una macchina, ma funziona ed è il più economico possibile.
Quindi, niente calcoli di precisione, che sarebbero difficili per i numerosi parametri aleatori, ma una semplice derivazione dalla pratica.
Il che non vuol dire che è stato messo il primo valore sotto mano, che sarebbe solo una coglioneria, ma un minimo di valutazione sugli effetti della capacità è stato introdotto nella scelta. Anche se si tratta di arduini, il sistema del raggiungere il risultato solo attraverso errori e non valutazioni numeriche anche minimali, non è certo quello usato dai progettisti.
RST (o DTR - Arduino2009 utilizza DTR di FTDI 232L) viene abbassato all'inizio della trasmissione ed è mantenuto basso per tutta la sua durata.
Siccome è necessario che il micro riparta dal vettore di reset per caricare dalla connessione seriale, si è fatto in modo che al fronte di discesa dell'RTS si abbia un impulso basso sulla linea RESET.
La cosa si può fare in molti modi e quello usato non è certo il più raffinato. Funziona dato che l'ingresso al pin 1 ha un ST interno che triggera sulla rampa di salita determinata dal condensatore in un punto abbastanza preciso.
E' una arduinata, ma per il genere di applicazione non occorrono sistemi più raffinati.
Il valore 100nF è dovuto al fatto che si tratta del valore di capacità più comune nelle applicazioni logiche, quindi economico e di facile reperibilità, e che la rampa prodotta è sufficientemente lunga, anche se capacità minori andrebbero altrettanto bene.
Preciso che non è il metodo che utilizzerei in una macchina, ma funziona ed è il più economico possibile.
Quindi, niente calcoli di precisione, che sarebbero difficili per i numerosi parametri aleatori, ma una semplice derivazione dalla pratica.
Il che non vuol dire che è stato messo il primo valore sotto mano, che sarebbe solo una coglioneria, ma un minimo di valutazione sugli effetti della capacità è stato introdotto nella scelta. Anche se si tratta di arduini, il sistema del raggiungere il risultato solo attraverso errori e non valutazioni numeriche anche minimali, non è certo quello usato dai progettisti.
-

Brianz
5.828 5 10 - CRU - Account cancellato su Richiesta utente
- Messaggi: 858
- Iscritto il: 24 mar 2016, 11:27
2
voti
Prima di tutto FTDI è il nome di una azienda che vende diversi tipi di circuiti integrati. Il chip in questione è FT232R, il più usato nei primi modelli delle board Arduino, un adattatore RS232-TTL <-> USB.
Per programmare Arduino con il suo bootloader devi resettare il micro-controllore, o lo fai tu a mano premendo il tasto di reset o lo fai in modo automatico dal programmatore pilotando un segnale. Visto che il bootloader di Arduino usa il protocollo RS232 si è utilizzato un segnale di controllo in modo improprio per pilotare il reset (come ti è stato più volte detto).
Per programmare Arduino con il suo bootloader devi resettare il micro-controllore, o lo fai tu a mano premendo il tasto di reset o lo fai in modo automatico dal programmatore pilotando un segnale. Visto che il bootloader di Arduino usa il protocollo RS232 si è utilizzato un segnale di controllo in modo improprio per pilotare il reset (come ti è stato più volte detto).
1
voti
savo98 ha scritto:Grazie mille a tutti per la disponibilità. :)
Ma l'RTS dell'FTDI a che serve? Per resettare il microprocessore da PC?
Non è stato progettato espressamente per quello, ma chi usa Arduino ha deciso di usarlo in quel modo.
Quello che non ho capito è perché non ci pensa direttamente l'IDE a far durare il tempo giusto lo "zero" sul pin, invece di costringere a mettere le mani all'hardware.
-- Jumpjack --
27 messaggi
• Pagina 2 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Nessuno e 37 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






