Resistenze pull-up...problemi!

Sezione dedicata all'elettronica in generale.
Rispondi
davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Resistenze pull-up...problemi!

Messaggio da davideciarm » giovedì 5 marzo 2009, 18:56

Salve, ho fatto il mio primo circuito con PIC 16F877A... ho diversi ingressi, analogici e non, ora il mio problema, sono gli ingressi in pull-up, non vengono interpretati come si deve!
Sul piedino, c'è collegata una resistenza da 4.7K che va ai 5V, e una pista, che è collegata al negativo, tramite relè o switch....
Provo ad effettuare le misure, con il circuito spento, mi ritrovo tra il piedino e il negativo una resistenza di 4.7Kohm, e tra il piedino e il negativo una resistenza da 16Kohm! da cosa deriva questo 16kohm? premetto che lo switch non è attivo eh...! Forse è dovuta alla resistenza interna del 7805? O ai trimmer che sono collegati con i piedini esterni al + e al - e il centrale al pic? non mi viene altro in mente :roll: :(
Vi prego...aiutatemi!!!! Dove ho sbagliato? :cry:
Grazie a tutti per l'aiuto!!! a presto :roll: :wink:

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » giovedì 5 marzo 2009, 19:18

Ah...il piedino che mi da più problemi, è un piedino di interrupt, che viene letto come interrupt anche se io non muovo nulla! Però a circuito acceso, c'è comunque una tensione di 4,6V su questi piedini....
Bhò! Dovrei dimunire la resistenza di 4.7?

Avatar utente
fiser
Senior
Senior
Messaggi: 1570
Iscritto il: giovedì 27 dicembre 2007, 21:58
Località: ROMA
Contatta:

Re: Resistenze pull-up...problemi!

Messaggio da fiser » giovedì 5 marzo 2009, 19:22

se parli delle porte B assicurati almeno di aver disabilitato il pull interno (RBPU)
mi pare che sia un pull down
_______________________
un dottore in chissà cosa ha scritto:
sicuro e distruttivo malfunzionamento

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » giovedì 5 marzo 2009, 19:47

eh no...l'interrupt è sul piedino CCP1, quindi RC2. gli altri input, che non sono interrupt, sono su RE.

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » giovedì 5 marzo 2009, 21:54

Ho analizzato il problema! Non sono i pull-up! Scusatemi....
è la conversione A/D che non funziona!
In pratica ho il programma strutturato così:

Codice: Seleziona tutto

PARTE1();
ADCON1=0b10000010;
ADCON0=0b11000001;	//Setto il convertitore da usare: RA0 xx000xxx
DelayUs(250);
ADGO=1;                                      // start  della conversione A/D
  while(ADGO);                             // ADGO=0 fine conversione 
//Leggere il risultato della conversione dei registri ADRESH e ADRESL;
valoreRA0 = ADRESL+(ADRESH<<8);   //assegno alla variabile valoreRA0 il contenuto a 10bit -- può variare da 0 a 1023
ADIF=0;  			//Azzerare ADIF se necessario; (Questo bit si trova in PIR1 ed è il numero 6)

for (attesa500ms=0; attesa500ms<valoreRA0; attesa500ms++){
	if (ForceExit==0){
		DelayMs(250);
		DelayMs(250);
	}
}

PARTE2();
Così però, passa dalla parte1 alla parte2 del programma, senza pausa! anche se il piedino RA0 ha una tensione di 5V...
se invece scrivo:

Codice: Seleziona tutto

PARTE1();

valoreRA0=20;
for (attesa500ms=0; attesa500ms<valoreRA0; attesa500ms++){
	if (ForceExit==0){
		DelayMs(250);
		DelayMs(250);
	}
}

PARTE2();
ottengo una pausa di 10secondi, tra le due parti! cosa sbaglio? Penso niente...ma non ci capisco più nulla :(
Aiuto please :mrgreen:

Avatar utente
fiser
Senior
Senior
Messaggi: 1570
Iscritto il: giovedì 27 dicembre 2007, 21:58
Località: ROMA
Contatta:

Re: Resistenze pull-up...problemi!

Messaggio da fiser » giovedì 5 marzo 2009, 22:32

non sappiamo cosa vuoi ottenere......
_______________________
un dottore in chissà cosa ha scritto:
sicuro e distruttivo malfunzionamento

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » giovedì 5 marzo 2009, 22:56

Semplicemente una pausa del programma tra 2 funzioni. la pausa va da 0 a 8minuti, in base al valore del trimmer su RA0.
Però...è come se mi leggesse 0, perchè finita la prima funzione, passa direttamente alla seconda, mentre se per prova, scrivo il valore nella variabile manualmente, esegue la pausa...è una semplice operazione, ma non va! :?

Avatar utente
fiser
Senior
Senior
Messaggi: 1570
Iscritto il: giovedì 27 dicembre 2007, 21:58
Località: ROMA
Contatta:

Re: Resistenze pull-up...problemi!

Messaggio da fiser » giovedì 5 marzo 2009, 23:33

PARTE1();

valoreRA0=20;
for (attesa500ms=0; attesa500ms=<valoreRA0; attesa500ms++){
// if (ForceExit==0){
DelayMs(250);
DelayMs(250);
// }
}

prova così
_______________________
un dottore in chissà cosa ha scritto:
sicuro e distruttivo malfunzionamento

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » venerdì 6 marzo 2009, 0:06

no non è problema della variabile forceexit....
Sono riuscito ad ottenere qualcosa...sempre grazie al tuo sito :mrgreen:
uso questa funzione qui:

Codice: Seleziona tutto

int leggi_ad(char canale)
{
	int valore;

	ADCON0 = (canale << 3) + 0xC1;		// enable ADC, RC osc.

	DelayUs(20);							//Ritardo per dare modo all'A/D di stabilizzarsi

	ADGO = 1;      						//Fa partire la conversione

	while(ADGO)
			continue;						//Attende che la conversione sia completa

	valore=ADRESL;      					//Parte bassa del risultato
	valore= valore + (ADRESH<<8);  	//Parte alta del risultato
	
	return(valore);	
}
Ora, nel mio main...

Codice: Seleziona tutto

 ADCON1=0b10000010;
RB7=1;
valoreRA0=leggi_ad(0);
//valoreRA0=15;
for (attesa500ms=0; attesa500ms<valoreRA0; attesa500ms++){
		DelayMs(250);
		DelayMs(250);
}

RB7=0;
ecco...ora funziona! Però ho un problema...non ho per nulla sensibilità ! O meglio...con il mio for, poichè leggo un valore da 0 a 1023, avrei una pausa minima di 0.5secondi...ed invece, se metto a minimo, non resta acceso per nulla, se aumento il trimmer, non cambia, fino a quando sul piedino arriva 1V! e da 0V a 1V? dove è andato a finire? :shock:
Sbaglio qualcosa?
Uso un clock a 20MHz....

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » venerdì 6 marzo 2009, 10:12

nessuno sa aiutarmi? uffa non è possibile che la lettura minima è di 1V :( Ho sbagliato qualcosa...ma dove? :?

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » venerdì 6 marzo 2009, 14:59

c'ho qualche problema! :(
allora...ho fatto un semplice programma per testare la conversione (copiato da fiser! :D ):

Codice: Seleziona tutto

#include <pic.h> 
#include <stdio.h> 
#define XTAL_FREQ 20MHZ 
#define PIC_CLK 20000000
#include "delay.c" 
 
__CONFIG(HS&WDTDIS&PWRTEN&BORDIS&LVPDIS&DUNPROT&WRTEN&UNPROTECT);

int main(void) 
{ 
int valore, valore1;

	TRISA = 0b11111111;		//setta il portA come input
	TRISB = 0b00000000;		//setta il portb come output
	PORTB = 0b00000000;		//azzera le uscite
	
	ADCON0 = 0b11000001; //setta RA0 come analogico 
	ADCON1 = 0b10000000; 

		while(1) { 
			DelayS(1);
			ADGO = 1; //Fa partire la conversione 
			while(ADGO) 
			continue; //Attende che la conversione sia completa 
			DelayS(1);
			valore=ADRESL+(ADRESH<<8); //valore a 10 bit 
			valore1=valore/4; //riporto a 8 bit 
			PORTB=valore1; //riporta il valore1 su portB
			DelayS(5);
         } 
} 
Ora...apparte che il trimmer, non mi piace affatto, da 0V passa ad 1V immediatamente! penso dipenda dalla scarsa qualità  del trimmer...però...regolato in modo da misurare 1.73V sul piedino,
ecco i valori che leggo:

00100010 34
00101010 42
00001100 12
00001110 14
01110010 114
00000010 2
01101101 109
01111000 120
01110111 119
01110100 116
10000000 128
01111100 124

praticamente...tutti sballati! il valore corretto dovrebbe essere sui 90...ma ottengo valori incredibili!!!

ho fatto la prova anche a 2.60V:
2.60V
01101101 109
10000001 129
01100101 101
00000111 7
00010110 22
00000000 0
00110110 54
00110000 48
01100101 101
01101100 108

Da cosa dipende tutto questo? :roll:

Vi prego aiutatemi!!!!

Avatar utente
fiser
Senior
Senior
Messaggi: 1570
Iscritto il: giovedì 27 dicembre 2007, 21:58
Località: ROMA
Contatta:

Re: Resistenze pull-up...problemi!

Messaggio da fiser » venerdì 6 marzo 2009, 18:16

è tutto sballato e di molto.
il trimmer non deve avere un valore troppo alto per non raccogliere rumori di fondo.
io uso abitualmente potenziometri da 1k proprio per forzare il livello di tensione.
sulla easy pic5 sono montati potenziometrini da 10 k e già  si vede il valore traballare sui display.
_______________________
un dottore in chissà cosa ha scritto:
sicuro e distruttivo malfunzionamento

davideciarm
Junior
Junior
Messaggi: 103
Iscritto il: mercoledì 4 febbraio 2009, 12:50
Località: Caserta

Re: Resistenze pull-up...problemi!

Messaggio da davideciarm » sabato 7 marzo 2009, 1:47

ho sostituito....ora sembra che vada :D
poi per i dettagli ti aggiornerò :mrgreen:

Rispondi

Torna a “Elettronica”