Ir ao conteúdo
  • Cadastre-se

Lote de LM35 com defeito ou falha na programação (Arduino)


Posts recomendados

  • Membro VIP
6 horas atrás, Renato.88 disse:

o problema fica em ter que programá-los, teria que comprar um soquete

 

Não sei se o amigo sabe mas isso não é necessário. Os mc's desta linha são gravados no sistema (ISP).

https://en.wikipedia.org/wiki/In-system_programming

Basta deixar uma barra de pinos ou só terminais nos pads 'contatáveis' preferencialmente com disposição compatível com o programador.

 

Em tempo...

Tenho centenas de plaquinhas so8-->isp pickit e também sot223-->pickit pro pic10fxxx que eu que fiz... em breve a distância de um clique no m.l. 😁

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

12 horas atrás, GustavoH93 disse:

Ótimo @Sérgio Lembo  vou estudar o STM e como ele pode trabalhar com vários interrupt posso medir mais coisas com ele e depois enviar tudo via I2C para o Arduino MEGA que vai juntar as leituras dos outros sensores e enviar via serial para o monitor.

 

Ué .... voce sabia que no Atmega328P quase todo pino dele pode gerar interrupt ? Existem dezenas disponíveis !

 

Eu uso 3 interrupts em pinos diferentes, fora 4 interrupts nos módulos internos do Atmga328P ( 1 Timer, 1 Counter, 1 Serial, 1 I2/C ) , tudo rodando ao mesmo tempo..... a maior vantagem que vejo no STM é existir PRIORIDADE de interrupção, isso ajuda bastante a não ter de fazer um baita controle na unha de todas elas podendo ter reentrância.

 

Pailo

Link para o comentário
Compartilhar em outros sites

@aphawk Paulo, não se esqueça do DMA. Para quem necessita fazer scan de ADC em várias entradas o DMA é uma mão na roda. Basta programá-lo para para colocar os resultados num buffer circular. Exemplo para os iniciantes (não é o seu caso):

 

3 pontos de leitura analógica

fazer uma tabela de 16 bits por 3 posições

programar o canal de DMA referente ao ADC para colocar a leitura das 3 entradas na tabela de forma circular.

programar o ADC para fazer scan das 3 entradas

OBS: essas instruções devem ser feitas no início do programa, não farão parte do loop de controle, só tomarão tempo da CPU uma única vez. 

 

No decorrer do programa simplesmente ler a posição correspondente, muito mais simples e rápido (apenas 1 instrução) do que fazer o read() que é simples no ato de escrever em C ou Bascom mas que torna o programa extenso e lerdo (indicar ao ADC o canal a ser lido, fazer o start da leitura, monitorar e aguardar a flag que indica a finalização da leitura para só então conseguir fazer a leitura desejada). É o hardware aliviando o trabalho da CPU.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Sérgio Lembo ,

 

Ah sim, faz muitttto tempo que não trabalho com DMA ( só usei isso em 1987 para memórias do IBM-PX XT ) ...  a linha nova dos AVRs tem tanto o DMA como o famosos hardware com links programáveis ,que encadeiam um monte de coisas onde antes era usado interrupção.... confesso que ainda não brinquei com esses novos Avrs, mas existe uma opção adicional do Bascom para trabalhar com eles.

Usando um simples esquema de interrupção do ADC eu consigo fazer fácil o scan e colocar na tabela, tudo em Asm, mas implementar circular sempre encheu o saco e consome ciclos de máquina .....mas seria de 10 bits nativos apenas, 16 bits em ADC é um sonho muito distante para mim no momento kkkkk

Não sabia que existia ADC de 16 bits nesses STM ....

 

Paulo

 

Link para o comentário
Compartilhar em outros sites

@aphawk

Paulo

Na verdade costumam se ADCs de 12 bits e aí se reservam 2 bytes (16 bits). Sobre o circular, basta implementar a tabela e informar ao canal do ADM que deve trabalhar de forma circular, ele gerencia para ti, não precisa implementar código, não ocupa tempo da CPU.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Estamos desvirtuando o assunto mas desta vez vou deixar pois tem coisa de meu (meu) interesse envolvida. Há alguns anos comprei um kit osciloscópio dso da china. Ele usa um stm32xxx. Faz leitura até 200KHz. De cara teorizei que ele faz uso do recurso dma pois é bem rápida a leitura. Os fontes estão disponíveis mas não tive muita paciência pra analisar.

Mas o que me (me) interessa: podeira eu (ou melhor, o st) ler um pacotinho de bytes da serial via dma? Atualmente leio no loop principal aguardando a chegada de 32 bytes .. o periférico envia o tempo todo mas mesmo assim eu coloquei um timeout... Ia evoluir pra ler um pacote na interrupção de recepção de 1 byte... algo como este minimalismo...
 

char i, dado[32], flag=0;

interrupt uart()
{
dado[i]=USART1_RDR;
i++;
if (i>31) {i=0; flag=1;}
}

for(;;)
...
if (flag) {trata_dados();flag=0;}
...

mas como este stm32 trabalha com dma (há mais tempo que eu) , talvez eu queira pular esta etapa. . Será que vale muito a pena? Não pela adrenalina mas pela eficiência mesmo...

Faz 1 pseucodigo aí pra mim vai...😁

31 minutos atrás, Sérgio Lembo disse:

que deve trabalhar de forma circular, ele gerencia para ti, não precisa implementar código, não ocupa tempo da CPU.

🤪

Link para o comentário
Compartilhar em outros sites

@Sérgio Lembo

 

Como curiosidade .... meu primeiro trabalho na área de microcontroladores foi usar um sistema de desenvolvimento GEPETO , um sistema Z-80 a 1 MHz e dois enormes disquetes de 8" que armazenavam cerca de 100K cada um,  conversar com um Apple II via serial, pois o pessoal tava migrando para os Apple II com CP/M que eram bem mais fáceis de se trabalhar......  Eu implementei um protocolo KERMIT ( nossa estou parecendo o @.ifcom as velharias agora )  no Gepeto, usando um buffer circular de recepção a alta velocidade ( mesmo sem precisar a 38Kbps kkkkk ) , e penei para fazer esse buffer circular em Asm ..... bons tempos aqueles de aprendizado na marra !

 

Paulo

 

Link para o comentário
Compartilhar em outros sites

9 horas atrás, .if disse:

Não sei se o amigo sabe mas isso não é necessário. Os mc's desta linha são gravados no sistema (ISP).

https://en.wikipedia.org/wiki/In-system_programming

Basta deixar uma barra de pinos ou só terminais nos pads 'contatáveis' preferencialmente com disposição compatível com o programador

Sim, eu sei. Só não há espaço pra colocar os terminais lá. 

15 horas atrás, Sérgio Lembo disse:

Existem soquetes para SMD, um pouco caros. 

Pois é, só descobri que tinha depois de ter comprado os CIs em formato DIP8. 

Link para o comentário
Compartilhar em outros sites

17 horas atrás, Renato.88 disse:

Se for comprar o micro sozinho, a versão SMD deve ser bem barata. Mas pra nós fica complicado fazer uma placa pra ela. 

Tempos atrás vi um vídeo de um cara, fazendo um projeto, acho que era de uma fonte. Placa ia ser feita num dos processos manuais. Ele disse, até colocar cristal, ci e afins, você já ganhou umas 10 vezes o valor do arduino nano. Detalhe aos amantes do desempenho, pelo que entendi é perfeitamente possível programar s/ a IDE diretamente em C, só não sei como pois p/ que eu faço o ATM328P é uma "bazuca p/ atirar numa mosca"

Link para o comentário
Compartilhar em outros sites

@.if

Só estudei o DMA da ST não sei como trabalham os demais. Se temos um buffer a existência do ponteiro se faz necessária. No caso do DMA o ponteiro é interno ao DMA, não se tem acesso ao valor atual. O que o DMA disponibiliza são 2 flags: 1 para quando atinge a metade do buffer e a outra para buffer completo. São setadas por hw e resetadas por softer. O tamanho do buffer administrado pelo DMA pode ser de até 2^16 - 1. O exemplo inicial foi de um scope, leitura de ADC, serial seria o quê? USART, I2C ou SPI? Vamos supor que seja uma USART

O controle da USART é o normal, o arroz com feijão de sempre. Normalmente as seriais simplesmente disponibilizam o byte lido e sinalizam numa flag podendo ou não disparar um EVENT ou INTERRUPT se setado para tal. O que muda é que os bytes recebidos (ou a enviar) serão colocados (ou lidos) num buffer. 

STM32F030

Manual de referência: RM0360

Quando a origem é maior que o destino os bytes excedentes mais altos são perdidos.

Quando a origem é menor que o destino os bytes excedentes mais altos são preenchidos com zero.

No nosso caso a USART trabalha com 8 bits então PSIZE=8 bits. Vamos usar então memória de 1 byte, MSIZE=8 bits. O DMA fará incremento de 1 byte a cada transferência. Sendo o ARM de 32 bits nada impede que os utilize na CPU carregando 4 bytes a cada vez com incremento de 4 no endereço. 

No caso específico da USART caso queira ler e escrever terá que utilizar 2 canais, um para leitura e outro para escrita ou apenas 1 caso seja unidirecional.

Tem 1 registro de uso geral das flags + 1 registro também de uso geral utilizado para zerar flags e 1 registro de controle que deve ser programado

Afora os 3 acima temos + 4 registros para cada canal em uso sendo que 2 contém os endereços do periférico e da memória e outros 2 as configurações tais como: tamanho da origem, tamanho do destino, se buffer circular ou não, tamanho do buffer, direção (memória -> periférico ou periférico -> memória). Não creio que vá usar buffer circular numa USART, seria muito irado e arriscado. Ao chegar ao fim do buffer não circular a transferência encerra sendo possível disparar interrupção para te avisar da condição. Para iniciar novo pacote vai ter que desligar o canal e religá-lo. Os parâmetros não são perdidos mas o canal fica pronto para mais uma rodada de transferência. Fazendo uma leitura rápida na USART parece que tem uns preparos nos registros dela para fazer DMA. Nunca usei USART, somente ADC e timer. 

Sobre a forma de programar tem aquela mais elegante onde se usa os nomes dos registradores e dos registros neles contido. Muito trabalhosa para o meu gosto. Prefiro definir o valor total do registrador e gravar a palavra completa. 

Para gravar o canal 1:

jumper para pular os ADRs

ADR endereço base do DMA + 8

ADR valor do registro 1 do canal 1

- - - -

ADR valor do registro 4 do canal 1

ADR valor do registro DMA_CSELR

LD R7, PC, -24 // lê o endereço relativo 6 words (4 bytes) antes do PC atual, refere-se à localização do endereço base do DMA e grava em R7.

LDMIA  R0-R5, R7 // baseado no endereço do primeiro ADR gravado em R7 lê os 6 ADRs da tabela e os grava de R0 a R5. Por serem 6 leituras a instrução de 16 bits gasta 6 ciclos, a cada ciclo R7 se post incrementa em 1 word (R7 = R7 + 4)

STMIA  R1-R4, R0// Baseado no endereço base do DMA gravado em R0 grava os 4 primeiros registradores que estão em sequência. Por serem 4 gravações a instrução de 16 bits gasta 4 ciclos, a cada ciclo R0 post incrementa em 1 word (R0 = R0 + 4)

LD R1, R7 // lê o valor do registro DMA_CSELR endereçado por R7 e grava em R1

ST R0 , R1, 90 // grava o valor contido em R1 no endereço R0 + 90

 

 

 

Para controlar o DMA use os 2 primeiros registradores.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
20 horas atrás, Renato.88 disse:

não há espaço pra colocar os terminais lá. 

pobrezinho. .. não pode aumentar um tiquinho a pcb?

 

20 horas atrás, Renato.88 disse:
Em 24/04/2023 às 01:26, Sérgio Lembo disse:

soquetes para SMD, um pouco caros. 

Pois é, só descobri que tinha

mas sinistro... tem espaço pra colocar o soquete smd.

adaptador-soic816-sop816-150mil-dip16-pa

Dica: não precisa ser do tamanho do terminal barra de pinos. bastam pads pra encostar o programador. Dica: coloque furos guia.. se couber.

 

18 horas atrás, Thiago Miotto disse:

diretamente em C, só não sei como pois

Há compiladores gratuitos pra ele. P.ex. o mplabx ide ou mplab xpress. Pode usar linha de comando se quiser mas a esta altura nem vale muito a pena (apesar que eu uso kk).

 

13 horas atrás, Sérgio Lembo disse:

DMA da ST

22 horas atrás, .if disse:

(ou melhor, o st)

tmj

 

13 horas atrás, Sérgio Lembo disse:

serial seria o quê? USART, I2C ou SPI? Vamos supor que seja uma USART

22 horas atrás, .if disse:
dado[i]=USART1_RDR;

Sua intuição está boa 😁.

Boa Serjão.. mais tarde dou uma relida e outra quando for fazer algo do gênero

🖖

 

 

55 minutos atrás, Renato.88 disse:

altura do campeonato essa discussão não vale mais

 

Nem todos estão a sua altura. P.ex. não totalmente inútil quem está a começar um projeto com mc smd: a condição de se deixar previsão pra ISP é sine qua non. Mas de fato a esta altura isso é quase bem óbvio... mas mesmo assim.. registre-se 😁

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, .if disse:

mas sinistro... tem espaço pra colocar o soquete smd

Nesse caso, o soquete smd ia ser um só lá no programador. No projeto o CI vai soldado mesmo. 

Mas a essa altura do campeonato essa discussão não vale mais, pois os CIs dip8 já estão aqui há um bom tempo. 

Link para o comentário
Compartilhar em outros sites

Em 24/04/2023 às 01:13, Renato.88 disse:

Então essa coisa pode nos ajudar na programação sim. Talvez ele faça o grosso, e a gente fica com a parte mais fácil que é adequar os programas aos hardwares que a gente vai usar. 

Para adequar os programas, já tem tudo pronto em manuais e locais conhecidos. 

Então  pra mim não diria mais fácil eu diria menos difícil 😅  mas a ideia é essa mesma, ter um código base para começar e ir adaptando e colocando funções que precisamos, se o chatGPT não ficar 100% pago em breve (o que acho que vai acontecer) ele pode ser mais uma ferramenta pra gente é só saber usar, é tipo um multimetro comum, dá pra fazer muita coisa com ele, mas se for medir DC e colocar na escala de AC vai ter leitura errada, agora sabendo usar pode ser extremamente util.

 

 

Agora mesmo estou no APP Inventor, e estou reparando que tem coisas parecidas com a programação do arduino tais como: variáveis, funções, cálculos...

Mas aquela programação visual me causa estranheza, sei programar bem pouco no arduino agora nessa programação visual "tô boiando".

 

Entendi algumas coisas com os aplicativos de exemplos, baixei um app no celular para se comunicar com o arduino  acender e apagar um led quando envio "0" ou "1" o curioso é que não é só espetar o arduino via cabo, quando conecto  o celular  vai identificar qual modelo de chip USB que está na placa e selecionar o driver correto para se comunicar essa parte é bem complexa, o que estou fazendo é editar este aplicativo para eliminar todas as coisas que não vou utilizar e deixar o mínimo do mínimo para que a comunicação funcione, e depois disso começo a colocar as funções que vou precisar no aplicativo, mas tem que ficar identificando o que não preciso, apagar e ir testando isso leva tempo estou eliminando coisas desde ontem e parece que vai levar um bom tempo pra terminar...

 

Engraçado que via cabo tem pouca coisa na internet, agora por bluetooth tem bem mais coisas e parece ser até mais fácil como @.if mencionou, o duro é que o tablet que vou utilizar é tão jurássico que nem bluetooth tem só dá pra se comunicar via cabo mesmo.

 

 

Em 24/04/2023 às 01:13, Renato.88 disse:

Se for comprar o micro sozinho, a versão SMD deve ser bem barata. Mas pra nós fica complicado fazer uma placa pra ela. 

E não vai demorar muito pra ter arduino com CI gota de epoxi (se é que já não tem). 

Imagino que seja mais barata mesmo, e eu fico todo atrapalhado pra soldar um 555 imagina um SMD 😅

Gota de epoxi tipo aqueles que tampam os CI de calculadora de 1,99? Quando era criança achava que aquilo era o chip não uma resina por cima dele kkkkkk

 

 

Em 24/04/2023 às 12:34, aphawk disse:

Ué .... voce sabia que no Atmega328P quase todo pino dele pode gerar interrupt ? Existem dezenas disponíveis !

Sim mas nos outros tópicos vi que precisava utilizar timerOne para fazer a contagem com precisão aí já diminuem os pinos para essa função e o  @Sérgio Lembo me falou sobre o STM, o que vai ser muito bom porque vou utilizar para ficar contando coisas e enviar para o arduino a informação já pronta, fora que utilizando timerOne algumas funções específicas do arduino ficam limitadas, confesso que não entendi bem essa parte mas pesquisando e vendo as respostas nos tópicos essa parece ser a melhor opção.

 

Em 24/04/2023 às 18:57, Thiago Miotto disse:

Tempos atrás vi um vídeo de um cara, fazendo um projeto, acho que era de uma fonte. Placa ia ser feita num dos processos manuais. Ele disse, até colocar cristal, ci e afins, você já gastou umas 10 vezes o valor do arduino nano.

É bem isso mesmo, atualmente um arduino xing ling  sai mais barato e praticamente não gasta tempo nenhum em montagem dos componentes, fora que como já está montado é só conectar os componentes que precisa no arduino e pronto, agora se for montar como antigamente além dos custos e tempos pode dar algum erro na montagem e queimar alguma coisa (o que comumente ocorre comigo)

 

 

Link para o comentário
Compartilhar em outros sites

25 minutos atrás, GustavoH93 disse:

Imagino que seja mais barata mesmo

Sim, é um pouco.

Porém tem também o Arduíno nano que é basicamente esse AT328P numa plaquinha com uma porta USB. 

O preço disto em relação ao chip sozinho é quase igual, mas aí fica usável pra gente. 

27 minutos atrás, GustavoH93 disse:

e eu fico todo atrapalhado pra soldar um 555 imagina um SMD 😅

Soldar o smd não é o problema, já soldei alguns. O problema é fazer placa pra eles aos modos manuais, pois não tem como. 

33 minutos atrás, GustavoH93 disse:

Gota de epoxi tipo aqueles que tampam os CI de calculadora de 1,99?

Exatamente. 

33 minutos atrás, GustavoH93 disse:

Quando era criança achava que aquilo era o chip não uma resina por cima dele kkkkk

Bem isso. 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
8 horas atrás, Renato.88 disse:

fazer placa pra eles aos modos manuais, pois não tem como. 

Desenhando as trilhas a mão com caneta na pcb de fato não é pra qualquer um. Mas na técnica de imprimir em papel fotográfico já fiz pro MCU 32-bit STM32F0 ARM Cortex M0 RISC 64KB Flash 2.5V/3.3V 32-Pin LQFP Tray com sucesso

 

8 horas atrás, GustavoH93 disse:

é tão jurássico que nem bluetooth tem só dá pra se comunicar via cabo

e wifi

Link para o comentário
Compartilhar em outros sites

Em 26/04/2023 às 07:47, .if disse:

e wifi

Wifi ele tem mas parece que não é fácil também e com wifi até onde sei preciso ter um roteador pra conectar o tablet e o arduino ao roteador e aí sim eles conseguem conversar entre sí, só que como precisa ser um treco móvel fica ruim levar um roteador junto fica muita coisa pra pouca coisa, o cabo seria o mais fácil e barato porque não precisaria comprar nada, mas tá terrível programar isso 

 

Em 25/04/2023 às 23:28, Renato.88 disse:

Porém tem também o Arduíno nano que é basicamente esse AT328P numa plaquinha com uma porta USB. 

O preço disto em relação ao chip sozinho é quase igual, mas aí fica usável pra gente. 

O nano é realmente mais barato, mas será que não teria soquete para o AT328P? Assim a gente solda o soquete na placa e espeta o CI nele.

Link para o comentário
Compartilhar em outros sites

Em 25/04/2023 às 23:28, Renato.88 disse:

Porém tem também o Arduíno nano que é basicamente esse AT328P numa plaquinha com uma porta USB.

 

Hoje em dia é muito maior a chance de você receber o ATMEGA328PB no lugar do ATMEGA328P .... que é totalmente compatível com o atmega328p,mas acrescenta um monte de coisas legais, vejam a tabela :

 

image.png.c02a1562b7ee107c6a4dc368e3333701.png

 

Agora temos acesso a mais uma serial completa ( UART, I2C E SPI também ), mais 2 novos timers, mais 4 saídas PWM, mais dois comparadores e mais 4 pinos de I/O ....

 

Ajuda bastante pelo preço módico da plaquinha !

 

Paulo 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

11 horas atrás, GustavoH93 disse:

Wifi ele tem mas parece que não é fácil também e com wifi até onde sei preciso ter um roteador pra conectar o tablet e o arduino ao roteador e aí sim eles conseguem conversar entre sí

Depende do módulo utilizado. O ESP32 pelo que sei consegue gerenciar até 4 conexões simultâneas. Os roteadores domésticos entre 12 e 16 conexões simultâneas. 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
14 horas atrás, GustavoH93 disse:

Wifi ele tem mas parece que não é fácil também e com wifi até onde

.. eu suspeito que seu tablet ou celular ou note pode apenas navegar na página do seu sistema. Algo como quando você digita 192.168.1.1 pra acessar seu roteador. você pode criar o seu como 193.169.2.2 p.ex. De fato aí começa a complicar pois toda a "inteligência" da página fica por conta do seu sistema. A supercapacidade de seu tablet, cel, note vai ser meio irrelevante. Além de ter que entender 1 pouco de linguagem html ou similar.. Portanto eu vou esquecer isso... por enquanto...

 

Da hora Paulão.. recentemente andei tendo problemas com isso. O programador xingava dizendo que não reconhecia a assinatura do mc. Mas aparentemente bastou ignorar. Me informe se tem como eu informar o tipo pro compilador (IDE) do arduino. Talvez necessário pra usar os novos recursos...

Link para o comentário
Compartilhar em outros sites

50 minutos atrás, .if disse:

Da hora Paulão.. recentemente andei tendo problemas com isso. O programador xingava dizendo que não reconhecia a assinatura do mc. Mas aparentemente bastou ignorar. Me informe se tem como eu informar o tipo pro compilador (IDE) do arduino. Talvez necessário pra usar os novos recursos...

 

Sei que tem umas 3 atualizações que você escolhe uma e manda instalar dentro da IDE e ele reconhece o Arduino Nano com o Atmega328PB e pode usar todo o novo hardware :

 

https://forum.arduino.cc/t/including-the-atmega328pb-as-a-further-nano-variant/924775

 

Para programar no BASCOM  eu uso o USBASP e ignoro a assinatura diferente, e vai na boa.

 

Eu comprei faz uns 2 meses 10 plaquinhas Arduino Nano, e todas vieram com o modelo PB... gostei tanto de usar elas como core de desenvolvimento que meus produtos novos saem sempre com elas em vez dos Atmegas328P :

 

image.thumb.png.26d44afdd5ba6087fe47939c2b30d5f3.png

 

image.thumb.png.062080cc8ec11a12a1b22483b6efee14.png

 

Paulo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@alexandre.mbm ,

 

Sim, uso o Bascom e Assembly direto nele, zero o bootloader porque eu gravo usando o conector de 6 pinos ICSP do Nano usando uma interface USBASP baratinha, e ganho os 32K para meu programa.

 

Olha que bela mistura de Asm e Bascom :

 

image.png.23b21c638146a40aff399d7bfe83454b.png

 

Ou BASCOM puro também :

 

image.png.ae62880984e1f6335d2f703730de8ca5.png

 

Tenho de me virar com aquilo que eu entendo, meu amigo .....

 

Paulo

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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!