segunda-feira, 12 de novembro de 2012

3ª aula de MCU: Usando um Encoder

Depois de muito tempo em SLEEP, meu blog sofreu um Wake-up event e voltou a funcionar. Não entendeu nada né? É coisa de microcontrolador (: Mas agora, venho publicar uma aula muito esperada por alguns: como usar encoders? Já antecipado na última aula, ajudarei vocês a construirem o DERI (Decoficador de Encoder rotatório incremental). Segue uma imagem do DERI:


Diferente das outras postagens, não irei me ater ao esquema, pois o mesmo já está em um post anterior. Então vamos ao que interessa:

A teoria por trás de tudo:

Se vocês leram o post sobre como montar seu encoder vocês lembrarão dessa imagem:






Esse desenho mostra o forma de onda obtida ao se analisar ambas as saídas do Encoder [A (azul) e B (roxa)]. Se você observar, no sentido horário a onda Roxa sobe primeiro que a Azul, e no Antihorário, o oposto. Então, para conseguir definir a direção da rotação, usaremos uma das saídas como gatilho (trigger) e outra para obter a direção (direction).

A teoria no programa e na prática:

Assim que você abrir o programa, que pode ser baixado aqui, você verá que no topo no programa são declarados 4 simbolos: trg (trigger), dirc (direction), esqr (esquerda) e drta (direita). em seguida vem o de praxe: Configura as saídas (TRISIO), desliga os comparadores, desliga o ADC e ativa os resistores de pull-up, economizando espaço na PCI.  
Note que agora as saídas são configuradas com TRISIO e não TRISB, TRISA e etc pois nos PICs da família 12 as portas são denominadas GPIO. Logo as portas são referidas como GPIO.0, GPIO.1 e etc.
O próximo passo é criar um pequeno testador de saídas, onde eu faço o PIC ligar e desligar ambas as saídas (direita e esquerda) 6 vezes.
Depois do teste, entramos em um loop eterno, analisando se o trg é maior que o dirc ou vice-versa, e gera um pulso de duração igual ao do encoder na respectiva saída da direção do movimento.

OBS: Observar-se-a um delay comentado (ignorado pelo programa) pois este seria usado como tolerância do Debouncing (ruído) gerado pela comutação das chaves internas, mas como o ruído foi insuficiente para afetar o programa, o deixei comentado (').

De teste, pode-se ligar um LED em cada saída, mas se for usar a Placa fornecida no post sobre tal, atente que a saída do eixo gera um pulso negativo quando acionado!!! Esse vídeo no meu canal mostra um teste dele.


O programa é simples, e acredito que tenha dado para entender a teoria por trás de tudo. Deixo um desafio: o que seria necessário fazer para se quissémos aumentar ou diminuir o valor do PWM usando um encoder? Quem acerta? :D

Abração galera e espero ter sido útil mais uma vez.

sexta-feira, 9 de novembro de 2012

Apenas resurgindo...

Galera, esse post rápido é so pra dizer que não esqueci de vcs! To preparando o post sobre o encoder, adc, pwm e coisas mais! Só estou meio sem tempo (época de provas) então daqui a um tempo sai mais coisa fresca sobre o curso e alguns diversos ok?
Vlw a todos que seguem e acompanham o blog!

sexta-feira, 14 de setembro de 2012

Preparativos da aula sobre encoders e Confecção de PCIs

E aê galera, tudo em cima? Hoje venho informar que os preparativos para a aula sobre encoders já começaram: já comprei o encoder, já confeccionei a PCI e já comecei a montagem e já escrevi o programa. O encoder é o deste link, e a PCI, neste aqui. A PCI é fornecida em .brd e .sch, ambos do Eagle. A minha confeccionada ficou assim:

Máscara aplicada com logo do Eagle

Trilhas e ilhas
O circuito, quando terminado, possuirá dois modos de funcionamento:
1º modo: saída transcrita. Neste modo, para cada passo no encoder será emitido um pulso em um dos pinos (< ou >), conforme direção e quantidade;
2º modo: saída normal: Neste modo, a saída será direta a do encoder.

Para usar o primeiro modo,ponha o PIC no lugar, conecte o pino + do conector à alimentação, o - ao negativo e os pinos E, > e < serão as saídas dos sinais.
Para usar o segundo, remova o PIC e usando fios, ligue no soquete os pinos 2 e 7 e 3 e 6 e a conexão no conector será igual.


Confecção de PCI pelo método de transferência térmica.

Sei que já postei uma vez aqui um tutorial de como fazer esse processo, mas agora que adquiri mais experiência, resolvi publicar um novo tutorial. Neste tutorial, vamos confeccionar a placa do circuito descrito ai em cima. Ela é simples e de face simples. Vamos aos materiais básicos:

-1 placa de fenolite com 34mm x 44mm;
-2 folhas sulfite A4;
-Fita adesiva;
-Tesoura;
-1 Ferro de passar roupa;
-Acetona e algodão;
-1 Impressora à toner (as à jato de tinta não servem!!!);
-1 balde com água morna;
-1 base de algum material firme e que não queime;
-Pinça ou alicate de bico;
-caneta para PCI;
-Cortador de PCI;
-Palha de aço;
-Uma vasilha com percloreto de ferro já pronto.

Vamos lá:

1º passo: Imprima na folha sulfite o lado dos componentes e a máscara. Para isso, vamos por partes.

Para imprimir o lado dos componentes: abra a placa fornecida acima no Eagle, vá em View, Display/Hide Layers. Aberta a janela, clique em None e então selecione apenas Bottom, Pads e Dimensions. Agora vá em File, Print. Deixe marcado apenas "black" em Options na mesma janela da impressão, nas configurações da sua impressora configure para usar o máximo possível de toner preto (contraste e qualidade) e mande imprimir.

Para imprimir a máscara: Vá novamente em View, Display/Hide Layers. Aberta a janela, clique em None e então selecione apenas Dimension, tplace, tnames e tvalues (opcionais), Reference e tDocu. Agora vá em File, Print. Deixe marcado apenas "black" e "mirror" em Options na mesma janela da impressão, nas configurações da sua impressora configure para usar o máximo possível de toner preto (contraste e qualidade) e mande imprimir. É vital marcar a opção mirror e carregar ao máximo de toner para a máscara!

Tudo impresso, agora vamos a preparação:

2º passo: transferir.
Corte a placa nas devidas dimensões e limpe-a com água e sabão neutro e evite agora tocar no cobre. Corte a impressão do lado dos componentes deixando apenas duas abas laterais, dobre estas e usando a fita adesiva prenda o desenho firmamente e bem ajustado à superfície! Evite que o papel "dance", ou então sairá tudo borrado! A fita adesiva deve ficar apenas por baixo! Nunca deixa ela chegar nos cantos ou parte superior da placa!
Com o desenho já bem preso, ligue o ferro de passar roupa e o ajuste para aquecer a uma temperatura menor que a do ferro de soldar. Se estiver muito frio, o toner não passará muito bem e se aquecer demais o cobre vai se soltar da placa, então começe do mais frio ao mais quente. A temperatura ideal é algo que você só vai descobrir com o tempo. Com o ferro já quente, cooloque a PCI sobre a base escolhida (firme e que não queime com o calor do ferro de passar) e aplique bastante pressão sobre mais ou menos 1 minuto. Depois desse 1º minuto, faça movimentos circulares e ensfregue bem a ponta do ferro de passar roupa em todo o desenho, principalmente nas bordas e bem no meio (áreas que o toner costuma não pegar direito). Cuide para não deixar o pale deslizar nesse processo! Depois de mais ou menos um minuto e meio assim, aplique bastante pressão por mais uns 3 minutos. Você deverá aquecer no mínimo, uns 4 minutos, mas esse tempo varia.
Com a pinça ou alicate, pegue a placa e coloque na água morna e espere esfriar. Com ela já fria, retire a fita adesiva e puxe o papel pelas bordas até sair quase todo o papel. Sob agua corrente, ensfregue o dedo para tirar o resto que ficar: não se preocupe, o toner não vai mais sair!
Com todo o papel já removido, use a caneta para PCIs para arrumar os pontos que falharem. Quando a transferência é pouco como nesta placa, eu prefiro refazer todo o desenho  com a caneta (até porque o meu desenho saiu meio fraco). Assim que o desenho estiver bem arrumado, faça a furação da placa usando o furador ou furadeira para tal fim.

3º passo: Corrosão, limpeza e remoção do toner.
Coloque a placa no percloreto e espere em média uns 20 minutos dependendo da força da solução. Se ver que há pontos falhando, retire a placa, lave em água corrente e corrija com a caneta. Ao terminar, lave bem a placa em água corrente. Usando a palha de aço, remova todo o toner da face cobreada, e depois use acetona para limpar o resto e a cola da fita adesiva que ficou na placa. Se desejar, desoxide o cobre usando borracha. Sim! Borracha de apagar lápis "polem" metais! Com a placa bem limpa vamos a última etapa.

4º Passo:Transferência da máscara e toques finais.
Passe a palha de aço levemente na face dos componentes para remover gordura e sujeiras diversas e deixar a face levemente áspera. Passe bem leve, como se estivesse limpando com um pano. Agora, contra a luz, alinhe a máscara e prenda na PCI (mesma coisa do lado da solda: corte a folha, ajuste e cole). Usando os mesmos métodos de temperatura, processos e tempos da transferência da face de soldagem, transfira a máscara e depois do tempo devido puxe a folha. NÃO PONHA A PLACA NA ÁGUA!!!! Puxe no seco mesmo! Puxe pelas bordas e voilá: eis a máscara bem perfeita. Limpe a placa e se quiser, use uma lima para deixar as bordas e quinas bem suaves e se tiver (se for rico), aplique aqueles vernizes para PCI igual de placas profissionais. Eles são vendidos em sprays normalmente.

DICA: para saber o quando a transferência está boa, veja se na folha está marcado o desenho. Ao por na água, fica mais aparente ainda.


É isso aê pessoal. Qualquer coisa perguntem aí em baixo!
Abração e fiquem na paz.

quarta-feira, 12 de setembro de 2012

Parceria firmada e novo design

Amigos, venho alegremente informar que fechei parceria com o EEWeb, um blog americano de eletrônica. Tem excelentes projetos e simples. Como vocês podem perceber, agora aqui do lado
( ------> ) tem a imagem deles, e se você clicar, será direcionado para a página de ferramentas deles, sendo todas muito úteis! O link da parceria é http://www.eeweb.com/websites/100-electronic-limits-blog-from-hobbyist-to-professionals .

E como vocês perceberam o design mudou, então comentem o que acharam.
Abraço a todos.


E100L is EEWeb partner

segunda-feira, 27 de agosto de 2012

Alguns comentários...

Sobre o curso

Bom pessoal, hoje fui ver os resultados da enquete sobre meu curso de MCU e programação em MB e ví que tem gente gostando, mas também teve gente que não parece estar muito contente sobre o curso! Então peço senhores, que ao votar na enquete, não votem apenas, mas comentem nos posts o que acham que deve melhorar, por que só votar não me ajuda em nada! Preciso saber onde estou errando para poder ajudar vocês! Como eu disse no último post, tem muita coisa vindo, então preciso saber o que há de errado para eu poder ajudar vocês nos próximos posts.
Talvez vocês tenham percebido que não tenho uma frequência definida para postar novas aulas, isso é porque, além de dar trabalho (escrever o código, carregar no 4shared, fazer o circuito e talvez PCB), eu tenho 16 anos ainda! Então minha vida não se resume ao PC e não tenho muito tempo livre pro blog! Mas sempre que vem uma postagem boa na cabeça, corro e coloco pra vocês. Mas leva tempo pra preparar um bom post.

Sobre o regulador de tensão que publiquei.

Se vocês se lembram, comecei nesse blog com esse regulador bem "malfeito":


 Então, depois deste, postei aqui meu próximo regulador, um já melhorado, mas que na versão protótipo tive alguns problemas (XD):


No mesmo post, indiquei este cooler da Akasa® para ser usado no 7805, eu comprei, testei, aprovei e até hoje está em uso (pena que o tacômetro tenha parado de funcionar):



E hoje tenho duas versões finais: a com o cooler é o do post e o com o dissipador passivo da ASUS® é um que montei hoje, sendo que este eu fiz com o melhor qualidade que eu poderia fazer e coloquei um LM35 ao lado do 7805 (embaixo do dissipador) para medir a temperatura do CI.





 
Detalhe do 7805 (à esquerda) e do LM35 (à direita) sob o dissipador.
Ambos funcionam perfeitamente, apenas o ultimo que eu fiz está empenando a placa pois o radiador está fazendo muita força contra ela. Mas fora isso tudo está normal.
Onde consegui esse dissipador ali? Placas-mãe! Placas-mãe queimadas são ótimas fontes de componentes e outros, como suportes de baterias, conectores e dissipadores (:

Encerro esse post por aqui. Qualquer coisa use os comentários abaixo (:
Fiquem na paz!

sexta-feira, 24 de agosto de 2012

Curso de MCU: PWM e variáveis

PWM: Pulse Width Modulation. O que seria isso? O PWM baseia-se na modulação da largura de um pulso. Nesta aula vou ensinar a usar o PWM.

1.O programa
 Vou dispensar explicações mais detalhadas sobre o que é o PWM (pois no google tem muita coisa sobre isso!): vou me ater mais a ensinar vocês a usarem o PWM junto ao PIC. Nesse curso, usaremos o PWM para variar o brilho de um LED, mas o PWM pode ser usado para controlar a velocidade de um motor, brilho de uma lâmpada, controle de ventoinhas (Fans) com suporte à PWM. 
O PWM é gerado no PIC pelo módulo CCP (Capture, Compare and PWM), sendo que no caso do PIC16F876A possua dois módulos, o CCP1 e CCP2.

O MikroBasic possui uma biblioteca específica para o PWM, o que facilita muito o uso deste recurso. Para cada PIC a biblioteca irá mudar: tem PICs com um canal PWM, com dois ou mais (ou nenhum!). Vou explicar o uso para nosso PIC (16F876A), mas qualquer dúvida é so perguntar. O código desta vez fica:


Coloquei este código em imagem para forçar vocês a escreverem o código: acreditem, isto é útil!

ATENÇÃO! EXISTEM DOIS ERROS NO PROGRAMA ACIMA!
Preste atenção: logo após "Program PWM", na linha seguinte escreva "dim pwm, h as byte"!!! E após "main:" escreva "pwm=0"! Sem isso o programa não compilará/funcionará!

A biblioteca se baseia basicamente em 5 códigos:

PWMx_Init(frequência em Hz): x é o número do canal CCP que será usado, no nosso caso, o CCP1. Em PICs com um módulo só, como o 16F628A, não será colocado o número do módulo.
PWMx_Start(): inicializa o módulo. os parênteses  são obrigatórios!!! Errei na imagem!
PWMx_Set_Duty(valor): Altera o valor do PWM. vai de 0 á 255. Para calcular a porcentagem, use a fórmula: (porcentagem*255)/100
PWMx_Stop: para o módulo.

Analisando o código:

-na primeira linah temos a declaração do nome do programa;

-A seguir vem algo novo: o sub procedure. Usamos esse comando para criar um sub procedimento, ou seja, uma sequência de comandos que será repitida no programa. Usando esse cmando, economizamos memória e organizamos/otimizamos o programa. Deve ser usado da forma:

sub procedure 'abre o procedimento
...
[comandos]
...
end sub 'fim do procedimento

lembrando que o que vem depois das aspas (')será apenas comentários, sem função lógica no programa;

-Depois segue o for h=0 to 254. Esse comando é usado para repitir um comando por n vezes. É da forma:

for x=y to z
...
[comando]
...
next x

Onde x é uma variável qualquer declarada anteriormente, y é o valor inicial e z o valor final. Ou seja, se vc declarar y como 1 e z como 5, os comandos serão repitidos 5 vezes;

-Seguindo vem o Dec(pwm). o Dec é usado para subtrair uma unidade da variável dentro dos parênteses;

-Então com o comando que já expliquei defino o valor do PWM sendo o da variável;

-Declaro uma pausa de 10 ms;

-Segue  que já expliquei, e então começa o main: que define o prgrama principal;

-TRISC=$00 declara o PORTC todo como saída;

-Sobre o PWM já expliquei e por fim;

-Começo um loop eterno com o WHILE TRUE, chamo a rotina fadeout, dou uma pausa de 0,2 segundos, chamo a rotina fadein e fecho o loop com o wend e fecho o programa com o end.

2.Circuito

Não têm mistérios: é o de sempre.
 
3. Variáveis

Existem 10 tipos de variáveis, conforme a tabela abaixo:


Em type temos o nome da variável, em size o tamanho e em Range os valores máximos e mínimos de cada tipo. Por exemplo: o short possui 8 bits e vai de -127 até 128, o bit tem 1 bit e assume 0 ou 1.
Quando se quer declarar uma variável no MB, digitamos:

 dim nome da variável as tipo da variável

Por exemplo: quero uma variável chamada "tensao", do tipo word. Para declará-la digito:

dim tensao as word

Caso o nome da variável fique em negrito, escolha outro, pois essa o programa já usa!!! Se algo der errado, o MB lhe levará até o problema (a linha da variável) e lhe dirá o que está errado.
Caso você vá usar uma variável que deverá ser incrementada/decrementada (como o pwm no nosso exemplo de hoje), declare algum valor para ela antes de incrementar ou decrementar, pois se ela não tem valor o programa não saberá quanto ela vale para ele aumentar ou diminuir seu valor.
O que acontece se eu chegar no valor máximo de uma variável e der o comando Inc???
Ela vai ao seu valor mínimo! E vice-versa para se tiver no valor mínimo e der o comando Dec: ela irá para o valor máximo!

Essa aula fica por aqui pessoal. Próximas aulas teremos como ler o ADC, Timers, INTs(se der certo), comandos internos do PIC, EEPROM, Teclados PS/2, Comunicação serial, como fazer sons e outras coisas que aparecerem! Tem muita coisa boa vindo galera! Mas deem opniões, dicas, sugestões ou comentem ai pra eu não ficar forever alone aqui!

Valeu pessoal e até a próxima!

sexta-feira, 3 de agosto de 2012

Regulador 5V para protoboard

Quem acompanha meu blog já a um tempo, já percebeu que us um regulador de 5V feito por mim mesmo para fornecer a tensão certa para meus projetos, ainda mais agora que estou envolvido com MCUs. Nessa postagem vocês podem ver meu antigo regulador. Passando por várias mudanças, meu regulador chegou na versão que vou postar aqui.

O regulador

Projetado para se encaixar perfeitamente na protoboard, esse regulador fornece 5V extremamente precisos, extremamente limpos (sem ruídos e ripples), com proteção contra curtos-circuitos e superaquecimento do regulador. O circuito segue abaixo:



O circuito não tem mistérios:
-JP2 é ligado à VIN (ja explico!);
-D1 protege o circuito contra inversão de polaridade;
-R1 e LED1 indica a presença de VIN;
-C3 e C1 filtram a VIN;
-IC1 é o nosso regulador, o 7805;
-C2 e C4 filtram a VOUT;
-R4 e LED3 indicam a presença da VOUT;
-D3 protege o circuito alimentado em caso de sobre tensão (não deixa passar de 5V1) e;
-JP2 é a saída de tensão (VOUT).

A VIN é a tensão de entrada. Nosso circuito consegue regular tensões de 7V até 35V no máximo. Eu uso 12V de uma fonte ATX de PC, como já disse em um post anterior.

O pacote de arquivos conta com 4 arquivos:
-cooper.pdf: a placa para vc fazer à mão;
-cooper_term.pdf: a placa para fazer pelo processo de transferência térmico;
-silk.pdf: o silkscreen para facilitar a montagem e;
-silk_trans.pdf: o silkscreen para ser posto na placa (mesmo processo da confecção das trilhas, apenas deve ser feito depois de já ter sido corroída).

O download pode ser feito aqui.

As fotos a seguir mostram o meu regulador, que está um pouco diferente do que postei, pois no meu eu tinha tentado por um detector de baixa VIN, mas não funcionou.





Como vocês puderam perceber, uso um dissipador e um cooler. Esse aí eu consegui em um PC queimado que achei na rua (sim, é o do post sobre como consertar ventoinhas!), era de uma GPU. Dependendo da carga, você nem de dissipador vai nescessitar!

- Para cargas de até 100mA, normalmente não é necessário o uso de dissipadores (e se aquecer um pequeno desses encontrados em lojas de componentes será suficiente já!)
-Para cargas até 500mA é bom usar um grande já. Você terá que testar os diversos dissipadores até ver o tamanho do dissipador. Esse regulador consegue trabalhar até 125°C, mas sempre trabalh com temperaturas baixas!
-Acima de 500mA, aconselho um dissipador cm um cooler já!
NÃO ESQUEÇA DE USAR PASTA TÉRMICA DE FIXÁ-LO BEM APERTADO NO DISSIPADOR.

Dicas: use dissipadores pretos e pasta térmica cinza, como a da akasa. Esta ja vem em uma seringa pronta para aplicação.

Quem quiser um dissipador já com o cooler, pode comprar um cooler para chipset de PCs, como esse ou esse.

Na montagem, faça como eu: para conectar na PCI, solde apenas o primeiro e o último par de jumpers de cada um e um para cima no meio. Veja as fotos para entender o que eu disse (:

Qualquer dúvida pergunte.
Abração e até a próxima.

Precisando de um encoder? Monte o seu!

Quem já precisou de encoder incrementais em algum prjeto, e não conseguiu encontrar ou achou caro, provavelmente não vai acreditar como não pensou no que vou postar aqui! Os encoders tem a mesma função de um potenciômetro, porém temos duas diferenças básicas: ele não altera sua resistência, pois é formado por duas chaves, e seu valor deve ser calculado por um Software/firmaware. Mas achá-los é meio difícil, então resolvi achar uma saída!

Onde encontar facilmente encoders?

Os lugares mais fáceis de se encontrar encoders são nos rádios e DVDs automotivos: o botão de ajuste do volume! Sim, normalmente são encoders! E agora o outro lugar que você vai ficar de queixo caído: MOUSES! SIM, MOUSES! Onde? Na roda de rolagem! Sim, aquela que é usada para abaixar e levantar páginas! Prefiro os de rádios e DVDs pois já tem os Knobs, mas não achei um ainda! E ainda estou a procura de um encoder!

OK, OK, mas o que é um encoder? como funciona?

Neste post vou falar sobre os incrementais. Existem dois tipos: os incrementais e os absolutos. Não vou me aprofundar sobre eles: se tiver dúvidas, a wikipédia sabe... 

Encoders são dispositivos, semelhantes aos potenciômetros: são usados para ajustar parâmetros, detectar posição e movimento (velocidade e direção). São formados por duas chaves, que produzem um sinal semelhante ao seguir:

Coloquei 1 ou dois passos, pois no caso dos de mouse (pelo menos os que eu usei) geram dois passos ao invés de 1, que é o normal.
A próxima figura ilustra os sinais dependendo do sentido do movimento:


Veja que no sentido horário temos a sequência 0, 2, 3 e 1 e no anti-horário temos 0, 1, 3 e 2. Os pulsos azuis são do canal A e os roxo, do B.
O vídeo a seguir ilustra bem essas duas figuras: cada um dos LEDs foi ligado a um canal, e o LED Azul, ao botão central (ativa ao apertar o eixo).

video


Montagem

Para montar um encoder, você vai precisar de um encoder de mouse, uma chave táctil, um pedaço de placa perfurada, fios (ou um conector) e o kit básico: ferro de soldar, solda, esponja para limpar o ferro, alicate ou cortador de unha para
desencapar os fios e etc. 
Primeiro, solde a chave táctil um pouco acima do meio da placa (uns dois furos), depois dobre os terminais do encoder em 90°, mas de forma que ao encaixar na placa, seu eixo fique bem alinhado e centralizado com a chave táctil. Solde-o na placa, solde um pino da chave táctil com o C do encoder e solde um fio então nessa junção, um no A e outro no B do encoder e um quarto na chave. Você terá então 4 fios ao todo. 
Dica: se sua chave táctil tiver 4 terminais, use os que tem a menor distância entre eles, ou use um multimetro para ver qual o par que apresenta continuidade ao ser pressionada a chave.
Ao ser pressionado o eixo do encoder, pelo fato das pernas serem maleáveis, ele irá apertar a chave embaixo. 
Para fazer o eixo, você pode usar a roda do mouse mesmo, ou improvisar. Eu coloquei um parafuso no meio, furei um tubo de plástico (na real um pedaço de um Knob de um potenciômetro), prendi ele no parafuso e coloquei um Knob. Aqui fica por conta da imaginação de vocês!!!


As figuras a seguir mostram a pinagem do encoder, a chave usada e a pinagem, um esquema da montagem final e algumas fotos do meu montado. Seguem também dois vídeos mostrando eles em funcionamento.


Aspecto final

visão lateral mostrando todo o conjunto

partes e pinagem

mais uma lateral

Detalhe (??) da chave

esquema geral da montagem final
Chave táctil usada. Os pinos apontados serão os usados



video

video

Mas como funciona? como irei usar?

Só na aula de MCUs que irei dizer (:

Fiquem na curiosidade HAHA'

Até a próxima.

Testador de porta/cabos USB

Montou um pc novo e não sabe se a USB tá funcionando? Montou algum projeto e não quer arriscar um dispositivo? Não sabe se seu Hub ou cabo ta funcionando? Melhor testar então!
Esse circuito muito simples, com apenas 9 componentes, indica a polaridade da porta e se ambas as linhas de dados estão funcionando corretamente.


Esquema

O esquema é bem simples: o resistor R3 (150R como todos os outros) regula a tensão e corrente para os LEDs D2 e D3. Os diodos D4 e D5 são "guias" de polaridade, acionando o LED apenas em uma polaridade, e o protegendo da inversa. R2 e R1 são os limitadores dos LEDs D6 e D1 respectivamente.
  
 Funcionamento

Ao conectar na porta USB, os LEDs D2 e D3 indicarão a polaridade: o D2 indicará a polaridade correta e o D3, a inversa. D1 e D6 piscarão (o jeito que eles piscam varia para cada PC) indicando comunicação em ambas as linhas de dados. Caso apenas um pisque ou nenhum, tem problemas na conexão.
Resumindo:

-D2 aceso e D3 apagado: polaridade correta;
-D3 aceso e D2 apagado: polaridade invertida;
-D3 e D2 acesos juntos: WTF??? Is this possible? Tem algo MUITO errado com sua porta USB!!!
-D1 e D6 piscando: linhas de dados funcionando;
-Apenas D1 piscando: problema na linha de dados D+;
-Apenas D6 piscando: problema na linha de dados D- e;
-D6 e D1 não reagem: problema nas duas linhas de dados!
Caso nenhum LED acenda, sua porta USB (ou cabo) tá muito ferrada! (considerando que sua montagem está certa!!!)


A PCB a seguir eu fiz a mão e usei componentes USB, o conector foi feita na própia placa. O circuito foi instalado no corpo de um desses leitores de cartão. Se quiser, pode montar o invólucro com caixinha de Tic-Tac (dá certo sim!) ou então, se não dispuser de compnentes SMD, pode fazer a mntagem com componetes "normais" e usar um conector USB compatível com a porta ou cabo a ser testado!
DICA: se você quiser testar muitas portas (útil para profissionais), pode-se montar um testador com vários conectores, até mesmo dois do emsmo tipo, um macho e outro fêmea! Apenas atenta para as conexções.

A partir de hoje, as PCBs dos meus projetos serão fornecidas junto com outros arquivos do projeto em um pacote zip, a placa no format .pcb e o esquema em .sch, ambos para o Eagle (minha versão é o 6.2). Em projetos com MCU, estarão o código fonte, o hex e vários outros nescessários juntos!

Não vou deixar o arquivo .pcb dessa vez, pois a placa á super simples e fácil de se fazer a mão livre, mas caso precise dessa PCB ou uma com diversos conectores, pede aí que faço! Deixarei a imagem da minha PCB que usei e um vídeo mostrando o funcionamento dele.
DICA: se for fazer SMD igual eu, corte a placa no tamanho final já (considere o invólucro!) e fique "conectando e desconectando" esse pedaço de placa na porta USB: ficará marcado a posição dos contatos do conector! Agora é só passar a caneta em cima das marcas! MAS FAÇA ISSO COM O PC (ou seja lá o que for) DESLIGADO, SE NÃO VOCÊ IRÁ CAUSAR UM CURTO-CIRCUITO (e não me responsabilizo por erros de vocês!)!
OBS: A tela de dispositivo não reconhecido é o que deve aparecer! Caso não apareça, algo deu errado!


video

É isso galera! Até o próximo post!

sexta-feira, 13 de julho de 2012

Curso sobre MCU: problemas!

Pessoal, como provavelmente vocês perceberam, to a muito tempo sem postar o curso sobre programação de PICs.
Essa semana eu estava criando um projeto envolvendo a porta USB, e me deparei com o limite do programa, então estou tentando achar outro compilador ou linguagem muito semelhante para prosseguir com o curso. Mas enquanto eu não posto, vocês podem aprender sozinhos igual eu aprendi: leiam o manual do MikroBasic!! SIM! No manual, mais no final tem a parte sobre as livrarias e como usá-las, assim vocês entenderão como usar o ADC, PWM dentre todos os recursos do PIC (ou quase todos). Qualquer dúvida é so perguntar que responderei o mais rápido o possível. Com a base da linguagem que já passei a vocês, já é possível criar diversos circuitos legais! Espero que alguem faça algo e poste ai as fotos/vídeos, pois lembrando que isso valerá nas promoções que farei!
Abração à todos!


sexta-feira, 22 de junho de 2012

Ventoinha (cooler) lenta, vibrando, trepidando ou emperrada tem conserto?

Esse é um problema que pode aparecer sim em ventoinhas, e pode ser crítico caso apareça em um cooler de uma CPU ou de uma GPU (placa de vídeo), com resultados óbvios!
A lentidão se dá pelo fato do eixo da ventoinha sofrer um degaste ao ponto de ficar com uma leve folga, e isso faz com que ela sofra uma oscilação no rotor (parte onde fica a hélice) o que freia a hélice, fazendo ela ficar lenta e com um som estranho (por estar trepidando). É algo como o que aconteceu com esse helicóptero, só não te custa tão caro nem vai se desmontar XD

Existe solução? SIM! Eu tinha uma ventoinha de um cooler aqui em casa, e achei um PC na rua e resolvi pegar o cooler de uma GPU, que infelizmente (ou felizmente pra vcs!) estavam assim! Eu queria o cooler para por na minha protoboard para resfriar o dissipador do meu 7805, mas ela estava muito lenta e não gerava fluxo de ar! Resolvi então tentar arrumar: e conseguí! É extremamente simples, como vou mostrar a seguir. Consertando a ventoinha: Primeiro, pegue a ventoinha e olhe a parte de trás dela e procure a presilha que evita que o rotor seja sacado do eixo como mostra a figura abaixo (a presilha está destacada pelo círculo mais claro)
A trava do eixo do rotor
referência das partes do estator
Visão explodida geral de um cooler. A trava do rotor é a presilha!
Encontrada essa presilha (que pode estar escondida embaixo de alguma etiqueta ou tampa de borracha/plástico), use um estilete e uma pinça para tirá-la, e tente não danificála nem amassá-la, pois você a colocara novamente depois. Ela é flexível, então será fácil tirá-la. Depois de retirar a trava, remova o rotor puxando pelo "núcleo" da hélice ou empurrando o eixo do rotor. A foto abaixo mostra como tirar pelo núcleo usando um alicate de bico.
Muito cuidado para não quebrar alguma pá! Depois de retirar o rotor, observe para ver se existe alguma arruelinha de plástico presa ou ao eixo do rotor ou ao estator (alí onde tem o enrolamento). Independente de onde esteja, você precisa tirar ela e deixá-la separada. O truque surge aqui: a graxa branca! Sim, a graxa branca é que vai resolver o problema. Porque a graxa branca? Porque ela é bem mais firme e sólida, não tem problemas com eletricidade e é praticamente permanente! Sua característica mais firme é que vai evitar que o rotor oscile! (pra quem gosta de aviação, o que acontece aqui com a ventoinha é quase o mesmo que a ressonância de solo que acontece com os helicópteros XD).
Essa é a graxa que usei. Com álcool isopropílico (usado para a limpeza de eletro-eletrônicos. Pode ser comprado em casa de componentes eletrônicos), limpe todo o eixo do rotor de do estator, e com um palito de dente (não serve cotonete por causa da consistência!), aplique a graxa (na real intupa tudo com graxa! hahaha) no eixo da base (estator) e no eixo do rotor.
Eixo do estator (o furo onde entra o eixo do rotor). Este furo devera ser preenchido com a graxa assim como a superfície externa (parte metálica provavelmente), onde não deve ser aplicado muito! Apenas passe uma fina camada!
Rotor com seu eixo
  Nesse eixo pode-se passar menos graxa, mas deve-se lubrificar tbm. Feito isso, recoloque a arruela no rotor e este no estator e ligue para ele girar. Deixe girar por uns 3 minutos (para ter uma distribuição uniforme nos eixos). Tire novamente o rotor da base, limpe os excessos e lubrifique apenas a parte metálica do estator, onde provavelmente agora estará a arruela. Pode lubrificar por cima dela mesmo! Se tudo der certo, quando você remontar o cooler ele terá parado já com a oscilação. Coloque para girar mais uns 5 minutos (poderá ser observado um leve aquecimento no estator, pois a graxa irá forçar, meio que segurar o rotor). Desmonte novamente e lubrifique com óleo como o WD-40. Lubrifique bem, fazendo ele cobrir toda a parte metálica/arruela e o furo do eixo, seque O EXCESSO e remonte pela última vez. Ligue-a novamente e pronto: girando rápido de novo e sem trepidar! Se achar conveniente (como por exemplo se for usar a ventoinha na vertical), coloque a trava do eixo do rotor com auxílio da pinça e pronto! Não garanto o tempo que essa técnica irá funcionar, pois a fiz recentemente, mas dependendo, dá pra quebrar um bom galho até comprar uma nova, mas acredito que vá funcionar por muito tempo (se a graxa não reagir com o óleo). A graxa branca é muito resistente, pois serve tanto para atrito entre plásticos/ metais tanto para atrito entre ambos. Sobre o conserto foi isso aê! Se a sua tiver trava, ao retirar o rotor provavelmente você encontrará algo que estivesse travando ela, ou então o eixo pode estar amassado (o que é praticamente impossível sem destruir o rotor) Por hojé é só! Mas daqui a uns dias coloco aí mais uma aula sobre MCU (dessa vez sobre PWM), como montar um encoder rotativo (rotary encoder) e um testador de portas USB muito legal! Abração a todos e fiquem na paz!

 PS: Já fazem quase dois meses que usei este método e a ventoinha continua perfeita!!

sexta-feira, 23 de março de 2012

Uma breve pergunta sobre o Curso de MCU

Pessoal, to aqui so pra pedir que vcs comentassem o que acham que ta faltando no CMCU (curso de MCU). Dicas, sugestões ou críticas são aceitas! E por favor, votem! Isso é importante para eu melhorar, pois tenho q ver como vcs estão se dando com o curso.
Abração e não esqueçam das imagens!

segunda-feira, 5 de março de 2012

2º aula de MCUs: Controlando um Display de LCD

Nessa aula, vou ensinar a usar a IHM (interface homem-maquina) mais comum: os displays de LCD.

1.Os displays


Existem dois tipos de displays de LCD: os gráficos e os alfanuméricos. Os gráficos são aqueles onde vc consegue criar imagens personalizadas como esse:


Um display gráfico com resolução de 128x64 pontos

Esses são mais caro, na faixa de uns R$50, R$60. Eles possuem várias resoluções, como 128x64 e 256x128, e é medida em pontos.

Já os alfanuméricos, que é o tipo que iremos usar, é usado apenas para letras, números e alguns símbolos. Pode-se desenhar neles, mas fica estranho. Esse é mais barato, na faixa de R$20. 

Display alfanumérico


 Esses displays não são identificados pela resolução, mas sim pelo número de caracteres (linha x coluna). Usaremos um display 16x2, ou seja, duas linhas que possuem capacidade para 16 caracteres (espaço também conta como caracter).

2.Programa

O controle de um display de LCD pelo mikrobasic é extremamente fácil. O programa a seguir escreve a palavra "Scroll" e faz ela ficar passando de um lado para o outro do display e da uma piscada no backlight (luz de fundo). O programa deve ser baixado aqui, e deverá ser aberto no mikrobasic. Deverá ser criado um projeto, o codigo então será copiado e vc compilará (se não sabe como fazer isso, leia a ultima materia aqui). O código está com tudo explicado, então irei ressaltar apenas os comandos do Display:

No início do programa, eu mostro a configuração dos pinos do display, ou seja: qual pino do MCU será conectado ao display.

Os comando em sí são:

LCD_Init() : inicializa o display;
LCD_Out(x,y,"texto") : escreve texto na linha x e coluna y (é nescessário a palavra estar entre aspas);
LCD_Out_CP("texto") : escreve texto na posição corrente, ou seja, na posição após a posição do ultimo caracter inserido (na posição onde estará o cursor). Se o último caracter está na 3º coluna, o texto será inserido na 4º coluna;
LCD_Chr(x,y,"caracter") : escreve um caracter na linha x e coluna y;
LCD_Chr_CP("caracter") : escreve um caracter na posição corrente;
LCD_Cmd(_Comando) : dá um comando para o display. Ex: LCD_Cmd(_LCD_CLEAR) (limpa o display).

A tabela completa de comandos segue a baixo (está em inglês mas acredito que vocês consigam ler, se não, me perguntem):


 3.Circuito

O circuito não é complicado, ainda mais pelo fato de você definir os pinos a serem usados. No caso do programa passado, usaremos o PORTB seguindo a seguinte esquema:


ATENÇÃO: ESQUECI DE POR O OSCILADOR NO ESQUEMA, MAS É SÓ FAZER COMO NO ESQUEMA DO LED TEMPORIZADO!!!!!
O bloco cinza é o controle do backlight. Confira no datasheet do fabricante do sue display, mas geralmente, a tensão de alimentação do backlight é de 4.2V (por isso o resistor de 56R) e a corrente é mais alta do que o PIC pode lidar, por isso usamos um transistor. O bloco azul é apenas um potenciômetro/trimpot para controlar o contraste do display. Os pinos do backlight estão marcados como NC, mas são sim os pinos do BL. Normalmente a numeração do display vem impressa no conector, caso contrario busque a pinagem na internet. O meu, se alguem comprar igual, é um Winstar WH1602A (16x2).
DICAS:

Se vc quiser prever como vai ficar uma frase ou palavra no seu LCD, vc pode usar o LCD screenshot generator. Um programinha em Java bem útil e fácil de se usar. Link: http://avtanski.net/projects/lcd/

Se você quiser fazer uma seta no display (tipo assim -->), digite o ~. O til faz uma flecha no display (não me pergunte o porque!)

Qualquer dúvida é so perguntar. Espero imagens e videos dos projetos funcionando.
Ateh mais!

segunda-feira, 6 de fevereiro de 2012

Seu primeiro projeto com um microcontrolador!

Nesse post vou ensinar a fazer um led temporizado com o PIC16F876A, nosso companheiro até o fim do curso.

1: Preparando o projeto.

Para criar o código-fonte, abra o MikroBasic e siga a sequência de imagens a seguir

 Clique em New project
















Clique em next

















Em Project Name, você vai digitar o nome do projeto, aqui no caso, Projeto_1. Não use espaço ao digitar o nome! Em Project Folder, você vai escolher a pasta onde o projeto, o código-fonte e o arquivo .hex será salvo. Device Name você vai escolher o MCU utilizado, aqui como já falei, o PIC16F876A (tem que ter o A no final) e por último em Device Clock você irá colocar a frequência de clock do MCU (se vc leu as apostilas das aulas anteriores sabe o que é isso), que aqui será de 4.096 MHz e então clique em Next
















Clique em Next

















Verifique se a opção Include All está marcada. A opção Include None fará com que você escolha as bibliotecas utilizadas no projeto, o que fará a compilação ser mais rapida, mas como ela demora apenas segundos, não temos porque usar essa opção (o que também deixaria vocês confusos e a coisa seria mais complicada). Clique em Next

















Marque essa opção e então clique em Finish















Essa janela irá aparecer: é onde os Fusíveis serão configurados (novamente, se vc não leu as apostilas passadas, você não fará a mínima idéia do que é isso).
Aqui a coisa vai ser longa:

-Oscillator Selection: você selecionará o tipo de oscilador para o clock. Esse trabalho é feito automaticamente em caso do uso de cristais:
LS: Cristais com menos de 2MHz de frequência (se não me engano);
XT: Cristais até 4MHz;
HS: Cristais maiores que 4MHz e;
RC: Oscilador feito com um resistor e um capacitor. Usado quando nao se é nescessário uma precisão no tempo do programa. Por padrão, usaremos até o fim do curso um cristal de 4.096 MHz, que no caso fica configurado em HS;

-WatchDog Timer: reseta o PIC caso ele trave. Não será usado nos nossos projetos;

-Power-Up Timer: Temporizador que proteje o PIC em caso de oscilações na alimentação. Complementa o trabalho do Brown-Out Reset. Fica desabilitado;

-Brown-Out Reset: Desliga o PIC quando a tensão cai para um certo nível, protegendo o PIC quando for desligado o circuito (queda de tensão devido ao capacitor de filtro que descarrega lentamente quando deligada a fonte). Fica habilitado!;

-LVP: Low Voltage Programmer (programador de baixa tensão): Será usado apenas com gravadores USB. Como o nosso é serial, deve ficar DESABILITADO, caso contrário, você não conseguirá gravar o PIC;

-Data EEPROM Memory Code protection: Protege o código da memória EEPROM contra leitura/cópia. Fica desabilitada!;

-Flash Program Memory Write: Permite ao código se auto-modificar. Fica desabilitado;

-In-Circuit Debugger Mode: Usado apenas em programadores com a função Debugger. Fica desabilitado e;

-Flash Program Memory Code Protection: Protege a memória Flash (onde fica o programa) de ser lida/copiada. Fica desabilitada!

Se por acaso você habilitar a proteção das memórias, quando o IC-Prog for verificar erros na gravação, ele sempre irá acusar o código 0000h, que indica que o PIC não pode ser lido/programado.

Confira o modelo do PIC e a frequẽncia do clock  e pronto! Clique em OK. 

2-Escrevendo o código-fonte.

Aqui começa o legal: escrever, gravar e ver o resultado.
Quando você acabar de configurar os fusíveis, verá essa tela:














É aí que você irá digitar seu código (a sua tela vai ter algumas coisas que na minha não aparece, mas não se preocupe!)

Veja que o programa está assim:














Em Declaration Sections, você irá declarar as variáveis, configuração de algumas bibliotecas, sub procedimentos e etc. (tudo será explicado mais a frente) e em Main Program, o programa principal, que será esse:






















Começamos em Program Projeto_1. Aqui é declarado o nome do programa, que é automaticamento escrito quando se cria o projeto.
Seguimos com main:, que define onde começa o programa principal.
Passamos para TRISB, que é o nome do registrador que configura os pinos do PORTB como entrada (1) ou saída (0). Veja que usei TRISB=%. Esse % é usado para configurar o registrador em modo binário (o que é fácil se você não tiver prátical com Hexadecimais), onde a configuração fica assim:

TRISx=%(PORTx.7)(PORTx.6)(PORTx.5)...(PORTx.0) Onde x é o nome do PORT, no caso do PIC16F876A vai de PORTA até PORTC.
___________________________________________________________________________________

Como escrever em hexadecimal?

Você pode usar calculadoras online ou treinar vc mesmo. Faça assim:
Divida seu byte em dois nibbles (meio byte ou 4 bits) vai ficar algo assim:
Byte: 01011001
Em Nibbles: 0101  1001
Agora Converta cada nibble usando a seguinte tabela

0000=0
0001=1
0010=2
0011=3
0100=4
0101=5
0110=6
0111=7
1000=8
1001=9
1010=A
1011=B
1100=C
1101=D
1110=E
1111=F

no nosso caso, o byte ficaria 59. Para ser escrito no programa ficaria como por exemplo PORTA=$59 ou PORTA=0x59. Viu? fácil. Mas se for preguiçoso, use esse link, clique em binário e digite seu byte.
___________________________________________________________________________________

O While é um statement (você pode ler mais sobre os statements no manual do mikrobasic, que possui uma grande referencia sobre a linguagem dele) que é fechado pelo Wend. Esse While executa um determinaod comando (ou série deles) enquanto uma afirmação for verdadeira. No nosso caso, ao lado do While coloquei o TRUE, que faz com que o while vire um loop infinito, ou seja, o programa executa eternamente.
Em seguida temos o statement IF, que executa um comando (ou série deles) caso uma afirmação seja verdadeira. O IF é escrito da seguinte forma

IF (afirmação) THEN
...
ELSE
...
END IF

e o while

WHILE (afirmação)
...
wend

Então,  traduzindo o código dentro do IF:

SE PORTB.0 for igual a 0 ENTÃO
Põe o PORTB.1 em 1
espera 1 segundo (1000 milisegundos)
SENÃO
Põe o PROTB.1 em 0
FIM DO IF

A função delay_ms faz que o programa espere x milisegundos, ou no delay_us, x microsegundos.

Após o END IF, que encerra o statement IF, temos o wend pra fechar o While e o end., que define o fim do programa. É OBRIGATÓRIO ESSE END. COM O PONTO FINAL.

Quando terminarem de digitar, apertem control+s para salvar e control+F9 para compilar, que é o que irá gerar o hex. Se tudo estiver certo, você verá algo assim:



Se tiver algum erro, ele vai te levar até o erro e dizer o que está errado. reveja o código.

O circuito é simples e pode ser montado em uma protoboard:



S1 e R1 formam o circuito de reset manual, que pode ser usado em caso do programa travar (o que não vai acontecer em programas simples), mas já é bom vcs se acustumarem. Se quiser omitir, ligue direto o pino 1 no Vdd (que deve ser de +5Vdc).
R3 é um resistor de pull-up (se tivesse ligado no negativo, seria pull-down), para evitar que o valor no pino do PIC fique "flutuando". Liguei o negativo do LED no PIC pra fazer diferente mas nada impede que o positivo fosse ligado no PIC, apenas teria de haver mudanças no código onde define o valor do pino do PORTB que é saída  (que está DENTRO do IF. Onde e 0 vira 1 e vice-versa).

Abra o IC-Prog, vá em file --> open file e procure a pasta do programa e clique no arquivo que termina em .hex (Projeto_1.hex), conecte o programador na porta serial, aperte F3 e em programmer clique em JDM programmer e em ports, selecione a porta serial que vc está usando. CLique em OK, selecione o modelo do seu PIC e aperte F5 e em yes e espere terminar. Se tudo ocorrer direito, aparecerá uma mensagem dizendo "Device was sucefully verified!", se não, verifique as conexões, se o PIC está inserido corretamente, e caso tudo esteja certo, seu PIC está queimado. Se vc por ele errado no gravador/circuito, vc irá queimá-lo!!!.




3: Usando os resistores de pull-up internos.
Alguns modelos de PIC contam com resistores de pull-up internos, como o nosso PIC. Caso sejam ativados, o resistor de pull-up que está ligado no botão seria omitido, liberando assim espaço no circuito. Para isso, devemos acioná-los através do registrador OPTION_REG (mais informações olhe no datasheet do PIC). O bit responsável é o bit 7, ou RBUP, como pode se ver na figura seguinte:



 Aqui vai mais uma coisa no código: quando se quer definir o valor de poucos bits de um registrador, para não configurar toodo o registrador, podemos acessar apenas um determinado Bit, como por exemplo: queremos configurar o 7º bit do OPTION_REG, então o código fica OPTION_REG.7=0. Perceba que colocamos o nome do registrador, um ponto e o bit e então definimos seu valor, no caso aqui é o 0, que arma os resistores de pull-up.
"AH!, Mas apenas um pino é entrada e o resto é saída. Como todas os pinos do PORTB tem resistor um de pull-up, não vai ter problemas se eu armar eles?" Não, pois quando vc arma, ele detecta quais pinos são entrada pela configuração do TRISB e arma os resistores só nos pinos de entrada. Se você prestou atenção, esse modo de selecinar apenas um bit do registrador foi a mesma coisa que eu fiz no codigo pra ligar e desligar um pino do PIC: PORTB.1=0 ou 1. PORTB é o registrador da porta, que define ligado (1) ou desligado (0)!
Se for usar resistores de pull-up, o código fica assim:






















Veja que não muda nada! Apenas acrescentamos o OPTION_REG.7=0! O circuito é o mesmo, apenas deve-se tirar o R3.
É isso. Espero que funcione, que vocês gostem e se impolguem com esse 1º de muitos circuitos. Esse foi simples, mas vai ficando cada vez mais implementado.
Dúvidas ou problemas falem ai.
ATENÇÃO! QUEM ENVIAR VIDEOS/FOTOS DAS MONTAGENS E DO CIRCUITO FUNCIONANDO, VAI GANHAR BRINDES DURANTE A SÉRIE!!!
Até a próxima...