Handmades</center>
 
*
Bem-vindo, Visitante. Por favor faça o Login ou Registro. 24 de Novembro de 2024, as 21:00:00


Login com nome de usuário, senha e duração da sessão


Páginas: [1]   Ir para o Fundo
  Imprimir  
Autor Tópico: Estudo com PIC10F200  (Lida 8380 vezes)
plautz
Visitante
« : 17 de Dezembro de 2015, as 14:24:16 »

Senhores(as),

Estes dias nosso amigo Eduardo 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.

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.
Registrado
kem
DIY Freak
******
Offline Offline

Sexo: Masculino
Mensagens: 5.124

Obrigado
-Dado: 94
-Recebido: 791



« Responder #1 : 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...
Registrado

I don't want to die young...
I want to diode!
Ledod
Handmaker
****
Offline Offline

Sexo: Masculino
Mensagens: 1.132

Obrigado
-Dado: 17
-Recebido: 139



« Responder #2 : 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!  Wink

 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  Cheesy

 Um abração!

 Eduardo

 
Registrado
Eduardo
Hand MasterMind
*****
Offline Offline

Sexo: Masculino
Mensagens: 3.669

Obrigado
-Dado: 111
-Recebido: 535


Paricipe da World Community Grid!


WWW
« Responder #3 : 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
Registrado

Obsoleto é filho do Custo, não da Melhoria.
xformer
Administrator
DIY Freak
******
Offline Offline

Sexo: Masculino
Mensagens: 6.287

Obrigado
-Dado: 71
-Recebido: 2049


e^(i x pi)+1=0


WWW
« Responder #4 : 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".
« Última modificação: 18 de Dezembro de 2015, as 14:55:19 por xformer » Registrado

O que se escreve com "facilidade" costuma ser lido com dificuldade pelos outros. Se quiser ajuda em alguma coisa, escreva com cuidado e clareza. Releia sua mensagem postada e corrija os erros.
Eduardo
Hand MasterMind
*****
Offline Offline

Sexo: Masculino
Mensagens: 3.669

Obrigado
-Dado: 111
-Recebido: 535


Paricipe da World Community Grid!


WWW
« Responder #5 : 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
Registrado

Obsoleto é filho do Custo, não da Melhoria.
xformer
Administrator
DIY Freak
******
Offline Offline

Sexo: Masculino
Mensagens: 6.287

Obrigado
-Dado: 71
-Recebido: 2049


e^(i x pi)+1=0


WWW
« Responder #6 : 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).   Sad

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.
Registrado

O que se escreve com "facilidade" costuma ser lido com dificuldade pelos outros. Se quiser ajuda em alguma coisa, escreva com cuidado e clareza. Releia sua mensagem postada e corrija os erros.
Eduardo
Hand MasterMind
*****
Offline Offline

Sexo: Masculino
Mensagens: 3.669

Obrigado
-Dado: 111
-Recebido: 535


Paricipe da World Community Grid!


WWW
« Responder #7 : 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.  Cheesy 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
Registrado

Obsoleto é filho do Custo, não da Melhoria.
Páginas: [1]   Ir para o Topo
  Imprimir  
 
Ir para:  


Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines

XHTML 1.0 Válido! CSS Válido! Dilber MC Theme by HarzeM
Página criada em 0.04 segundos com 23 procedimentos.
SimplePortal 2.3.3 © 2008-2010, SimplePortal