Automação Predial

Tel. (021) 84161701 Email. adevaldo@hotmail.com.br

Automação Residencial (Domotica)

Tel. (021) 84161701 Email. adevaldo@hotmail.com.br

Automação Industrial ( Farmaceutico )

Tel. (021) 84161701 Email. adevaldo@hotmail.com.br

Robótica ( Industria Automobilistica )

Tel. (021) 84161701 Email. adevaldo@hotmail.com.br

Eletroautomação

Tel. (021) 84161701 Email. adevaldo@hotmail.com.br

domingo, 22 de dezembro de 2013

Técnica simples coloca 10 vezes mais dados nas fibras ópticas

Redação do Site Inovação Tecnológica - 20/12/2013

Técnica simples coloca 10 vezes mais dados nas fibras ópticas
Foi uma questão de ajustar o formato dos pulsos para que 0s e 1s pudessem ficar mais próximos uns dos outros. [Imagem: Jamani Caillet/EPFL]
Mais dados na mesma fibra
Engenheiros suíços descobriram uma técnica para aumentar dramaticamente a capacidade de tráfego de dados nas fibras ópticas.
A melhor notícia é que a técnica utiliza as mesmas fibras ópticas que já estão instaladas e sendo usadas no mundo todo.
A técnica, conceitualmente simples, consiste em reduzir o espaço entre os pulsos de luz que transportam os dados.
Mas a simplicidade é apenas aparente, já que ninguém havia conseguido fazer isso antes.
"Desde que apareceram na década de 1970, a capacidade de dados das fibras ópticas aumentou por um fator de dez a cada quatro anos, impulsionada por um fluxo constante de novas tecnologias. Mas, nos últimos anos chegamos a um gargalo que cientistas de todo o mundo estão tentando romper," explica Camille Brès, da Escola Politécnica Federal de Lausanne.
Técnica simples coloca 10 vezes mais dados nas fibras ópticas
Neste milênio não vinha sendo possível manter o ritmo de aumento na taxa de vazão de dados das fibras ópticas. [Imagem: Marcelo A. Soto/EPFL]
Questão de pulsos
A tecnologia atual exige uma separação larga entre os pulsos de luz para que não haja interferência entre bits que se aproximem demais.
De forma simplificada, em uma fibra óptica o pico de um pulso de luz representa um 1, enquanto o vale entre dois pulsos representa um 0.
Para reduzir o espaço entre dois pulsos sem que um interfira com o outro, a equipe usou um tipo especial de onda conhecida como pulso de sincronização Nyquist, que tem um cume pontudo, em lugar do tradicional desenho de onda senoidal.
"Esses pulsos têm um formato mais pontudo, o que permite que eles se encaixem. Há ainda alguma interferência, obviamente, mas não nos locais onde nós efetivamente lemos os dados," explicou a pesquisadora.
Segundo ela, os pulsos de encaixar foram gerados com "99% de perfeição", o que permite teoricamente aumentar a quantidade de informações que trafegam em uma fibra óptica em 10 vezes.
Técnica simples coloca 10 vezes mais dados nas fibras ópticas
Os pulsos de sincronização Nyquist encaixam-se uns nos outros, sem perder os picos (1s) e sem descaracterizar os vales (0s). [Imagem: Marcelo A. Soto et al./NatComm]
Sincronização Nyquist
De forma simplificada, o formato de um pulso é determinado pelo seu espectro. Para gerar esses pulsos em formato de serra, o espectro precisa ser retangular, o que significa que todos os pulsos devem ser da mesma intensidade. Isso foi conseguido com um dispositivo padrão conhecido como grade de frequências.
Tudo pode parecer mesmo simples, mas, segundo a equipe, é um feito histórico, uma vez que ninguém até agora havia conseguido tirar proveito prático dos pulsos de sincronização Nyquist.
Como a tecnologia é totalmente óptica e baseada apenas em componentes já em uso, os pesquisadores acreditam que ela poderá ser utilizada de forma praticamente imediata.
Bibliografia:

Optical sinc-shaped Nyquist pulses of exceptional quality
Marcelo A. Soto, Mehdi Alem, Mohammad Amin Shoaie, Armand Vedadi, Camille-Sophie Brès, Luc Thévenaz, Thomas Schneider
Nature Communications
Vol.: 4, Article number: 2898
DOI: 10.1038/ncomms3898

sábado, 7 de dezembro de 2013

DataLogger com PIC18F

DataLogger com PIC18F


DataLogger é um equipamento destinado a coletar dados durante um certo tempo. Esses dados são fornecidos por sensores e seus valores são armazenados numa memória.

Este projeto trata-se de um datalogger que faz a medição de temperatura utilizando o sensor LM35, e armazena seus valores num cartão SD, junto com a hora atual. O relógio utlizado é o RTC DS1307.

O arquivo será salvo no formato ".csv" para poder ser aberto no Excel. Para cada vez que reiniciar o microcontrolador, será criado um novo arquivo.


No caso utilizei o microcontrolador PIC18F4620, mas pode ser utilizado por qualquer PIC da família 18F em diante.

O cartão SD deve estar formatado como FAT16.

Veja também que como o DS1307, comunica-se via I2C e o cartão SD comunica-se via SPI, ambas comunicações utilizam o mesmo pino no microcontrolador. Para facilitar o código, optei por utilizar a função SOFTWARE I2C. Software i2c, é uma emulação da comunicação i2c, utlizando qualquer pino do microcontrolador para essa comunicação.

A imagem do cartão SD para poder simular no Proteus está no formato ".ima". Baixe o programa UltraISO, ou outro semelhante, para poder abrir este arquivo.

Estou incluindo este arquivo no download abaixo.

DOWNLOAD:
Projeto DataLogger: datalogger.rar;


Caso você queira montar esse projeto, não se esqueça que o cartão SD é alimentado com 3.3V, e também os pinos CLK, DI e CS, deve receber tensões de 3.3V.



CóDIGO-FONTE:
MikroC PRO PIC v6.0

  1. sbit Mmc_Chip_Select at LATC0_bit;
  2. sbit Mmc_Chip_Select_Direction at TRISC0_bit;
  3. sbit Soft_I2C_Scl at RC1_bit;
  4. sbit Soft_I2C_Sda at RC2_bit;
  5. sbit Soft_I2C_Scl_Direction at TRISC1_bit;
  6. sbit Soft_I2C_Sda_Direction at TRISC2_bit;
  7. char temp[16] = "00:00:00;000,0\r";
  8. short segundos, minutos, horas, dia, date, mes, ano;
  9. unsigned long adc;
  10. char filename[11] = "DataXX.csv";//o array nao pode ser maior que 14
  11. //define os segundos, minutos.. para o ds1307
  12. void ds1307_write(){
  13. Soft_i2c_stop();
  14. Soft_i2c_start();
  15. Soft_i2c_write(0xD0);
  16. Soft_i2c_write(0x00);
  17. Soft_i2c_write(Dec2Bcd(0));//segundos
  18. Soft_i2c_write(Dec2Bcd(0));//minutos
  19. Soft_i2c_write(Dec2Bcd(12));//horas
  20. Soft_i2c_write(Dec2Bcd(1));//dia da semana
  21. Soft_i2c_write(Dec2Bcd(12));//data
  22. Soft_i2c_write(Dec2Bcd(3));//mes
  23. Soft_i2c_write(Dec2Bcd(13));//ano
  24. Soft_i2c_stop();
  25. }
  26. //faz a leitura do ds1307
  27. void ds1307_read(){
  28. Soft_i2c_start();
  29. Soft_i2c_write(0xD0);
  30. Soft_i2c_write(0x00);
  31. Soft_i2c_Start();
  32. Soft_i2c_write(0xD1);
  33. segundos = Bcd2Dec(Soft_i2c_read(1));
  34. minutos = Bcd2Dec(Soft_i2c_read(1));
  35. horas = Bcd2Dec(Soft_i2c_read(1));
  36. dia = Bcd2Dec(Soft_i2c_read(1));
  37. date = Bcd2Dec(Soft_i2c_read(1));
  38. mes = Bcd2Dec(Soft_i2c_read(1));
  39. ano = Bcd2Dec(Soft_i2c_read(0));
  40. Soft_i2c_stop();
  41. }
  42. //Esta funcao cria um novo arquivo
  43. void Create_New_File() {
  44. //cria o arquivo(caso nao exista) com atributo de arquivo e abre-o
  45. Mmc_Fat_Assign(&filename, 0xA0);
  46. //define a data de criação do arquivo
  47. Mmc_Fat_Set_File_Date(ano+2000, mes, date, horas, minutos, segundos);
  48. Mmc_Fat_Append();//prepara o arquivo para gravação
  49. Mmc_Fat_Write(temp, 15);//escreve no arquivo
  50. }
  51. //Esta função deleta o arquivo
  52. void Delete_File() {
  53. Mmc_Fat_Assign(&filename, 0);
  54. Mmc_Fat_Delete();
  55. }
  56. short Test_File_Exist() {
  57. //como nao definiu nenhum atributo de criação, caso o arquivo exista
  58. //retorna 1, caso contrario retorna 0
  59. return Mmc_Fat_Assign("DATA00.csv", 0);
  60. }
  61. //abre o arquivo(caso não exista, nao ira ler) e inicia a leitura.
  62. void Open_File_Read() {
  63. unsigned long i, size;
  64. char caracter;
  65. Mmc_Fat_Assign(&filename, 0);
  66. Mmc_Fat_Reset(&size);//recupera o numero de caracteres do arquivo
  67. for (i = 1; i <= size; i++) {
  68. Mmc_Fat_Read(&caracter);// le um caracter do arquivo
  69. UART1_Write(caracter);
  70. }
  71. }
  72. void main()
  73. {
  74. short i;
  75. ADC_Init();//inicia o modulo ADC
  76. ADCON1 = 0B00001110; //define o canal 0 como analogico, o restante como digital.
  77. Soft_i2c_init();//inicia a comunicação software i2c
  78. //inicia a comunicação SPI
  79. SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
  80. //inicia a comunicaçao com cartão SD
  81. MMc_Fat_Init();
  82. //verifica-se se o arquivo ja existe. caso exista cria um novo arquivo com um nome diferente
  83. for(i=0;i<100;i++)
  84. {
  85. filename[4] = (i/10) + 48;
  86. filename[5] = (i%10) + 48;
  87. if(Mmc_Fat_Assign(&filename, 0)==0)
  88. {
  89. break;
  90. }
  91. }
  92. while(1)
  93. {
  94. adc = ADC_Read(0);
  95. adc = adc * 1000/204;
  96. temp[9] = (adc/1000) + 48;
  97. temp[10] = ((adc%1000)/100) + 48;
  98. temp[11] = (((adc%1000)%100)/10) + 48;
  99. temp[13] = (((adc%1000)%100)%10) + 48;
  100. ds1307_read();
  101. temp[0] = horas/10 + 48;
  102. temp[1] = horas%10 + 48;
  103. temp[3] = minutos/10 + 48;
  104. temp[4] = minutos%10 + 48;
  105. temp[6] = segundos/10 + 48;
  106. temp[7] = segundos%10 + 48;
  107. Create_New_File();
  108. delay_ms(500);
  109. }
  110. }