Ajuda em informação no display

Enviado:
21 Set 2009 10:21
por rosiley
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?

Enviado:
21 Set 2009 11:23
por Djalma Toledo Rodrigues
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 .
.

Enviado:
21 Set 2009 21:23
por Andre_Cruz
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

Enviado:
23 Set 2009 09:52
por rosiley
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);
}
}
}
}
}
}
}
}
}

Enviado:
23 Set 2009 10:25
por fabim
{{}{}}}}{{{}{}{}{}}}.!!!!
concorda comigo ?

Enviado:
23 Set 2009 14:15
por Andre_Cruz
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é

Enviado:
23 Set 2009 14:38
por rosiley
Valeu pela ajuda, mais abusando um pouco, qual livro voce recomenda?

Enviado:
23 Set 2009 14:45
por fabim
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

Enviado:
23 Set 2009 16:39
por Vonnilmam
Oi fabim,
Parabens por postar essa apostilha de C, muito boa mesmo e bem pratica...
Boa dica!