L'atmega 328 a le resistenze interne di pullup

Buona giornata ragazzi
mi succede una cosa strana, fin dora non ci avevo mai fatto caso,

collego un pulsante (verso massa) su un pin digitale con un condensatore di 10 nF, collegato fra il pin ed massa,
alla pressione del pulsante mi accende un led (con relativa resistenza di limitazione) collegato su un altro pin digitale,
fin qui tutto bene,
il problema e che io voglio che all’avvio di Arduino uno il led sia spento, ed invece lui e acceso,
posto il programma che sto utilizzando

#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define led 4
#define buton 6

LiquidCrystal_I2C lcd(0x3F, 20, 4); //0x27

void setup() {
	Serial.begin(9600);
	lcd.init();
	lcd.backlight(); //per attivare la retro inluminazione
	lcd.home();

	pinMode(led, OUTPUT);
	digitalWrite(led, 0);
	lcd.setCursor(0, 1);
	lcd.print("Led Spento");

	pinMode(buton, INPUT_PULLUP);
}

void loop() {

	if (digitalRead(buton) == 0) {
		digitalWrite(led, !digitalRead(led));
		while (digitalRead(buton) == 0)
			;

		lcd.setCursor(0, 1);
		lcd.print("          ");
		lcd.setCursor(0, 0);
		lcd.print("Led Aceso");

		if (digitalRead(led) == 0) {
			lcd.setCursor(0, 0);
			lcd.print("         ");
			lcd.setCursor(0, 1);
			lcd.print("Led Spento");
		}
	}
	delay(100);
}

per cortesia qualcuno mi può dire dove sbaglio?

Probabilmente hai semplicemente collegato il LED da un lato al positivo e dall'altro ad Arduino, per cui ... con LOW si accende e con HIGH si spegne. O inverti la logica o inverti il LED.

Guglielmo

Ciao Guglielmo grazie di avermi risposto,
no no il led e collegato fra negativo ed il pin,

ora ho fatto una prova, ho tolto il condensatore (che era collegato il parallelo al pulsante verso massa)
come per incanto adesso come avvio l'Arduino il led non si accende,

ma e normale sta cosa, il condensatore fa sentire al pin la massa,
anche con le resistenze di pullup interne al 328,

Toni

Ok, certo, all'accensione, sino a quando non si carica, un condensatore si comporta come ... un "filo" (... è ovviamente solo un esempio) ... la cui resistenza aumenta mano mano che si carica fino a non condurre più (... sempre un esempio, in relatà le cose sono un po' diverse).

Ma a che serve questo condensatore ? ? ?

E se aggiungi un delay alla fine del setup() ... così quando parte il loop() il condensatore è già carico ... ::slight_smile:

Guglielmo

gpb01:
Ma a che serve questo condensatore ? ? ?

O piuttosto… di che valore è? Perché se è per il debounce con una r-pull interna da circa 40kΩ allora basta da 220 nanofarad o anche 100nF.

Claudio_FF:
O piuttosto... di che valore è?

... lo ha scritto nel primo post ... 10nF ... ma ... non sono mica tanto convinto ... ::slight_smile:

Guglielmo

Allora ho fatto alcune prove,

Ok, certo, all'accensione, sino a quando non si carica, un condensatore si comporta come ... un "filo"

OK, però ho provato ad inserire una resistenza da 10K il parallelo al condensatore da 10nF,
all'avvio il led non si accende,

ovvio che la resistenza da 10K e in parallelo a quella interna (che Claudio_FF dice che e da 40K) il risultato e di 8K, può andar bene una cosa cosi?

Ma a che serve questo condensatore ? ? ?

e per fare un debounce,

@Claudio_FF
ho provato un 100nF non va, anche con 1uF stessa cosa

ora provo ad aggiungere un delay nel setup(),

milefori:
ora provo ad aggiungere un delay nel setup(),

Basta anche solo spostare al primo posto quello scritto alla fine del loop, in modo da dare il tempo al condensatore di caricarsi prima di iniziare a leggere l’ingresso.

il 328 più veloce della luce,
ho messo un delay(100); alla fine del setup(),
tutto apposto,
altra cosa imparata mille grazie a voi

Per quale motivo la resistenza da 10k è in parallelo a quella interna?

Basta mettere il condensatore verso il positivo, anziché verso massa.

Ciao ragazzi

@paulus1969
la resistenza interna e a pullup
la 10K e collegata fra positivo ed il piedino del pulsante che va al pin del328,
io credo sia in parallelo

@Datman

Basta mettere il condensatore verso il positivo, anziché verso massa.

scusa la mia ignoranza, io questo collegamento non l'ho mai visto,
ma se la resistenza e collegata a positivo, collego anche il condensatore a positivo fa lo stesso un debounce?

Sì, certo. L'anti rimbalzo funziona ugualmente.

@Datmanscusa la mia ignoranza, io questo collegamento non l'ho mai visto,
ma se la resistenza e collegata a positivo, collego anche il condensatore a positivo fa lo stesso un debounce?

Si, dal punto di vista elettronico è sempre un filtro, tuttavia una volta ho riscontrato in pratica che con il condensatore verso il positivo l'ingresso a un certo punto si bloccava (non leggeva più le chiusure verso massa), a meno di non aggiungere anche una resistenza (di disaccoppiamento) da qualche kΩ in serie all'ingresso.

Si vede che l'alimentazione era sporca. Non bisogna fare economia di condensatori ceramici sull'alimentazione. Ai tempi dei TTL, ogni integrato aveva accanto un condensatore sull'alimentazione.

Datman:
Ai tempi dei TTL, ogni integrato aveva accanto un condensatore sull'alimentazione.

Ho una certa età quindi posso confermare....

Anche le masse vanno fatte bene, considerando che dove scorre parecchia corrente ci sarà una caduta di tensione, quindi bisogna far scorrere la corrente dove non darà problemi, oppure prendere un riferimento proprio dopo la caduta di tensione per tenerne conto. Sono due cose opposte e va scelta l'una o l'altra secondo i casi.

Mille grazie a tutti, altre cose imparate,
si può (filtrare un pulsante) a PULLUP e condensatore al positivo,

sono d'accordo sul importanza delle masse,

condensatori di filtro non sto li a lesinare, per quello che costano