Ir ao conteúdo
  • Cadastre-se

rodrigocirilo

Membro Pleno
  • Posts

    650
  • Cadastrado em

  • Última visita

posts postados por rodrigocirilo

  1. Olá galera do CDH... olha eu aqui de novo..

     

    seguinte.. estou precisando ler o deslocamento de uma pequena peça de chumbo dentro de um cano de aço ( ler a passagem do objeto) .... seria como um sensor de passagem... mas ao invés de usar led´s IR.. preciso usar ultrasom ou outra coisa que altere uma tensão para o pic ler atraves do ADC...ao ser "cortado" pelo objeto

     

    tenho que ler dentro do cano pois ele é lacrado.. enfim..

     

    É possivel usar aqueles sensores de ultrasom um de cada lado e ler um objeto de chumbo dentro de um cano de aço? ou o ultrasom nao é capaz nas frequencias dos uC ??

     

    Pretendo usar a familia PIC em CCS.

     

    Alguem ai tem ideia?? quanto a programação eu me viro... não quero codigo nem nada.. quero opiniões de solução para isso.

     

    Desde ja obrigado!!!

  2. @aphawk Pois é amigão, funcionou perfeitamente!!! use o divisor de tensão igual da imagem do post #21 .....rsrs agora posso afirmar a lei de ohm continua valendo hehe

     

    Obrigado mais uma vez pessoal e novamente peço desculpas pela lerdeza minha em compreender o que estava explicito hehe... é que quis entender tudo certinho pois fiquei com receio e danificar o modulo... e ter que esperar por outro...

     

    Att.

    Rodrigo C.

  3. @aphawk......hehe desculpe a ignorância....fiz um teste aqui na saída de um regulador de 5V coloquei um resistor de 1k indo a um ponto A...e um resistor de 2k2 indo do gnd até o o mesmo ponto

    A e medi a tensão.....e deu exatamente 3.3v....

    Então vou alimentar tudo com 5V e usar esse divisor pra ir de TX do PIC ao RX do módulo ....

    Demorou mas entendi kkkk sou meio lento mesmo.....desculpai pessoal....

    Vou testar aqui e logo retorno o resultado....

    • Curtir 1
  4. @aphawk mas como vou alimentar tudo com 5v se o nível exigido no txt/rx do módulo é 3.3V???

    A alimentação dele é de 3.6V a 6V mas a parte serial não, vídeo foto postada anteriormente..

    @aphawk mas como vou alimentar tudo com 5v se o nível exigido no txt/rx do módulo é 3.3V???

    A alimentação dele é de 3.6V a 6V mas a parte serial não, vide foto postada anteriormente..

  5. mas acho que achei a solução:

     

    2mewny0.jpg

    Editando:

     

    vejam esse video, o cara usa um hc-05 com um 16F877A ( mesmo familia do 16F876A) porém os pinos rx/tx ente modulo e pic estão ligados direto!!

    vá par 9:40 direto parte que mostra as conexões!! e funcionou!!  

     

    o que me dizem??

  6. @test man*~ o modulo pode se alimentado de 3.6V a 6V conforme foto abaixo tirada do meu modulo:

    29mvdld.jpg

     

     

    e a imagem da parte de cima dele, este é o modulo mais atual, que vem com um micro-switch para por o modulo em modo de prog.

    2n2esy.jpg

     

    a grande questão aqui é igualar os niveis de sinais entre TX (pic) RX(modulo)

  7. Nada a completar!!!!

    Amigão me desculpe mas não entendi o que você quis dizer no seu primeiro post!! qualquer AVR??estou usando pic na aplicação!!

    @rodrigocirilo,

     

    Eu ví que a pagina estava errada, já consertei o post, a página correta é a 174 !!!!

     

    Paulo

    Ah.. no momento que postei eu vi que você editou.. mas beleza.. só achei estranho o que o datasheet fala na primeira pagina.... talvez estava abrangendo a familia 16FL87X ali no power range...

     

    mas ok, vou usar o esquema do diodo, que o colega postou mais acima.... e do modulo HC-05 pode ser ligado direto certo? o pic vai entender mesmo o  modulo trabalhando na faixa de 3.3V.... do pic para o modulo uso o esqueminha ali do resistor e diodo..

  8. @aphawk então eu até tento rsrs ler o manual mas não entendo muito.. hehe.. geralmente uso pra saber o tanto de memoria que tem ou o que é cada pino ..essas coisas..

     

    sobre a pagina 127 não achei grafico nela(desse link que voce postou)...

    jh6fra.png

     

    eu me orientei na pagina 1 onde fala "larga faixa de tensão de alimentação 2 to 5.5V

    veja: fd91eu.png

     

    isso para o pic 16f876A

     

    hehe, sobre migrar para os AVRs.. eu quero muito Paulo.. mas tenho receio de ter que mudar de compilador, pois agora estou entendendo muito bem o CCS.. e ter que mudar me causa calafrios.. hehe.. ja me perguntei "poxa todo mundo usando arduino e eu nos pic´s ainda hehe"  sei lá... cabeça dura a minha!!

  9. @aphawk hehe.. você ja me salvou muitas vezes Paulo....

     

    então no datasheet do pic que vou usar fala que a alimentação dele vai de 2V ate 5.5V então ele pode sim trabalhar com essa tensão..

     

    quanto ao clock, vou trabalhar com 4mhz ( não preciso mais do que isso) o que você me diz?? posso ligar TX>RX e RX>TX entre modulo e pic diretamente, com alimentação em 3.3V??

     

    Att.

  10. Então pessoal

     

    @aphawk (meu mestre) hehe e @test man*~  o tx do modulo ao RX do pic imaginei mesmo que não precisasse de nada..

     

    Mas haverá comunicação de ambos os lados.. então o circuito proposto acima funcionará?? do divisor com resistores ou com diodo?? pois TX do pic nao podes ir direto ao modulo certo?

     

    Outra coisa na primeira resposta da colega @Isadora Ferraz ela diz que eu poderia usar a alimentação 3.3v no lugar da alimentação 5V... penso eu que assim o pic nao teria nivel logico 5V no maximo 3.3V ??

     

    O que os outros dois colegas acham disso?? e porque ela diz em caso de insucesso?? poderia haver esse chance??

     

    Fios?? o modulo ficará a 2 cm do pic, serão trilhas que farão a ligação entre eles!! 

     

    Att.

  11. tá,você @Isadora Ferraz sugere que eu use um regulador de 3.3 na aliemntação ok...

     

    mas não entendi essa parte 

    "Valores baixos pra alta velocidade

    Quanto a alimentar o módulo com 5, datasheet..."

     

    o modulo eu também posso alimentar com os 3.3V no manual fala de 3.3 a 6V  !!???

  12. Bom dia Galera do CDH, seguinte.... comprei um modulo bluetooth e estou a implementar um aplicativo para comunicar com o pic através desse modulo.....

     

    ...Mas ocorre que esse modulo hc-05 tem sua logica nos pinos TX/RX na casa dos 3,3V (acho que é igual ao arduino) e o pic tem logica 5V certo?? certeza que se alimentar o pic com 5V dará zebra no modulo né??

     

    Bem dei uma pesquisada e achei essa imagem, dizendo como fazer esse "casamento" de niveis logicos, segue:

    fxsevl.jpg

     

    Mas a parte do divisor de tensão ok, mas não queria ter que usar esse CI só para fazer isso!!

     

    Alguem tem algum dica, ja passou por isso??

     

    Pensei aqui, vou usar o 16F876A, no manual fala-se na alimentação dele 

    Operating Voltage Range (V) 2 to 5.5

    Então ele alimenta-se de 2 a 5.5V certo? se eu usar um regulador de 3.3V para alimentar essa parte logica da placa, funcionaria?? manteria-se o nivel logico exigido pelo modulo hc-05??

     

    Qual a opinião de vocês ??

     

    Att.

     

    Rodrigo

  13. Seguinte @MatheusLPS

     

    Achei um exemplo de como usar o 40x4. usa-se 2 lcd_init()..

     

    O que eu acho estranho é que a linha 2 direcionado na coluna 1 

    lcd_gotoxy(1,2); printf(lcd_putc1,"DO"); delay_ms(500); 

    mas aparece na coluna 21 digamos assim.. queria que aparece-se na coluna 1 embaixo da primeira palavra e eu controlaria o local de exibição, mandando a palavra para frente ou para traz !! setando o valor de coluna.. tipo deveria aceitar desde a coluna 1 até a 40..

     

    segue biblioteca(usa-se dois pinos enable)

    // These pins are for my Microchip PicDem2-Plus board, // which I used to test this driver. // An external 20x4 LCD is connected to these pins. // Change these pins to match your own board's connections. #define LCD_DB4   PIN_B4 #define LCD_DB5   PIN_B5 #define LCD_DB6   PIN_B6 #define LCD_DB7   PIN_B7 #define LCD_RS    PIN_B0 #define LCD_RW    PIN_B1 #define LCD_E1    PIN_B2 #define LCD_E2    PIN_B3 /* // To prove that the driver can be used with random // pins, I also tested it with these pins: #define LCD_DB4   PIN_D4 #define LCD_DB5   PIN_B1 #define LCD_DB6   PIN_C5 #define LCD_DB7   PIN_B5 #define LCD_RS    PIN_E2 #define LCD_RW    PIN_B2 #define LCD_E1     PIN_D6 */ // If you want only a 6-pin interface to your LCD, then // connect the R/W pin on the LCD to ground, and comment // out the following line.  Doing so will save one PIC // pin, but at the cost of losing the ability to read from // the LCD.  It also makes the write time a little longer // because a static delay must be used, instead of polling // the LCD's busy bit.  Normally a 6-pin interface is only // used if you are running out of PIC pins, and you need // to use as few as possible for the LCD. #define USE_RW_PIN   1      // These are the line addresses for most 4x20 LCDs. #define LCD_LINE_1_ADDRESS 0x00 #define LCD_LINE_2_ADDRESS 0x40#define LCD_LINE_3_ADDRESS 0x00 #define LCD_LINE_4_ADDRESS 0x40 // These are the line addresses for LCD's which use // the Hitachi HD66712U controller chip. /* #define LCD_LINE_1_ADDRESS 0x00 #define LCD_LINE_2_ADDRESS 0x20 #define LCD_LINE_3_ADDRESS 0x40 #define LCD_LINE_4_ADDRESS 0x60 */ //======================================== #define lcd_type 2   // 0=5x7, 1=5x10, 2=2 lines(or more) int8 lcd_line; int8 const LCD_INIT_STRING[4] = {  0x20 | (lcd_type << 2),  // Set mode: 4-bit, 2+ lines, 5x8 dots  0xc,                     // Display on  1,                       // Clear display  6                        // Increment cursor  };                               //DISPLAY 1 //------------------------------------- void lcd_send_nibble1(int8 nibble) { // Note:  !! converts an integer expression // to a boolean (1 or 0).  output_bit(LCD_DB4, !!(nibble & 1));  output_bit(LCD_DB5, !!(nibble & 2));   output_bit(LCD_DB6, !!(nibble & 4));     output_bit(LCD_DB7, !!(nibble & 8));     delay_cycles(1);  output_high(LCD_E1);  delay_us(2);  output_low(LCD_E1); } //DISPLAY 2 //------------------------------------- void lcd_send_nibble2(int8 nibble) { // Note:  !! converts an integer expression // to a boolean (1 or 0).  output_bit(LCD_DB4, !!(nibble & 1));  output_bit(LCD_DB5, !!(nibble & 2));   output_bit(LCD_DB6, !!(nibble & 4));     output_bit(LCD_DB7, !!(nibble & 8));     delay_cycles(1);  output_high(LCD_E2);  delay_us(2);  output_low(LCD_E2); } //----------------------------------- // This sub-routine is only called by lcd_read_byte(). // It's not a stand-alone routine.  For example, the // R/W signal is set high by lcd_read_byte() before // this routine is called.      #ifdef USE_RW_PIN int8 lcd_read_nibble(void) { int8 retval; // Create bit variables so that we can easily set // individual bits in the retval variable. #bit retval_0 = retval.0 #bit retval_1 = retval.1 #bit retval_2 = retval.2 #bit retval_3 = retval.3 retval = 0;     output_high(LCD_E1); delay_us(1); retval_0 = input(LCD_DB4); retval_1 = input(LCD_DB5); retval_2 = input(LCD_DB6); retval_3 = input(LCD_DB7);   output_low(LCD_E1); delay_us(1);     return(retval);    }    #endif //--------------------------------------- // Read a byte from the LCD and return it. #ifdef USE_RW_PIN int8 lcd_read_byte(void) { int8 low; int8 high; output_high(LCD_RW); delay_cycles(1); high = lcd_read_nibble(); low = lcd_read_nibble(); return( (high<<4) | low); } #endif //DISPLAY 1 //---------------------------------------- // Send a byte to the LCD. void lcd_send_byte1(int8 address, int8 n) { output_low(LCD_RS); #ifdef USE_RW_PIN while(bit_test(lcd_read_byte(),7)) ; #else delay_us(60);  #endif if(address)    output_high(LCD_RS); else    output_low(LCD_RS);        delay_cycles(1); #ifdef USE_RW_PIN output_low(LCD_RW); delay_cycles(1); #endif output_low(LCD_E1); lcd_send_nibble1(n >> 4); lcd_send_nibble1(n & 0xf); } //---------------------------- //DISPLAY 2 //---------------------------------------- // Send a byte to the LCD. void lcd_send_byte2(int8 address, int8 n) { output_low(LCD_RS); #ifdef USE_RW_PIN while(bit_test(lcd_read_byte(),7)) ; #else delay_us(60);  #endif if(address)    output_high(LCD_RS); else    output_low(LCD_RS);        delay_cycles(1); #ifdef USE_RW_PIN output_low(LCD_RW); delay_cycles(1); #endif output_low(LCD_E2); lcd_send_nibble2(n >> 4); lcd_send_nibble2(n & 0xf); } //---------------------------- //DISPLAY 1 //---------------------------- void lcd_init1(void) { int8 i; lcd_line = 1; output_low(LCD_RS); #ifdef USE_RW_PIN output_low(LCD_RW); #endif output_low(LCD_E1); // Some LCDs require 15 ms minimum delay after // power-up.  Others require 30 ms.  I'm going // to set it to 35 ms, so it should work with // all of them. delay_ms(35);          for(i=0 ;i < 3; i++)    {     lcd_send_nibble1(0x03);     delay_ms(5);    } lcd_send_nibble1(0x02); for(i=0; i < sizeof(LCD_INIT_STRING); i++)    {     lcd_send_byte1(0, LCD_INIT_STRING[i]);         // If the R/W signal is not used, then     // the busy bit can't be polled.  One of     // the init commands takes longer than     // the hard-coded delay of 50 us, so in     // that case, lets just do a 5 ms delay     // after all four of them.     #ifndef USE_RW_PIN     delay_ms(5);     #endif    } } //---------------------------- //DISPLAY 2 //---------------------------- void lcd_init2(void) { int8 i; lcd_line = 1; output_low(LCD_RS); #ifdef USE_RW_PIN output_low(LCD_RW); #endif output_low(LCD_E2); // Some LCDs require 15 ms minimum delay after // power-up.  Others require 30 ms.  I'm going // to set it to 35 ms, so it should work with // all of them. delay_ms(35);          for(i=0 ;i < 3; i++)    {     lcd_send_nibble2(0x03);     delay_ms(5);    } lcd_send_nibble2(0x02); for(i=0; i < sizeof(LCD_INIT_STRING); i++)    {     lcd_send_byte2(0, LCD_INIT_STRING[i]);         // If the R/W signal is not used, then     // the busy bit can't be polled.  One of     // the init commands takes longer than     // the hard-coded delay of 50 us, so in     // that case, lets just do a 5 ms delay     // after all four of them.     #ifndef USE_RW_PIN     delay_ms(5);     #endif    } } //---------------------------- void lcd_gotoxy(int8 x, int8 y) { int8 address; switch(y)   {    case 1:      address = LCD_LINE_1_ADDRESS;      break;    case 2:      address = LCD_LINE_2_ADDRESS;      break;    case 3:      address = LCD_LINE_3_ADDRESS;      break;    case 4:      address = LCD_LINE_4_ADDRESS;      break;    default:      address = LCD_LINE_1_ADDRESS;      break;         } address += x-1; lcd_send_byte1(0, 0x80 | address); lcd_send_byte2(0, 0x80 | address); } // DISPLAY 1 //----------------------------- void lcd_putc1(char c) {  switch(c)    {     case '\f':       lcd_send_byte1(0,1);       lcd_line = 1;       delay_ms(2);       break;         case '\n':        lcd_gotoxy(1, ++lcd_line);        break;         case '\b':        lcd_send_byte1(0,0x10);        break;         default:        lcd_send_byte1(1,c);        break;    } } //------------------------------ //DISPLAY 2 //----------------------------- void lcd_putc2(char c) {  switch(c)    {     case '\f':       lcd_send_byte2(0,1);       lcd_line = 1;       delay_ms(2);       break;         case '\n':        lcd_gotoxy(1, ++lcd_line);        break;         case '\b':        lcd_send_byte2(0,0x10);        break;         default:        lcd_send_byte2(1,c);        break;    } } //------------------------------ #ifdef USE_RW_PIN char lcd_getc(int8 x, int8 y) { char value; lcd_gotoxy(x,y); // Wait until busy flag is low. while(bit_test(lcd_read_byte(),7));  output_high(LCD_RS); value = lcd_read_byte(); output_low(LCD_RS); return(value); } #endif  

    segue codigo de exmplo

    #include <16f877A.h> #use delay(clock=4000000) #fuses XT, NOPROTECT, PUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT #include <lcd_40x4.c> void main() {    lcd_init1();    delay_ms(2);    lcd_init2();               while(true) {                                    //TEST 1            //---------------------------------            lcd_gotoxy(1,1);            printf(lcd_putc1,"TESTE");            delay_ms(500);            lcd_gotoxy(1,2);            printf(lcd_putc1,"DO");            delay_ms(500);            lcd_gotoxy(1,1);            printf(lcd_putc2,"LCD");            delay_ms(500);            lcd_gotoxy(1,2);            printf(lcd_putc2,"40X4");            delay_ms(1000);            lcd_putc1("\f");            delay_ms(1500);            lcd_putc2("\f");            delay_ms(1500);            //---------------------------------                                                      }    }      

    segue imagem da simulação

    2vn29mx.png

     

    Editando:

     

    Outra coisa, se eu coloco mais de 40 caracteres pra imprimir, nas linhas 1 e 3 imprimi normal até 40, e nas linhas 2 e 4 imprimi a partir de uma cera coluna!! o que me dizem a respeito??

     

    exemplo:

    lcd_gotoxy(1,1); printf(lcd_putc1,"abcdefghijlmnopqrstuvxyxabcdefghijlmnopqrstuvxyx"); delay_ms(500); lcd_gotoxy(1,2); printf(lcd_putc1,"abcdefghijlmnopqrstuvxyxabcdefghijlmnopqrstuvxyx"); delay_ms(500); lcd_gotoxy(1,1); printf(lcd_putc2,"abcdefghijlmnopqrstuvxyxabcdefghijlmnopqrstuvxyx"); delay_ms(500); lcd_gotoxy(1,2); printf(lcd_putc2,"abcdefghijlmnopqrstuvxyxabcdefghijlmnopqrstuvxyx"); delay_ms(1000); 

    exemplo simulado:

    aoxagx.jpg

  14. Fala Galera do CDH beleza... seguinte procurei aqui no forum e não achei nada sobre os display 40x4 (biblioteca)

     

    Gostaria de saber se alguem aqui ja trabalhou com eles em CCS, pelo que andei lendo por ai, deve-se trabalhar como se fosse 2 de 20x4, achei uma biblioteca para ele ( não está aqui comigo agora, posso posta-la depois) mas na simulação com o protheus e um pic 16f877a, imprimia estranho, as linhas.. sei lá...

     

    não manjo de editar bibliotecas por isso conto com a ajuda de vocês, quem sabe alguem ja usou e tem uma pronta por ai..

     

    Att.

     

    Rodrigo C.

  15. Pois é, fiz um teste aqui controlando via PWM uma carga de uns 3A com um IRF830 e pelamor.. o bicho esquentou muito... coloquei em um dissipador de calor com pasta termica... e mesmo assim só com um cooler que resolveu... estava perdendo rendimento devido ao aquecimento...

     

    agora imagino com controlando uma carga de 30A com o mosfet adequando o tamanho do dissipador!!!

     

    sei não heim!!

  16. Um ideia seria você criar um pwm pra gerar um sinal dc e este controlaria o pwm de um 3842 p.ex. E a realimentação você faria pelo circuito mesmo. Praticamente só com o hw do mc (pwm) você comanda o pwm do 3844 indiretamente. Mas isso tende a não ficar muito simples na visão de um ser normal

     

     

    Por sw, pegue uma amostra da v de saída, meça com a entrada ad e varie o duty cicle do pwm do mc pra corrigir. A princípio isso pode ser feito dentro de uma interrupt de passagem por zero p.ex. Seria só um pouco de trabalho de sw  - ler entrada analógica, setar duty cilcle o resto seria feito pelo hw (do mc) mesmo

    Isso se eu trabalhar diretamente em DC certo? Vou controlar direto a saida 12V o a entrada do trafo estará sempre com 220V?

     

     

    E nada de estranho amigo. Quando você tira um opto você tem o dobro do tempo pro mc trabalhar. Aparentemente o mc está fazendo muita coisa. Otimize o código (sem apelar pro asm) ou troque de compilador. Mas de novo você pode avaliar isso pois depende do sistema como um todo

    Quando falei estranho é pelo seguinte, com 2 optos o sistema fica tão lento a ponto de quase não conseguir usa-lo..E retirando 1 opto, sei que teria o obro do tempo para o mc fazer suas funções, então penso que o sistema deveria ficar meio lento, mas não fica, fica como se não estivesse lendo a int_ext de tão rápido (normal) que fica...

     

    Quanto a otimizar o codigo.. nao tem muito o que fazer...

     

    Vou tentar controlar a carga DC mesmo.. e ver o que vira...

  17. @Isadora Ferraz então, como eu falei ele está sofrendo sim para fazer esse controle pois há muitas chamadas da int_ex devido a passagem por zero...

     

    O estranho é que falei, se retiro um opto e leio somente 1 passagem por zero a coisa toda funciona normalmente ( digo em relação a não ficar travando) só que dai tenho esse problema da tensão na saida..

     

    Mas diga-me como fazer um hw fazer o trabalho?? sendo que é o pic que tem que pulsar o triac na hora certa de acordo com a passagem por zero??

     

    que poderia fazer isso?

     

    E outra, por sw? como fazer  o programa nao ficar enguiçando??

     

     

    Att.

  18. Pois é, pesquisei um pouco internet a fora.. e achei um site onde a pessoa controla um moor DC de 30A, usando um power mosfet e o PWM de um 16f877A..

     

    Acho que vou fazer um teste nesse sentido...

     

    estou fazendo em placa física.

     

    Quanto a usar um trafo de 24, desconsiderei essa possibilidade...

     

    Att.

  19. Fala galera do CDH, seguinte...

     

    Estou precisando fazer um controle de uma tensão de 0V ~12V provinda de um trafo 220/12 50A, bem em um teste aqui, fiz um dimmer para controlar a tensão de entrada do trafo, fazendo isso consigo variar a tensão na saida certo??

     

    Bem ocorre que mesmo o pic rodando a 20Mhz, como a detecção de zerocross chama a função da INT_EXT muitas vezes por segundo, a IHM acaba ficando lenta... péssimo pra falar a verdade..

     

    Se eu retirar um dos opto-acopladores que fazem a leitura da passagem, e disparar o triac somente em um dos semi-ciclos o programa (IHM) roda perfeitamente.......Só que com isso eu obtenho no maximo 6V na saida, pois como sabemos está sendo disparado somente em um dos ciclos..

     

    Para contornar isso pensei duas coisa (claro que se da maneira acima não for possivel resvolver a lentidão da coisa) 1ª usar um trafo 220/24, assim obterei metade da tensão (12V) certo?? e a corrente disponivel se manteria nos 50A ??

     

    Outra forma que pensei, é após a ponte retificadora, eu usar um transistor de potencia e usar o pwm do pic para controlar direto os 12 V da saida!! o que acham??

     

     

    Essa ultima forma é possivel, o que vocês acham? a carga não irá puxar os 50A  direto, mas tem que estar disponivel..

     

    Att.

     

    Rodrigo

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!