help resistenza pullup interna

Salve ragazzi vi scrivo per trovare una soluzione ad un problema.

Ho fatto realizzare 10 pcb doppia faccia silkscreen e soldermask ma purtroppo ho fatto un errore ( vedi allegato )

I tre pulsanti che uso P1 P2 P3 collegati rispettivamente a Arduino 6 7 8 purtroppo come uno scemo non gli ho messo una resistenza di pull up o meglio l'ho messa dopo il pilsante tra il pulsante stesso e il gnd. ( sarebbe stata di pull down vabbè )

Siccome sono bellini e mettere una resistenza esterna sarebbe un peccato HO LASCIATO la reistenza da 10K tra il pulsante e gnd e ho attivato con digitalwrite(pin, HIGH) il pull up interno

Solo che se vi scrivo non funziona ovvio !

Ora prima di chiedere lumi vi chiedo

Se la mia resistenza da 10K la lascio possibile che non sia idonea a tirar sù lo stato logico poichè la resistenza interna dell'arduino pare che sia da 20 K ???

Sbaglio qualcosa nel codice ?

se faccio girare il codice mi luppa in continuazione come se il pulsante fosse premuto

grazie mille

Daniele

pull-up.zip (20.8 KB)

La pull-up interna si attiva se prima imposti il pin come INPUT, successivamente esegui il dW. Se attivi la pull-up interna NON puoi lasciare ANCHE la pull-down esterna; sul pin a quel punto deve starci il SOLO pulsante che chiude verso GND. Ho visto lo schema, non puoi limitarti ad eliminare R6-R7-R8, devi ponticellare i relativi fori per chiudere il pulsante a GND, per salvare l'estetica puoi usare delle R da 0 ohm, al posto delle 10k. Ancora, il transistor della retroilluminazione è montato al rovescio: l'emettitore va a GND e comunque tra K e collettore devi prevedere una R, a meno che tu non abbia già verificato che è presente interna all'LCD ed il consumo sia fisso intorno a 50-60mA, diversamente rischi di fare danno. Ancora il 7805 andrebbe contornato dei classici 4 condensatori: due elettrolitici e due ceramici/poliestere. Poi, visto che usi l'ADC DEVI collegare almeno l'AVcc al Vcc per alimentarlo e mettere un C da 100nF tra ARef e GND, e collegare AGND a GND, ed almeno un altro C da 100nF andrebbe messo tra Vcc e GND, molto vicino al Vcc.
Insomma visto che dovevi fare un lavoro definitivo forse potevi postarlo prima questo schema, avresti ricevuto molti consigli utili :wink:

Oppure, con le ultime versioni dell'IDE, si imposta così il pin:

pinMode(pin, INPUT_PULLUP);

grazie per la risposta ma è come hai detto tu che ho fatto

int P1 = 6 ;
pinMode(P1,INPUT );
digitalWrite(P1, HIGH);

e nello stampato ho

ARDUINO -----------> PULSANTE --------------> RESISTENZA -----> GND

uso la versione di arduino 1.0 arduino uno R3

devo quindi eliminare la resistenza ? però si attiva solo a pulsante premuto a me invece risulta sempre premuto e così non interviene mai

leo72:

[quote author=Michele Menniti link=topic=164102.msg1225322#msg1225322 date=1367497589]
La pull-up interna si attiva se prima imposti il pin come INPUT, successivamente esegui il dW.

Oppure, con le ultime versioni dell'IDE, si imposta così il pin:

pinMode(pin, INPUT_PULLUP);

[/quote]

Mi intrometto con una domanda, @leo per ultime versioni intendi anche 1.0.4 o solo la 1.5.x ? grazie

Scusate mi correggo uso la versione 0023

ho rieditato il mio post, dopo aver visto lo schema, rileggilo, ci sono molte info importanti.

nid69ita:

leo72:

[quote author=Michele Menniti link=topic=164102.msg1225322#msg1225322 date=1367497589]
La pull-up interna si attiva se prima imposti il pin come INPUT, successivamente esegui il dW.

Oppure, con le ultime versioni dell'IDE, si imposta così il pin:

pinMode(pin, INPUT_PULLUP);

Mi intrometto con una domanda, @leo per ultime versioni intendi anche 1.0.4 o solo la 1.5.x ? grazie
[/quote]
il comando è stato introdotto con la 1.0.x, nel caso specifico non può usarlo visto che ha la 0023

grazie mille per il tuo aiuto. Hai ragione avrei dovuto chiedere prima.

La cosa fu svilupata la sera dopo il lavoro e dopo cena e a volte molto tardi per questo portata avanti sempre a pezzi. Questo ovviamente NON giustifica gli errori che rimangono.

Mi sono sempre chiesto a cosa servissero Aref agnd avcc ma senza pensarci troppo mentre i transistor sono stati provati prima con una breadboard e poi disegnati. Se riesco a far funzionare i pulsanti verificherò anche il resto.

Il problema però rimane su un punto.

Visto che il codice impone un pullup interno ( è corretto per la 0023 con quella sintassi o meglio funziona ? errore non ne dà ma bisognerbbe sapere se porta a 1 oppure no ) e che il ciclo del menù è semplicemene controllato da una IF che verifica lo stato logico a LOW dell 'ingresso e se non premo resistenza o meno sul piedino non arriva nulla PERCHE' LOOPA IN CONTINUAZIONE IL MENù ??

Grazie mille

chiederò più spesso

ps se compilo con la 1.0 ricevo l'odiosissimo errore

error: WConstants.h: No such file or directory

nid69ita:
Mi intrometto con una domanda, @leo per ultime versioni intendi anche 1.0.4 o solo la 1.5.x ? grazie

Se non ricordo male, dalla 1.0.3 in poi.

Vedo altre cose, i pin dei pulsanti sono mappati nello sketch sui pin 6, 7, 8 ma nello schema c'è collegato il sensore e un transistor, il pin 8 è libero.
I pulsanti nello schema sono collegati sui pin analogici.
Oltre a questo fai un errore nella lettura dei pulsanti; nel codice hai

if(analogRead(P3)==LOW){
  regolacontrastosu ();
  }
    if(analogRead(P2)==LOW){
  regolacontrastogiu ();
  }

devi usare digitalRead()

Si dunque i pin eranoappati male. Ora li ho corretti ma non cambia la situazione.

Dopo di rientro in ufficio poato il codice così come l'ho corretto.

Per quanto riguarda i transistor bc337 di contrasto e luminosità direi siano corretti altrimenti non si avcenderebbe illuminazione e xontrasto.

djdanielb:
error: WConstants.h: No such file or directory

Aggiorna le librerie che stai usando.
Ho appena verificato il tuo sketch con la 1.0.4 e compila.

Salve ragazzi seguendo i vostri consigli ho risolto ma aggiungo

Anche con la versione 1.0.4 e dovute aggiunte di libreria OneWire- Dallas Temperature - RTClib continua a presentarsi l'errore WConstant missing...

Pur mantenendo la resistenza da 10K ( che comunque provvederò a sostituire con una minore prossima allo 0 ) funziona regolarmente.

Infine a cosa servono AREF VREF AGND ? Che succede se non li collego ?

Grazie mille
Daniele

Se ti da l'errore è perché una libreria lo richiede.
--> GitHub - milesburton/Arduino-Temperature-Control-Library: Arduino plug and go library for the Maxim (previously Dallas) DS18B20 (and similar) temperature ICs
--> OneWire Arduino Library, connecting 1-wire devices (DS18S20, etc) to Teensy
--> GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC Arduino library oppure --> https://github.com/jcw/rtclib

Per la resistenza, puoi mettere un ponticello o una 0 ohm (che è un ponticello).
Se non colleghi Aref, Vref e Agnd, all'interno del micro la corrente fa dei giri strani.. così mi era parso di capire in un vecchio post; ma per questo aspetta i più esperti.

djdanielb:
Infine a cosa servono AREF VREF AGND ? Che succede se non li collego ?

VREF? E dove l'hai visto?
Il 328 ha AREF (pin 21), AVCC (pin 20) e GND (pin 22).
AREF serve per collegare una tensione di riferimento esterna per il comparatore. Se usi la tensione di default (VCC), collega questo pin a massa tramite un condensatore ceramico da 100 nF per dare stabilità all'ADC ed avere misure più precise.
AVCC e GND vanno sempre collegati, servono il primo per alimentare l'ADC ed il secondo GND per mettere meglio a massa tutte le componenti interne del micro.