Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

  • Membro VIP

Parece que o chatgpt deduz por si que você usa arduíno. E claro ele nem entra no "mérito da questão" pois como um programador "moderno" pega a lib pronta.

 

Mas a tendência de virar tudo pra mc não é totalmente ruim. Um mc tenderá a ser mais barato(*) do que um circuito lógico. Antecipei isso a loooong time ago quando com preguiça de fazer com inversor cmos, usei um picxxx só pra gerar um beep 3Khz naqueles buzzer piezoelétrico 🤪. Em outra usei pra fazer um pisca led pra colocar no painel do carro como alarme falso 😁

 

(*) p.ex. veja alguns na digikey

a china pode até melhorar o preço

 

Em breve ninguém mais vai precisar de Paulões, Serjões, Morises, Franças, Brunões e afins

 

Mas e aí... seus lm35 tão zoados mesmo? 🤔😁

Link para o comentário
Compartilhar em outros sites

@GustavoH93 ,

 

Programar é algo fácil, DESDE QUE você se sinta à vontade com a linguagem que você escolheu. Eu também não consigo entender nem um pisca-pisca em C, tentei aprender duas vezes e percebi que não me traria vantagem nenhuma em relação à linguagem que aprendi fazem mais de 40 anos se eu não conseguir entender direitinho essa linguagem, e abandonei o C. Desde 1979 eu programo em Basic e Assembler, e até hoje são as duas linguagens que utilizo em todos os meus projetos e produtos que vendo sob encomenda.

 

Eu cheguei a programar um pouco para PIC em Basic, mas era uma linguagem sem muitos recursos. Quando fui ver o Assembly para os Pics apareceu essa dodeira de bancos, coisa que eu nunca havia visto, e desisti deles de vez.

 

Depois que descobri o BASCOM, que é para a linha AVR, que permite mixar trechos em Basic e Assembler, e estudei o hardware padrão dos  AVRs e percebi que eles são muito parecidos aos 8080 e Z80 em termos de instruções e organização de memória ( sem os malditos bancos dos Pics ) e já tinham dentro os equivalentes do Z80 CTC, Z80 SIO, Z80 PIO, etc,  percebi que poderia fazer qualquer coisa usando eles com Basic e Assembler caso fosse estritamente necessário.

 

Fiz até um tutorial que ficou alguns anos nos tópicos destacados, para quem quiser aprender um pouco, com  169 páginas e dezenas de exemplos de montagens e programa e mais de uma centena  de posts aqui no CDH . Explico algumas coisas em detalhes, o que ajuda o entendimento da eletrônica dos Avrs, quem sabe lhe seja útil.

 

Vou colocar o link do tópico para facilitar :

 

https://www.clubedohardware.com.br/forums/topic/937085-projetos-com-avr-design-programação-em-basic-e-assembly/#comment-5252683

 

Por exemplo, usar hoje um Attiny 45 ou 85 é uma opção muito legal até para fazer um CI dedicado; eu fiz um projeto legal que era uma plaquinha controladora de display LCD, 2 rotary encoders e 4 I/Os que poderiam ser tanto entradas como saídas, usava um Atmega88 e a comunicação e comandos era tudo via Serial ou I2C. Você mandava os códigos para programar a plaquinha de uma maneira bem fácil,  e a partir daí a plaquinha sabia como configurar os I/os como entrada ou saída, e se alguém mexia em uns dos encoders ou mudava um dos I/OS de entrada ,ela informava via serial ou I2C. Sem usar Assembly, tudo apenas em Basic do Bascom! Vendi esse projetinho para uma empresa que fabricava equipamentos dedicados de telecomunicação.

 

O céus é o limite, ( diminuído pelos limites de RAM e Flash de programa kkkk ) mas você tem de se dedicar uns dias para entender bem como tudo funciona.

 

 

3 horas atrás, .if disse:

Em breve ninguém mais vai precisar de Paulões, Serjões, Morises, Franças, Brunões e afins

 

Logo estaremos todos obsoletos, igual o seu rádio AM valvulado à pilhas !

 

Paulo

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

8 horas atrás, aphawk disse:

Programar é algo fácil, DESDE QUE você se sinta à vontade com a linguagem que você escolheu. Eu também não consigo entender nem um pisca-pisca em C, tentei aprender duas vezes e percebi que não me traria vantagem nenhuma em relação à linguagem que aprendi fazem mais de 40 anos se eu não conseguir entender direitinho essa linguagem, e abandonei o C. Desde 1979 eu programo em Basic e Assembler, e até hoje são as duas linguagens que utilizo em todos os meus projetos e produtos que vendo sob encomenda.

 

20 horas atrás, Renato.88 disse:

Comecei a tentar entender programação lá pra 2014. Não consegui levar muito a sério, pra que os comandos e as ideias entrassem em minha cachola. 

Desde então, na linguagem C só entendi como funciona o IF, ELSE, WHILE e FOR. 

As variáveis ainda não entendi. 

Recentemente precisei mexer em Assembly, pois em um programa que já estava pronto resolvi colocar junto um led piscando pra indicar o funcionamento da coisa. 

Em outro tópico, até comentei sobre isso com a @.if

Que demorei três dias pra fazer isso funcionar. 

Essa linguagem é mais direta pra gente fazer as coisas, porém algumas coisas simples se tornam complicadas nela. 

Aí está, programação leva anos para aprender e também quando a pessoa trabalha diretamente com isso fica um pouco mais fácil porque tem contato direto todos os dias, eu mesmo não tenho muito tempo livre então estudo o pouco que dá, assim demora mais porém dá pra  começar e aos poucos vou chegando ao objetivo, esse é o legal do forum cada um tem um conhecimento diferente e compartilhando aqui todos acabam se beneficiando.

 

20 horas atrás, Renato.88 disse:

Sobre o Chat GPT, ainda pretendo ver no que ele pode me ajudar. Pois tenho uma porção de CIs da linha PIC que comprei para uns projetos futuros. 

Perguntei isso pro chatgpt a um tempo e ele não programa pic infelizmente, mas isso foi superficial alguma coisa ele pode saber sim.

 

10 horas atrás, .if disse:

Mas a tendência de virar tudo pra mc não é totalmente ruim. Um mc tenderá a ser mais barato(*) do que um circuito lógico. Antecipei isso a loooong time ago quando com preguiça de fazer com inversor cmos, usei um picxxx só pra gerar um beep 3Khz naqueles buzzer piezoelétrico 🤪. Em outra usei pra fazer um pisca led pra colocar no painel do carro como alarme falso 😁

Realmente acaba barateando um pouco, arduino mesmo era caro a uns anos atrás hoje tá bem mais acessível. E eu fiz algo parecido, precisava fazer a leitura da sonda lambda do carro, ela marca de 0 até 1v tentei fazer usando LM3914 e consegui a façanha de não funcionar ainda queimei o dito cujo, depois comprei PicKit 3 e com ajuda do pessoal daqui do forum e do artigo no picsource usei um pic 16f676 pra fazer a mesma coisa e funcionou muito bem.

 

20 horas atrás, Renato.88 disse:

Concordo. 

Tem muito gente por aí comprando Arduíno e seus módulos pra fazer coisas muito simples e acham que estão "abafando na eletrônica". 

Seu exemplo de acender a lâmpada com um botão (push botton) , nem precisa de eletrônica, vendem um relé que faz essa função. 

 

Em casos onde precisamos de uma comunicação com PC, transferência de dados via Internet, apresentação de dados em visor LCD, ou comunicação tipo serial com outros periféricos acho o Arduino super válido. 

Em outras situações mais simples, já prefiro os Micro controladores do tipo PIC ou similares. 

Exatamente, ele tem uma capacidade muito alta para vários projetos eu tenho uma CNC que montei usando um arduino e demonstra como aquilo é poderoso, estou nesse projeto agora para fazer o painel do carro, mas em um aeroclube que fui ano passado o pessoal conseguiu montar um simulador de voo inteiro utilizando arduino.

E o ideal é usar ele para essas funções, mas para coisas mais simples, tem CI, PIC e a eletrônica clássica, lembro quando fiz um amplificador de som, era básico e tinha ruidos mas fiquei felizão de ter funcionado kkkkkk

 

9 horas atrás, aphawk disse:

Fiz até um tutorial que ficou alguns anos nos tópicos destacados, para quem quiser aprender um pouco, com  169 páginas e dezenas de exemplos de montagens e programa e mais de uma centena  de posts aqui no CDH . Explico algumas coisas em detalhes, o que ajuda o entendimento da eletrônica dos Avrs, quem sabe lhe seja útil.

 

Vou colocar o link do tópico para facilitar :

Opa obrigado @aphawk vou ler sim, junto com o material que o @Renato.88 me mandou a algum tempo e ainda não li essas coisas são ótimas porque ajudam o iniciante e incentivam a buscar mais conhecimento.

 

11 horas atrás, .if disse:

Mas e aí... seus lm35 tão zoados mesmo? 🤔😁

Se fossem LM35 estariam zoados mesmo, mas ao que tudo indica eram fakes, testei tudo tudo, usei potenciômetro pra ver a programação, usei capacitores pra filtrar, inverti os terminais, testei com multímetro, mudei a porta de entrada e nada, juntando ao fato de que tem várias mensagens no link da compra alegando que eram falsos então eu diria que fui enganado mesmo 😒

 

Pessoal estou fazendo os testes com o DS18B20 e o chat GPT daqui a pouco posto os resultados.

Testes utilizando o ChatGPT e o DS18B20:

 

Primeiro teste utilizando bibliotecas oneWire e DallasTemperature (idêntico ao que o @Thiago Miotto postou)

 

Sketch uses 5384 bytes (16%) of program storage space. Maximum is 32256 bytes.
Global variables use 258 bytes (12%) of dynamic memory, leaving 1790 bytes for local variables. Maximum is 2048 bytes.


No segundo teste eu pedi para refazer o código anterior apenas utilizando a biblioteca oneWire:

 

Sketch uses 3934 bytes (12%) of program storage space. Maximum is 32256 bytes.
Global variables use 232 bytes (11%) of dynamic memory, leaving 1816 bytes for local variables. Maximum is 2048 bytes.

 

 

Terceiro teste utilizando apenas oneWire e mudei na mão de float para int:

 

Sketch uses 3304 bytes (10%) of program storage space. Maximum is 32256 bytes.
Global variables use 220 bytes (10%) of dynamic memory, leaving 1828 bytes for local variables. Maximum is 2048 bytes.

 

Realmente não usar a biblioteca dá diferença no tamanho da programação, e alterar de float para int também altera o tamanho e imagino que poupe bastante recursos do micro.

 

 

 

 

Todos os códigos funcionaram normalmente, o que ultimo que usei int no lugar de float ficou assim:

 

Citação

#include <OneWire.h> // inclui a biblioteca OneWire

 

// define o pino onde o sensor está conectado

const int pinoSensor = 2;

 

// inicializa o objeto OneWire

OneWire oneWire(pinoSensor);

 

void setup() {

  // inicia a comunicação serial

  Serial.begin(9600);

}

 

void loop() {

  // envia um sinal para o sensor iniciar a conversão

  oneWire.reset();

  oneWire.write(0xCC); // pula a leitura do endereço

  oneWire.write(0x44); // inicia a conversão

 

  // aguarda a conversão ser concluída

  delay(1000);

 

  // faz a leitura do valor da temperatura

  oneWire.reset();

  oneWire.write(0xCC); // pula a leitura do endereço

  oneWire.write(0xBE); // faz a leitura dos dados

 

  // lê os dados da temperatura do sensor

  byte dados[9];

  for (int i = 0; i < 9; i++) {

    dados[i] = oneWire.read();

  }

 

  // calcula a temperatura

  int temperatura = ((dados[1] << 😎 | dados[0]) * 0.0625;

 

  // exibe a temperatura no monitor serial

  Serial.print("Temperatura: ");

  Serial.print(temperatura);

  Serial.println(" °C");

 

  // aguarda um segundo antes de fazer a próxima leitura

  delay(1000);

}

 

 

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

58 minutos atrás, GustavoH93 disse:

Perguntei isso pro chatgpt a um tempo e ele não programa pic infelizmente, mas isso foi superficial alguma coisa ele pode saber sim.

Sendo linguagem C, acho que dá pra adaptar uns comandos do arduino no pic. 

Espero que pelo menos ele faça o grosso da coisa, pois ajustes no que já está feito eu consigo fazer. 

58 minutos atrás, GustavoH93 disse:

lembro quando fiz um amplificador de som, era básico e tinha ruidos mas fiquei felizão de ter funcionado kkkkkk

Fiz um também, era fraquinho demais. 

Não tinha ruídos e os componentes estavam apenas soldados um no outro. 

Aí pra dar um som razoável, liguei nele uma caixa acústica com um alto falante de 12 polegadas! :lol:

A minha primeira montagem eletrônica que funcionou foi justamente piscar o led, mas não foi com micro controlador. Usei os tais "componentes discretos". 

 

 

 

Link para o comentário
Compartilhar em outros sites

Em 17/04/2023 às 23:13, Renato.88 disse:

As variáveis ainda não entendi.

Sério? Se conseguiste fazer um programa que controla algo e que tem um feedback então usaste uma ou mais variáveis mesmo sem saber. Um simples botão conectado a um pino é uma variável. Se houver leitura de tensão, idem.Para facilitar a programação damos nomes a tais leituras e por não terem um valor fixo são variáveis. Quando os valores são fixos os chamamos de constantes.

Um exemplo de constantes e variáveis trabalhando juntas: existindo um sensor de rotação acoplado na roda de um veículo o seu RPM é uma variável. Desejando converter essa rotação em velocidade, a velocidade também é uma variável. A conversão de RPM para velocidade leva em consideração o diâmetro da roda (que é fixo) e a unidade a ser utilizada (metros por segundo, km/h). Feitas as contas isso gera um valor fixo de conversão (constante). Variável velocidade = variável RPM x constante de conversão. Simples assim. 

 

Um outro conceito de variável são as locais, públicas e privadas. São muito uteis quando se se tem mais de um programador trabalhando para evitar conflitos de nomes. São fundamentais na utilização de bibliotecas. As bibliotecas nada mais são do que programinhas prontos que te entregam um resultado mastigado. Elas também utilizam variáveis próprias além das que enviaste para processamento e para evitar que a coincidência de nomeamento bagunce o programa elas são privadas, isto é, só são reconhecidas dentro delas e não haverá conflito se o programador repetir o nome. 

 

No entanto, quando se estuda as instruções de uma CPU não encontramos as variáveis. Ao invés disso encontramos umas 20 formas de manipulação de endereços de memória, seja para leitura ou gravação de dados. Já pensou que doideira se a cada necessidade de gravar ou recuperar um valor tivéssemos que escrever o endereço de memória no programa? Utilizamos as variáveis e o compilador que se vire em determinar os endereços para cada variável ou constante que inventamos. Ou seja: é muito mais fácil dar nomes para os valores do que armazenar ou recuperar os valores pelos seus endereços.

Exemplo numa CPU de 8 bits que permite o endereçamento direto no programa:

 

No programa fica: 

intervalo = TIM1_CH1 //  Lê o capture do canal 1 de TIM1 para a variável intervalo

 

Na CPU fica:

LD R1, TIM1_CH1 // carrega no registro R1 o valor do endereço TIM1_CH1, A expressão TIM1_CH1 é substituída pelo  endereço físico do TIM1_CH1.

Store R1, intervalo // Grava no endereço RAM intervalo o valor contido no registro R1. A expressão intervalo é substituída pelo endereço físico da memória RAM alocado para essa expressão. Caso o programador não faça alocação do endereço de memória para a variável o compilador inventa um no momento em que a variável é declarada. 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, alexandre.mbm disse:

@Sérgio Lembo , provavelmente ele simplificou demais o linguajar. Acho que ele quis se referir a ponteiros e gerenciamento de memória.

Exatamente!

As variáveis que eu apanho, no caso da linguagem C são aquelas que usam com os comando int, const e short por exemplo.

Entendo que servem para armazenar dados temporários na memória, mas ainda não entendi bem como usar.

Já no assembly, não entendo como funciona o MOV... qualquer coisa que venha na frente.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ponteiros, vetores e afins são as entidades mais perturbadoras do c. Ainda me dão tapinhas na cara até hoje. o que me faz lembrar... meu 1º contato com este mundo foi em basic de um apple com 6502. Me lembro vagamente que o basic nem precisa[va] definir nada previamente , nem tipo, nem tamanho ou seja é linguagem pra crianç... ops .. pra quem só quer molez.. ops ... pra idosos..🤪. ops ... é bem básica e simples mesmo... O que apareceu na minha vaga lembrança:

10 HOME

20 INPUT A

30 INPUT B

40 C=A+B

50 PRINT$ (A+B=)

60 PRINT C

Paulão confirma? 😁

preguiça de colocar o equivalente em c.. talvez outra hora... mas me lembrei que tenho um livreto "C guia do usuário" que fazia tais comparações e dizia que ponteiros não tem equivalente no basic. qualquer dia acho ele...

 

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

Um outro conceito de variável são as locais, públicas e privadas.

Como não entendo nada de c++ eu zipo pra só  local e global no c.

 

8 horas atrás, Renato.88 disse:

int, const e short

acertou

8 horas atrás, Renato.88 disse:

servem para armazenar dados

bem como pra manipulá-los

 

8 horas atrás, Renato.88 disse:

no assembly, não entendo como funciona o MOV... qualquer coisa que venha na frente.

O mov é exclusivo de um tipo de micro processador/controlador. É simples como A=2 ... MOV A,#2. P.ex. no neandertal 6502 existia algo como LDA #2 // LoaD Acumulator com valor imediato 2. No Z80 acho que era LD .. ou seja o assembly tentava de maneira sofrível se aproximar da linguagem humana. O c teve algum sucesso, o basic ainda mais, as linguagens gráficas ou visuais elevaram o patamar, já o chatgpt está levando a outro nível.

 

me lembrei que o tópico está descambando e com número de páginas extrapolado. Abra outro na seção microcontroladores já com seus progressos

 

 

1 hora atrás, aphawk disse:

detesto chaveamento de bancos ....

 

Em asm de fato é coisa de outro mundo fazer esta ginástica. Já em c, o 1º compilador pic que usei precisava definir em qual banco a variável estaria.

char bank1 a,b,c;

char bank2 d,e,f;

Me lembro que apanhei até descobrir isso por insight.. numa era com poucas informações.

Mas os projetistas do compilador provavelmente tiveram retorno de pessoas como você e logo em seguida numa atualização não houve mais esta necessidade: o compilador define qual a melhor opção.

 

1 hora atrás, aphawk disse:

Mas existe uma diferença GIGANTESCA entre o BASCOM

Bacana... mas suponho que ele não renega as raízes e mantém a sintaxe do basic, correto?
 

 

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

int: significa que o valor é inteiro, sem casa decimal, podendo ser positivo ou negativo. É um recado ao compilador de como deve tratar a variável que está sendo declarada, não gera comando no assembler. 

const: significa que o valor é fixo. É um recado ao compilador de como deve tratar a variável que está sendo declarada, não gera comando no assembler. 

short: significa que a variável declarada ocupa apenas 1 byte. É um recado ao compilador de que deve reservar apenas 1 byte para armazenamento da variável, não gera comando no assembler. 

 

complementando

int: 16 bits ou 2 bytes

const: o dado fica na flash e não na ram

char const tabela7segmentos[10]={0b11111100, 0b01100000,...};// 0, 1...

Se não colocar const vai usar a ram... venenoso p.ex. pra um pic10f200

 

Eu levo a sério este negócio de não contribuir pro aumento de páginas kk 😁

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Renato.88 disse:

As variáveis que eu apanho, no caso da linguagem C são aquelas que usam com os comando int, const e short por exemplo.

Entendo que servem para armazenar dados temporários na memória, mas ainda não entendi bem como usar.

Já no assembly, não entendo como funciona o MOV... qualquer coisa que venha na frente.

int: significa que o valor é inteiro, sem casa decimal, podendo ser positivo ou negativo. É um recado ao compilador de como deve tratar a variável que está sendo declarada, não gera comando no assembler. 

const: significa que o valor é fixo. É um recado ao compilador de como deve tratar a variável que está sendo declarada, não gera comando no assembler. 

short: significa que a variável declarada ocupa apenas 1 byte. É um recado ao compilador de que deve reservar apenas 1 byte para armazenamento da variável, não gera comando no assembler. 

 

MOV: Este comando está presente em controladores que usam 2 ou mais bancos de endereçamento. Vai encontrar nos PICs da Microchip, por exemplo.

Supondo que queira guardar um valor no endereço 000A F5C0.

Se estiver se referindo à RAM

Store 

Se estiver se referindo ao mapa de registradores (timers, portas e outros elementos de hardware)

MOV

Já nos processadores que utilizam endereçamento linear por não existir duplicidade de endereços também não há duplicidade de comandos. O STM8 ou o STM32 são exemplos disso, nesses para ler ou gravar só existem Load e Store. Não há necessidade de comandos distintos pois nessas implementações a RAM, FLASH e registradores estão na mesma régua de endereçamento, sem duplicidade.

 

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

1 hora atrás, .if disse:

Me lembro vagamente que o basic nem precisa[va] definir nada previamente , nem tipo, nem tamanho ou seja é linguagem pra crianç... ops .. pra quem só quer molez.. ops ... pra idosos..🤪. ops ... é bem básica e simples mesmo... O que apareceu na minha vaga lembrança:

10 HOME

20 INPUT A

30 INPUT B

40 C=A+B

50 PRINT$ (A+B=)

60 PRINT C

Paulão confirma? 😁

 

Confirmo tudo o que você disse, claro que a ressalva de que isso vale para usar Basic em computadores tipo PC ..... até no Sinclair era muito semelhante a linguagem. O ZX-81 era um belo micro para a época, no Brasil copiaram e lançaram como a linha TK-82 e

para o TK-85.

 

Mas existe uma diferença GIGANTESCA entre o BASCOM, que é uma linguagem feita para usar todos os recursos de hardware de um microcontrolador AVR, e esse BASICs genéricos.

 

Mas é algo que precisa que o programador pelo menos saiba os conceitos básicos de timers, I2C, Serial, SPI, Interrupts, etc, para que ela mostre todo o potencial.

 

 

1 hora atrás, .if disse:

O mov é exclusivo de um tipo de micro processador/controlador. É simples como A=2 ... MOV A,#2. P.ex. no neandertal 6502 existia algo como LDA #2 // LoaD Acumulator com valor imediato 2. No Z80 acho que era LD .. ou seja o assembly tentava de maneira sofrível se aproximar da linguagem humana.

 

 

Os microcontroladores possuem registros de trabalho, no nosso caso são registros de 8 bits, a linha AVR tem 32 registros desse tipo sendo que alguns funcionam em pares para poder fazer operações de 16 bits. Essas instruções MOV  fazem a movimentação entre dois registradores ( MOV R0,R1 ) . Nesta linha não tem MOV de 16 bits, temos de movimentar dois registros de 8 bits mesmo. Mas como essas operações usam apenas 1 ciclo de clock, a eficiência é bem alta.

 

Na linha 8080 era MOV A,C  e alguns registros também podiam trabalhar em pares ( para usar 16 bits ), como MOV BC,DE .

 

Já no Z-80 existiam instruções especiais que economizavam um baita tempo.... mas também ele tinha mais de 500 instruções diferentes !!!!!!

 

Já sobre os PIC não posso falar nada pois detesto chaveamento de bancos ....

 

Paulo 

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

Realmente programação é beem ampla, tem vários tipos e várias funções, paralelo ao tópico estou tentando apreender a usar o APP inventor que é para criar aplicativos e usa programação em blocos, coisa que nunca vi antes e vou precisar para comunicar via serial com arduino...

 

Continuo esmiuçando o ChatGPT e deem uma olhada:

 

este é o código para utilizar dois DS18B20 com a biblioteca Dallastemperatura.h em uma porta digital:

 

Citação

#include <OneWire.h>

#include <DallasTemperature.h>

 

// define o pino onde os sensores estão conectados

const int pinoSensor = 2;

 

// inicializa o objeto OneWire

OneWire oneWire(pinoSensor);

 

// inicializa o objeto DallasTemperature

DallasTemperature sensors(&oneWire);

 

void setup() {

  // inicia a comunicação serial

  Serial.begin(9600);

 

  // inicia o objeto DallasTemperature

  sensors.begin();

}

 

void loop() {

  // realiza a leitura da temperatura de todos os sensores conectados

  sensors.requestTemperatures();

 

  // faz a leitura da temperatura do sensor 1

  int temperatura1 = sensors.getTempCByIndex(0);

 

  // faz a leitura da temperatura do sensor 2

  int temperatura2 = sensors.getTempCByIndex(1);

 

  // exibe as temperaturas no monitor serial

  Serial.print("Temperatura do Sensor 1: ");

  Serial.print(temperatura1);

  Serial.println(" °C");

  Serial.print("Temperatura do Sensor 2: ");

  Serial.print(temperatura2);

  Serial.println(" °C");

 

  // aguarda um segundo antes de fazer a próxima leitura

  delay(1000);

}

 

 

Pedi para ele criar outro código com a mesma função mas sem usar a biblioteca dallas:

 

Citação

#include <OneWire.h>

// define os pinos onde os sensores estão conectados
const int pinoSensor1 = 2;
const int pinoSensor2 = 3;

// inicializa os objetos OneWire para cada sensor
OneWire oneWire1(pinoSensor1);
OneWire oneWire2(pinoSensor2);

void setup() {
  // inicia a comunicação serial
  Serial.begin(9600);
}

void loop() {
  // faz a leitura do sensor 1
  oneWire1.reset();
  oneWire1.write(0xCC);
  oneWire1.write(0x44);
  delay(1000);
  oneWire1.reset();
  oneWire1.write(0xCC);
  oneWire1.write(0xBE);
  byte dados1[9];
  for (int i = 0; i < 9; i++) {
    dados1[i] = oneWire1.read();
  }
  int temperatura1 = ((dados1[1] << 😎 | dados1[0]) * 0.0625;

  // faz a leitura do sensor 2
  oneWire2.reset();
  oneWire2.write(0xCC);
  oneWire2.write(0x44);
  delay(1000);
  oneWire2.reset();
  oneWire2.write(0xCC);
  oneWire2.write(0xBE);
  byte dados2[9];
  for (int i = 0; i < 9; i++) {
    dados2[i] = oneWire2.read();
  }
  int temperatura2 = ((dados2[1] << 😎 | dados2[0]) * 0.0625;

  // exibe as temperaturas no monitor serial
  Serial.print("Temperatura do Sensor 1: ");
  Serial.print(temperatura1);
  Serial.println(" °C");
  Serial.print("Temperatura do Sensor 2: ");
  Serial.print(temperatura2);
  Serial.println(" °C");

  // aguarda um segundo antes de fazer a próxima leitura
  delay(1000);
}
 

 

Os dois códigos utilizam (13%) de memória dinâmica, o código sem a dallas utiliza  3712 bytes (11%) de armazenamento e o código com a dallas utiliza 5110 bytes (15%) de armazenamento, mas tem um detalhe bem curioso, O CÓDIGO SEM A DALLAS NÃO FUNCIONA.

 

Com dois sensores no mesmo fio um fica travado em 26 graus e o outro em 0, agora utilizando o código com a biblioteca funciona normal, estranho... O chatGPT cria códigos sim mas também comete erros.

 

@Sérgio Lembo  perguntei aquilo que comentamos anteriormente sobre o envio da biblioteca ao arduino e essa foi a resposta:

 

Citação

Quando você inclui uma biblioteca em um sketch do Arduino e envia esse sketch para a placa, apenas as partes da biblioteca que são realmente usadas no seu código serão compiladas e incluídas no binário final que é carregado na placa. Isso significa que, se você incluir uma biblioteca grande e complexa em seu sketch, mas usar apenas algumas funções ou classes dela, o tamanho do binário final não será afetado significativamente pela biblioteca. 

 

No entanto, é importante lembrar que o uso excessivo de bibliotecas ou a inclusão de bibliotecas desnecessárias em um sketch pode aumentar o tempo de compilação e ocupar mais espaço de armazenamento na memória flash do Arduino, o que pode ser um problema em dispositivos com memória limitada. Além disso, bibliotecas mal otimizadas ou mal projetadas podem introduzir bugs ou problemas de desempenho em seu código. Por isso, é sempre bom escolher bibliotecas confiáveis e bem testadas, e usá-las com moderação e parcimônia.

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, GustavoH93 disse:

O chatGPT cria códigos sim mas também comete erros

Erros é o que essa coisa mais comete. 

O chat gpt é o típico "tiozão de bar", é vivido, já fez e conhece de tudo, mas vive contando mentiras pra agradar e chamar atenção dos que estão à sua volta. 

Se você também não manjar do assunto, acaba caindo na lábia dele, pois a argumentação é boa. 

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

  • Membro VIP
1 hora atrás, GustavoH93 disse:

o APP inventor [...] usa programação em blocos, coisa que nunca vi antes

 

O nome mais preciso é "programação visual".

 

1 hora atrás, GustavoH93 disse:

apenas as partes da biblioteca que são realmente usadas no seu código serão compiladas e incluídas no binário final que é carregado na placa

 

Depende muito. Não tem como ser parcial com definições de estruturas de dados, por exemplo. Além disso, nem todo autor de biblioteca usou e abusou de diretivas de compilação.

Link para o comentário
Compartilhar em outros sites

Em 20/04/2023 às 00:21, alexandre.mbm disse:

O nome mais preciso é "programação visual".

 

Em 18/04/2023 às 10:51, aphawk disse:

Programar é algo fácil, DESDE QUE você se sinta à vontade com a linguagem que você escolheu.

Falando nisso parece que tem essa "programação visual" para arduino também, não é o mesmo que programar diretamente em C mas é uma forma de programar, vou ver como vou me sair com essa programação visual no app inventor e depois posso utilizar essa programação para arduino também. 

 

Em 20/04/2023 às 00:07, Renato.88 disse:

Erros é o que essa coisa mais comete. 

O chat gpt é o típico "tiozão de bar", é vivido, já fez e conhece de tudo, mas vive contando mentiras pra agradar e chamar atenção dos que estão à sua volta. 

Se você também não manjar do assunto, acaba caindo na lábia dele, pois a argumentação é boa. 

Concordo, ele é basicamente a internet, tem bastante conteúdo mas você tem que filtrar e ver o que realmente faz sentido e está correto se não pode acabar caindo em fake news.

Criando um código no gpt pode ser util, mas se ele não estiver funcionando corretamente posso achar que está com defeito em um componente ou algum fio mal encaixado enquanto na verdade é código que tem uma falha.

 

Bom pessoal futuramente vou ver se coloco as mãos em um LM35 mas por hora o sensor DS18B20 deve me atender bem, comprei mais sensores e um STM32F030F4P6 por recomendação do @Sérgio Lembo no outro tópico, como é da China vai levar um tempo para chegar. 

Enquanto isso vou estudar a programação visual no APP Inventor e como comunicar ele com o arduino, em breve vou criar outro tópico para ter auxílio de vocês na leitura dos sensores porque sei que terei duvidas 😅

 

Obrigado a todos que responderam e me ajudaram, vocês são feras \o/\o/\o/

Link para o comentário
Compartilhar em outros sites

5 horas atrás, GustavoH93 disse:

Criando um código no gpt pode ser util, mas se ele não estiver funcionando corretamente posso achar que está com defeito em um componente ou algum fio mal encaixado enquanto na verdade é código que tem uma falha.

Pra evitar erros de hardware estou simulando meus PICs no computador.

Há pouco tempo consegui instalar compiladores para assembly e C no proteus, durante um bom tempo tentei fazer isso, mas nunca dava certo.

Boto na prática só quando preciso envolver algo que não tem na simulação.

Em 20/04/2023 às 00:21, alexandre.mbm disse:

O nome mais preciso é "programação visual".

Apesar de parecer mais fácil, tentei usar um site desses mas não me adaptei com esse sistema.

5 horas atrás, GustavoH93 disse:

Falando nisso parece que tem essa "programação visual" para arduino também

Sim, pra Arduíno tem aos montes, com simulação no PC e tudo mais.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
15 minutos atrás, Renato.88 disse:

Apesar de parecer mais fácil, tentei usar um site desses [de programação visual] mas não me adaptei com esse sistema.

 

Os objetivos raiz para eles existirem são pedagógicos. Quando se quer fazer mais coisa nesses "playgrounds", a curva de aprendizado deteriora-se em problematizar a fabricação de novos blocos (tijolos) para serem usados.

Link para o comentário
Compartilhar em outros sites

 

COBOL, linguagem de alto nível (para programadores de baixo nível, rs...) era... ou é, assim: tem que definir tudo no fonte, variáveis, procedimentos, ambiente, o próprio programa, antes de tudo... só depois é que você começa escrever o que o computador tem que fazer. Acaba sendo didático. E quando você vê um C da vida, um Arduino, linguagens mais inteligentes e menos formais, aí dá graças a Deus...

Link para o comentário
Compartilhar em outros sites

19 horas atrás, GustavoH93 disse:

Bom pessoal futuramente vou ver se coloco as mãos em um LM35 mas por hora o sensor DS18B20 deve me atender bem, comprei mais sensores e um STM32F030F4P6 por recomendação do @Sérgio Lembo no outro tópico, como é da China vai levar um tempo para chegar. 

Com certeza vai querer utilizar o STM na sua aplicação. Para as temporizações do programa tais como delay o compilador vai utilizar o Systick da CPU ARM. Todos os outros 5 timers de 16 bits ficam à sua disposição. TIM1 e TIM3 possuem um conjunto de registradores bem interessantes. Usando um único pino de entrada (vai ter 8 para escolher, 4 no TIM1 e 4 no TIM3) o hardware vai fazer a leitura de duração do pulso para ti sem interferência da CPU e toda vez que desejar saber a rotação bastará ler o capture utilizado. O código abaixo deve ser colocado na inicialização do programa, fora do loop de controle.

Basicamente o que se faz é: a cada pulso o valor é capturado e o timer resetado. Desta forma a qualquer momento bastará ler o capture utilizado para saber a duração do período. No exemplo abaixo captura o período e o duty.

 

PWM input configuration code example
/* (1) Select the active input TI1 for TIMx_CCR1 (CC1S = 01),
select the active input TI1 for TIMx_CCR2 (CC2S = 10) */
/* (2) Select TI1FP1 as valid trigger input (TS = 101)
configure the slave mode in reset mode (SMS = 100) */
/* (3) Enable capture by setting CC1E and CC2E
select the rising edge on CC1 and CC1N (CC1P = 0 and CC1NP = 0, reset
value),
select the falling edge on CC2 (CC2P = 1). */
/* (4) Enable interrupt on Capture/Compare 1 */
/* (5) Enable counter */
TIMx->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_1; /* (1)*/
TIMx->SMCR |= TIM_SMCR_TS_2 | TIM_SMCR_TS_0
| TIM_SMCR_SMS_2; /* (2) */
TIMx->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC2P; /* (3) */
TIMx->DIER |= TIM_DIER_CC1IE; /* (4) */
TIMx->CR1 |= TIM_CR1_CEN; /* (5) */

Uma correção: para ler o duty deverá configurar o canal 2 como capture, Tl1 como sinal de entrada e borda de descida para ativação. 

o duty fica assim:

em pseudo código, verificar no manual as sintaxes corretas

período = TIMx_capture1

duty = TIMx_capture2

duty = duty*100

duty = duty/período

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
21 horas atrás, Sérgio Lembo disse:

o hardware vai fazer a leitura de duração do pulso para ti sem interferência da CPU

... e este mc permite até DMA... Avançado d+... Nunca precisei disso ... ainda. Preciso que me convençam que isso pode otimizar meus 'pisca leds'...

 

 

19 horas atrás, alexandre.mbm disse:

uma placa-plataforma de desenvolvimento.

 

Está presente também nos arduínos da vida com seus atmegaxxx bem como de uma certa forma nos esp32 ... proporcionalmente mais recurso e mais barato que o stm32.

Perturbador...  um arduino tende a custar menos do que o próprio mc dele...🤔

 

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

Entre um AVR de 8 bits e um

...picxxx a balança pende pro avr (no meu . de vista) mas algo estranho acontece... ambos são do mesmo fabricante que há poucos anos eram concorrentes. Mas e agora? Qual o fabricante recomenda? Ou será que faz concorrência consigo mesmo?... só reflita... não desvirtue o tópico 😁

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

12 minutos atrás, .if disse:

... e este mc permite até DMA... Avançado d+... Nunca precisei disso ... ainda. Preciso que me convençam que isso pode otimizar meus 'pisca leds'...

A coisa ficou num nível onde se entrega mais processamento e recursos de periféricos pelo mesmo custo. Entre um AVR de 8 bits e um ARM 32 bits que custa até um pouco menos a escolha é simples. Faz lembrar o destino dos discos de DVD com o aparecimento dos pen drives e sua queda de preço. 

Link para o comentário
Compartilhar em outros sites

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

[a vantagem da placa-plataforma de desenvolvimento há] também nos Arduino [... e] nos ESP32... proporcionalmente, [com] mais recurso[s] e mais barato [do] que [com] o STM32

 

Depende do que se olha. "Plaquinhas" com o STM32 só não tem, em geral, conectividade de rede, mas podem trazer muito mais poder em pinagem.

Link para o comentário
Compartilhar em outros sites

Em 22/04/2023 às 15:51, Sérgio Lembo disse:

Usando um único pino de entrada (vai ter 8 para escolher, 4 no TIM1 e 4 no TIM3) o hardware vai fazer a leitura de duração do pulso para ti sem interferência da CPU e toda vez que desejar saber a rotação bastará ler o capture utilizado. O código abaixo deve ser colocado na inicialização do programa, fora do loop de controle.

Basicamente o que se faz é: a cada pulso o valor é capturado e o timer resetado. Desta forma a qualquer momento bastará ler o capture utilizado para saber a duração do período. No exemplo abaixo captura o período e o duty.

Ó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.

Em 22/04/2023 às 15:51, Sérgio Lembo disse:

PWM input configuration code example
/* (1) Select the active input TI1 for TIMx_CCR1 (CC1S = 01),
select the active input TI1 for TIMx_CCR2 (CC2S = 10) */
/* (2) Select TI1FP1 as valid trigger input (TS = 101)
configure the slave mode in reset mode (SMS = 100) */
/* (3) Enable capture by setting CC1E and CC2E
select the rising edge on CC1 and CC1N (CC1P = 0 and CC1NP = 0, reset
value),
select the falling edge on CC2 (CC2P = 1). */
/* (4) Enable interrupt on Capture/Compare 1 */
/* (5) Enable counter */
TIMx->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_1; /* (1)*/
TIMx->SMCR |= TIM_SMCR_TS_2 | TIM_SMCR_TS_0
| TIM_SMCR_SMS_2; /* (2) */
TIMx->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC2P; /* (3) */
TIMx->DIER |= TIM_DIER_CC1IE; /* (4) */
TIMx->CR1 |= TIM_CR1_CEN; /* (5) */

Uma correção: para ler o duty deverá configurar o canal 2 como capture, Tl1 como sinal de entrada e borda de descida para ativação. 

o duty fica assim:

em pseudo código, verificar no manual as sintaxes corretas

período = TIMx_capture1

duty = TIMx_capture2

duty = duty*100

duty = duty/período

Ótimo isso vai ser a base para o código, conversando com o oráculoGPT ele parece saber programar o STM, duvido que conseguiria programar tudo da forma que eu preciso, mas posso tirar algumas duvidas com ele  principalmente pedindo explicação linha por linha do código. O bom é que como você mencionou em outro tópico posso programar o STM via IDE arduino o que facilita pois estou mais familiarizado.

 

Falando nisso a resposta do GPT quando questionei o que ele sabia programar:

 

Citação

Como um modelo de linguagem de processamento de linguagem natural, eu sou capaz de fornecer informações sobre programação em geral e fornecer suporte em várias linguagens de programação, como C, C++, Python, Java, JavaScript, entre outras. No entanto, não sou capaz de programar fisicamente nenhum microcontrolador ou dispositivo. Isso é algo que deve ser feito usando um ambiente de desenvolvimento integrado (IDE) e hardware apropriado.

 

Interessante, mas já tem alguns planos de assinatura pra ele e são bem salgados por enquanto está liberado como fase de testes, não ficaria surpreso se em algum tempo ele se tornar 100% pago.

 

Em 22/04/2023 às 16:31, .if disse:

Avançado d+

Pra mim que malemá sei acender os leds com arduino e consegui queimar um com imã no outro tópico tu imagina o desafio kkkkkk mas o bom é que com paciência e ajuda de vocês vamos caminhando.

 

Em 22/04/2023 às 16:31, .if disse:

Perturbador...  um arduino tende a custar menos do que o próprio mc dele...🤔

Verdade, a algum tempo no site chines eu tinha procurado ATMega 328p pra comprar e usar stand alone, mas não compensa ele está com diferença de preço de uns 3 reais e se fosse só ele teria que fazer a plaquinha colocar o cristal, capacitores... compensa mais comprar a plaquinha pronta e colocar numa caixinha se for projeto definitivo...

 

 

 

Em 22/04/2023 às 16:48, Sérgio Lembo disse:

A coisa ficou num nível onde se entrega mais processamento e recursos de periféricos pelo mesmo custo. Entre um AVR de 8 bits e um ARM 32 bits que custa até um pouco menos a escolha é simples. Faz lembrar o destino dos discos de DVD com o aparecimento dos pen drives e sua queda de preço. 

 

Em 22/04/2023 às 17:37, alexandre.mbm disse:

E uma grande vantagem é ser comum eles estarem já numa placa-plataforma de desenvolvimento.

Com certeza já estarem na plaquinha facilita muito, é quase plug n' play se for código pronto é só conectar na USB transferir o código e tá pronto, se tivesse que colocar cristal, capacitores, conectar a fonte de alimentação iria afugentar muita gente de querer programar...

 

E com relação aos DVDs me lembro que começaram a chegar os discos Blueray que apesar de ter uma qualidade e capacidade bem superior chegaram juntos com os serviços de streaming, que na ponta do lápis compensavam mais por custarem pouco mais mas oferecer muito mais coisa em cima do valor pago, e isso foi o começo do fim das vídeo-locadoras...

Link para o comentário
Compartilhar em outros sites

48 minutos atrás, GustavoH93 disse:

Falando nisso a resposta do GPT quando questionei o que ele sabia programar:

 

Citação

Como um modelo de linguagem de processamento de linguagem natural, eu sou capaz de fornecer informações sobre programação em geral e fornecer suporte em várias linguagens de programação, como C, C++, Python, Java, JavaScript, entre outras. No entanto, não sou capaz de programar fisicamente nenhum microcontrolador ou dispositivo. Isso é algo que deve ser feito usando um ambiente de desenvolvimento integrado (IDE) e hardware apropriado

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. 

51 minutos atrás, GustavoH93 disse:

Verdade, a algum tempo no site chines eu tinha procurado ATMega 328p pra comprar e usar stand alone, mas não compensa ele está com diferença de preço de uns 3 reais e se fosse só ele teria que fazer a plaquinha colocar o cristal, capacitores... compensa mais comprar a plaquinha pronta e colocar numa caixinha se for projeto definitivo

Atualmente os arduínos estão vindo com o ATM328P em formato SMD, isso diminui o custo. 

Os primeiros arduínos vinham com o uC em formato PTH. 

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). 

 

Recentemente comprei da China, uns PICs para uns projetos que pretendo fazer. 

A versão SMD é metade do preço do PTH. Por se tratar de um CI de 8 pinos, até consigo fazer placa pra eles manualmente. 

Mas o problema fica em ter que programá-los, teria que comprar um soquete pra eles (se é que tem). 

 

Link para o comentário
Compartilhar em outros sites

4 minutos atrás, Renato.88 disse:

Recentemente comprei da China, uns PICs para uns projetos que pretendo fazer. 

A versão SMD é metade do preço do PTH. Por se tratar de um CI de 8 pinos, até consigo fazer placa pra eles manualmente. 

Mas o problema fica em ter que programá-los, teria que comprar um soquete pra eles (se é que tem). 

 

Estou elaborando um projeto com ARM da ST com display 16x2. Por questão de custo vou usar os pinos de boot e os de programação como saída para o D0-D3 do display. Um resistor de alto valor fará o set do boot. No momento de transferir a programação não haverá problemas de conflito com o hw externo. 

Existem soquetes para SMD, um pouco caros. 

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!