Pesquisar neste blog

28/07/2018

Mini Teste 2

1. O diagrama de estado abaixo representa o funcionamento de um contador. Obter o seu circuito no modo assíncrono, utilizando flip - flops T.












Resolução:


CLIQUE AQUI para fazer o download do arquivo feito no Logisim


2. Preencha a tabela (coluna do código de Gray). Proponha um circuito que utiliza porta lógicas para transformar Gray em código Binário.















Resolução:









27/07/2018

Contador síncrono JK

Contador síncrono decrescente do tipo JK
Contador síncrono decrescente com flip - flop JK



















CLIQUE AQUI para fazer o download do arquivo feito no Logisim

Palavras chave:

JK型の同期カウンタの減少
JK 유형의 동기 카운터 감소
Declining synchronous counter of type JK
ตัวนับซิงโครนัสที่ลดลงของ JK ชนิด
Absenkender Synchronzähler vom Typ JK
拒絕JK型同步計數器
Nedgang synkron teller av typen JK
Contatore sincrono decrescente di tipo JK
Πτώση σύγχρονου μετρητή τύπου JK
Contador síncrono decreciente del tipo JK
Klesající synchronní čítač typu JK
إنقاص عداد متزامن من النوع J
Compteur synchrone en déclin de type JK
Pevçûnek hevpeymaniya JK-ê ya duyemîn derxistin
Сбой синхронного счетчика типа JK
Dekline synchronous vann san preskripsyon nan kalite JK

26/07/2018

Contador Síncrono JK

CONTADOR SÍNCRONO CRESCENTE TIPO JK
Contador síncrono crescente com flip flop JK












CLIQUE AQUI para fazer o download do arquivo feito no Logisim

Palavras chave:

GROWING SYNCHRONOUS COUNTER TYPE JK
CROSSING SYNCHRONOUS COUNTER TYPE JK
TIPO DI CONTATORE SINCRONO CRESCENTE JK
BÜYÜME SENKRON SAYACI TİPİ JK
WACHSEN SYNCHRON-ZÄHLER TYP JK
نمو متزامن متزامن مع نوع JK
CINEÁL COMHARTHA SYNCHRONACH AG FÁS JK
ประเภทตัวนับแบบทวนคำ JK ของ GROWING
РОСТ СИНХРОННОГО СЧЕТА ТИПА JK
ΑΝΑΠΤΥΞΙΑΚΟΣ ΣΥΓΧΡΟΝΟΣ ΑΝΤΙΣΤΟΙΧΟΣ ΤΥΠΟΣ JK
不斷增長的同步計數器型JK
CONTADOR SÍNCRONO CRECIENTE TIPO JK
재계 동시 카운터 유형 JK
同期型カウンタ型JKの成長

19/07/2018

Sistemas Operacionais

EXERCÍCIOS SOBRE ENTRADA E SAÍDA


1) Explique o modelo de camadas aplicado na gerência de dispositivos.

Resp : A gerência de dispositivos é estruturada através de camadas em um modelo semelhante ao apresentado para o sistema operacional como um todo. As camadas de mais baixo nível escondem características dos dispositivos das camadas superiores, oferecendo uma interface simples e confiável ao usuário e suas aplicações. As camadas são divididas em dois grupos, onde o primeiro grupo visualiza os diversos tipos de dispositivos do sistema de um modo único, enquanto o segundo é específico para cada dispositivo. A maior parte das camadas trabalha de forma independente do dispositivo.


2) Qual é a principal finalidade das rotinas de E/S?

Resp : Tornar as operações de E/S o mais simples possível para o usuário e suas aplicações. Com isso, é possível ao usuário realizar operações de E/S sem se preocupar com detalhes do dispositivo que está sendo acessado.


3) Quais as diferentes formas de um programa chamar rotinas de E/S?

Resp : Por comandos de leitura/gravação e chamadas a bibliotecas de rotinas oferecidas por linguagens de alto nível ou diretamente através de uma system call em um código de alto nível.


4) Quais as principais funções do subsistema de E/S?

Resp : Criar uma interface padronizada com os device drivers e oferecer uma interface uniforme com as camadas superiores.


5) Por que o sistema de E/S deve criar uma interface padronizada com os device drivers ?

Resp : Para que seja possível a inclusão de novos drivers sem a necessidade de alteração da camada de subsistema de E/S.


6) Explique o funcionamento da técnica de DMA e sua principal vantagem.

Resp : De forma simplificada, uma operação de leitura em disco utilizando DMA teria os seguintes passos. A UCP, através do device driver, inicializa os registradores do controlador de DMA e, a partir deste ponto, fica livre para realizar outras atividades. O controlador de DMA, por sua vez, solicita ao controlador de disco a transferência do bloco do disco para o seu buffer interno. Terminada a transferência, o controlador de disco verifica a existência de erros e, caso não haja erros, o controlador de DMA transfere o bloco para o buffer de E/S na memória principal. Ao término da transferência, o controlador de DMA gera uma interrupção avisando ao processador que o dado já encontra-se na memória principal. A principal vantagem dessa técnica é evitar que o processador fique ocupado com a transferência do bloco para a memória.




EXERCÍCIOS SOBRE MEMÓRIA VIRTUAL


1) Quais as funções básicas da gerência de memória ?

Resp : Maximizar o número de processos na memória, permitir a execução de programas maiores que a memória física, compartilhamento de dados na memória e proteção da memória utilizada por cada processo e pelo sistema operacional.


2) Considere um sistema computacional com 40Kb de memória principal e que utiliza um sistema operacional de 10Kb que implemente alocação contígua de memória. Qual a taxa de subtuilização da memória principal para um programa que ocupe 20Kb de memória?

Resp : Considerando que o sistema opeacional e o programa somados ocupam ¾ da memória principal, temos 25% de subutilização da memória.


3) Qual a diferença entre fragmentação interna e fragmentação externa da memória principal ?

Resp : Fragmentação interna ocorre em espaços livres e contíguos na memória principal que são pré-alocados por processos, não possibilitando, portanto, o uso por outros processos. Fragmentação externa ocorre em espaços livres e contínuos, porém tão pequenos que não possibilitam a alocação de programas por processos.

11/07/2018

05/07/2018

Contador assíncrono Tipo T

Contador crescente / decrescente do tipo T ímpar
Contador crescente ímpar








Clique aqui para fazer o download do arquivo no Logisim

Palavras chave:
T-Type Synchronous Counter
Compteur synchrone de type T
T 형 동기 카운터
T Tipi Senkron Sayaç
Синхронный счетчик T-типа
T-Type Synkron Teller
T-typ synkron räknare
Contatore sincrono di tipo T

04/07/2018

Contador assíncrono com FLIP-FLOP tipo T

Contador crescente / decrescente com Flip Flop tipo T em PAR ou ÍMPAR






Clique aqui para fazer o download do arquivo feito no Logisim

29/06/2018

NÚMEROS PRIMOS NO LOGISIM

CIRCUITO IDENTIFICADOR DE NÚMEROS PRIMOS

Objetivo: Identificar os números primos com 5 entradas = 32 bits de dados

Tabela de 5 entradas com identificador de números primos




























































CLIQUE AQUI para fazer o download do arquivo no Logisim

19/06/2018

ELETRÔNICA DIGITAL

Uma indústria produz garrafas grandes e pequenas, transparente e coloridas, de vidro e plástico. Projete um circuito para identificar as garrafas: de vidro e transparente ou pequena colorida ou pequena de vidro e transparente. O circuito deve ter três entradas que são os sensores de tamanho, sensor de transparência e sensor que detecta se é vidro ou plástico.



















Solução:

G = Grande = A
T = Transparente = B
V = Vidro = C




























Resolvendo o mapa de karnaugh













Uma indústria produz garrafas grandes, pequenas, transparentes, coloridas, de vidro e plástico. Projete um circuito para identificar as garrafas: de plástico transparente; grande colorida e pequena de plástico transparente. O circuito deve ter três entradas que são os sensores de tamanho, sensor de transparência e sensor que detecta se é vidro ou plástico. 


Resolução:




11/06/2018

Ordenação de matriz em C/C++

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define size 4

    void ordenaMatriz (int n, int mat[size][size]) {
        int i, j, l, c;
        n = size;

        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
             
                for (l = 0; l < n; l++) {
                    for (c = 0; c < n; c++) {
                     
                        if (mat[i][j] < mat[l][c]) {
                            int aux = mat[i][j];
                            mat[i][j] = mat[l][c];
                            mat[l][c] = aux;
                        }
                    }
                }
            }
        }
    }

    int main (void) {
     
        int i, j, n = size, mat[size][size];
     
        srand(time(NULL));
     
        printf("\n ORDENACAO DE MATRIZES\n");
     
        printf("\n\n Ordem Inicial:\n\n");
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                mat[i][j] = rand() % 99 +1;
                printf(" %02d", mat[i][j]);
            }
            printf("\n");
        }
     
ordenaMatriz(size, mat); 
        //ordenaMatriz(n, mat);

        printf("\n\n Apos Ordenacao:\n\n");
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                printf(" %.2d", mat[i][j]);
            }
            printf("\n");
        }
        printf("\n\n ");
        system("pause");
         
        return 0;
    }

09/06/2018

DECODIFICADOR 74LS47 COM DISPLAY DE 7 SEGMENTOS

Material

* 1 Display 7 segmentos "Anodo"
* 1 CI 74LS47


L = Nível baixo
H = Nível alto
Tabela de estado CI 74LS47


























Circuito 74LS47 com display 7 Segmentos




















08/06/2018

Exercícios resolvidos no Neander






























SOMA DE 2 NÚMEROS
SOMA DE 3 ... NÚMEROS NO NEANDER
Faça um programa para somar o conteúdo dos endereços 128, 129 e 130 e armazene o resultado no endereço 131.
















SUBTRAÇÃO DE 2 NÚMEROS NO NEANDER
Faça um programa para subtrair 2 variáveis que estão nos endereços 128 e 129, e armazene o resultado no endereço 130.
















Faça um programa que identifica a menor de valor dentre três variáveis. O resultado (o menor) deve ser armazenado na posição R. As variáveis e o resultado devem estar dispostos segundo o mapa de memória abaixo: Mapa de memória: 
140: X
142: Y 
144: Z
130: R

MULTIPLICAÇÃO DE 2 NÚMEROS NO NEANDER



































CONTROLE DE REPETIÇÃO
Realizar um contador que decremente o valor de uma variável subtraia 1 e armazene da posição 128 na posição 134 do acumulador

Ex:
Funcionaria como um decremento em linguagem C/C++

for(int i = 10; i >=0; i--){
   printf("%d", i);
}

O resultado seria 10, 9, 8, ... 0.
























MULTIPLICAÇÃO DE 2 NÚMEROS NO NEANDER


































Comparação de 3 números no Neander e armazenar o maior número na posição 131 de memória







































03/06/2018

Exercício de Circuito Lógico Combinacional

4.28) Projete um circuito lógico cuja saída seja nível ALTO sempre que A e B forem nível ALTO, enquanto C e D estiverem em nível BAIXO ou ambas em nível ALTO.

Solução:


























Resolvendo o mapa de karnaugh

31/05/2018

CONVERSÃO DIGITAL - ANALÓGICA

K = Saída analógica / Entrada Digital

Vout = K . Entrada Digital


1) Um DAC de cinco bits tem saída em corrente. Para entrada digital de 10100, é gerada corrente de saída de 10 mA. Qual será o Iout para uma entrada digital de 11101 ?

Solução:

(10100)2 = (20)10
(11101)2 = (29)10

K = Fator de proporcionalidade

K = 10 mA / 20 = 0,5 mA

Iout = 0,5 mA . 29 = 14,5 mA


2) Qual o maior valor de tensão de saída de um DAC de 8 (oito) bits que gera 1 V para uma entrada digital de 110010 ?

Solução:

(110010)2 = (50)10

Maior tensão de saída  8 bits = (11111111)2 = (255)10

ou
210 -1 = (255)10

K = 1V / 50 = 0,02 V

Vout = K . Entrada Digital = 0,02V . 255 = 5,1V


RESOLUÇÃO (Tamanho do degrau)

3) Um DAC de 10 bits tem tamanho de degrau de 10 mV. Determine a tensão de saída de fundo de escala e a resolução percentual.

Resolução:

% Resolução = (tamanho do degrau / fundo de escala(F . S)) . 100%

210 -1 = 1023 degraus de 10 mV
Saída de fundo = 10 mV . 1023 = 10,23 V

% Res = (0,01V / 10,23 V ). 100 = 0,0977 % = ± 1%

29/05/2018

Exercício lógico combinacional

Projete um circuito lógico que controla uma porta de elevador em um prédio de três andares . O circuito tem 4 entradas em que M é um sinal lógico que indica quando o elevador está se movendo (M = 1) ou parado (M = 0) , F1, F2, F3 são os sinais indicadores dos andares que são normalmente nível BAIXO, passando para o nível ALTO apenas quando o elevador estiver posicionado em determinado andar.

Solução:






















































































28/05/2018

Contadores e Registradores

Um contador é necessário para contar o número de intens que passam por uma esteira de transporte. Uma fotocélula combinada a uma fonte de luz é usada para gerar um único pulso cada vez que um item passa pelo feixe de luz. O contador tem de ser capaz de contar mil itens. Quantos FFs são necessários ?

Solução:

Determinando o valor de N de modo que 2N ≥ 1000
29 = 512, logo: Não são o suficiente
210  = 1024 , portanto 10 FFs produzem um contador que conta até 1111111111 = ( 1023 em decimal)
10 FFs são necessários.

11/05/2018

Exercicios resolvidos com ponteiro em C/C++

#include <stdio.h>

#include <stdlib.h>



/* 1 - ESCREVA UM PROGRAMA QUE DECLARE UM INTEIRO, UM REAL E UM CHAR, E PONTEIROS PARA INTEIRO, REAL, E CHAR. ASSOCIE AS VARIÁVEIS AOS PONTEIROS(USE &). MODIFIQUE OS VALORES DE CADA VARIÁVEL USANDO PONTEIROS. IMPRIMA OS VALORES DAS VARIÁVEIS ANTES E APÓS A MODIFICAÇÃO.*/



main (void){



int num = 15;



double valor= 20.77;



char letra = 'h';



int *Endint = &num;



float *Endfloat = &valor;



char *Endchar = &letra; 



printf("Variavel inteiro = %d \nEndereco ponteiro inteiro = %i\n\n", num, Endint);



printf("Variavel float  =  %.2f\nEndereco do ponteiro float = %i\n\n",valor, Endfloat);



printf("Variavel char  = %c\nEndereco do ponteiro  char = %i\n\n",letra, &letra);



printf("\tAPOS MODIFICACAO:\n");



*Endint = 22;



*Endfloat = 50.35;



*Endchar = 'k';



printf("\nEndereco do ponteiro: %d\nAlterado para o valor: %d\n\n", Endint, *Endint);



printf("Endereco do ponteiro: %d\nAlterado para o valor: %d\n\n", Endfloat, *Endfloat);



printf("Endereco do ponteiro: %i\nAlterado para o caracter: %c\n\n", Endchar, *Endchar);



return EXIT_SUCCESS;



}







#include <stdio.h>



#include <stdlib.h>



/*2- ESCREVA UM PROGRAMA QUE CONTENHA DUAS VARIÁVEIS INTEIRAS.COMPARE



SEUS ENDEREÇOS E EXIBA O MAIOR ENDEREÇO.*/



int main (void){



int a = 27, b = 77;



int *EndA = &a , *EndB = &b;



printf("\tA = %d     B = %d\n\n",a, b);



printf("Endereco de A = %d\nEndereco de B = %d\n",EndA, EndB);



if(EndA > EndB){



if(&a > &b) 



printf("\n\nEndereco %d de A eh maior: \n",EndA);



//printf("\n\nEndereco %d de A eh maior: \n", &a);



}else{



printf("\n\nEndereco %d de B eh maior: \n",EndB);



//printf("\n\nEndereco %d de B eh maior: \n",&b);



}



//ou



/*if(&a > &b){ 



printf("\n\nEndereco %d de A eh maior: \n", &a);



}else{



printf("\n\nEndereco %d de B eh maior: \n",&b);







printf("\n");*/



return EXIT_SUCCESS;



}



#include <stdio.h>



#include <stdlib.h>



/* 3 - Escreva um programa que contenha 2 variaveis inteiras. Leia 



essas variavéis do teclado. Em seguida, compare seus endereços



e exiba o maior endereço.*/



int main (void){



int a, b;



printf("\tDigite o valor de a: ");



scanf("%d",&a);



printf("\n\tDigite o valor b: ");



scanf("%d",&b);



printf("\nValor de a = %i\nValor de b = %i\n\n",a, b);



int *EndA = &a, *EndB = &b;



printf("Endereco de a = %i\nEndereco de b = %i\n\n",EndA, EndB);



if(EndA > EndB){



printf("\n\nEndereco %d de a eh maior:",EndA);



}else{



printf("\n\nEndereco %d de b eh maior:", EndB);



}



printf("\n\n");



return EXIT_SUCCESS;



}





#include <stdio.h>



#include <stdlib.h>



#define SIZE 5



/*4 - CRIE UM PROGRAMA QUE CONTENHA UM ARRAY DE 5 ELEMENTOS INTEIROS. lEIA



ESSE ARRAY DO TECLADO E IMPRIMA O ENDERECO DE POSICOES CONTENDO VALORES PARES.*/



int main (void){



int vet[SIZE], i;



int *Endvet;



Endvet = vet;



printf("\tDigite %d elementos:\n",SIZE);



for(i = 0; i < SIZE; i++){



printf("%d: ",i+1);



scanf("%d", &vet[i]);



}



printf("\n\tELEMENTOS:\n\n");



for(i = 0; i < SIZE; i++){



printf("%d  ",vet[i]);



}



printf("\n\nENDERECOS DO ARRAY:\n");



for(i = 0; i < SIZE; i++){



printf("%i : %i : %i\n",i+1, vet[i], Endvet++);







printf("\nENDERECOS DO ARRAY PAR:\n");



Endvet = vet;



for(i = 0; i < SIZE; i++){



if(vet[i] %2 == 0){



printf("\nNumero %d eh par : Posicao = %d",vet[i], Endvet);



}



Endvet++;



}



return EXIT_SUCCESS;



}



#include <stdio.h>



#include <stdlib.h>



#define SIZE 10



/* 5 - CRIE UM PROGRAMA QUE CONTENHA UM ARRAY DE FLOAT CONTENDO 10 ELEMENTOS.



IMPRIMA O ENDERECO DE CADA POSICAO DESSE ARRAY.*/



int main (void){



float vet[SIZE];



int i, *Endvet;



Endvet = vet;



printf("\tELEMENTOS:\n\n");



for(i = 0; i < SIZE; i++){



printf("[%.2f] ", (vet[i] = 10 + rand() %100) / 3.27);



}



printf("\n\nENDERECOS DO ARRAY:\n\n");



for(i = 0; i < SIZE; i++){



printf("%i : %.2f : %i\n",i+1, vet[i]/3.27, Endvet++);







return EXIT_SUCCESS;



}