Ir ao conteúdo
  • Cadastre-se
jwmelo

RESOLVIDO Principio básico de um microcontrolador...

Recommended Posts

Boa noite galera, é o seguinte tenho duas dúvidas simples.

 

1° Utilizo um PIC 16f877a, e a pouco tempo montei uma placa de desenvolvimento.Para testar mandei todos os pinos mudar seu estado a cada 500ms utilizando o delay, simulei no proteus e reparei que o pino 6 (PORTA4) desse pic não altera seu estado de 0 para 1, pensei que fosse um bug mas não, na prática também não funciona.Então tive a ideia de utilizar como entrada para setar outro bit e funcionou. Agora estou querendo entender como o porta4 é entrada/saída e funciona apenas como entrada?

 

2° Meu pic 16f877a utiliza um processamento de 8bits ou seja 0 a 255 decimal, isso quer dizer que eu não posso manipular valores maiores de 255? Por exemplo: Programar o pic com intuito dele contar até 600 (sem utilizar os timers, apenas usando delay e variáveis do tipo int,float) e depois setar um pino  qualquer?

 

segue o algoritimo:

 

int contador;

while(true)

{ contador++; // incrementa 1 na  variavel contador

   delay_ms(1000); // para o processamento por 1 s.

   if(contador==600) // entra nesta rotina depois de 20 min + atraso de processamento escala: us 

{   led=1; //seta um bit qualquer

                                 }

}

(sei que não seria ideal usar o delay)

 

Na realidade para mim bit é cada perna do microcontrolador, não entendi a relação deles com esse valor de 0 a 255 utilizada nas variaveis int, float etc. Mesmo sabendo que 8 bits setados em decimal é a maior combinação no caso 255, já que 2^8 =256 descontando o 0 se tem 255.

 

 Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos la cara.

 

 

 

 o pino 6 (PORTA4) desse pic não altera seu estado de 0 para 1

 

o que acontece com este pino é que ele é do tipo OPEN DRAIN, ou seja, ele tem apenas o transistor conectado ao negativo, e não um conectado ao negativo e outro ao positivo, fazendo assim que ele só tenha a capacidade de drenar a corrente por esse pino, e não fornecer a corrente, que aconteceria quando ele estivesse em 1, de modo que pra você poder fornecer a corrente, "mandar 1 no pino", você precisa colocar um resistor externo ligado entre o VCC e o seu pino, tipo esta ligação aqui.

 

http://upload.wikimedia.org/wikipedia/commons/a/a6/Open_Collector_Pull_Up.png

 

a parte dentro do "quadrado" é o interior do pic, ai o resistor é o que você vai implementar no circuito

 

 

 

 

 isso quer dizer que eu não posso manipular valores maiores de 255?

 

Não, só que pra mexer com valores maiores de 255 você precisa começar a associar bytes, pra poder formar valores maiores, mas não se preocupe, você usa C, o compilador faz isso automaticamente pra você, basta apenas você declarar a variável do tipo certo, que vá até valores maiores de 255, que o compilador faz o resto, no caso você já fez isto, declarou como INT, e ela vai de -32.768 até 32.767

 

 

 

 

 Na realidade para mim bit é cada perna do microcontrolador, não entendi a relação deles com esse valor de 0 a 255

 

O que acontece é que o microcontrolador enxerga tudo como bytes, e pra ele não existe diferença entre os bytes, é tudo tratado como bytes, passiveis de soma, subtrações, rolagens, ou quaisquer outras operações lógicas. O que acontece é que associado a alguns bytes ha funções especiais, como são os ports, que são nossos pinos externos, mas para o microcontrolador ele enxerga como byte. O que aconteceria + OU - é que cada a bit do byte dos ports temos transistores ligados neles, e esses transistores é que estão ligados aos pinos, "cada bit controla 2 transistores", que alteram os valores dos pinos.... é claro que digo isto  A GROSSO MODO, ha todo um circuito mais complexo envolvendo tudo, mas pra entender é bom e a grosso modo até que esta "correto".... se você perceber pela explicação, o PIC continuara enxergando como um byte normal, mas como esse byte esta associado a transistores ele tem um efeito externo, que é manipular os ports.....

 

flowwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, perfeita explicação e muito obrigado. Simulei o pull up no pino 6 e funcionou perfeitamente. Porém agora fico com duvida, porque o fabricante não manteve um padrão e deixou todos iguais rsrsrsrs. Mas enfim esclareceu minhas dúvidas.

 

Sds!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×