sexta-feira, 15 de abril de 2011

Subníveis de energia - orbitais

    Olá a todos, trago hoje uma postagem não muito convencional no meu blog, pois trata-se de um assunto do campo da química, mas de muita importância para o estudo dos fenômenos elétricos. O vídeo a seguir mostra como funcionam os orbitais de um átomo. Para quem não sabe um orbital é a região do espaço onde há a probabilidade de encontrar elétrons. Cada orbital recebe um nome em função de seu formato: s, p, d e f, e pode conter um número máximo de elétrons:
s  = 2
p = 6
d =10
f  =14
 
 

      Até a próxima pessoal.

sexta-feira, 8 de abril de 2011

Programação em C para PIC - II


    Olá amigo, nesta segunda postagem da série sobre os fundamentos da programação em C para PIC vamos ver como se faz a conversão entre as bases numéricas e os primeiros conceitos de lógica digital.

CONVERSÃO DE BASES NUMÉRICAS

    Agora que já aprendemos como funcionam as bases numéricas precisamos descobrir como podemos converter os valores entre as bases numéricas, pois um conjunto de zeros e uns pode dizer muita coisa a uma máquina, mas não nos é muito significativo.


CONVERSÃO BINÁRIO - DECIMAL 

    A conversão de um número que está na base binária para a base decimal é muito simples, basta apenas decompô-lo em potências de base 2. Observe o exemplo:

1011 0110b =
1.2^7 + 0.2^6 + 1.2^5 + 1.2^4 + 0.2^3 + 1.2^2 +1.2^1 + 0.2^0 =  (perceba que 2^2 = 2²)
2^7 + 2^5 +2^4 + 2^2 + 2^1=
128 + 32 + 16 + 4 + 2 =
182d

   Note que a posição do algarismo binário indica o expoente que será atribuído ao 2.




CONVERSÃO DECIMAL - BINÁRIO

    A conversão de um número em decimal para um número binário também é muito simples, basta realizar sucessivas divisões por 2 tomando o valor do resto e tornando a dividir o quociente.


    No exemplo acima tomamos os valores dos restos das divisões, começando da última para a primeira e formamos o número 182d em binário ou seja 1011 0110b.



CONVERSÃO HEXADECIMAL - DECIMAL

     Para converter um número hexadecimal para a base decimal usamos o mesmo artifício usado acima, ou seja multiplicamos cada digito do número hexadecimal pelo número 16 elevado ao valor de sua posição e ao final somamos os resultados parciais, ou seja:

    Lembre-se que os valores das letras no hexadecimal são:

A = 10;
B = 11;
C = 12;
D = 13;
E = 14;
F = 15;



CONVERSÃO DECIMAL - HEXADECIMAL

    Para transformar um número decimal em hexadecimal podemos usar o mesmo procedimento descrito anteriormente para a base binária, usando agora o divisor 16. Exemplo:




CONVERSÃO HEXADECIMAL - BINÁRIO (BINÁRIO - HEXADECIMAL)

    A conversão entre as bases hexadecimal e binária é extremamente simples e nem requer cálculos. A base hexadecimal é uma forma de facilitar a escrita de números binários, pois cada conjunto de quatro alagrismos binários equivalem a um algarismo hexadecimal (2^4 = 16), assim:

    Para a substituição dos algarismos, basta observar a tabela de conversão abaixo:




REPRESENTAÇÃO DAS BASES NUMÉRICAS

    Quando utilizamos várias bases numéricas ao mesmo tempo na hora da programação e escrevemos para o nosso programa contar até 100, não sabemos se ele irá contar até 3 (se 100 estiver na base binária), se até 100 (decimal), ou até 256 (na base hexadecimal). Desta forma devemos sempre indicar qual a base do número que estamos utilizando.
    Para representar um número hexadecimal geralmente utilizamos $ ou 0x ou h, e para representar um número binário % ou 0b ou B:

Hexadecimal -> $16FA ou 0x16FA ou 16FAh
Binário -------->  %1001 ou 0b1001 ou 1001B

   Se um número não tiver nenhum sufixo ou prefixo subentende-se que é número decimal.

BIT E BYTE

    Até agora o assunto foi puramente matemático. Mas agora vou introduzir as noções de bit e byte, que são os fundamentos da eletrônica digital.
    O bit é o algarismo binário, ou seja, o digito binário.

BIT = Binary digIT

    Supondo o número 1001 0110b os bits são cada um dos algarismos deste número, assim:

    O byte é um agrumento de 8 bits. Como os bits correspondem aos algarismos o byte corresponde aos números. Desta forma todas as operações matemáticas podem ser feitas utilizando os bytes.
    No byte cada algarismo tem um valor relacionado a sua posição, assim como acontece com os números decimais. No número 222, por exemplo, os algarismos são iguais, mas seus valores são diferentes por ocuparem posições diferentes: o 2 à esquerda vale mais que o 2 central, que vale mais que o 2 à direita.
    Em um byte temos duas posições que chamamos de MSB e LSB, respectivamente "bit mais significativo"  e "bit menos significativo". Essa nomenclatura refere-se ao fato de suas posições serem as duas extremidades do byte, ou seja, o bit 7 e o bit 0.


    Outra nomenclatura importante é o NIBBLE. O nibble é a metade de um byte. Assim temos dois nibbles em cada byte, e dizemos "high nibble" e "low nibble".


     Por enquanto é isso pessoal, na próxima postagem vamos ver como funcionam as portas lógicas.
     Deus abençõe e até mais.

sexta-feira, 1 de abril de 2011

Programação em C para PIC - I


INTRODUÇÃO

   Bom dia a todos os hobbistas e técnicos, engenheiros, eletricistas, cientistas, etc.etc..etc... (no final das contas somos somente metidos hehe).

   Vou começar agora uma série com o objetivo de ensinar os princípios básicos da programação em C, haja vista que é a linguagem mais utilizada atualmente por padrão para microcontroladores PIC.

   Pode-se dizer que esta é a linguagem mais simples e cômoda para quem precisa montar circuitos que requeiram um controle mais complexo, pois, na prática, você não precisa preocupar-se com os dados que o núcleo do controlador irá efetuar (CPU), mas com o tratamento que deverá ser dado entre a entrada e a saída, uma vez que a "tradução" para o código de máquina será feito pelo compilador. 

   Nesta série de postagens irei me basear no livro PIC Microcontrollers - Programming in C da Mikroeletrônica.


HISTÓRICO

   O desenvolvimento inicial de C ocorreu no AT&T Bell Labs entre 1969 e 1973. Não se sabe se o nome "C" foi dado à linguagem porque muitas de suas características derivaram da linguagem B e C é a letra conseguinte no alfabeto, ou porque "C" é a segunda letra do nome da linguagem BCPL, da qual derivou-se a linguagem B.

   C foi originalmente desenvolvido para a implementação do sistema Unix (originalmente escrito em PDP-7 Assembly, por Dennis Ritchie e Ken Thompson). Em 1973, com a adição do tipo struct, C tornou-se poderoso o bastante para a maioria das partes do núcleo do Unix, serem reescritas em C. Este foi um dos primeiros sistemas que foram implementados em uma linguagem que não o Assembly, sendo exemplos anteriores os sistemas: Multics (escrito em PL/I) e TRIPOS (escrito em BCPL). Segundo Ritchie, o período mais criativo ocorreu em 1972.



MICROCONTROLADOR x MICROPROCESSADOR

   Iniciantes em programação geralmente acham que estes dois componentes são idênticos, mas isso não é verdade. A maior diferença a favor do microcontrolador é a sua funcionalidade, uma vez que o microprocessador precisa de muitos componentes externos para funcionar, tais como memória RAM, EEPROM, conversores A/D, oscilador (clock) e drivers para comunicação com outros dispositivos. No microcontrolador estes componentes (chamados de periféricos), já estão todos "embutidos" na mesma pastilha, o que economiza tempo e espaço na confecção de um projeto. 

Exemplo de microcontrolador (ds 8051) mostrando seus periféricos.



   O microcontrolador evita o excessivo trabalho manual do hobbista já que nele é possível implementar diversos tipos de lógica usando o mesmo chip e os mesmos terminais, pois praticamente todo o trabalho será realizado no momento da programação. Isto também possibilita futuros aperfeiçoamentos, uma vez que é possível reprogramar o componente uma infinidade de vezes e depois basta reinserí-lo no soquete: pronto! está feito o upgrade do firmware.


BASES NUMÉRICAS

   Bases numéricas são as diferentes notações que podemos usar para representar quantidades. As mais comuns são a decimal, binária e hexadecimal.

1-BASE DECIMAL: A base decimal é a que estamos acostumados a utilizar. Ela utiliza a base 10, tendo algarismos que vão de 0 a 9, ou seja 0,1,2,3,4,5,6,7,8,9. O número 10 significa que cada posição dos algarismos tem um valor 10 vezes maior que seu anterior. Veja como podemos decompor o número 1472 na base decimal:

1472 =
2 + 70 + 400 + 1000 =
2.10º + 7.10¹ + 4.10² + 1.10³

2-BASE BINÁRIA: Assim como a base decimal é aquela que nós estamos acostumados a utilizar, a base binária é aquela que os sistemas digitais utilizam, pois apenas são possíveis dois estados em um mesmo condutor. A base binária caracteriza-se por ter apenas 2 algarismos: 0 e 1, em que cada uma das posições dos algarismos do número tem um valor 2 vezes maior que o anterior. Veja como podemos ter o número 10111001 decomposto:

10111001 =
1.2^7 + 0.2^6 + 1.2^5 + 1.2^4 + 1.2^3 + 0.2^2 + 0.2^1 + 1.2^0

Desta forma fica bem fácil converter este número para um decimal. Vejamos:

10111001 =
1.2^7 + 0.2^6 + 1.2^5 + 1.2^4 + 1.2^3 + 0.2^2 + 0.2^1 + 1.2^0 =
128 + 0 + 32 + 16 + 8 + 0 + 0 + 1 =
185

Assim: 10111001b = 185d.

3-BASE HEXADECIMAL: Esta base é bastante utilizada em programação por ser uma forma mais simples de escrever um número binário. Ela utiliza 16 algarismos: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, onde cada posição dos algarismos tem um valor 16 vezes maior que o anterior. Os algarismos A, B, C, D, E, F equivalem respectivamente a 10, 11, 12, 13, 14 e 15 em decimal. Vejamos como fica o número 25BD:

25BD =
2 . 16³ + 5.16² + B.16¹ + D.16º =
8192 + 1280 + 176 + 13 =
9661d

Agora observe o comportamento do número 25BD quando convertido para binário:

25BD =
2.16³ + 5.16² + B.16¹ + D.16º =                                                          [como 16 = 2^4]
2.(2^4)^3 + 5.(2^4)^2 + B.(2^4)^1 + D.(2^4)^0 =2.2^12 + 5.2^8 + B.2^4 + D.2^0 =   
(2^1).2^12 + (2^2 + 2^0).2^8 + (2^3 + 2^1 +2^0).2^4 + (2^3 + 2^2 + 2^0).2^0 =
2^13 + 2^10 + 2^8 + 2^7 + 2^5 + 2^4 + 2^3 + 2^2 + 2^0 =             [binário = 0 ou 1]
10010110111101b

Observe que:

25BDh = 0010 0101 1011 1101b

   Isto é, cada algarismo hexadecimal corresponde a 4 algarismos em binário. Por isso usamos a base hexadecimal em programação: para evitar os "zeros" e "uns" tão facilmente confundíveis e para não ter o trabalho de digitar um número extenso.


CODIFICAÇÃO BCD - Binário Codificado em Decimal

   É uma forma de facilitar a comunicação com periféricos que tem de receber os números em binários já divididos em potências de 10.

   Assim a cada 4 algarismos binários temos um número que corresponde a um algarismo decimal.

   Observe como fica o número 1340d em BCD:

1340d = 0001 0011 0100 0000

   Percebeu a diferença do BCD para o binário? No BCD podemos ter conjuntos de 4 algarismos que variam até um máximo de 0101 = 9d , enquanto no binário o máximo é de 1111 = Fh.

   Até a próxima postagem pessoal, em que irei falar sobre a conversão entre bases numéricas e os conceitos básicos da lógica digital. 
   Que Deus abençõe vocês.