Ajuda em informação no display

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Ajuda em informação no display

Mensagempor rosiley » 21 Set 2009 10:21

Bom dia, preciso da ajuda de voces em resolver este problema.

Preciso acionar as saidas de um mc atraves de chaves e informar no display que a o mesmo foi acionado, como segue o código abaixo. Só que ao ser simulado no proteus a mensagem de relay 1 On já aparece, e a saida não aciona mesmo acionando a chave.

void main()
{
trisb.rb0 = 1; // Tecla Rb0 configurada como entrada.
trisc.rc0 = 0; // Pino Rc0 configurado como saida (rele)

trisb.rb1 = 1; // Tecla Rb1 configurada como entrada.
trisc.rc1 = 0; // Pino Rc1 configurado como saida (rele)

portc.rc0 = 0; // Rele desligado
portc.rc1 = 0; // Rele desligado

trisd = 0; // Configura todos os pinos do PortD como saida
trise = 0; // Configura todos os pinos do PortE como saida

adcon1 = 0x06; // Configura todos os pinos de A/D como I/O de uso geral

lcd8_config(&porte,&portd,2,1,0,7,6,5,4,3,2,1,0);//
lcd8_cmd(lcd_clear); // Limpa o Lcd
lcd8_cmd(lcd_cursor_off); // Desliga o cursor
lcd8_out(1,1,"Relay 1 On");
delay_ms(10);
lcd8_out(2,0,"Relay 2 On");

{

if(portb.rb0 == 0){
portc.rc0 = ~portc.rc0;
delay_ms(20);

}
if (portb.rb0 == 1){
delay_ms(20);


if(portb.rb1 == 0){
portc.rc0 = ~portc.rc0;
delay_ms(20);

}

}while(1);
}
}

Ps. como coloco figura no forum?
rosiley
Nibble
 
Mensagens: 51
Registrado em: 01 Jul 2008 19:38
Localização: rio das ostras

Mensagempor Djalma Toledo Rodrigues » 21 Set 2009 11:23

Claro você colocou a msg no Display antes.

E revise os If If If parece que não estão corretos

PS:
http://asm51.eng.br/phpbb/viewtopic.php?t=847

1ª Msg , como inserir imagem .
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Andre_Cruz » 21 Set 2009 21:23

rosiley,

Esta aparecendo o texto "Relay 1 On" já no inicio quando liga o circuito, porque você esta escrevendo este texto no lcd, antes de ler o estado do botão !

Código: Selecionar todos
lcd8_config(&porte,&portd,2,1,0,7,6,5,4,3,2,1,0);//
lcd8_cmd(lcd_clear); // Limpa o Lcd
lcd8_cmd(lcd_cursor_off); // Desliga o cursor
lcd8_out(1,1,"Relay 1 On"); // Escreveu AQUI
delay_ms(10);
lcd8_out(2,0,"Relay 2 On"); // Escreveu AQUI


Experimente fazer algo mais ou menos assim:

Código: Selecionar todos
Enquanto (1) {
  if (chave1==1) {
    Aciona o relé correspondente
    Escreve no lcd "Relay 1 On", na primeira linha
  } senão {
    Desliga o relé correspondente
    Escreve no lcd "Relay 1 Off", na primeira linha
  }

  if (chave2==1) {
    Aciona o relé correspondente
    Escreve no lcd "Relay 2 On", na segunda linha
  } senão {
    Desliga o relé correspondente
    Escreve no lcd "Relay 2 Off", na segunda linha
  }
}// Enquanto (1)


Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor rosiley » 23 Set 2009 09:52

Fiz as modificações que o amigo falou e consigui fazer funcionar, mais só que quanto mais se mexe mais as coisas vão ficando complicadas, então estou implementando mais alguns itens e peço que verifiquem se há algo de errado, pois não consigo fazer aparecer as outras linhas.:

void main()
{
trisb.rb0 = 1; // Tecla Rb0 configurada como entrada.
trisb.rb1 = 1; // Tecla Rb1 configurada como entrada.
trisb.rb2 = 1; // Tecla Rb2 configurada como entrada.
trisb.rb3 = 1; // Tecla Rb2 configurada como entrada.
trisc.rc0 = 0; // Pino Rc0 configurado como saida (rele)
trisc.rc1 = 0; // Pino Rc1 configurado como saida (rele)
trisc.rc2 = 0; // Pino Rc2 configurado como saida (rele)
trisc.rc3 = 0; // Pino Rc2 configurado como saida (rele)

portc.rc0 = 0; // Rele desligado
portc.rc1 = 0; // Rele desligado
portc.rc2 = 0; // Rele desligado
portc.rc3 = 0; // Rele desligado

trisd = 0; // Configura todos os pinos do PortD como saida
trise = 0; // Configura todos os pinos do PortE como saida

adcon1 = 0x06; // Configura todos os pinos de A/D como I/O de uso geral



lcd8_config(&porte,&portd,2,1,0,7,6,5,4,3,2,1,0);//
lcd8_cmd(lcd_clear); // Limpa o Lcd
lcd8_cmd(lcd_cursor_off); // Desliga o cursor;
lcd8_out(1,1,"teste");
delay_ms(10);
{
if(portb.rb0 == 0){
portc.rc0 = ~portc.rc0;
lcd8_out(2,1,"UV Lamp On");
delay_ms(20);
}
while (portb.rb0 == 1){
lcd8_out(2,1,"UV Lamp Off");
delay_ms(20);
{
if(portb.rb1 == 0){
lcd8_out(3,1,"Yoke-Magnetizer-On");
portc.rc1 = ~portc.rc1;
delay_ms(20);
}
while (portb.rb1 == 1){
lcd8_out(3,1,"Yoke-Magnetizer-Off");
delay_ms(20);
{
if(portb.rb2 == 0){
lcd8_out(4,1,"Earth-In");
portc.rc2 = ~portc.rc1;
delay_ms(20);
}
while (portb.rb2 == 1){
lcd8_out(4,1,"Earth-Out");
delay_ms(20);
{
if(portb.rb3 == 0){
lcd8_out(5,1,"Expanser-On");
portc.rc3 = ~portc.rc1;
delay_ms(20);
}
while (portb.rb3 == 1){
lcd8_out(5,1,"Expanser-Off");
delay_ms(20);

while(1);
}
}
}
}
}
}
}
}
}
rosiley
Nibble
 
Mensagens: 51
Registrado em: 01 Jul 2008 19:38
Localização: rio das ostras

Mensagempor fabim » 23 Set 2009 10:25

{{}{}}}}{{{}{}{}{}}}.!!!!

concorda comigo ?
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Andre_Cruz » 23 Set 2009 14:15

rosiley,

A instrução IF, funciona da seguinte maneira:
IF significa "se" pense assim:
Código: Selecionar todos
IF "SE" (Pino RB0 é igual a 0)  {
//Bloco1
//Se o pino RB0 estiver em nivel lógico baixo ou 0, PIC vai executar as
//instruções que estão aqui !
} else "senão" {
//Bloco2
//Se o pino RB0 estiver em nivel lógico alto ou 1, PIC vai executar as
//instruções que estão aqui !
}


Não sei como o CCS fica a sintaxe, mas pelo que sei o comando IF, é:

Código: Selecionar todos
if (condição) {

} else {

}

Ou

if (condição) {

}



Você não precisa desse, while (portb.rb0 == ... :

Código: Selecionar todos
if(portb.rb0 == 0){
portc.rc0 = ~portc.rc0;
lcd8_out(2,1,"UV Lamp On");
delay_ms(20);
}
[color=red]while (portb.rb0 == 1){
lcd8_out(2,1,"UV Lamp Off");
delay_ms(20);
{


O else faz esse serviço, caso o RB0 esteja em 1 !!!
Lembre-se as "{" "}" determina quais intruções serão executadas, pelo IF.
O While "Enquanto".
Faz assim:

Código: Selecionar todos
While Enquanto (1) { // Faz repetir esse loop sempre
  if (chave1==1) {
    Aciona o relé correspondente
    Escreve no lcd "Relay 1 On", na primeira linha
  } senão {
    Desliga o relé correspondente
    Escreve no lcd "Relay 1 Off", na primeira linha
  }

  if (chave2==1) {
    Aciona o relé correspondente
    Escreve no lcd "Relay 2 On", na segunda linha
  } senão {
    Desliga o relé correspondente
    Escreve no lcd "Relay 2 Off", na segunda linha
  }
  if (chave3==1) {
    Aciona o relé correspondente
    Escreve no lcd "Relay 3 On", na terceira linha se houver
  } senão {
    Desliga o relé correspondente
    Escreve no lcd "Relay 3 Off", na terceira linha se houver
  }
  if (chave4==1) {
    Aciona o relé correspondente
    Escreve no lcd "Relay 4 On", na quarta linha se houver
  } senão {
    Desliga o relé correspondente
    Escreve no lcd "Relay 4 Off", na quarta linha se houver
  }
}// Enquanto (1)


Procure um livro sobre lógica de programação, que você vai tirar muitas dúvidas.

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor rosiley » 23 Set 2009 14:38

Valeu pela ajuda, mais abusando um pouco, qual livro voce recomenda?
rosiley
Nibble
 
Mensagens: 51
Registrado em: 01 Jul 2008 19:38
Localização: rio das ostras

Mensagempor fabim » 23 Set 2009 14:45

rosiley escreveu:Valeu pela ajuda, mais abusando um pouco, qual livro voce recomenda?


Livro bão disgratis ?

digita no google, C ANSI para quem tem pressa.

Vai enterder todos os basicos das sintaxis basicas do C.

http://www.dei.isep.ipp.pt/~abarros/docs/ANSI_C.pdf
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Vonnilmam » 23 Set 2009 16:39

Oi fabim,


Parabens por postar essa apostilha de C, muito boa mesmo e bem pratica...

Boa dica!
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial


Voltar para PIC

Quem está online

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

x