top of page

Eletrônica Digital

O que é Bit e Byte?

Bit é a sigla para Binary Digit, que em português significa digito binário, ou seja, é a menor unidade de informação que pode ser armazenada ou transmitida. É geralmente usada na computação, teoria da informação e processamentos de dados. Um bit pode assumir somente dois estados (valores) o 0 ou 1.
Quando eu (Jacobson) particularmente me refiro a computadores, estou me referindo à qualquer sistema que contenha um "cérebro com uma memória digital" exemplo. processador ou microcontrolador. Os dois são idealizados para armazenar instruções em múltiplos de bits que são denominados bytes. No início, byte tinha tamanho variável, mas atualmente tem oito bits, os quais são chamados de octetos. Existem também alguns termos para referir-se  a multiplos de bits, como Kilobit, Megabit Kb, Mb, e Gb.

Fisicamente, o valor de um bit é armazenado como uma carga elétrica acima ou abaixo de um nível padrão em um único capacitor dentro de um dispositivo de memória. Mas, bits podem ser representados fisicamente por vários meios, como pela eletricidade, fibras ópticas, rede wireless  etc.

Um byte é um dos tipos de dados integrais em computação, é usado para especificar o tamanho ou quantidade da memória ou da capacidade de  armazenamento de um dispositivo, independentemente do tipo de dados armazenados. A codificação padronizada de byte foi definida como sendo de 8 bits. O byte de 8 bits é mais comumente chamado de octeto no contexto de redes de computadores e telecomunicações.

A importância de bits e bytes se deve ao fato de tudo na informática ser medido através de bits e bytes.

11001011 01000110

SISTEMAS DE NUMERAÇÃO
Conjunto de dígitos (símbolos) separados e distintos que
podem ser combinados e assim representar infinitas
quantidades.
Em geral são sistemas posicionais, ou seja, o valor de cada
dígito depende da posição que ele ocupa no número.
Sistema Decimal
É composto de dez dígitos: 0, 1, 2, ...., 8, 9 (Base 10)
5986,32 = 5x103+9x102+8x101+6x100+3x10-1+2x10- 2
Sistema Binário
É composto de dois dígitos: 0 e 1 (Base 2)
(1011,01)2=1x23 + 0x22 + 1x21 + 1x20 + 0x2-1 +1x2- 2= (11,25)10

Sistema Octal
É composto de oito dígitos: 0, 1, 2, ..., 6, 7 (Base 8)
(1775,3)8 = 1x83 + 7x82 + 7x81 + 5x80 + 3x8-1= (1021,375)10
Sistema Hexadecimal
Composto de dezesseis dígitos: 0,1,..,9, A, B,...,E, F(Base 16)
(9FA)16 = 9x162 + 15x161 + 10x160 = (2554)10
3
Conversão de Decimal para outras Bases
Dividir a parte inteira do no. a ser convertido pelo no. de base
(2, 8 ou 16), até o último quociente inteiro, que será o bit mais
significativo do no. já convertido. Os bits seguintes serão os
restos obtidos nas divisões, obedecendo a seqüência: do
último ao primeiro resto.
Multiplicar parte fracionária pelo no. de base, extrair do
produto a parte inteira, que é o bit mais significativo, e
multiplicar o restante novamente pelo no. de base. Repetir
esta operação até que se obtenha zero (e o resultado é
exato) ou até que se chegue a uma repetição (que é uma
dízima) ou ainda a resultados não exatos (nem zero, nem
dízima).
Exemplos:
Base 10 para Base 2: (67,625)10 = (?)2
Parte inteira

67 2 (67)10 = (1000011)2
67     / 2
  1 33 / 2
    1 16 / 2
      0 8   / 2
       0 4   / 2
         0 2  / 2
           0 1

Parte Fracionária

0,625    0,250        0,500           (0,625)10=(0,101)2
     x2          x2             x2

1,250 0,500 1,000 (67,625)10=(1000011,101)2
4
Base 10 para Base 8: (92,635)10 = (?)8

Parte inteira

92 8
4 11 8
3 1

Parte Fracionária

0,635 0,08 0,64 0,12 0,96 0,68 0,44 0,52
x8 x8 x8 x8 x8 x8 x8 x8
5,080 0,64 5,12 0,96 7,68 5,44 3,52 4,16
(92,635)10 = (134,50507534...)8
Base 10 para Base16: (1000,635)10 = (?)16
Parte Inteira
1000 /16             mas (14)10 = (E)16
    8     62/16
           14    3
Parte Fracionária

0,635     0,16      0,56      0,96       0,36       0,76      0,16
   x16      x16       x16       x16         x16        x16       x16

10,160 2,56 8,96 15,36 5,76 12,16 2,56 repet.
(1000,635)10 = (3E8,A28F5C28F5C..)16

CONVERSÃO PARA BASE BINÁRIA

Toda a informação relevante você encontra neste arquivo em PDF. Estude-o!

24LC512

Em produção

A Microchip Technology Inc. 24LC512 é uma PROM serialmente eletratável serial (EEPROM) de 512Kb (64K x 8),

capaz de funcionar em uma ampla faixa de tensão (2.5V a 5.5V). Ele foi desenvolvido para aplicações avançadas de baixa

 potência, como comunicações pessoais e aquisição de dados. Este dispositivo também possui capacidade de gravação de

página de até 128 bytes de dados. Este dispositivo é capaz de lições aleatórias e seqüenciais até o limite de 512K. As

linhas de endereço funcional permitem até oito dispositivos no mesmo barramento, para um espaço de endereço de até 4

 Mbit. Este dispositivo está disponível nos pacotes DIP, SOIJ e DFN padrão de 8 pinos.

Datasheet 24LC512

Sou um parágrafo. Clique aqui para adicionar e editar seu próprio texto. É fácil.

PARA VOCÊ ESTUDANTE DE PROGRAMAÇÃO

DIRETIVA DE COMPILAÇÃO PARA O COMPILADOR CCS

Diretiva #byte:

 

#byte tris = 0x86 - É uma diretiva para criação de variável, atribuindo  a variável um endereço de

memória. Pode-se criar um nome e atribui o endereço de um registrador do PIC, utilizando este nome no programa

indicando o registrador endereçado.

 

Diretiva #bit:

 

#bit rb4 - 0x06.4 - É uma diretiva para criação de uma variável, atribuindo  a variável um endereço de um bit

específico onde se encontra o registrador indicado. É utilizado quando se quer monitoras o bit do registrador

indicado.

 

Diretiva #define:

 

#define acende output_high - É uma diretiva para criação de constante atribuindo um valor ou um comando.

Essa diretiva é para chamar um comando usando apenas um nome, ou atribuir um valor fixo a uma constante.

 

#define TRISB (int*) 0x86 - Essa diretiva cria uma variável de ponteiro de nome TIRSB , declara que é um dado do tipo

inteiro  e atribui um endereço 0x86 ou aponta para um endereço. Na função ele deve ser chamado da seguinte forma:

*TRISB - É obrigatório o uso do asterisco (ponteiro) antes do nome, é este asterisco que vai apontar para o

endereço especificado na diretiva

 

A diretiva define, É uma das mas importantes, porque ele pode criar uma constante. Ex: #define numero 255. Ela

pode ser usada no lugar de um comando Ex: #define liga oputput_h.igh Ou como vimos acima como ponteiro Ex:

#define TRISB (int*)0x86.

 

Diretiva #device:

#device ADC = 10 - Essa diretiva ativa o conversor AD. Ela diz ao compilador para usar uma conversão de 10 bit.

Um número vai depender do PIC utilizado.

                           EXEMPLO DE CÓDIGO – 2 SEG. COM TIMER 0

 

#byte intcon = 0x0B          // end. do intcon que contém a flag de estouro do tmr0.


#bit T0IF = intcon.2          // flag de estouro do timer 0 (T0IF = bit2).


void main(){


int cont = 31;                // variável que armazena a quantidade de estouros do timer.


setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);

                                        /*configurando o timer para trabalhar

                                        como temporizador e prescaler em 256.*/


set_timer0(0);           // valor inicial para contagem do timer, neste caso zero.


            while(true) {


            if(T0IF){             // se t0if for igual a 1, ou seja, se houve um estouro de timer...


            T0IF = 0;            // zera a flag do bit t0if para poder sinalizar um novo estouro.


            cont--;               // decrementa a variável cont, que tinha o valor inicial de 31.


            if(cont==0) {        // verifica se o valor da variável cont já chegou em   zero.

            output_toggle(pin_b0);                  // caso sim, inverte o nível do pino rb0.


            cont = 31;                                    // 31 em cont para que ela possa retornar.


           }


        }


    }


}    ******Fim do prigrama*******

           DEDUÇÃO DA RESOLUÇÃO DO TIMER 0

de acordo com om registrador do 16F628A em seu Datasheet

R = 1/(4000000/4)*(256 -0)*255 = 0,065s ou 65ms.

*************************************************

         ESTOURO DO TIMER 0 ATRAVÉS DA EQUAÇÃO 

                                      Tet= R*n

                                       para 2 SEG.
onde:
Tet= tempo de estouro do timer (desejado)


R = resolução (tempo de estouro calculado com                    fórmula anterior).


n = número de repetições de estouros para que atinja o valor desejado no timer com prescaler de 255

Tet= R*n
2= 0,065*n
n = 2/0,065
n = 30,8.

Ou seja, 31 estouro ou transbordamento para temporização de 2 seg.

Clique na imagem para baixar o Programmer Pic Kit3 stand Alone

CRISTAL OSCILADOR DE QUARTZO E RESSONADOR

Come é a execução de um programa em "C" ?

COMPILADOR MICRO C PRO FOR PIC

 

 

// Botão de retenção
// COMPILADOR: Micro C Pro for PIC MICROCHIP
// MCU:  PIC16F84A => CLOCK 4MH
// DATA: 30/12/2017
// AUTOR: JACOBSON DA G. FERREIRA

#define S1 RB0_bit     // mapeamento
#define LED RB1_bit    // mapeamento
short int estado = 0;        // variável de controle global

void main()
{

     TRISB = 0x01;  // Registrador TRIS  RB1 saída e RB0 entrada

     PORTB = 0x01;  // Registrador PORT  pinoRB1 low e RB0 high

     OPTION_REG.f7 = 0;  // Registrador OPTINREG

     while(1)
      {
         if( (!S1) && !estado)
          {
             delay_ms(30);
             LED = ~LED;   
             estado = 1;
          }

         if( (S1) && estado)
          {
             delay_ms(30);
             estado = 0;
          }
     }
}

*********************************************************

COMPILADOR ARDUINO


// BOTÃO DE RETENÇÃO
// DATA DE CRIAÇÃO: 10/12/2017
// MODIFICADO POR:    JACOBSON DA G.FERREIRA


#define botao 8
#define led 2
boolean estado = 0; 
void setup()
 {
    pinMode(13, 0x01);      
    pinMode(botao,INPUT_PULLUP);
    pinMode(led, OUTPUT);
    digitalWrite(led, LOW);
 }

   void loop()
     {
        if( !digitalRead(botao) && !estado )  
         {
            digitalWrite(led,!digitalRead(led));
            delay(50);
           estado = 1;  
         }
        if(digitalRead(botao) && estado )  
         {
            delay(50);
            estado = 0;
         }
     }  



###################################################

COMPILADOR CCS

// Botão de retenção

// COMPILADOR:  PIC C COMPILER (CCS)

// MCU:  PIC16F84A => CLOCK 4MHz

// DATA: 30/12/2017

// AUTOR: JACOBSON DA G. FERREIRA


#include <16f84a.h>
#user delay(clock = 40000)
#fuses  XT,  NOWDT, NOMCLR, NOPROTECT, NOLVP, PUT
#use fast_oi (b)
short int estado = 0; // variável global  
void nivel();       // prtótipo de função


// Não foi utilizado mapeamento de hardware porem poderá usa-lo

void main ()
{
   set_tris_b(0x01); // pino RB0 entrada do botão
   output_b (0x00);// inicialização em zero  
   output_b_pullup; // Habilita resistores internos
   nivel();
}

   while(TRUE)
  {

    void nivel() // chamada da função
    {
      if ( !input( pin_b0 ) && !estado  )  //testa botão
       {
         delay_ms( 50 );
         output_toggle( pin_b7 ); //inverte estado do pino RB7
         estado = 1;    //a variável passa a ser 1 agora
       }
 
      if ( input( pin_b0 ) && estado == 1 )   //testa botão
       {
         delay_ms( 50 );
         estado = 0;    // a variável retorna à zero
       }
    }
  }

***********************************************************
 


// DATA:08/01/2018
// Wagner Rambo  Modificado por Jacobson
// Softwarer: Micro C pro for Pic
// Ocupação de memória RAM 4%  ROM 15%
#define S2  RA0_bit
#define S1  RA1_bit
#define LED2 RA2_bit
#define LED1 RA3_bit
#define buzzer RB7_bit

unsigned char control = 0x01, out0, out1, out2, out3;

int cont;

void Beep(void);

void main()
{
     char i =  0x00;
     CMCON =   0x07;
     TRISA =   0X03;
     TRISB =   0X00;

     PORTA =   0x00;
     PORTB =   0x00;
     Beep();
     while(1)
     {
            if (S1 == 0x00 && control == 0x01)
            {
                  LED2 = ~LED2;
                  delay_ms(500);
            }

            else if (S2 == 0x00 && control == 0x01)
            {
                  out0 = LED2;
                  control = 0x02;
                  Beep();
                  delay_ms(500);
                  Beep();
            }

            if (S1 == 0x00 && control == 0x02)
            {
                  LED1 = ~LED1;
                  delay_ms(500);
            }

            else if (S2 == 0x00 && control == 0x02)
            {
                  out1 = LED1;
                  control = 0x03;
                  Beep();
                  delay_ms(500);
                  Beep();
            }


            if (S1 == 0x00 && control == 0x03)
            {
                  LED2 = ~LED2;
                  delay_ms(500);
            }

            else if (S2 == 0x00 && control == 0x03)
            {
                  out2 = LED2;
                  control = 0x04;
                  Beep();
                  delay_ms(500);
                  Beep();
            }

            if (S1 == 0x00 && control == 0x04)
            {
                  LED1 = ~LED1;
                  delay_ms(500);
            }

            else if (S2 == 0x00 && control == 0x04)
            {
                  out3 = LED1;
                  control = 0x05;
                  Beep();
                  delay_ms(500);
                  Beep();
            }

            if(control == 0x05)
            {
               //nota_DO();

               for(i = 0; i < 4; i++)
               {
                     LED1 = 0x01;
                     LED2 = 0x01;
                     Beep();
                     delay_ms(100);
                     LED1 = 0x00;
                     LED2 = 0X00;
                     Beep();
                     delay_ms(100);
               }

               control = 0x01;

               RB0_bit = out0;
               RB1_bit = out1;
               RB2_bit = out2;
               RB3_bit = out3;
           }
     }
     
}
     void Beep()
     {
          for(cont = 0; cont < 80; cont++)
          {
                   RB4_bit = 1;
                   delay_ms(1);
                   RB4_bit = 0;
                   delay_ms(1);
          }

     }


 

Circuito montado em protoboard do código acima com sua fonte de cinco volts

millis()

Realmente a compreensão do funcionamento da função Millis()

é a princípio meio confusa, mas eu preparei um GIF que ajuda muito a compreender o tratamento desta função

millis.gif

Excelente apostila em PDF sobre lógica de programação

  • b-facebook
  • Twitter Round
  • b-googleplus
bottom of page