Como pode ser tão difícil algo tão simples...

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Como pode ser tão difícil algo tão simples...

Mensagempor Fabio_Jerena » 20 Mai 2007 11:24

Bom pessoal, aqui estou com uma dúvida que chega ser patética, não consigo entender como pode ser tão difícil fazer algo tão simples funcionar...
Olhem este programa:

#include <16F628A.h>
#use delay(clock=4000000)
#fuses NOWDT, XT, PUT, NOPROTECT, NOBROWNOUT, MCLR, NOLVP, NOCPD

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definição e inicialização dos port's *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#use fast_io(a)
#use fast_io(b)

#byte porta = 0x05
#byte portb = 0x06

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* SAÍDAS *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// As saídas devem ser associadas a nomes para facilitar a programação e
//futuras alterações do hardware.


#bit led1 = portb.1 // acende Led1
#bit led2 = portb.2 // acende Led2

void main()
{
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
port_b_pullups(false);
setup_timer_1(T1_DISABLED);



set_tris_a(0b00000000); // configuração da direção dos pinos de I/O
set_tris_b(0b00000000);

porta=0x00; // limpa porta
portb=0x00; // limpa portb

led1=1;
led2=0;


while(true)
{
led1=!led1;
led2=!led2;
delay_ms(1000);
}
}

E no Proteus versão 6.7 SP3 eu simulo e só um led pisca...
Eu fiz esse programa para testar um circuitinho de decoder do HT6P20B, se esse programa extremamente simples já não quer funcionar que dirá o do decoder que têm uma porção de funções, procedimentos e etc...
Pior que na prática funcionou... Será que eu posso estar comendo bola em alguma coisa, o Proteus têm muitos buggs??? Nunca usa mas quando vou usar dá esses pepinos...
Pior que eu estou desenvolvendo esse programinha para o HT6P20B sem um osciloscópio para me orientar...
Alguém já fez o decoder para esse cara em C, que técnica usou, estou usando o CCP para identificar os bits!!!
Muito obrigado!!!
Fábio Jerena
Fabio_Jerena
Nibble
 
Mensagens: 52
Registrado em: 08 Mar 2007 08:59

Mensagempor proex » 20 Mai 2007 12:21

Cuidado com o Proteus, ele falha e nao simula corretamente muitas coisas, coisa até simples. (mesmo estando corretamente ajustado)

É imprevisivel. Ja tentei simular coisas simples que na pratica funcionavam mas ele nao simulava corretamente nem a pau.

Outras vezes conseguia simular coisa complexas numa boa.

Particularmente nao acho o PRoteus um software totalmente confiavel.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor MOR_AL » 20 Mai 2007 12:46

Olá Fabio_Jerena.

Quando se altera o estado de algum pino de saída, deve-se aguardar que a sua tensão chegue à tensão do valor lógico desejado. Somente depois é que deve-se alterar outro pino da mesma porta.
Sempre haverá uma capacitância equivalente, existente na impedância de carga conectada ao pino.
Quando você escreve em algum pino, o PIC primeiro lê a porta e depois altera. Se a segunda alteração for efetivada antes que a tensão do pino da primeira alteração chegue ao seu valor, que define o estado lógico, a alteração anterior retornará ao valor antigo.

Existem várias maneiras de contornar este problema:
1 - Use uma variável tipo "portb_espelho". Faça todas as alterações que você quizer nesta variável e depois copie-a para "portb".
2 - Escreva no pino desejado. Aguarde algum tempo (talvez 10 a 100 micro segundos) e agora já pode escrever no outro pino da porta.


Espero ter ajudado.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor J.lius » 20 Mai 2007 13:53

Para qual copilador e este programa?

Por que tudo...
set_tris_a(0b00000000); // configuração da direção dos pinos de I/O
set_tris_b(0b00000000);

se na verdade os leds tem que piscar?

#bit led1 = portb.1 // acende Led1
#bit led2 = portb.2 // acende Led2
não deveria ser...
#bit led1 = pin_b1 // acende Led1
#bit led2 = pin_b2 // acende Led2
Anderson MSN: j1lius(arroba)hotmail(ponto)com
"A humildade de quem sabe e a maior prova do saber" OBRIGADO.
J.lius
Nibble
 
Mensagens: 70
Registrado em: 12 Out 2006 17:58
Localização: Jaraguá do Sul - SC

Mensagempor Fabio_Jerena » 24 Mai 2007 19:29

MOR_AL escreveu:Olá Fabio_Jerena.

Quando se altera o estado de algum pino de saída, deve-se aguardar que a sua tensão chegue à tensão do valor lógico desejado. Somente depois é que deve-se alterar outro pino da mesma porta.
Sempre haverá uma capacitância equivalente, existente na impedância de carga conectada ao pino.
Quando você escreve em algum pino, o PIC primeiro lê a porta e depois altera. Se a segunda alteração for efetivada antes que a tensão do pino da primeira alteração chegue ao seu valor, que define o estado lógico, a alteração anterior retornará ao valor antigo.

Existem várias maneiras de contornar este problema:
1 - Use uma variável tipo "portb_espelho". Faça todas as alterações que você quizer nesta variável e depois copie-a para "portb".
2 - Escreva no pino desejado. Aguarde algum tempo (talvez 10 a 100 micro segundos) e agora já pode escrever no outro pino da porta.


Espero ter ajudado.

MOR_AL


Cara, não é que o Proteus simula até isso, brincadeira viu...
Olha só esse trecho de programa:

while(true)
{
led_green = 1;
led_red = 0;
delay_ms(200);
led_green = 0;
led_red = 1;
delay_ms(200);
}

Se vc simula no proteus dá pau nso leds, eles não piscam, um sempre para...
Agora se fizer:

while(true)
{
led_green = 1;
delay_us(5);
led_red = 0;
delay_ms(200);
led_green = 0;
delay_us(5);
led_red = 1;
delay_ms(200);
}

Funciona bonitinho que dá gosto... Agora se essa fosse minha primeira experiência eu tinha rancado todos os meus cabelos!!!

Obrigado pela ajuda, caiu a ficha!!!
Fábio Jerena
Fabio_Jerena
Nibble
 
Mensagens: 52
Registrado em: 08 Mar 2007 08:59

Mensagempor MOR_AL » 26 Mai 2007 15:33

Beleza!
MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ


Voltar para PIC

Quem está online

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

cron

x