CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

Classifique este tópicoPéssimoRuimMedianoBomÓtimo
Autor
Mensagem

HP

Level 6
6444455 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Qua Ago 25, 2010 11:32 am
Problemas com delay no PIC
Olá pessoal, tudo bem?

Não sei mais o que fazer com o PIC12F675.

Acontece o seguinte:

Se eu codifico algo que não utiliza a função delay do ccs, tudo funciona normalmente. Mas se por exemplo eu tento fazer um código para piscar um LED como o código abaixo, nada mais funciona

Exemplo:

Se eu colocar o seguinte código:

Código:

O pino A5 não acende  Crying or Very sad 

Se eu colocar o fusivel PUT desabilitado (NOPUT), o Led fica acesso Laughing  porem não pisca  Crying or Very sad  Crying or Very sad 

Se eu trocar a função delay_ms por um for, para tentar retardar o tempo, acontece a mesma coisa, o Led fica acesso e não pisca  Crying or Very sad  Crying or Very sad  Crying or Very sad 

Já mudei para oscilador externo, já tentei trocar o microcontrolador, já tentei rodar no Proteus e lá funciona, já tentei desabilitar as entradas analógicas, os comparadores, o Timer1, porem, nada resolve este problema.

Será que alguém tem alguma idéia nova?

Grato.

PauloChip

Level 26
26414366 xp

Registrado em:
23/11/2006

Local:
Embu / SP

Equipe:
Proteus

Mensagens:
692

PauloChip

Responder com citações
Mensagem Qua Ago 25, 2010 1:02 pm
Problemas com delay no PIC
Sim... troque a linguagem de programação  Wink 

Brincadeira à parte, você precisa descobrir o que o CCS está fazendo de errado. 
Pois é... muita gente reclama que o CCS tem alguns erros... mas claro que o erro pode estar em seu programa, infelizmente eu não programo em C.

Uma alternativa é achar um programa exemplo que possua esta função... e funcione pra comparar.

Sorry !

_________________
PauloChip
Equipe Proteus
"Nenhuma certeza absoluta é mais inteligente do que uma simples dúvida (PC)."

HP

Level 6
6444455 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Qua Ago 25, 2010 1:11 pm
Problemas com delay no PIC
Grande Paulo, e ai tudo bem?

Pois é cara, esqueci de falar, eu já fiz isso também  Laughing  Laughing 

Inclusive, o código que coloquei aqui é o mesmo que encontrei na net. Rodando no proteus funciona que é uma beleza.

Não sei se seria possível, mas já to até achando que é problema com o gravador...

Abrs

PauloChip

Level 26
26414366 xp

Registrado em:
23/11/2006

Local:
Embu / SP

Equipe:
Proteus

Mensagens:
692

PauloChip

Responder com citações
Mensagem Qua Ago 25, 2010 1:41 pm
Problemas com delay no PIC
Ué ?

Então grave o PIC desprotegido e faça uma verificação... mas qualquer programa descente verifica a gravação antes de programar os fusíveis !

Perguntinha besta... este pino está configurado para saída ?

_________________
PauloChip
Equipe Proteus
"Nenhuma certeza absoluta é mais inteligente do que uma simples dúvida (PC)."

HP

Level 6
6444455 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Qua Ago 25, 2010 2:45 pm
Problemas com delay no PIC
Nada, continua sem funcionar.

Sim o pino esta como saída, no Proteus funciona.

E agora mais uma novidade, o Timer0 também não funciona. Tentei fazer uma simulação com o código abaixo e o mesmo não faz nada.

Código:


Vou tentar com o 16F84 pra ver se acontece o mesmo erro.

Abrs

Zork

Level 2
2697851 xp

Registrado em:
07/04/2010

Local:
Itajuba / MG



Mensagens:
45

Zork

Responder com citações
Mensagem Qui Ago 26, 2010 1:55 pm
Problemas com delay no PIC
HP Escreveu:
Olá pessoal, tudo bem? Não sei mais o que fazer com o PIC12F675. Acontece o seguinte: Se eu codifico algo que não utiliza a função delay do ccs, tudo funciona normalmente. Mas se por exemplo eu tento fazer um código para piscar um LED como o código abaixo, nada mais funciona Exemplo: Se eu colocar o seguinte código: Código: O pino A5 não acende Crying or Very sad Se eu colocar o fusivel PUT desabilitado (NOPUT), o Led fica acesso Laughing porem não pisca Crying or Very sad Crying or Very sad Se eu trocar a função delay_ms por um for, para tentar retardar o tempo, acontece a mesma coisa, o Led fica acesso e não pisca Crying or Very sad Crying or Very sad Crying or Very sad Já mudei para oscilador externo, já tentei trocar o microcontrolador, já tentei rodar no Proteus e lá funciona, já tentei desabilitar as entradas analógicas, os comparadores, o Timer1, porem, nada resolve este problema. Será que alguém tem alguma idéia nova? Grato.
Simule no mplab, veja passo a passo o que ocorre com os registradores em cada instrução executada, e se está certo, como o esperado, já que é indispensável o domínio do assembly para se programar em C para microcontrolador e você sabe que tipo de instruções o compilador gera dado tal código em C. Dando uma rápida olhada no seu código, dá pra ver o uso do CCS com suas funções prontas, não aprovo compiladores como o CCS e os Mikro*, justamente por causa disso, já que o usuário aparentemente "esquece" do hardware, fora o fato de que todas as funções prontas poderiam ser mais simples e otimizadas para uma aplicação específica, tornando um programa para o PIC desnecessariamente grande, ainda mais um pic12 que tem pouquíssima FLASH. A começar pela variável conta, ela é int, uma variável que é 16 bits, o pic tem registradores de 8 bits, logo se o compilador não perceber esse erro vai ser utilizado o dobro de registradores e mais que o dobro de instruções, já que faltam acumuladores no PIC, sendo que na única vez que ela é lida no programa, é esperado um valor de 8 bits, isso poderia ser feito com uma variável de 8 bits, é um desperdício desnecessário de recursos, e erro em programação em C para microcontrolador. Além disso, a variável não foi inicializada, isto quer dizer que com qualquer valor que ela inicialize, de -32767 a 32768 o programa funcionará de forma igual? Isso está errado, inicialize a variável antes de usá-la. No primeiro caso, o recomendável é se usar o tempo de delay 250 como uma constante, já que é uma constante. Espero ter ajudado,

_________________
--

Arao H. F.
Desenvolvimento de projetos com AVR, 8051 e Lógica programável
Blog: http://zorktronics.blogspot.com
Kit de desenvolvimento: http://zorktronics.com/kit.html

laerciovp

Level 3
3265887 xp

Registrado em:
26/06/2006

Local:
Cascavel / PR

Equipe:
LVP Labs

Mensagens:
52

laerciovp

Responder com citações
Mensagem Qui Ago 26, 2010 2:03 pm
Problemas com delay no PIC
HP
Tenta mudar a saída para outro pino, pode ser que esta saída esteja queimada, já passei por isso!

Laércio
LVP Labs

HP

Level 6
6444455 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Qui Ago 26, 2010 9:22 pm
Problemas com delay no PIC
Galera,

Obrigado pela ajuda de todos.

Mas agora escuta essa. O meu problema está todo na fonte de alimentação.

O ruído gerado pela fonte está interferindo no sistema em geral.

Como eu descobri isso? Troquei a fonte de alimentação por uma bateria, e ai tudo funcionou.

Procurando alguma coisa na internet, eu fiz algumas tentativas do tipo:

1 - Colocar um resistor de 10K em série com o pino MCLR do PIC.
2 - Colocar um capacitor de 100nF na alimentação do PIC
3 - Aterrar a carcaça do cristal
4 - Baixar a frequência do oscilador

Resolveu um pouco, o Led agora pisca mas sem sincronismo algum.

Como eu vou ter que colocar este circuito dentro de uma fábrica, onde temos motores, transformadores, milhares de solenoides, eu estava pensando em colocar o circuito dentro de uma caixa metálica. E ai fica minha pergunta, será que vai resolver? Alguém tem mais alguma idéia do que fazer para eliminar os ruídos?

Grato.

jeff_pimenta

Level 11
11674149 xp

Registrado em:
04/11/2008

Local:
Ubajara-Sobral / CE



Mensagens:
272

jeff_pimenta

Responder com citações
Mensagem Qui Ago 26, 2010 9:46 pm
Problemas com delay no PIC
Olá,

Pouco tempo atrás passei pelo mesmo problema que você, estava usando motores que geravam ondas eletromagnéticas que interferiam no clock do processador (acontecia o mesmo que está acontecendo com você, as interrupções e delays eram executados aleatoriamente).

No caso do ruído externo a caixa metálica resolve (procure por gaiola de Faraday), até usando uma "caixa" de tela metálica, porém tem que ser bem fina para que interferências de frenquências mais altas não passem.

No caso da interferência gerada pelos próprios circuitos a solução é usar capacitores de vários valores, pois, como me ensinaram, cada um vai filtrar uma certa faixa de frequência.

Aliás, uma curiosidade que notei e queria saber se minha "teoria" está correta:

Certo dia "descrimpei" um daqueles cabos flat de PC, notei que tinha, no mínimo, um cabinho negativo para cada positivo (ou sinal). Não tenho 100% de certeza, mas acho que é porque o campo elétrico que sai do positivo é em mesma quantidade que entra no negativo (no caso, estou falando como se estivesse representado em um papel)

Explicando melhor: se eu tenho duas cargas, uma positiva com carregado com carga +Q e uma negativa com carga -Q. O campo que sai do Q é em mesma quantidade o que entra no -Q. Assim, sem campo elétrico "disponível" no meio, não se pode gerar DDP pela variação do fluxo. (lei de Lenz).

Abraços.

HP

Level 6
6444455 xp

Registrado em:
09/08/2006

Local:
Curitiba / PR

Equipe:
Guaxinim Furioso

Mensagens:
144

HP

Responder com citações
Mensagem Qui Ago 26, 2010 10:47 pm
Problemas com delay no PIC
A respeito da caixa, amanhã vou providenciar, testar e informar os resultados.

A respeito do cabo não consegui entender muito bem sua dedução hehe.

E aproveitando o tópico, gostaria de deixar claro que os códigos que eu postei aqui foram feitos meramente para testar este funcionamento básico do CI.

Até porque não tem cabimento realizar um sistema para ficar piscando um LED dentro de uma empresa  Confused  Confused  Confused 

Como o Zork falou:
Comentário:
Já que é indispensável o domínio do assembly para se programar em C
Eu acrescento ser fundamental o conhecimento do assembly para se programar em C. Já tive casos de compilar o programa em C, não funcionar, fui dar uma olhada no assembly e tava gerando errado Rolling Eyes Só falei tudo isso pra não deixar tópicos sem resposta Cool Obrigado a todos, amanhã posto os resultados com a caixa metálica.
3
taniasilva

Level 0
0 xp

Registrado em:
03/08/2015





Mensagens:
1
3
taniasilva

Responder com citações
Mensagem Qui Out 29, 2015 4:29 pm
Problemas com delay no PIC
Pessoal,

Alguém tem ou sabe de algum exemplo de código pra PIC em C pra controlar pisca pisca de led sem utilizar delay?? 
Se tiver, me ajudaria muito! Obrigada
3
hukudam

Level 0
83014 xp

Registrado em:
20/07/2012

Local:
Cubatão / SP



Mensagens:
2
3
hukudam

Responder com citações
Mensagem Ter Mar 27, 2018 9:40 am
Problemas com delay no PIC
Ae pessoal, sou novo na programação em PIC (comecei essa semana), mas estou fazendo testes de acordo com esse link: //https://www.youtube.com/watch?v=APY-9DldEWQ
Espero que ajude em algo.

#include<16F648A.h>
#use delay(clock=4M) //O relógio externo pode ser diferente ao usar recursos de PLL de determinados dispositivos. Se o Xtal externo for 10mhz e um aumento de 4x for alcançado por um dispositivo PLL, então o código #use delay (clock = 40000000) PICs são projetados para completar quase todas as instruções em 4 clocks (goto leva 8 clocks) então se você estiver rodando em um relógio interno de 40000000, em seguida, 10 milhões de instruções absorverão um segundo de tempo.
#fuses XT

void main(){
   set_tris_b(0x00); //Inicializando as portas, todos os pinos das portas na execução destas linhas tomarão o valor de zero ou desligado. 
   int8 x; //declaração de um contador
   int8 cont; //valor do pino
   
   while(True){
      cont=1; //valor inicial
      
      for(x=1;x<=8;x++){ //acende lampada em 8x tras para frente
         output_b(cont); //acende o led
         delay_ms(50); //tempo de espera
         cont = cont*2; //A programação trabalha em decimais: 1 2 4 8 16 32 64 128. Se eu colocar cont=cont*2+1 o led acendera aleatoreamente
      }
      cont=128; //valor final
      for(x=1;x<=8;x++){ //acende lampada em 8x frente para trás
         output_b(cont); //acende o led
         delay_ms(50); //tempo de espera
         cont = cont/2; //A programação trabalha em decimais: 128 64 32 16 8 4 2 1
      }
   }
}
Mostrar mensagens desde a última:




Ir para:  
Todos os horários são GMT - 3 HorasVocê não tem permissão para escrever novas mensagens
v não tem permissão para responder às mensagens
Você não tem permissão para editar suas mensagens
Você não tem permissão para deletar suas mensagens
Você não tem permissão para classificar tópicos
Você não tem permissão para classificar mensagens
Você não tem permissão para votar em enquetes
Anexar downloads : Proibido
Fazer Download de Arquivos: Permitido
Powered by phpBB © 2001 phpBB Group