Título: Estudo com PIC10F200 Enviado por: plautz em 17 de Dezembro de 2015, as 14:24:16 Senhores(as),
Estes dias nosso amigo Eduardo (http://www.handmades.com.br/forum/index.php?action=profile;u=5367) me perguntou se poderia fazer um pdf sobre um estudo que ele estava realizando em cima do PIC10F200, e é claro que me propus a fazê-lo. Ao criar a documentação me impressionou a muquiranice do autor, querendo sempre espremer mais o código. Claro, em um microcontrolador com limitada memória, isso é sempre desejável, mas quando se chega ao ponto de preferir o código X em vez do Y porque o X tem como resultado um código compilado um byte menor, então podemos chamar o autor de escovador de bits. Algumas técnicas são apresentadas no documento, como multiplexação, explicada de uma forma que é possível compreender, embora a leitura não seja muito branda, principalmente para quem nunca programou. Aqui está o documento. (http://www.altanatubes.com.br/downloads/FirstTest.pdf) Alguém pode se perguntar "Porque tanto esforço pra isso?". Eu penso que, além do próprio aprendizado, é bom ter alternativas. E já imagino até uma aplicação: contador para uma máquina de enrolar transformadores. Parabéns ao Eduardo pelo estudo realizado e aqui mostrado. Abraços a todos. Título: Re: Estudo com PIC10F200 Enviado por: kem em 17 de Dezembro de 2015, as 16:49:49 Realmente não é uma leitura branda. Eu "acompanhei" o desenvolvimento da coisa, e como disse ao Eduardo, no começo parecia grego pra mim. E no final continuou grego, mas com a impressão de que aprendi umas 2-3 palavras.
Plautz... Sua sugestão me deu outra ideia (bem similar). Contador para enrolador de captadores... Título: Re: Estudo com PIC10F200 Enviado por: Ledod em 17 de Dezembro de 2015, as 17:57:40 Muito legal ter um documento bem redigido e de fácil compreensão aos que adentram no mundo dos microcontroladores! ;)
Eu estava olhando o código rapidamente e uma parte me chamou atenção: Código: 89. if (Sending==0) {Sending = Number0;} else Não seria melhor, em termos de memória utilizar uma construção "switch case"? Ficaria algo assim: Código: switch (Sending) Outro fato é forçar a comparação não com inteiros (0,1,2,3...) e sim com o valor em hexa (0x00, 0x01, 0x02, 0x03...) já que "Sending" é um char os tipos serão os mesmos... Não sei se isso irá diminuir muito o código, já está bem "orange squeezer"... rs :D Um abração! Eduardo Título: Re: Estudo com PIC10F200 Enviado por: Eduardo em 18 de Dezembro de 2015, as 05:20:08 Oi Ledod
Eu já esperava este comentário. Ele está respondido no último parágrafo da página 11. E também não faz diferença comparar com o inteiro decimal 5 ou o hexa 0x05. O compilador se vira bem com isso e o código de máquina é a comparação com o hexadecimal correto. Abraços Eduardo Título: Re: Estudo com PIC10F200 Enviado por: xformer em 18 de Dezembro de 2015, as 14:04:06 Eduardo e Plautz, só algumas correções e esclarecimentos que eu achei que deveria fazer sobre o documento e para quem já pegou o documento disponibilizado:
- pág 3 - "O PIC10F200 é o microcontrolador mais simples que encontrei. Ele conta com uma memória RAM de apenas 16 bytes e uma ROM de 256 bytes, que pode conter 199 instruções." Na verdade são 256 palavras (words) de 12 bits cada (o que daria mais do que 256 bytes de memória = 384 bytes) que podem sim armazenar até 255 instruções do programa (menos 1 para guardar a calibração do clock interno). A arquitetura das instruções do PIC incorpora o operando (valor, dado, número de registrador, etc) dentro do código de operação da instrução (opcode) de forma que cada palavra vale sempre por uma instrução completa a ser executada. - pág 4 - "É importante que a tensão no pino 3 nunca exceda a de alimentação, ou o PIC entrará em modo de programação.". Na verdade o pino para acionar o modo de programação é o pino 8 (GP3 daí a confusão, que tem a função de Vpp). Mas precisa ser uma tensão de mais de 12Vdc. - pág 9 - "Na linha 10 o compilador é instruído a desabilitar o temporizador interno do PIC10F200. Caso isso não seja feito, o microcontrolador irá reiniciar a intervalos regulares, perdendo a contagem." Pra distinguir esse temporizador do temporizador/contador periférico TMR0, na verdade ele é chamado de Watch Dog Timer (WDT), o cão de guarda do microcontrolador. Ele funciona independentemente da execução do programa (paralelamente) e quando o contador dele estoura, reinicializa o microcontrolador. A função dele é restaurar o funcionamento do PIC se ocorrer um evento de travamento ou mau funcionamento do programa. Se quisermos utilizá-lo, no programa devem haver algumas instruções para limpar a contagem dele antes dele estourar (Clear Watch Dog Timer - CLRWDT) em posições chave do programa. Ou se não quisermos usar esse recurso, simplesmente desabilitar o reset pelo WDT. - pág 10 - "O registrador TRIS define se um determinado pino é entrada ou saída. Na linha 45 GP3 é definido como entrada e os demais como saídas. Na verdade, GP3 é sempre saída, ..." O correto seria "sempre entrada". Título: Re: Estudo com PIC10F200 Enviado por: Eduardo em 18 de Dezembro de 2015, as 14:59:03 Oi Xformer
É sempre bom ter mais gente conferindo o trabalho. Sempre passa alguma bobagem. Muito obrigado pela meticulosa revisão! Já alteramos o PDF para conter suas observações. Abraços Eduardo Título: Re: Estudo com PIC10F200 Enviado por: xformer em 18 de Dezembro de 2015, as 15:20:01 É sempre bom ter mais gente conferindo o trabalho. Sempre passa alguma bobagem. Muito obrigado pela meticulosa revisão! Já alteramos o PDF para conter suas observações. Revisão meticulosa não existe, sempre passa(m) alguma(s) coisa(s). :( Agora sobre o projeto em si, depois que eu vi o vídeo dele que você me mandou aquele dia, eu pensei comigo mesmo que você tirou leite de pedra com esse PIC. Por isso o PDF foi bom para matar a curiosidade. Nem sabia que dava pra usar compilador com esse modelo de PIC, devido aos parcos recursos de RAM. Parabéns. Título: Re: Estudo com PIC10F200 Enviado por: Eduardo em 18 de Dezembro de 2015, as 16:15:31 ... você tirou leite de pedra com esse PIC. Não é a primeira vez que dizem coisa assim de algo que eu fiz. :D Eu gosto de usar os recursos de algo ao máximo. Sou do tipo que esmaga tubo de pasta de dentes com alicate! Sobre a pouca RAM, na verdade isso praticamente obriga usar um compilador que gerencie bem a memória. Ao separar as variáveis em locais e globais, a memória pode ser reciclada e compartilhada entre as rotinas, permitindo uma programação mais sofisticada mesmo num PIC10F200. Mais uma vez, grato pela contribuição! Eduardo |