Handmades

Fórum Geral => Microchip PIC => Tópico iniciado por: plautz em 17 de Dezembro de 2015, as 14:24:16



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
90. if (Sending==1) {Sending = Number1;} else
91. if (Sending==2) {Sending = Number2;} else
92. if (Sending==3) {Sending = Number3;} else
93. if (Sending==4) {Sending = Number4;} else
94. if (Sending==5) {Sending = Number5;} else
95. if (Sending==6) {Sending = Number6;} else
96. if (Sending==7) {Sending = Number7;} else
97. if (Sending==8) {Sending = Number8;} else
98. {Sending = Number9;}

 Não seria melhor, em termos de memória utilizar uma construção "switch case"?

 Ficaria algo assim:

 
Código:
switch (Sending)
{
case 0:
Sending = Number0;
break;
case 1:
Sending = Number1;
break;
case 2:
Sending = Number2;
break;
case 3:
Sending = Number3;
break;
case 4:
Sending = Number4;
break;
case 5:
Sending = Number5;
break;
case 6:
Sending = Number6;
break;
case 7:
Sending = Number7;
break;
case 8:
Sending = Number8;
break;
case 9:
Sending = Number9;
break;
}

 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


SimplePortal 2.3.3 © 2008-2010, SimplePortal