Ir ao conteúdo
  • Cadastre-se

Malditas Interferências [ LCD/PIC]


rodrigocirilo

Posts recomendados

@Projetos_afg 

 

Bom, quanto a levar o osciloscópio no local, vai ficar um pouco difícil mesmo....

 

Em relação a PCB, eu fiz em casa pelo método fotográfico, usei conector DB15 para o LCD e outro para o teclado. Como é só um protótipo não mandei fazer pela indústria não, mas quando tudo estiver certo ai mandarei fazer.... não tem nenhum "canto" em 90º.

 

Não consegui upar a imagem, pois o imageshack que me cobrar hehehe

 

De qualquer forma vou testar hj com a biblioteca antiga que não dava pau.. e ver o que acontece...

Link para o comentário
Compartilhar em outros sites

@Projetos_afg,

 

Hehehe eles são bem baratos, e o melhor é que voce pode ir usando toda a familia com a mesma pinagem, até o Atmega328 .

 

Com 4K dá para voce fazer chover com esses bichinhos. O que eu fiz eu chamei de CO-PROCESSADOR DE I/O , pois ficou responsável por todas as funções com o usuário. 

 

Ah, me lembrei que eu fiz uns mimos legais também : tem um modo onde mostro caracteres BIG, usando duas linhas de tamanho. Tem o modo de mostrar barras horizontais nas linhas, sendo que são 6 barras ( acho ) para cada espaço horizontal do caracteres, e a linha pode iniciar em qualquer campo. Eu passo os limites a serem mostrados, e quantos caracteres quero  usar de espaço, e o display já faz o cálculo completo, inclusive da escala.

 

Ficou show mexer no rotary encoder e ver as barras aumentarem ou diminuirem.

 

Tem um modo de alerta, onde o display fica piscando o backlite para chamar a atenção, e aciona o buzzer junto.

 

O Buzzer, tem o modo BEEP, e os modos SIRENE .

 

Dá prá ver que fiquei um mês fazendo essa belezinha, né ???

 

Paulo

Link para o comentário
Compartilhar em outros sites

Affe baria!

Vai tirar água da pedra, que nem fiz num ultimo projeto, implementando um pequeno sistema operacional em um 8051 hahahaha!


Esses Atmega da vida são demais... pelo preço que eles são, quase sempre sugiro eles em projetos com micros pequenos...


Se bem que pelo preço ja da pra comprar micros da ARM (inclusive DIP08) e jogar o consumo ainda mais pra baixo :)

 

Link para o comentário
Compartilhar em outros sites

Gente uma pergunta.... por exemplo uma tela do menu principal (stand-by) devo deixar ela dentro do laço while pra ficar dando o print a cada ciclo, ou mando o comando uma só vez e ele permanece com a mesma tela até o programa chamar outro menu e atualizar a tela??

 

pergunto pois estava usando o modo citado primeiro (dando o print a cada ciclo do uC) e agora testei dando o comando uma só vez e a ela permanece  até mudar...

 

qual método é melhor??

Link para o comentário
Compartilhar em outros sites

@aphawk

Já sou bem familiarizado com a arquitetura AVR (prefiro ela em vez do PIC), mas quando fui comprar os microcontroladores achei que esse pic16F1828 estava um preço bom, e tinha tudo o que eu precisava para o projeto, até esqueci de procurar os AVR, e vi que podia ter comprado bem mais barato... vivendo e aprendendo.

 

@rodrigocirilo

É bom atualizar somente quando necessário, assim você não disperdiça tempo em reescrever a mesma informação, também acredito que assim diminui a chance do display sofrer interferências, mas não elimina o problema.

 

Tem como você tirar uma foto da placa para avaliarmos a construção dela?

Link para o comentário
Compartilhar em outros sites

@Projetos_afg  ok vou manter assim, mesmo que não resolva de vez, mas se ajudar já é um começo...

 

Hoje a noite vou mexer nelas, e como eu disse, vou testar dessa nova maneira, dependendo de como for eu tiro as fotos...

 

Agora consegui upar a imagem, o LCD e teclado estão conectados na placa via DB15. no layout os terras não estão interligados mas fisicamente ja interliguei....

 

Alguns componentes são SMD...

 

55kvg3.jpg

Link para o comentário
Compartilhar em outros sites

IHM em geral com LCD ou não, estratégias que tenho por muito comum são aquelas em que telas de apresentação ou mesmo menus que não são atualizados dinamicamente, sejam escritos somente uma unica vez e reescrito em caso de retorno de algum outro submenu...

Exemplo genérico:

void main (void){	//chama funcao para inicialização do hw do uC	IniciaSistema();	//Chama funcao de inicio do LCD:	LCD_Inicia();		//Tela de boas vindas:	LCD_puts("Boas vindas");		//Algum delay:	LCD_vDelay(1000);			//limpeza de tela:	LCD_LimpaTela();			//Agora exibe o menu:	LCD_ExibeMenuPrincipal();			while(1)	{			//Aqui voce so atualiza no LCD tudo que for dinamico		//por exemplo variaveis mostradas no LCD		// O meno fica ali...				//ai ocorre algum evento:		if(Evento == true)		{			//antes de chamar o submenu voce apaga o principal:			LCD_LimpaTela();						//E agora chama o seu submenu:			SubMenu(&arg);		}	}}//Aqui é a funcao do teu submenu:void SubMenu(void *parg){	(void)*parg;		//Processa seu menu...		//exibe o menu e suas variaveis..		while(!Evento)	{	}		//Depois que processou tudo, antes de sair	//da funcao, reescreva o menu principal:	LCD_ExibeMenuPrincipal();	}

Essa é uma forma exemplo e simples de como fazer a IHM do seu LCD se comportar, existem outras mais complexas que requerem melhores mecanismos de sincronismo...enfim.

Se quiser postar o código pra gente ver, acho legal .

EDIT:

@rodrigocirilo,

Realmente o barramento do LCD em relação ao micro está bem grande, e com algumas trilhas fazendo malabarismos para chegar ao conector, creio que isso pode favorecer o acomplamento entre sinais do bus do LCD causando o famigerado "crosstalk" e prejudicando a comunicação.

Enfim, agora nao há mais muito o que fazer mas em projetos futuros, sugiro que tente manter o caminho curto  das trilhas entre o LCD e o microcontrolador, isso deve melhorar e muito a imunidade a "crosstalk"
Outra coisa que ja foi mais que citada é a possível adoção de modulos LCD de menos fios (SPI ou I2C).

Abs!


Abs.

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Layout não ajuda em nada... trilhas muito finas, terras e alimentação misturados entre sinal e potência.... próximo layout tem de observar isso de qualquer maneira ou vai sempre estar sujeito a problemas desse tipo.

 

Paulo


Affe baria!

Vai tirar água da pedra, que nem fiz num ultimo projeto, implementando um pequeno sistema operacional em um 8051 hahahaha!


Esses Atmega da vida são demais... pelo preço que eles são, quase sempre sugiro eles em projetos com micros pequenos...


Se bem que pelo preço ja da pra comprar micros da ARM (inclusive DIP08) e jogar o consumo ainda mais pra baixo :)

 

 

Hehehe foi divertido fazer, e sabe o mais interessante ? tenho aqui 500 plaquinhas para montar, não compensava fazer 100 peças, saia quase o mesmo preço ! Ah, e tenho mais de 100 displays lcds também, ente 16x2 , 20x4 e 24x4 . várias cores também .

 

Usar ARM para quê ??? kkkk a 1 Mhz faço tudo o que preciso... imagina 20 Mhz... E quanto ao consumo, já brinquei uma vez com os modos de economia, criei um escalador via timer2 , e a cada 1 segundo o escalador fazia as funções que eu preciso.

 

Vai demorar muito prá me ver usar um ARM....

 

Paulo

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Só isso não basta. Quando estamos em ambiente de uso industrial ( que é o seu caso nessa máquina ) , temos de tomar muito, muito cuidado com os layouts.

 

As regras são claras :

 

1 - Fazer um loop de terra  ANEL DE TERRA envolvendo toda a placa na parte periférica, para ajudar a blindar EMI.

2 - Trilhas sempre o mais grossas possíveis. Afinal o custo da placa vai ser o mesmo....

3 - Separação TOTAL entre os sistemas de alta corrente ( Leds, Relés, etc ) e os sistemas de sinal ( cpu, CI's auxiliares, etc ) digo , GND e VCC !

4 - Se tiver de enviar sinais para outra placa, usar o processo mais imune , mesmo que seja de baixa velocidade. I2C, SPI, serial, ....

5 - Sempre que possível, tentar deixar em uma das façes o máximo de plano de terra ( GND )

 

Dá mais trabalho ? Sim, dá, mas voce vai dormir tranquilo...

 

Paulo

 

EDIT - Nossa, acabei de ver que passei de 2000 posts.... tá doido.... !

Link para o comentário
Compartilhar em outros sites

@aphawk, com certeza Paulo, até hj não tinha projetado para ambiente industrial.....só aplicações mais simples...

 

mas já está anotado todas essas dicas, para futuras placas....

 

Ps: você costuma usar jumper´s, pois há situações que não tem por onde passar a trilha hehe... influencia???

 

você atingiu 2000 posts creio que foi nesse tópico, parabéns, tenho certeza que 100% desses posts foram para ajudar seres como eu hehehe 

Link para o comentário
Compartilhar em outros sites

@aphawk e @rodrigocirilo,

 

Seguem minhas considerações sobres layouts e as regrinhas:

1 - Concordo e discordo, nem sempre o loop de terra vai te imunizar, ele pode inclusive se usado a torto e a direto prejudicar mais gerando um outro loop, os de corrente  causados pelo caminho que ela vai percorrer do ponto em que inicia o loop até o ponto neutro de menor impedância da placa. Loop de terra eu acho particularmente útil para blindagem de circuitos em que as largura de banda são baixas (até 1KHz ou menos). Vale lembrar que loop de terra usado a rodo prejudica a separação entre os retorns de sinais e retornos de potência (prefiro usar o termo retorno a gnd, essencialmente considerem a mesma coisa).


2 - Concordo em genero número e grau, so acrescentaria o cuidado extra de caso a ilha da trilha grossa conter cantos vivos, com 90 graus, utilize chanfros ou fillets (cantos circulares) eles são mais pobrem em acoplamento aéreo. Outra coisa, existem trilhas grossas que vão comumente ligar a locais com dimensao menores, como ilhas e terminais de componentes, a sugestão aqui é ao reduzir as medidas da trilha para ligar ao terminal é que ela seja o mais simetrica possivel, ou seja se reduziu de um lado reduza do outro na mesma forma e proporção, isso causa um fenomedo conhecido por mudança linear de impedância da trilha onde qualquer deformação do sinal é compensado pela simetria da trilha ate o terminal do componente.

 

3 - Existem duas formas de separação a saber: A física, onde existe isolação galvânica, ou seja não estão eletricamente conectados nem a fonte nem o terminal de retorno de dois sistemas elétricos. A outra separação é feita no layout quando temos diversos sinais de mesma intensidade de corrente e tensão mas com largura de bandas e aspectos diferentes (sinais analogicos misturados as inais digitais por exemplo) aqui  a dica é separar fisicamente esses sistemas, fazer seus respectivos planos de retorno e ao final do layout unir todos eles no ponto de menor impedância do circuito, o retorno que vem da fonte de alimentação, com isso minimiza - se efeitos de pumpinkg da fonte, acoplamento de sinais, e loops de corrente indesejaveis.


4 - Concordo, sem mais... par metálico trançado ajuda a cancelar entre si campos gerados pelas variações de nivel dos sinais de comunicação, isso empobrece qualquer acoplamento e minimiza o "crosstalk".


5 - A unica exceção onde essa regra se aplica é quando temos sinais de Radio frequencia "passeando" pela placa, o ideal é que tenha um layer que seja APENAS retorno, usando a técnica de separação exemplificada no item 3.

 

No mais fazer layout respeitando algumas dessas técnicas é ,muito mais divertido, e seguro :)

Abs 

Link para o comentário
Compartilhar em outros sites

@aphawk e @rodrigocirilo,

 

Seguem minhas considerações sobres layouts e as regrinhas:

1 - Concordo e discordo, nem sempre o loop de terra vai te imunizar, ele pode inclusive se usado a torto e a direto prejudicar mais gerando um outro loop, os de corrente  causados pelo caminho que ela vai percorrer do ponto em que inicia o loop até o ponto neutro de menor impedância da placa. Loop de terra eu acho particularmente útil para blindagem de circuitos em que as largura de banda são baixas (até 1KHz ou menos). Vale lembrar que loop de terra usado a rodo prejudica a separação entre os retorns de sinais e retornos de potência (prefiro usar o termo retorno a gnd, essencialmente considerem a mesma coisa).

 

 

Acho que me expressei mal ... embora eu dei o nome de loop de terra, físicamente é um Anel de terra, e este anel é ligado ao GND em apenas um único ponto. Portanto, não circula corrente nesse loop. É apenas uma blindagem. Já corrigí o post.

 

E concordo que loops de terra ( por definição tem de circular corrente nele )  devem ser evitados sempre, principalmente em Áudio, pois eles são sempre responsáveis por zumbidos e roncos que nunca somem... Já tive brigas enormes com racks de som que aterram todos os gabinetes e nunca somem os roncos de 60 hertz neles....

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk

2000 posts, mas é claro! Eu faço 1 post e você faz 5! Por acaso você fica o dia inteiro no fórum !?

 

@rodrigocirilo

Hehe, você encostou em um dos problemas mais chatos da eletrônica, interferência eletromagnética. Mas tomando os cuidados um a um em alguma hora resolve!

Link para o comentário
Compartilhar em outros sites

@Projetos_afg,

É a vantagem de estar aposentado, meu amigo !!!

Posso fazer o que quero, dormir tarde, dormir cedo, ir pescar, de vez em quando aparece algum negócio para se ganhar um dinheirinho adicional ( que eu gasto com o maior prazer !!!! ), enfim, sou eu, retomando a vida do jeito que sempre deveria ser, pensando apenas em diversão !

Embora muita gente possa dizer o contrário, nada como ser totalmente independente, sem esposa, sem compromissos, aproveitar o dia a dia como ele se apresenta, sem ter de dar satisfação para ninguém !!!

Paulo

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk, @Projetos_afg e @

 

Bom pessoal seguinte, ontem quando meu sócio me ligou dizendo que havia ocorrido uma interferência na tela 20x4 que como eu disse raramente imprimia lixo, eu pensei que estivesse ocorrendo varias vezes, entre curtos periodos, mas quando fui lá e conversamos direito fiquei sabendo que havia acontecido só uma vez. Mesmo assim troquei o pic com a biblioteca antiga e mantive o clock em 4Mhz, fizemos a maquina trabalhar varias vezes e não aconteceu ..também deixamos ela ligada a noite toda e hj de manhã passei lá e estava normal....portanto creio que essa parte deve estar resolvida....

 

As dicas de vocês foram muito, mas muito importante mesmo para eu conseguir resolver tal problema....

 

Agora aproveitando o mesmo topico sobre as Interferências, não sei se isso está ocorrendo por causa delas...mas vou explicar...

 

Ambas CLP´s tem entradas AD ativas para ler sensores, a de temperatura tem 2 LM35 lendo temperaturas em dois ponto, até ai ok, faço uns calculos para tirar uma media e está funcionando MUITO bem.

 

A outra tem uma entrada AD ativa que lê um sensor de pressão, porém não encontramos um sensor com o range de pressão que queriamos com saida de 0~5v ou 0~10v , encontramos somente uma com saida 4~20mah.....Usei o macete passado pelo colega Paulo de usar um resistor de 200ohms e em cima dele ler a tensão...bem funciona, mas no display a pressão fica flutuando, indo de valores baixos para altos muuito rápido, e neste caso eu não posso tirar media pois para tirar a media leva um tempo e eu não tenho esse tempo pois uma valvula vai estar aberta enchendo ou esvaziando um tanque!! tipo: se a pressão esta mais baixa do que eu setei ela aciona a valvula para encher a vai para outra função ficar comparando a setada com a efetiva, mas se eu parar para tirar media a pressão pode ultrapassar antes das medias ficarem "prontas" entendem...

 

Será que tem como eu por algum capacitor para minimizar esta flutuação da leitura??

 

 

Bom pessoal mais uma vez obrigado......

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Sim, pode colocar um capacitor alto, pois a corrente é alta....

 

Começe com um de 100 uF em paralelo com o resistor e veja se ajuda, mas deve estar tendo algum tipo de ruído nessa saida de corrente....

 

Paulo

Eletrolítico??? estranho que ontem colocamos um cabinho blindado para termopar, onde o gnd era a propria malha e piorou... Vou testar...

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Termopar é completamente outra história !!!  Depende do tipo do seu termopar, e da quantidade de terminais que ele tem. Sempre tem de usar circuitos especiais para evitar problema.

 

Pode colocar esse capacitor eletrolítico mesmo, vai ajudar a não ter variações rápidas. A impedância de saída do conversor para corrente é bem baixa.

 

Agora, não entendí voce não poder tirar a média.... é só voce fazer, em vez de uma, 32 leituras seguidas, e ir totalizando a soma delas. depois, divide isso por 32. Pronto, já tem uma média. Mas a maneira correta seria esta aqui : 

 

voce tem o período da frequência de 60 Hertz. O correto seria voce fazer 32 leituras espaçadas dentro desse período exato. Assim, existe uma melhor compensaão dos ruídos induzidos de 60 Hz, pois voce vai ter 16 medidas no semiciclo positivo ( que deveria alterar para cima ) , e mais 16 medidas no semiciclo negativo ( que deveria alterar para baixo ). Na média, elas vão se cancelar, entendeu ? é só ir somando essas 32 medidas e fazer a divisão por 32. 

 

Isso só vai demorar cerca 19 milisegundos, acho que não vai atrapalhar teu processo kkkk

 

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk, então até onde eu sei no CCS, apos setar o canal AD espera-se 20uS, depois tira-se a leitura e tem que esperar mais 10ms, então essas 32 leituras seguidas totalizariam uns 320ms só para tirar as leituras.... no meu processo não posso esperar tudo isso para comparar pois o ar vai estar entrando ou saindo do no tanque...

Link para o comentário
Compartilhar em outros sites

 

 

então até onde eu sei no CCS, apos setar o canal AD espera-se 20uS, depois tira-se a leitura e tem que esperar mais 10ms, então essas 32 leituras seguidas totalizariam uns 320ms só para tirar as leituras.... no meu processo não posso esperar tudo isso para comparar pois o ar vai estar entrando ou saindo do no tanque...

 

@rodrigocirilo:

O conversor A/D dos PIC se bem me lembro, tem taxas de conversão seguras de 200ksps, não sei de onde você tirou os dados de espera de 10ms, pela taxa de amostragem que te passei uma conversão leva 5uS... o tempo problemático de 20uS que você se referiu é uma segurança para garantir total amostragem do sinal a ser medido no circuito de "sample & hold" do conversor A/D, se esse tempo for respeitado (e olha que 20uS é muito ainda, pelo modelo elétrico do circuito A/D da microchip o circuito de amostragem pode trabalhar tranquilamente com sinais variando a 1.67MHz com bom desempenho). enfim, para cada conversao seriam 20u de amostragem + 5u de conversao = totalizando 25uS (se voce configurar corretamente a taxa de amostragem). Agora usando o modo baseado no clock RC interno o tempo de conversao sobe um pouco mas nao muito, fica em 6,25uS... então no pior caso teremos 26,5uS

São 32 amostras,  ou seja 32 * 26,5us = 848uS, não dá nem 1ms! 

Como a média é uma potência de 2 da pra fazer a divisao de forma ultra rápida, veja esse exemplo:

 

/************************************************************	funcao: ADC_Leitura	desc: Efetua a leitura de 32 amostras vindas do canal		  A/D e calcula a média entre esses valores	parametros: N/A    retorna   : Acumulador*************************************************************/uint16_t ADC_Leitura (void){	uint8_t   I = 0;	uint16_t  Acumulador = 0;		for(I = 0; I < 32; I++)	{   		//delay para estabilizacao do circuito de amostragem:		delay_us(20);			//soma amostras lidas pelo A/D		Acumulador += Read_Adc();	}	//Acumulou, entao divida por 32	// realizando shift pra direita:	Acumulador >>= 5; //5 shifts pois 2 ^ 5 = 32		return(Acumulador);		}

Duvidas pode perguntar.

Abs!

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo e @

 

Tem de fazer uma conversão A/D a cada 520 nanosegundos, ou se programar um timer para isso ser mais preciso, a cada 520,83 nanosegundos . Isso se for usar o que eu expliquei acima, que é um procedimento que eu sempre usava quando trabalhava com isso.

 

O ideal é fazer isso via interrupt do timer, mas só habilitar elas conforme o programa precisar fazer a media. Quando terminar as 32 medidas, seta um flag, que o programa principal vai ficar esperando, e depois disso ele desabilita as interrupts. Um pouco mais complicado, mas bem preciso.

 

Se ficar num laço do programa principal, é chato pacas ficar calculando timing envolvido na conversão e acumulação dos resultados para ser preciso.

 

Paulo

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!