PINO RA4

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PINO RA4

Mensagempor rebelk » 27 Jun 2007 21:11

COLOQUEI UM RESISTOR DO PINO RA4 DE 10K PARA OS 5V , MAS MESMO ASSIM ELE NÃO ATIVA , ALGEM PODE ME EXPLICAR ?





#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)


#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#byte porte = 0x09



#bit E1 = portd.0 //
#bit E2 = portd.1 //
#bit E3 = portd.2 //
#bit E4 = portd.3 //
#bit E5 = portd.4 //
#bit E6 = portd.5 //
#bit E7 = portd.6 //
#bit E8 = portd.7 //
#bit E9 = portb.0 //
#bit E10 = portb.1 //
#bit E11 = portb.2 //
#bit E12 = portb.3 //
#bit E13 = portb.4 //
#bit E14 = portb.5 //
#bit E15 = portb.6 //
#bit E16 = portb.7 //

#bit S1 = porta.0 //
#bit S2 = porta.1 //
#bit S3 = porta.2 //
#bit S4 = porta.3 //
#bit S5 = porta.4 //
#bit S6 = porta.5 //
#bit S7 = porte.0 //
#bit S8 = porte.1 //

#bit LED = porte.2

//**********************************************************************
//**********************************************************************

SAIDA()
{
while( !E1 || !E2 || !E3 || !E4 || !E5 || !E6 || !E7 || !E8 || !E9 || !E10 || !E11 || !E12 || !E13 || !E14 || !E15 || !E16 )
{

LED=1;

S1=1;
S2=1;
S3=1;
S4=1;
S5=1;
S6=1;
S7=1;
S8=1;
delay_ms(300);

LED=0;

S1=0;
S2=0;
S3=0;
S4=0;
S5=0;
S6=0;
S7=0;
S8=0;
delay_ms(300);

}
}
//**********************************************************************
//**********************************************************************



main()
{

setup_adc_ports( no_analogs );
set_tris_b(0b11111111); // configuração dos pinos ENTRADAS
set_tris_d(0b11111111); // configuração dos pinos

set_tris_a(0b00000000); // configuração dos pinos
set_tris_c(0b00000000); // configuração dos pinos SAIDAS
set_tris_e(0b00000000); // configuração dos pinos


porta=0x00; // limpa porta
portb=0x00; // limpa portb
portc=0x00; // limpa porta
portd=0x00; // limpa portb
porte=0x00; // limpa porta


while (true)
{
if( !E1 || !E2 || !E3 || !E4 || !E5 || !E6 || !E7 || !E8 || !E9 || !E10 || !E11 || !E12 || !E13 || !E14 || !E15 || !E16 )
{
SAIDA();
}

delay_us(500);

}
}
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor KrafT » 27 Jun 2007 22:18

Bom eu nao analizo nem meus codigos, imagina o dos outros, mas eu sugiro fazer algo mais simples tipo:

Código: Selecionar todos

for(;;){
output_toggle(PIN_A4);
delay_ms(500);
}



Assim vc isola o problema só no pino A4.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor leoabubauru » 05 Ago 2007 16:24

Também estou tendo o mesmo problema, mas no 16F628A. Já percebi que ele Open Drain, portanto, também coloquei o pull-up em 5V. Até agora nada.

Já não sei o que mais posso estar deixando de lado...
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor RobL » 05 Ago 2007 17:51

Configuraram a porta como digital? O compilador usado torna a porta digital ou precisa configurar a porta como digital?

Será que o led não está invertido?
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor RobL » 05 Ago 2007 17:59

Com resistor de 10K seu led vai acender muito fraquinho. Em ambiente com luz intensa não será visto, coloque um R de 1K para os 5 Vcc, pelo menos.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor leoabubauru » 05 Ago 2007 21:58

No meu caso eu desligo o comparador. Uso o RA4 para piscar um relê chaveando-o com um BC337-25. Se eu só pendurar o pull-up (1k) sem carga, vejo com o osciloscópio que o bichinho "fonuncia". Se coloco a carga ele pára. Muito estranho.

A carga é a base do BC337-25. Já coloquei o pino no meio de um divisor (pull-up de 1k / pino / outro 1k que liga na base do BC337-25). De nenhum modo o pino pisca. Resolvi trocar de pino, mas a dúvida continua a me atormentar...

Valeu
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor RobL » 05 Ago 2007 22:46

Se colocar a base do transistor como carga, ao fazer uma leitura pela PORTA, o famoso RMW vai "desligar"sua porta quando esta voltar a ser saída.
O problema é que ao ler a porta, no PORTA, 4, vai ser lido um nível do Vbe do transistor de 0,6V, ou seja, um nível baixo, e ao reescrever na porta, será escrito um nível baixo, 0L.

Se nos casos dos leds, acima, foram colocados leds diretamente na porta (do porta,4 para a referência zero), isto vai acontecer também, pois ao fazer qualquer instrução que leia a porta (bsf, bcf, ect) a porta será lida com 1,5V, tensão do LED que é um nível baixo e será reescrita como 0L.

Caso não queira conviver com isso, mude de arquitetura, vá para algo mais moderno, os AVRs.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor andre_luis » 06 Ago 2007 08:52

Porque nao faz um programa de teste mais simples ?
Sem ler entrada alguma, apenas pisca o LED numa cadencia fixa.

Testa o LED sem resistor algum entre ele e o PIC só pra confirmar.

Depois inverte o LED, pode ser que esteja invertido. ( Já vi isso acontecer na decada de 80 ). E teste o LED num multimetro pra ver se tá funcionando - vc ja deve ter feito isso.

Por fim, troque o PIC.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor leoabubauru » 06 Ago 2007 10:09

RobL, não faço operação de leitura. O pino é só saída.


Veja a figura. Se eu retirar os 2 jumpers, o pino funciona ligando e desligando. Se eu colocar qualquer um dos jumpers ele não funciona.

Imagem

Porque a eletrônica não é uma ciência exata? Nós dominaríamos o mundo... hehehe[/img]
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor RobL » 08 Ago 2007 18:46

Você quiz dizer que somente com o R de pullup de 1K sua porta funciona, conforme seu programa, correto?
Se for isso, sim está de acordo com o esperado e se ligar qualquer um dos jumper, ao contrário do que pensa ela funciona mas irá logo para zero assim que qualquer outra instrução atue sobre a PORTA em qualquer outro pino. Veja abaixo por que ou o porque:

Com os 2 jumper desligado a tensão na porta é de 5Vcc ou Zero.
Com o jumper 2 fechado e 1 aberto, a tensão na porta será = Vbe 0,6V
Com o jumper 1 fechado e 2 aberto a tensão será (Vcc/2) + Vbe, 3,1V.
Essa entrada é Smith Trigger. Seu nível alto, como entrada será acima de 4Vcc.

Não é necessário que a porta 4 não tenha sido modificada como entrada. Mesmo sendo somente saída, qualquer instrução sobre qualquer outro pino dessa porta A fará com que ocorra uma operação de leitura (Read) de todos os pinos do PORT A.
Neste momento todos os buffer ficaram com o valor lidos nas portas.
No seu circuito, será lido nível zero (mas você escreveu nível alto por programa, antes de alguma outra operação nas portas).
Todas as demais portas que estiverem alta, acima de 4Vcc e todas as demais baixa (abaixo de 2,5 ou 4V) se manterão com o seu nível.
A porta que foi escrita, será modificada para o valor do bus posto no buffer dela (operação Modify) e após será escrita no pino (saída do FF) (Write). Este é o processo Read-Modify-Write (o famoso e temido R.M.W, devido as capacitância dos pinos).
O problema é que seu circuito mantém seu nível alto em 0,6V, na porta ou menor que 4Vcc. Isto ocorrerá sempre com qualquer porta dos PICs, tanto A, B, C, etc e com qualquer pino. Não é uma particularidade da portA 4.
Prova 1:
Com o mesmo circuito, faça um programa no qual coloque nível alto na porta 4 e nenhuma operação sobre qualquer porta A. Veja, seu rele ou led ficará setado, não desliga. So desliga por se seu programa o fizer e torna a ligar por seu programa, sobre o pino A4.
Prova 2:
Mantendo o seu programa, coloque um resistor 1K para o +5Vcc e um resistor com 10K indo da porta A4 para a base do transistor. Veja que o rele fecha e não desliga.

Por que não desliga? Pois a tensão na porta, no nível alto, se mantém acima de 4 V e qualquer operação sobre a PORTA, que envolva outros pinos dessa porta, durante o RMW, lerá o pino A4 com nível alto e o recolocará como nível alto. Seu rele ficará ligado.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x