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!