Pesquisar neste blog

06/09/2022

Mensagem box no Apps google sheets

Código feito na IDE do google sheets

function MSG(s1, s2){
  Browser.msgBox("Blog da Engenharia Cotidiana", "Bem Vindo(a)", Browser.Buttons.OK);
}

















Palavras chave:

Cuadro de mensaje en hojas de Google de aplicaciones
Message box in Apps google sheets
Pole wiadomości w arkuszach Google Apps
Üzenőmező az Apps Google-lapokon
Apps google sheet 中的消息框
תיבת הודעות ב-Google Sheets של Apps
Оквир за поруке у Гоогле табелама за апликације
Hafatra hafatra ao amin'ny Apps google sheets
Meddelelsesfelt i Apps google sheets

02/09/2022

Interrupção com PIC 16F877A

Objetivo: Acionar por meio de interrupção uma operação já em andamento

Código feito em CCS C Compiler

#include <16F877A.h>
#use delay(clock = 20MHz)
#fuses XT, NOWDT, PUT, NOWRT
#use fast_io(B)

#INT_EXT
ext_isr(){
   output_toggle(pin_B7);
}

void main(){
   set_tris_B(0x01); //B0 com entrada, B7 como salida
   output_low(PIN_B7);
   port_b_pullups(TRUE);
   enable_interrupts(int_ext);
   ext_int_edge(L_TO_H);
   enable_interrupts(GLOBAL);
   WHILE(1){
            
      for(int i = 0; i < 100; i++){
         output_toggle(PIN_D0);
         delay_ms(500);
      }
   }
   
}


Saída gerada no software Proteus 7.9





30/08/2022

TERMÔMETRO COM PIC 16F877A

(Componente NTSA0WB203)

Código feito em CCS C Compiler

//PÁGINA 136
#include <16F877A.h>
#device adc = 10
#fuses XT, NOWDT
#use delay (clock = 4MHz)
#include <math.h>
#include <lcd.c>

float tv, tr, temp, y;
int16 value;

void main(){
   lcd_init();   
   setup_port_a(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   delay_ms(10);
   
   while(true){
      value = read_adc();
      tv = 5.0 * value / 1024.0;
      tr = tv * 10000.0 / (5.0 - tv);
      y = log(tr / 20000.0);
      y = (1.0 / 298.15) + (y * (1.0 / 4050.0));
      temp = 1.0 / y;
      temp = temp - 273.15;
      
      printf(lcd_putc, "\f\nT = %04.2fC",temp);
      delay_ms(1000);
   }
}



24/08/2022

Gráfico de barras no google sheets
















Comando utilizado:

=SPARKLINE(B3;{"charttype"\"bar";"max"\1;"color1"\"orange"})
=SPARKLINE(B4;{"charttype"\"bar";"max"\1;"color1"\"red"})
=SPARKLINE(B5;{"charttype"\"bar";"max"\1;"color1"\"7CFC00"})
=SPARKLINE(B6;{"charttype"\"bar";"max"\1;"color1"\"grey"})
=SPARKLINE(B7;{"charttype"\"bar";"max"\1;"color1"\"DeepSkyBlue"})

17/08/2022

Onda senoidal PWM com PIC 16F877A

Código feito em CCS C Compiler

#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for

#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock = 20MHz)

//============== TABELA COM VALORES DE UMA ONDA SENOIDAL ================//
const unsigned int seno[73] = { 0,0,1,2,3,5,7,9,12,14,18,21,25,29,33,37,41,
 45,50,54,58,62,66,70,74,78,81,85,87,90,92,94,
 96,97,98,99,99,99,98,97,96,94,92,90,87,85,81,
 78,74,70,66,62,58,54,50,45,41,37,33,29,25,21,
 18,14,12,9,7,5,3,2,1,0};
//======================================================================//

unsigned int8 ii = 0, ton;
#int_RTCC
void RTCC_isr(void){
   ii=ii+1; ton = seno[ii];
   set_pwm1_duty(ton);
   if(ii>71)ii=0;
}

void main(){
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);

   // Programação do Timer 0 - Overflow a cada 819 us
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);

   setup_timer_1(T1_DISABLED);

   // Programação do Timer 2 - usado no PWM
   setup_timer_2(T2_DIV_BY_1,99,1);

   setup_ccp1(CCP_PWM);
   set_pwm1_duty(99); // Ton = 100%
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

    while(true){
      /*
      ii=ii+1; ton = seno[ii];
      set_pwm1_duty(ton);
      if(ii>71)ii=0;
      delay_ms(1);
      */
   
   }
}















06/08/2022

Proporção

1- De cada 10 alunos de uma sala de aula, 6 são do sexo feminino. Sabendo que nesta sala de aula há 18 alunos do sexo feminino, quantos são do sexo masculino ?

Resolução:

6 / (10 - 6) = 18 / x
x = 12 alunos

2- Foram construídos 2 reservatórios de água, a razão entre os valores internos do 1° e do 2° é de 2 para 5, e a soma desses volumes é 14 . Qual é a diferença entre as capacidades desses 2 reservatórios ?

Resolução:

1° --> 2x
2° --> 5x

2x + 5x = 14            2 . 2 = 4
x = 2                        5 . 2 = 10

10 - 4 = 6 m³


3- Manoel vendeu seu carro por 27.000 R$ e teve um prejuízo de 10% sobre o valor de custo do total do veículo, qual o valor do carro ?

Resolução:

100 - 10 = 90%
27.000 ---> 100%
x ----------> 90%

x = 30.000 R$


4- Em um mapa cuja escala era de 1:15104, a menor distância entre dois pontos A e B, medida com a régua, era de 12 cm. Isso significa em real é igual a ?

Resolução:

1 ---> 15104
12 --> x

1 / 15104 = 0,12 / x

x  = 1812,48 m

21/07/2022

Menu com PIC 16F877A

Objetivo: Executar um menu de controle por meio de um botão. O programa deve mostrar um menu de 3 funções. Por meio do botão, um dos os 3 elementos e com outro executar a função (neste caso acender um led).

Código feito em CCS C Compiler

#include <16F877A.h>
#fuses XT, NOWDT
#use delay(clock = 20M)
#include <lcd.c>
#use standard_io(C)
#use standard_io(A)

enum funciones {med, cal, ini }; // atribui um valor a cada elemento: med = 0, cal = 1, ini = 2

void medir(void){
   output_toggle(PIN_C0);
}

void calibrar(void){
   output_toggle(PIN_C3);
}

void inicializar(void){
   output_toggle(PIN_C6);
}

void run_func(int numfunc){
   
   switch(numfunc){
      case med:
         medir();
      break;
      
      case cal:
         calibrar();
      break;
      
      case ini:
         inicializar();
      break;
   }
}

void main(){
   char item;
   char n_menus = 3;
   //bit_set(TRISA, 0);
   lcd_init();
   
   while(TRUE){
      if(input(PIN_A0) == 1){
         item++;
         delay_ms(300);
         lcd_putc('\f');
         
         if(item > (n_menus - 1)) {item = 0;           
         }
      }
      
      switch (item) {
         
         case 0:
            lcd_gotoxy(1, 1);
            printf(lcd_putc,"MEDIR");
            lcd_gotoxy(1, 1);
         break;
         
         case 1:
            printf(lcd_putc,"CALIBRAR");
            lcd_gotoxy(1,1);
         break;
         
         case 2:
            printf(lcd_putc,"INICIALIZAR");
            lcd_gotoxy(1,1);
         break;
      }
      
      if (input(PIN_A4) == 1){
         delay_ms(200);
         run_func(item);
      }
   }
}








15/07/2022

Matriz sequencial por colunas

Objetivo: Somar 16 bits por coluna em uma matriz 10 x 10 e imprimir seu resultado.

Resolução feita C/C++

#include <stdio.h>
#define size 10

int matriz[size][size];
int aux = 0, cont = 0, somador = 0;

int c1 = 2, c2 = 5, c3 = 10, c4 = 13, c5 = 20;

int i, j;

int main(){
    
    for(i = 0; i < size; i++){
        for(j = 0; j < size; j++){
            matriz[i][j] = aux;
            aux = aux + 16;
            cont++;
            printf("%d\t",matriz[i][j]);
            
            if(cont >= size){
                somador++;
                aux = somador;
                cont = 0;
                
            }
        }
        printf("\n");
    }
    return 0;
}

Saída gerada


12/07/2022

Decodificador 4511 com PIC 16F877A usando matriz

Objetivo: Fazer um contador com usando o decodificador 4511 utilizando apenas as portas C do PIC, logo depois utilizar as entradas por byte para identificar seu valor.

Resolução feita em CCS C Compiler

#include <16F877A.h>
#include <math.h>
#use delay(clock = 20M)
#define size 10
#include <lcd.c>

const unsigned char matriz[size][size] = {
    {0, 16, 32, 48, 64, 80, 96, 112, 128, 144},
    {1, 17, 33, 49, 65, 81, 97, 113, 129, 145},
    {2, 18, 34, 50, 66, 82, 98, 114, 130, 146},
    {3, 19, 35, 51, 67, 83, 99, 115, 131, 147},
    {4, 20, 36, 52, 68, 84, 100, 116, 132, 148},
    {5, 21, 37, 53, 69, 85, 101, 117, 133, 149},
    {6, 22, 38, 54, 70, 86, 102, 118, 134, 150},
    {7, 23, 39, 55, 71, 87, 103, 119, 135, 151},
    {8, 24, 40, 56, 72, 88, 104, 120, 136, 152},
    {9, 25, 41, 57, 73, 89, 105, 121, 137, 153}   
};

int a, b, c, d, e, f, g, decimal;
unsigned int8 aux, dezena, unidade;

void main(void){
   
    for(int i = 0; i < size; i++){
      for(int j = 0; j < size; j++){
         output_c(matriz[i][j]);
         delay_ms(100);
      }
    }
    delay_ms(500);
    
    lcd_init();
    
   while(TRUE){      
      
      a = input(PIN_B0);
      b = input(PIN_B1);
      c = input(PIN_B2);
      d = input(PIN_B3);
      e = input(PIN_B4);
      f = input(PIN_B5);
      g = input(PIN_B6);
      
      decimal = (a<<6)|(b<<5)|(c<<4)|(d<<3)|(e<<2)|(f<<1)|(g<<0);
      
      printf(lcd_putc,"\fBINARIO = %u%u%u%u%u%u%u \nDECIMAL = %u"a, b, c, d, e, f, g, decimal);
      delay_ms(100);
      
      aux = decimal / 10;
      dezena = (int)floor(aux);
      
      aux = decimal - (10 * dezena);
      unidade = (int)floor(aux);
      
      output_c(matriz[dezena][unidade]);
      delay_ms(100);
      
   }
}























Palavras chave:

Decoder 4511 with PIC16F877A using array
Декодер 4511 с PIC16F877A с использованием массива
Dekoder 4511 med PIC16F877A som bruker array
Dekoder 4511 z PIC16F877A za pomocą tablicy
מפענח 4511 עם PIC16F877A באמצעות מערך
Decoder 4511 le PIC16F877A sebelisa hlophisitsoeng
어레이를 사용하는 PIC16F877A가 있는 디코더 4511
Dekodētājs 4511 ar PIC16F877A, izmantojot masīvu
Декодер 4511 с PIC16F877A, използващ масив
Dekodér 4511 s PIC16F877A pomocí pole
Bộ giải mã 4511 với PIC16F877A sử dụng mảng

09/07/2022

PF 2021/2

Questão 1) Projetar um sistema com PICSimLab que recebe o sinal do potenciômetro e apresenta o valor de 0 a 99% no LCD e no display de 7 segmentos. (Vale 3,0 pontos)










Resolução:

Código feito no CCS C Compiler

#include <16F877A.h>
#device adc = 8
#include <math.h>
#FUSES NOWDT, HS, NOPROTECT, NODEBUG
#FUSES NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(crystal = 20MHz)

#ifndef lcd_enable
   #define lcd_enable   pin_e1 // pino enable do LCD
   #define lcd_rs       pin_e2 // pino rs do LCD
   //#define lcd_rw       pin_e2 // pino rw do LCD
   #define lcd_d4       pin_d4 // pino de dados d4 do LCD
   #define lcd_d5       pin_d5 // pino de dados d5 do LCD
   #define lcd_d6       pin_d6 // pino de dados d6 do LCD
   #define lcd_d7       pin_d7 // pino de dados d7 do LCD
#endif

#include <mod_lcd.c>
unsigned int8 valor, aux, c, d, u;
unsigned int8 vetor[] = {0b00111111, 0b00000110, // 0 a 9
   0b01011011, 0b01001111, 0b01100110, 0b01101101,
   0b01111101, 0b00000111, 0b01111111, 0b01100111 };

void main(){
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   lcd_ini();

   while(TRUE){

      valor = read_adc();
      if(valor >= 99){
         valor = 99;
      }  
      aux = valor/100;     // extrai o primeiro piso das centenas
      c = (int)floor(aux); // converte para inteiro
      
      aux = ((valor/10)-(10*c)); //extrai o primeiro piso das dezenas
      d = (int)floor(aux);       //converte para inteiro
      
      aux = ((valor)-(100*c)-(10*d));  //extrai o primeiro piso das unidades
      u = (int)floor(aux);             //converte para inteiro
      
      printf (lcd_escreve,"\f\t\t\tIFMT\nValor = %u%%",valor);
      delay_ms(20);
      
      output_b(vetor[d]);
      output_c(vetor[u]);
      
   }
}
























Questão 2) Utilize os três timers para fazer três LEDs piscarem com frequência iguais a:

Vermelho (D0) ________________Hz
Azul (D1) _______________ Hz
Amarelo (D2) ________________Hz
Sabendo que no PIC tem um cristal de _______MHz












Resolução:

Aluno1 = 25 Hz, 5 Hz, 12 Hz

Código feito em CCS C Compiler

#include <16F877A.h>
#device adc = 8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT, NOWRT
#use delay(clock = 20MHz)

unsigned int16 cont1 = 0, cont2 = 0, cont3 = 0;

#int_TIMER0
void TIMER0_isr(void){
   if(++cont1 >= 394)  { cont1 = 0; output_toggle(pin_B0) ; } 
   if(++cont2 >= 1927) {cont2 = 0;output_toggle(pin_B1); }
   if(++cont3 >= 822) {cont3 = 0; output_toggle(pin_B2); }
}

void main(){
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); // overflow 51,2 us
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   //disable_interrupts(GLOBAL);
   
   while(true);
}

Saída de frequencímetro no Proteus 7.9























04/07/2022

Interrupção no pino B com PIC 16F877A

Código feito em CCS C Compiler

#include <16F877A.h>
#use delay(clock = 20M)

byte i;
#INT_RB
void rb_isr(void){
   i = input_b();
   output_d(i >> 4);
}

void main(){ 
   set_tris_b(0xff);
   clear_interrupt(INT_RB);
   enable_interrupts(INT_RB);
   enable_interrupts(GLOBAL);
}





























01/07/2022

View com SQL Server #144

--VIEW CANAL DE VENDAS
CREATE VIEW V_CRM_CANAL_VENDAS
AS
SELECT *FROM MINIERP.DBO.V_CANAL_VENDAS

--VIEW CONTAS A PAGAR
CREATE VIEW V_CRM_CONTAS_RECEBER
AS
SELECT *FROM MINIERP.DBO.V_CONTAS_RECEBER

--VIEW PEDIDO VENDAS DETALHE
CREATE VIEW V_CRM_PED_VENDAS_DETALHE
AS
SELECT A.NUM_PEDIDO, A.DATA_PEDIDO, A.ID_CLIENTE, B.RAZAO_CLIENTE,
A.TOTAL_PEDIDO, A.SITUACAO,
CASE WHEN A.SITUACAO = 'F' THEN 'FATURADO'
WHEN A.SITUACAO = 'P' THEN 'PLANEJADO'
END SITUA
FROM MINIERP.DBO.PED_VENDAS A
INNER JOIN MINIERP.DBO.CLIENTES B
ON A.ID_CLIENTE = B.ID_CLIENTE



30/06/2022

Decodificador display multiplexado com PIC 16F877A

Objetivo: Receber as entradas nos pinos e decodifica -lás no display 7 segmentos (interface do LCD é importante).

Código feito em CCS C Compiler

#include <16F877A.h>
#device adc = 8
#fuses XT, NOWDT, BROWNOUT, NOLVP
#use delay(clock = 20MHz)
#include <math.h>
#use fast_io(b)
#include <lcd.c>
int v1[] = {0b00111111, 0b00000110, 0b01011011,
   0b01001111, 0b01100110, 0b01101101, 0b01111101, 
   0b00000111, 0b01111111, 0b11100111};
   
unsigned int8 a, b, c, d, e, f;   
byte decimal;
unsigned int8 aux, dezena, unidade;

void main(void){
   lcd_init();
   
   while(TRUE){
      
      a = input(PIN_B0);
      b = input(PIN_B1);
      c = input(PIN_B2);
      d = input(PIN_B3);
      e = input(PIN_B4);
      f = input(PIN_B5);
      decimal = (a<<5)|(b<<4)|(c<<3)|(d<<2)|(e<<1)|(f<<0);
      
      aux = decimal/10;           
      dezena = (int)floor(aux);
      
      aux = (decimal)-(10*dezena);
      unidade = (int)floor(aux);
            
      printf(lcd_putc,"\fBINARIO = %u%u%u%u%u%u \nDECIMAL = %u"a, b, c, d, e, f, decimal);
      delay_ms(100);
      
      for(int i = 0; i < 10; i++){
         output_a(0b0000010);
         output_c(v1[dezena]);
         delay_ms(50);
         
         output_a(0b000001);
         output_c(v1[unidade]);
         delay_ms(50);
      }
   }
}







28/06/2022

Decodificador BCD com PIC 16F877A

Objetivo: Receber através de entrada por bits que codifique sua saída para um display de 7 segmentos e exiba seu bit em binário.

CÓDIGO FEITO EM CCS C COMPILER

#include <16F877A.h>
#device adc = 8
#use delay(clock = 20MHz)
#use fast_io(b)
#include <lcd.c>

unsigned int8 a, b, c, d;   
byte decimal;

void main(void){
   lcd_init();
   
   while(TRUE){
      
      a = input(PIN_B0);     
      b = input(PIN_B1);
      c = input(PIN_B2);
      d = input(PIN_B3);
                                    
      decimal = (a<<3)|(b<<2)|(c<<1)|(d<<0);
            
      output_c(decimal);
            
      printf(lcd_putc,"\fBINARIO = %u%u%u%u  \nDECIMAL = %u"a, b, c, d, decimal);
      delay_ms(200);
            
   }
}

Saída gerada no Proteus 7.9




















23/06/2022

Pull-up para interrupção na saída - PIC 16F877A

 Objetivo: Os terminais RB1 são configurados como saída e RBO como entrada. (com resistor de pull-up). A saída deve ter o mesmo valor que a entrada. Usa -se um interruptor na entrada e um led na saída

Código feito em CCS C Compiler

#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4MHz)
#BYTE TRISB = 0x86   //TRISB em 86h
#BYTE PORTB = 0x06   //PORTB em 06h
#BYTE OPTION_REG = 0x81    //em 81h

void main(){
   bit_clear(OPTION_REG, 7);  //habilita Pull-up
   bit_set(TRISB, 0);         //B0 como entrada
   bit_clear(TRISB, 1);       //B1 como saída
   bit_clear(PORTB, 1);       //Apaga led
   
   while(TRUE){
      if(bit_test(portb, 0)== 1)    //se RB0 == 1, apaga led
         bit_clear(portb, 1);
      else
         bit_set(portb, 1);         //se RB0 == 0, acende led
   }
}
/*
CÓDIGO REESCRITO 
#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4MHz)
#use fixed_io(b_outputs = pin_b1)
void main(){
   port_b_pullups(TRUE);
   output_low(PIN_B1);
   
   while (TRUE){
      if(input(PIN_B0) == 1)
         output_low(PIN_B1);
      else
         output_high(PIN_B1);
   }
}
#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4MHz)
//ponteiros
#define TRISB (int*) 0x86
#define PORTB (int*) 0x06
#define OPTION (int*) 0x81
void main() {
   *option &= 0b01111111;
   *trisb = 0x01;
   *portb = 0x00;
   
   while(TRUE){
      if(*portb & 0x01)    //le RB0 se é 1
         *portb = 0x00;
      else
         *portb = 0x02;    // se é 0 entao acende led (RB1 == 1)
   }
}*/




21/06/2022

Check List DBA no SQL Server #119

As atividades de rotina de um DBA podem ser muito repetitivas e monótonas e podem
ser automatizadas !
Desta forma o DBA investe mais seu tempo em análise que na própria execução das
tarefas e com mais disponibilidade para tarefas intermitentes que possam surgir no dia a dia.

CREATE DATABASE CKLIST 
go
USE CKLIST

--Gerando a tabela para armazenar dados de discos
CREATE TABLE dbo.ESPACO_DISCO(
volume nvarchar(256) NULL,
disk_total_size_GB numeric (18, 2) NULL,
disk_free_size_GB numeric (18, 2) NULL,
disk_usado_size_GB numeric (18, 2) NULL,
disk_ocupado_sql_MB numeric (18, 2) NULL,
data_log datetime NOT NULL
)

--Gerando tabelas para armazenar tamanhos de arquivos
CREATE TABLE dbo.TAMANHO_ARQUIVOS (
volume_mount_point nvarchar(256) NULL,
db_nome sysname NOT NULL,
tipo_arquivo nvarchar (60) NULL,
nome_logico sysname NOT NULL,
path nvarchar (260) NOT NULL,
status nvarchar (60) NULL,
tamanho_arquivo_MB numeric (18, 2) NULL,
data_log datetime NOT NULL
)

--Armazena analise de log
CREATE TABLE dbo.ANALISE_LOG (
db_nome varchar (50),
Log_Size numeric (15, 2),
Log_Space_Used_pct numeric (15, 2),
status_log int,
data_log datetime default getdate()
)


--Armazena histórico de backup
CREATE TABLE dbo.LOG_BACKUP (
db_nome NVARCHAR(256),
nome NVARCHAR(256),
backup_start_date DATETIME,
tempo INT,
server_name NVARCHAR(256),
recovery_model NVARCHAR(120),
tamanho NUMERIC (15, 2)
)

--Armazena historico database
USE curso
CREATE TABLE dbo.TAMANHO_DB(
name sysname NOT NULL,
Tamanho numeric (10, 2) NULL,
Tamanho_2 varchar (13) NULL,
data_log datetime NOT NULL
)

--Armazena log de jobs
CREATE TABLE dbo.LOG_JOBS(
name sysname NOT NULL,
step_id int NOT NULL,
message nvarchar (4000) NULL,
Run_duration int NOT NULL,
run_status int NOT NULL,
Status varchar (19) NULL,
data_log datetime NOT NULL
)

--Armazena histórico de tabelas 
CREATE TABLE dbo.HIST_TABELAS (
Tabela nvarchar (128) NULL,
Linhas bigint NULL,
Reservado bigint NULL,
Dados bigint NULL,
Indice bigint NULL,
NaoUtilizado bigint NULL,
data_log datetime NOT NULL
)

--Verifica utilização de log 
CREATE PROCEDURE dbo.Proc_analise_log
as
DBCC SQLPERF (LOGSPACE)




20/06/2022

Fixed DataBase Roles #118

DBA - Segurança-Security

Sysad: Poderes totais sobre os objetos do servidor
Securiyadmin: Pode gerenciar logins do servidor
Serveradmin: Pode configurar a maioria das opções do servidor
Diskadmin: Gerencia os arquivos de um banco de dados
Dbcreator: Cria e altera Banco de Dados.
Processadmin: Gerencia processos rodando no SQL Server
Stupadmin: Pode gerenciar e configurar a reaplicação entre servidores
SQL Server e extender store procedure

db_owner: Tem poderes totais sobe o banco de dados
db_accessadmin: Pode adicionar e remover usuários ao Banco de Dados
db_datareader: Pode ler dados em todas as tabelas de usuário do BD
db_datawriter: Pode adicionar, alterar ou excluir dados em todas as tabelas
de usuário do BD
db_ddladmin: Pode adicionar, modificar ou excluir objetos do BD
db_securityadmin: Pode gerenciar roles e adionar ou excluir usuários às roles do BD
db_backupoperator: Pode fazer o backup do BD
db_denydatareader: Não pode consultar dados em nenhuma das tabelas do BD, mas pode efetuar
alterações na estrutura do BD e de seus objetos.
db_denydatawriter: Não pode alterar dados no BD.





18/06/2022

Schema DBA no SQL Server #117, #118

DBA - Segurança-Security

Principal: Um principal é considerado qualquer objeto que possa solicitar acesso a recursos
do SQL Server, por exemplo, usuários e grupos do windows, logins e roles do SQL Server, e aplicativos
roles.

Schema: Um schema é um conjunto de objetos, sendo que todos os objetos pertencentes a um shema 
têm como dono o mesmo principal. No SQL Server todos os objetos de um Banco de Dados têm com dono 
um schema.

Servidor.Banco_de_Dados.Schema.Objeto

INFINITY\SQLEXPRESS.CURSO.DBO.CLIENTES

Resumo:
Um schema é um container para objetos
Todo objeto pertence a um schema
Todos os objetos de um schema têm o mesmo dono, que é o dono do schema
As permissões podem ser atribuídas para o schema e também para os objetos dentro do schema


*********

Para criar um schema chamado fin e adm, dentro do banco de dados Curso, da instância INFINITY
para isso, siga os passos a seguir

1. Abra o SQL Server Mangement Studio
2. Na janela Object Explorer, navegue até o Banco de Dados Curso.
3. Clique no sinal de + ao lado do Banco de Dados Curso
4. Clique no sinal de + ao lado de Security
5. Clique no sinal de + ao lado de Schema e observe a lista de schemas definidos
6. Clique com o botão direito do mouse na opção Schema e selecione New Schema

--Gerando Schema para a área de Financeira
USE curso

CREATE SCHEMA fin GO

--Gerando Schema para a área de administrativa
CREATE SCHEMA adm GO

--Gerando tabela fluxo_de_caixa no Schema FIN
CREATE TABLE FIN.fluxo(
id int NULL,
clif_for varchar (50) NULL,
valor decimal (18, 0) NULL,
data date NULL
)

--Teste de select no Schema Fin
SELECT * FROM FIN.fluxo_de_caixa

--DROP SCHEMAS
drop schema FIN
DROP SCHEMA ADM

--DROP TABLE
DROP TABLE ADM.fluxo_de_caixa

--VERIFICANDO TODOS SCHEMAS
SELECT *FROM sys.schemas



17/06/2022

Administração de usuários no SQL Server #115

--Listagem 1. Comando para verificar logins de instância

SELECT * FROM sys.sql_logins
SELECT * FROM sys.syslogins
SELECT * FROM sys.sysremotelogins
SELECT * FROM sys.remote_logins
SELECT * FROM sys.linked_logins

--Listagem 2. Comando para verificar acessos concedidos a usuários.

SELECT
S.name,
S.LOGINNAME,
S.denylogin,
S.hasaccess,
S.isntname,
S.isntgroup,
S.isntuser,
S.yssadmin,
S.securityadmin,
S.serveradmin,
S.diskadmin,
S.diskamin,
S.processadmin,
S.diskadmin,
S.dbcreator,
S.bulkadmin
FROM sys.syslogins S 
  LEFT JOIN
  sys.sql_logins L
  ON S.sid = L.sid

--Listagem 3. Comando para verificar informações básicas de usuários 

Sp_helplogins
Sp_helplogins 'TESTEADM'
Sp_helplogins 'infinity\andre'




14/06/2022

Pulso com PIC 16F877A

Ciclo de trabalho para PWM:

set_pwmx_duty(valor);

valor: dados de 8 ou 16 bits que determinam o ciclo de trabalho. Esse valor, juntamente com o valor do TMR2 preescaler, determina o valor do ciclo de trabalho. Na configuração T1MER2, o pós-aquecimento deve ser 1.

Exemplo 1: Meça a largura de um pulso usando o módulo CCP. Componentes ISIS: Utiliza-se o modo de captura do CCP, configurando-o para detectar a borda de subida ou descida do pulso a ser medido. 
Toda vez que ocorre uma detecção de borda, o valor de TMRl irá para o registro do módulo CCP.









CÓDIGO FEITO EM CCS C Compiler

#include <16F877A.h>
#fuses XT, NOWDT
#use delay(clock = 4MHz)

#ifndef lcd_enable
   #define lcd_enable   pin_E1 // pino enable do LCD
   #define lcd_rs       pin_E2 // pino rs do LCD
   //#define lcd_rw       pin_e2 // pino rw do LCD
   #define lcd_d4       pin_D4 // pino de dados d4 do LCD
   #define lcd_d5       pin_D5 // pino de dados d5 do LCD
   #define lcd_d6       pin_D6 // pino de dados d6 do LCD
   #define lcd_d7       pin_D7 // pino de dados d7 do LCD
#endif

#include <mod_lcd.c>
#byte PIR1 = 0x0C

int1 nuevopulso = 0;
int16 TFB = 0, TFS = 0, TF = 0;
float AP = 0.0, frequencia;
int1 cambio = 0;

#int_ccp1
void ccp1_int(){
   if(cambio == 0){
      TFS = CCP_1;
      setup_ccp1(CCP_CAPTURE_RE);
      cambio = 1;
   }else{
      TFB = CCP_1;
      setup_ccp1(CCP_CAPTURE_RE);
      cambio = 0;
      
      if(nuevopulso == 0){
         nuevopulso = 1;
      }
   }
}

void main(){
   lcd_ini();
   
   setup_timer_1(T1_INTERNAL);
   setup_ccp1(CCP_CAPTURE_RE);
   cambio = 0;
   enable_interrupts(int_ccp1);
   enable_interrupts(global);
   
   while(TRUE){
      if(nuevopulso >= 1){
         TF = (TFB - TFS);
         AP = TF * 1.0 / 1000.0;
         frequencia = 1.0 / (AP/1000.0);
         printf(lcd_escreve,"\f Pulso = %f ms\n Freq = %01.2f Hz",AP, frequencia);
         nuevopulso = 0;
         //delay_ms(100);
      }
   }
}

Saída de frequência usando CI 555



Observação: O oscilador astável com CI 555 não é preciso, logo haverá inconsistência nos resultados.
Logo, usando um outro exemplo com clock fixo verá que a precisão é siguinificativa.





Administração de usuários no SQL Server 'DBA' #114

USER curso

SEUSER 'TESTEADM'

select SYSTEM_USER
--testando select
select *from funcionarios

--testando insert
insert into funcionarios values ('Jack', 800, 'RH')

--testando update
update FUNCIONARIOS set salario = salario * 1.5

--voltar no usuario que logou

SELECT SYSTEM_USER
SETUSER 'TESTEADM'









13/06/2022

SQLCMD #112

DBA - Utilitário SQLCMD

O sqlcmd utilitário permite que você insira instruções Transact-SQL, procediemntos

do sistema e arquivos de script no prompt de comando

htpps://docs.microsoft.com/pt-br/sql/tools/sqlcmd-utility


-d db_name

-i input_file

-o output_file

-p password

-q "cmdline query"

-Q "cmdline query" (and exit)

-S [protocol:]server[instance_name][,port]

-U Login_id






 

12/06/2022

DBA - DBCC no Microsoft SQL Server #108 #109 #110

DBA - DBCC (DataBase Console Comamands)
DBCC: São comandos que fazem a consitência lógica e física do banco de dados.
Apesar da maioria dos comandos ser somante para retornar informações sobre o banco
existem alguns comandos que podem ajudar a resolver problemas.

DBCC - Manutenção
DBCC TABLE CHECK: A consitência lógica e física dos objetos no banco de dados é verificada
nessa fase.

DBCC TABLE REPAIR: As correções de banco de dados são executadas nessa fase, se REPAIR_FAST,
REPAIR_REBUILD ou REPAIR_ALLOW_DATA_LOSS for especificado e houver erros de objeto que
precisem ser corrigidos.

DBCC SYS CHECK: As tabelas do sistema de banco de dados são verificadas nessa fase.

DBCC SYS REPAIR: As correções de banco de dados são realizadas nessa fase se REPAIR_FAST, REAPIR_REBUILD 
ou REPAIR_ALLOW_DATA_LOSS for especificado e houver erros de tabelas do sistema que 
precisem ser corrigidos.

DBCC FREEPROCCACHE: Limpa cache de procedures


DBCC - Diversas Miscellneous
DBCC HELP: Retorna informações de sintaxe para o comando especificado DBCC.

DBCC dilname(FREE): Descarrega o procedimento armazenado estendido DLL especificado da memória

DBCC TRACEON: Habilita os sinalizadores de rastreamento especificados

DBCC TRACEOFF: Desabilita os sinalizadores de rastreamento especificados.


DBCC - Informações
DBCC SHOWCONTIG: Exibe informaçções de fragmentação para os dados e índices da tabela ou exibição especificada

DBCC SHOW_STATISTICS: Exibe as estatísticas de otimização de consulta atuais de uma tabela ou exibição indexada

DBCC PROCCACHE: Exibe informações em um formato de tabela sobre o cache de procedimento

DBCC OPENTRAN: Ajuda a identificar as transações ativas que podem impedir o truncamento do log


DBCC - Validação
DBCC CHECKDB: Verifica a integridade lógica e física de todos os objetos do banco de dados especificando com
execução das seguintes operações

DBCC CHECKTABLE: Verifica a integridade de todas as páginas e estruturas que compõe a tabela ou a exibição
indexada

DBCC CHECKCONSTRAINTS: Inspeciona a integridade de uma restrição especificada ou de todas as restrições em
uma tabela especificada no banco de dados atual.

DBCC CHECKALLOC: Verifica a consitência de estruturas de alocação de espaço em disco para um banco de dados
especificado


_______________ DBCC PARA OBTER INFORMAÇÕES ____________________

--Link de apoio: https://msdn.microsoft.com/pt-br/library/ms188796(v=sql.120).aspx
USE MASTER
DBCC HELP('?'); -- exibe os comandos para execução
DBCC HELP (SHOW_STATISTICS) --(checkdb),(
--Exibe informações de fragmentação para os dados e índices da tabela ou exibição específica

use curso
DBCC SHOWCONTIG (cidades)

--Exibe as estatísticas de otimização de consulta atuais de uma tabela ou exibição indexada
DBCC SHOW_STATISTICS (cidades)

--Exibe as informações em um formato de tabela sobre o cache de procedimento
DBCC PROCCACHE

--Ajuda a indetificar as transações ativas que podem impedir o truncamento do log
DBCC OPENTRAN


#109_______________DBCC PARA DIVERSOS __________________

--Retorna informações de sintaxe para o comando específico DBCC.
DBCC HELL (?)
DBCC HELP (TRACEON) --(CHECKALLOC)

--Descarrega o procedimento armazenado estendido DLL especificado da memória
DBCC dllname (FREE)

--select *from sys.session
--Habilita os sinalizadores de rastreamento especificados
DBCC TRACEON

--Exibe o status de sinalizadores de rastreamento
DBCC TRACESTATUS

--Desabilita os sinalizadores de rastreamento especificados.
DBCC TRACEOFF

--apoio
--Conexões ativas
SELECT *FROM sys.dm_exec_connections

--Verificando arquivo trave
SELECT TextData,
SPID, 
LoginName,
NTUserName,
NTDomainName,
HostName,
ApplicatinName,
StarTime, ServerName,
DatabaseName,
EventClass,
ObjectType
FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Log\log_19.trc',default)


#110____________________
--Verifica a integridade lógica e física de todos os objetos do banco de dados
--especificado com a execução das seguintes operações:

ALTER DATABASE curso SET SINGLE_USER

USE curso
DBCC CHECKDB (curso, REPAIR_FAST)
DBCC CHECKDB (curso, REPAIR_REBUILD)
DBCC CHECKDB (curso, REPAIR_ALLOW_DATA_LOSS)

--Verifica a integridade de todas as páginas e estruturas que compõem
--a tabela ou a exibição indexada

DBCC CHECKTABLE (cidades)
--Inspeciona a integridade de uma restrição especificada ou de todas
--as restrições em uma tabela especificada no banco de dados atual

DBCC CHECKCONSTRAINTS
--Verifica a consistencia de estruturas de alocação de espaço em disco
--para um banco de dados específíco


_____________DBCC DE MANUTENÇÃO____________________
DBCC HELP ('?');
DBCC HELP ('CHECKTABLE');

--A consistência lógica e física dos objetos no banco de dados é 
--verificada nessa fase.

use curso
DBCC CHECTABLE ('pedidos');

--As correções de banco de dados são executados nessa fase, se REPAIR_FAST,
--REPAIR_REBUILD ou REPAIR_ALLOW_DATA_LOSS
--for especificado e houver erros de objeto que precisem ser corrígidos
--DBCC TABLE REPAIR

USE MASTER
ALTER DATABASE curso SET SINGLE_USER;

DBCC CHECKTABLE ('cidades', REPAIR_FAST)
DBCC CHECKTABLE ('cidades', REPAIR_REBUILD)
DBCC CHECKTABLE ('cidades', REPAIR_ALLOW_DATA_LOSS)

DBCC CHECKSYS --As tabelas são verificadas nessa fase




03/06/2022

Status de porta com PIC 16F877A

Objetivo: Visualizar em um LCD o status das entradas PORTA . Temos os componentes ISIS: PIC16F877A, RESPACK8, LG M I264IBSIR e SW-SPST-M OM

#include <16F877A.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use delay(clock = 20MHz)
#include <HDM64GS12.c>
#include <graphics.c>
#use standard_io(a)

void main(){
   CHAR A5[] = "A5";
   CHAR A4[] = "A4";
   CHAR A3[] = "A3";
   CHAR A2[] = "A2";
   CHAR A1[] = "A1";
   CHAR A0[] = "A0";
   CHAR IN[] = "PORTA A";
   glcd_init(ON);
   glcd_text57(33, 30, A5, 1, 1);
   glcd_text57(49, 30, A4, 1, 1);
   glcd_text57(65, 30, A3, 1, 1);
   glcd_text57(81, 30, A2, 1, 1);
   glcd_text57(97, 30, A1, 1, 1);
   glcd_text57(113, 30, A0, 1, 1);
   glcd_text57(30, 5, IN, 2, 1);
   
   while(TRUE){
      if (input_state(PIN_A5) == 0){
         glcd_rect(32, 40, 46, 60, 1, 1);
      }else{
         glcd_rect(32, 40, 46, 60, 1, 0);
         glcd_rect(32, 40, 46, 60, 0, 1);
      }
      
      if (input_state(PIN_A4) == false){
         glcd_rect(48, 40, 62, 60, 1, 1);
      }else{
         glcd_rect(48, 40, 62, 60, 1, 0);
         glcd_rect(48, 40, 62, 60, 0, 1);
      }
      
      if (input_state(PIN_A3) == false){
         glcd_rect(64, 40, 78, 60, 1, 1);
      }else{
         glcd_rect(64, 40, 78, 60, 1, 0);
         glcd_rect(64, 40, 78, 60, 0, 1);
      }
      
      if (input_state(PIN_A2) == false){
         glcd_rect(80, 40, 94, 60, 1, 1);
      }else{
         glcd_rect(80, 40, 94, 60, 1, 0);
         glcd_rect(80, 40, 94, 60, 0, 1);
      }
      
      if (input_state(PIN_A1) == false){
         glcd_rect(96, 40, 110, 60, 1, 1);
      }else{
         glcd_rect(96, 40, 110, 60, 1, 0);
         glcd_rect(96, 40, 110, 60, 0, 1);
      }
      
      if (input_state(PIN_A0) == false){
         glcd_rect(112, 40, 126, 60, 1, 1);
      }else{
         glcd_rect(112, 40, 126, 60, 1, 0);
         glcd_rect(112, 40, 126, 60, 0, 1);
      }
      
      delay_ms(400);
   }
}























02/06/2022

Contador multiplexado com PIC 16F876

Código feito no CCS C Compiler

//PÁGINA 63
#include <16F876.h>
#USE DELAY(CLOCK = 4MHz)
#FUSES XT, NOWDT, NOPROTECT, NOPUT
#USE fast_IO (B)
#USE fast_IO (A)

byte CONST DISPLAY[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 
         0x6d, 0x7d, 0x07, 0x7f, 0x6f};
         
void main(){
   byte ud = 0, dec = 0;
   SET_TRIS_B(0x00);
   SET_TRIS_A(0x00);
   OUTPUT_B(0);
   
   for( ;; ){
      for(dec = 0; dec < 10; dec++){
         for(ud = 0; ud < 10; ud++){
            output_a(0x02);
            output_b(DISPLAY[ud]);
            delay_ms(50);
            
            if (dec == 0) output_a(0x03);
            else output_a(0x01);
                                    //cat_D_ = acender
            OUTPUT_B(DISPLAY[dec]);//digito dezenas
            delay_ms(50);     //para evitar paralelos
         }
      }
   }
}




01/06/2022

SUSPECT no SQL Server #107

SUSPECT (Recuperando de um Desastre)
Este estado no Banco de Dados acontece quando alguns dos arquivos do grupo de
Banco de Dados estão corrompidos. Na inicialização do SQL Server, este verifica
se os arquivos estão íntegros.
Se ele encontra -se com algum problema nesses arquivos, ele coloca o banco de dados no
estado 'SUSPECT', 'RECOVERY_PENDING'. Esse estado necessita da ação direta do Administrador
de Banco de Dados.

--SET BACKUP FULL
ALTER DATABASE desastre SET recovery full --opcional

--Realiza backup
BACKUP DATABASE desastre TO disk=N'C:\LOCAL ARMAZENADO.NOME.bak'


--Recuperando do BD
--1 colocar BD em emergency
ALTER DATABASE desastre SET EMERGENCY

--2 Fazer um backup do log de transações mesmo o banco estando como suspect
--(lembrando que o log de transações deve estar íntegro em outra unidade de disco);
--BACKUP DO ARQUIVO !!!
--3 Em alguns casos é necessário a exclusão do banco de dados marcado como 'Suspect';
--4 Restaurar o último backup full;
--  DROP DATABASE DESASTRE 
RESTORE DATABASE DESASTRE FROM disk=N'C:\LOCAL DO BD\desastre.bak'
WITH RECOVERY, REPLACE --REPLACE substitui esses arquivos

--Verificando base
SELECT *FROM MATERIAL











31/05/2022

DBA - LINKED SERVER #106

LINKED SERVER é utilizado para realizarem consultas em outros servidores.
Essa "ponte" de comunicação é possível entre fontes OLE BD, como Excel, Acces,
servidores SQL Server e até servidores como outro SGBDs como Oracle, Mysql, Sybase.
As principais vantagens de se utilizar Linked Server é a facilidade de executar consultas
distribuídas, comandos de atualizações que envolvem diversas bases em servidores diferentes.

SIMULANDO LINKED SERVER
Para simular o Linked Server em ação, será necessário no minimo duas instâncias, 
onde elas podem estar ou não no mesmo servidor. Vamos criar un banco de dados e uma
tabela, a qual será utilizada para realizar consultas e manipulação através do
Linked Server.

--Verificando se existe LINKED SERVER NO BD
SELECT *FROM sys.servers

























A instancia SERVER1 conterá o banco de dados DB_LK, que será acessado pela instancia
SERVER2












Configuration Manager Pipes Nomeado e TCP/IP -> Habilitados

Configurações Firewall -> Portas 1433, 1434 -> Liberadas, Regras.

Conexão Remota na Instancia -> Permitir

Conexão entre as redes -> Funcionando


--Verificando se exeiste LINKED SERVER NO BD
SELECT * FROM sys.servers

--CRIANDO LINKED SERVER
EXEC sp_addlinkedserver
@server = 'INFINITY', --servidor/IP infinity
@srvproduct = '',
@provider = 'SQLNCLI',
@datasrc = 'INFINITY\SQLEXPRESS2'--data serce 'instancia sqlexpress2

--Gerando usuário do LINKED SERVER
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'INFINITY'
@useself = 'true',
@locallogin = 'INFINITY\andre',
@rmtuser = NULL,
@rmtpassword = 'SUA SENHA'.. --senha remota do computador


--Selecionando dados através do LINKED SERVER
SELECT *FROM INFINITY.TESTE_LINK.dbo.PESSOAS --nomedoprovedor.nomedoBD.dbo.nomedaTabela

--ATUALIZANDO DADOS ATRAVES DO LINKED SERVER
UPDATE INFINITY.TESTE_LINK.dbo.PESSOAS SET NOME = 'TESTE UPADATE' WHWRE ID = 5

--Inserindo dados atraves do LINKED SERVER
INSERT INTO INFINITY.TESTE_LINK.dbo.PESSOAS (NOME) VALUES ('JACK')