LusoRobótica - Robótica em Português

Robótica => Discussão geral sobre robótica => Tópico iniciado por: kast em 12 de Outubro de 2012, 22:37

Título: Internal reference dos atmega168 e 368
Enviado por: kast em 12 de Outubro de 2012, 22:37
Estou com um problema em mudar para a referência interna quando estoutenho uma fonte com 5v no pino Aref.

Aqui http://electronics.stackexchange.com/questions/30549/atmega328-external-aref-connection (http://electronics.stackexchange.com/questions/30549/atmega328-external-aref-connection) diz que é necessário colocar uma resistência entre os 5v (ou fonte) e o pino aref.

Alguém confirma isto ? Ou alguém que tenha tido o mesmo problema ?
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 12 de Outubro de 2012, 23:03
Parece que tenho mesmo de cortar a ligação aos 5v ... senão não consigo ler nada com a referência interna ... vamos ver é se não queimei nada no micro ... espero que não ....
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 12 de Outubro de 2012, 23:23
Ai ai ai que o menino não leu a datasheet... e tá tudo logo ali no diagrama de blocos do conversor e no texto da secção, não está "escondido" algures numa tabela ou gráfico de características...

p.s. Não sei ao certo como é a electrónica desse pino lá dentro mas eu já não confiava nenhum trabalho "critico" à Vref desse mega.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 12 de Outubro de 2012, 23:41
Bom ... parece-me que o vref ficou mesmo arrumado a um canto !!!

Por isso, meus amigos não façam o mesmo que eu !!!!

@NJay

Tens razão .... mas só vi agora ... vou experimentar com outro mega (vamos ver se não queimo mais um LOL).
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 12 de Outubro de 2012, 23:49
Então se já resolveste conta lá aqui à malta porque é que não se pode fazer isso.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 12 de Outubro de 2012, 23:50
@Njay

Esta tua resposta foi para este tópico ?
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 12 de Outubro de 2012, 23:54
Foi. Não me digas que vais avançar sem saber o que realmente se passa lá "por baixo"? Arriscas-te a lixar outro mega numa outra situação.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 00:00
Epá ... isto já estava numa pcb ... assim com o mini drill tirei a parte do cobre que ligava ao Aref e depois substitui o mega ... mas o mesmo ... utiliza os 5v como referência ... as boas noticias são que talvez não tenha queimado os megas LOL.

As más noticias são que continuo com o mesmo problema.

Liguei um condensador de 100nf entre o aref e GND, vou fazer umas continhas e com o multimetro ver se está a trabalhar bem.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 00:15
Está a parecer-me que a referência interna não está a funcionar em nenhum dos megas que tenho.

As leituras não são muito consistentes ... isto pode ser devido a estar a utilizar um dc-boost e não ter colocado nenhum condensador a fazer decoupling...

Será que resolve se colocar um condensador electrolitico de 10uF entre o vcc e GND logo à entrada do dc-boost e entrada do kastduino ?
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 01:09
Por causa das tosses, resolvi tirar o divisor de tensão, e assim fica mais preciso, porque a porcaria da internal reference não está a funcionar.

Como tenho agora parece bastante preciso, existe uma diferença de 130 mV, entre o que leio com o multimetro e o que dá pelo kastduino ... diferença que me parece aceitável.

No entanto devo colocar o condensador eletrolítico a fazer de decoupling ?

Título: Re: Internal reference dos atmega168 e 368
Enviado por: senso em 13 de Outubro de 2012, 02:16
Por causa das tosses, resolvi tirar o divisor de tensão, e assim fica mais preciso, porque a porcaria da internal reference não está a funcionar.

Como tenho agora parece bastante preciso, existe uma diferença de 130 mV, entre o que leio com o multimetro e o que dá pelo kastduino ... diferença que me parece aceitável.

No entanto devo colocar o condensador eletrolítico a fazer de decoupling ?



Um eletro de 470uF ou por ai perto e 100nF em cada pino Vcc, e a referência se é para usar na opção use internal Vref with external cap at Vref pin, tem de ter o condensador de 100nF entre esse pino e a massa.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 02:47
@Senso

Condensadores de 470uF ? Isso não é muito ? Nem sei como fazer as contas para calcular isso, mas costumava utilizar 10uF, e no arduinos que vi na net pareceram-me condensadores de 47uF.

O 100nF é entre o Aref e o GND ? Já fiz isso mas continua na mesma.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: senso em 13 de Outubro de 2012, 02:55
O Aref é alimentado pelo Vcc, logo, como é que está esse Vcc a nivel de ruideiras?
Fontes comutadas baratas é um pau de 2 bicos..
Sim 470uF não é nada..
No meu rato tenho 4 condensadores de 1000uF, 2 dedicados á ponte H, 2 dedicados aos reguladores de tensão lineares, mais uma mão cheia de ceramicos de 100nF.

Esse regulador comutado deve ter falta de capacidade na saida, que é quase garantido, no minimo 470uF nos pinos do regulador, e um 100nF o mais proximo possivel desse 470uF, mais um 100nF em cada pino Vcc.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 13 de Outubro de 2012, 09:13
Que grande misturada e falta de contexto. Começamos com um problema a ler Vref e já estamos a falar de condensadores de 470uF na alimentação? Mete aí um esquema completo do teu sistema senão passamos aqui a vida só a especular.

Citar
As leituras não são muito consistentes ...
Isto quer dizer exactamente o quê? Que o valor varia muito? Que dá valores completamente absurdos? Que está sempre a mudar? Mete aí um esquema do circuito. Já usei referências internas de ADC de AVRs e posso dizer-te que são super estáveis (dentro das specs indicadas na datasheet).
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 13:16
Aqui vai o esquema:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimageshack.us%2Fa%2Fimg15%2F7081%2Fkastduinosch302.jpg&hash=fb251c85f53cfb33011be944a206419481aa95db) (http://imageshack.us/photo/my-images/15/kastduinosch302.jpg/)

E aqui uma foto:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimageshack.us%2Fa%2Fimg855%2F1404%2Fimg5300g.jpg&hash=efa9910791487205c0452d03ccea6d5d1cb9d462) (http://imageshack.us/photo/my-images/855/img5300g.jpg/)


E aqui um excerto do que transmitem:
ID 3 Bateria 3714 Transmissões 1 Falhas de transmissoes 0
ID 1 Bateria 3759 Transmissões 1 Falhas de transmissoes 0
ID 4 Bateria 3575 Transmissões 2 Falhas de transmissoes 0
ID 2 Bateria 3669 Transmissões 2 Falhas de transmissoes 0
ID 3 Bateria 3590 Transmissões 2 Falhas de transmissoes 0
ID 1 Bateria 3754 Transmissões 2 Falhas de transmissoes 0
ID 4 Bateria 3634 Transmissões 3 Falhas de transmissoes 0
ID 2 Bateria 3659 Transmissões 3 Falhas de transmissoes 0
ID 3 Bateria 3510 Transmissões 3 Falhas de transmissoes 0
ID 1 Bateria 3729 Transmissões 3 Falhas de transmissoes 0
ID 4 Bateria 3674 Transmissões 4 Falhas de transmissoes 0
ID 2 Bateria 3674 Transmissões 4 Falhas de transmissoes 0
ID 3 Bateria 3575 Transmissões 4 Falhas de transmissoes 0
ID 1 Bateria 3734 Transmissões 4 Falhas de transmissoes 0
ID 4 Bateria 3570 Transmissões 5 Falhas de transmissoes 0
ID 2 Bateria 3729 Transmissões 5 Falhas de transmissoes 0
ID 3 Bateria 3416 Transmissões 5 Falhas de transmissoes 0
ID 1 Bateria 3734 Transmissões 5 Falhas de transmissoes 0

Os dados da bateria estão em mV.

@NJay

Tenho variações até quase 300 mV com intervalos de leitura de 10s.
Acho que não devia ser tanto.
Acredito que seja do DC boost que não me parece muito estável.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: dropes em 13 de Outubro de 2012, 13:42
Tens grandes variações, coloca um condensador do Vref ao GND de 1uF e um bom condensador na alimentação do micro 1000uF para cima, sem nenhum até custa a creditar que varie tão pouco.

O normal que obtenho de variação num atmega8 é de 1 a 3 valores, ADC 10bits, máximo de 1023 decimais.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 13 de Outubro de 2012, 14:29
Esquema tão pequenino... tavas com medo que se conseguisse ler alguma coisa :P! De onde vêm os 3V3? Não consigo ler. E o conversor DC-DC? Que conversor é? Não está no esquema.
Não tens condensadores de desacopolamento no AVR, mas isso é capaz de não ter essa influência dos 300mV. 300 mV (+/-150mV) não é um valor muito "estranho" para tensão de ripple dum conversor DC-DC. Vai fazendo médias das leituras que a leitura estabiliza. Esta variação de +/-150mV na alimentação do AVR só por si não é um problema.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 15:10
Não percebi se estavas a brincar com o "esquema pequenino", mas se clicares na imagem podes um pouco maior. No entanto mostro a última versão do kastduino:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimageshack.us%2Fa%2Fimg4%2F5704%2Fkastduino303sch.png&hash=01cc31c872ab17f0c34f513abcab978e69e49a4b) (http://imageshack.us/photo/my-images/4/kastduino303sch.png/)
Tentei colocar esta maior mas não consigo, parece que o imageshack não deixa, mas se seguires o link da imagem podes ver a imagem bem grande.

Não estou a tentar esconder nada ... tenho postado tudo noutro tópico.
Se quiserem alguma coisa disto (ficheiro do eagle, etc) é só pedirem ... eu não escondo nada.

Quanto ao esquema do DC boost não tenho porque foi comprado assim mesmo. Sempre tive problemas em fazer um dc boost que funcionasse como deve de ser.

Quanto aos 3v3 não são bem 3v3, são tirados directamente da bateria uma 18650, logo varia entre 4.2v e 3v. É esta tensão que está a "entrar" no A0, para ser medida pelo ADC do atmega.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 13 de Outubro de 2012, 16:02
Eu cliquei e continuava pequenino e desfocado (anti-alising da redução de tamanho). As imagens do imageshack funcionam em quando inserimos do post o "direct link". De outra forma ele tenta ser inteligente mas na minha opinião só faz mééééé.

Não é preciso o esquema do boost, mas specs ajudavam... normalmente dizem qual é a amplitude da tensão de ripple, qual é a corrente máxima, etc etc, essas coisas que usamos para saber se o produto serve para a nossa aplicação ;).

Ahh, então estás a usar uma bat de lítio que alimenta directamente o módulo RF (por acaso ele dá-se bem com muito mais do que 3.3V? E funciona bem com menos de 3.3V? Hummm...) e que alimenta o boost para alimentar o AVR. Nada disso está no esquema :o. É que depois as únicas respostas que recebes são baseadas em especulação.

Tens o esquema um bocadinho amontoado. Passar fios por cima de componentes é má prática, reduz a legibilidade (como por exemplo corta por cima de texto). Também tens pelo menos um texto em cima de outro (qq-coisa.SHIELD). Se não queres ter muitos fios a passar de um lado para o outro da folha, dá um nome ao nó e usa apenas esse nome.
Outra coisa que não fica bem é ligar mais do que um fio directamente a um pino de componente. Especialmente quando te esqueces de meter lá uma "junção" como no caso do LED; o eagle se calhar nem considera que os fios estão ligados e dá-te erro ou no PCB não se apercebe que é para ligar tudo. Ainda outra coisa é o GND. É boa prática, porque facilita imenso a leitura de um esquema, ter a GND "em baixo" e as tensões positivas "em cima". Tens ali um GND "em cima". E tensões positivas para os lados. A corrente flui do potencial mais alto para o potencial mais baixo; se o esquema "espelhar" isso, torna-se muito mais fácil de ler e interpretar.
E valores e referências e outros em texto deitado?? Nós temos a cabeça a 90 graus e não a 0 nem a 180... daí que é muito mais fácil ler o que está "direito", certo? Legibilidade e facilidade de leitura e interpretação é uma das regras universais de quem quer transmitir alguma coisa com sucesso.
Tens aí muito espaço para melhoria... continua a dar-lhe :D!
Título: Re: Internal reference dos atmega168 e 368
Enviado por: dropes em 13 de Outubro de 2012, 16:24
O fórum reduz as imagens para 640 de largura
http://img4.imageshack.us/img4/5704/kastduino303sch.png (http://img4.imageshack.us/img4/5704/kastduino303sch.png)
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 16:30
@NJay

Tens de seguir o link 2 vezes, ou seja clicas uma vez na minha imagem, esperas que a página carregue e depois clicas outra vez.

Quanto ao DC boost comprei no ebay e não tinham especificações, apenas que Imax=500mA. Estou à espera de uma encomenda do Hugu para fazer um DC boost melhorzito, mas a encomenda está "emperrada".

O NRF24L01 creio que funciona com tensão entre 1.9v e 3.7v, por isso pareceu-me adequado. Para além disto há muito pessoal a utilizar com 5v, dizem que funciona ...

Obrigado pelas dicas para fazer os esquemas.
Lembra-te que sou principiante nisto e ainda estou no nível "super-básico" no eagle.
Vou tentar melhorar essa parte.

Sabes de algum livro, site ou ebook sobre boas práticas de esquemas ?
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 13 de Outubro de 2012, 16:57
Se eu seguir o link 2 vezes vou dar à página principal da imageshack (talvez por eu ter conta lá e estar sempre logado, não sei). E porque é que é preciso seguir seguir 2 links para ver bem 1 imagem que já aparece no post? Não faz sentido. É desperdício de tempo e recursos.

Quanto ao DC boost comprei no ebay e não tinham especificações, apenas que Imax=500mA.
Não comprar nada que não se saiba o que faz...

Citar
O NRF24L01 creio que funciona com tensão entre 1.9v e 3.7v, por isso pareceu-me adequado. Para além disto há muito pessoal a utilizar com 5v, dizem que funciona ...
:o :o
Onde estão as specs do módulo que estás a utilizar? É que além de não teres a certeza sobre o intervalo de allimentação do chip, tu na verdade estás a usar um módulo, e o módulo pode estar lá dentro a "fazer coisas" que alteram esse intervalo. Por exemplo, o módulo da Sparkfun, tem que ser alimentado entre 3V3 e 7V.
(P.S.: A página do fabricante do chip diz "1.9 to 3.6V supply range" :o)

Citar
Obrigado pelas dicas para fazer os esquemas.
Lembra-te que sou principiante nisto e ainda estou no nível "super-básico" no eagle.
Vou tentar melhorar essa parte.
Força. Ainda mais importante que saber, é querer saber ;)

Citar
Sabes de algum livro, site ou ebook sobre boas práticas de esquemas ?
Não sei. Mas a melhor fonte de bom conhecimento é ver os esquemas desenhados pelos pros, por exemplo, esquemas de "application notes" e datasheets dos fabricantes.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 13 de Outubro de 2012, 18:00
O módulo da Sparkfun creio q tem um regulador, é diferente deste.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: senso em 13 de Outubro de 2012, 22:26
Portanto, decoupling decoupling decoupling como já tinha dito.

Pensava que esse regulador dc, tinha como saida 3.3v, e tudo funcionava a 3.3v...
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 14 de Outubro de 2012, 00:05
O módulo da Sparkfun creio q tem um regulador, é diferente deste.

Eu sei, mas a mensagem que quis passar é que se o teu módulo não tem regulador, então vai pifar no teu projecto porque a tensão da bateria de lítio excede os 3.6V.

Calma com o decoupling... o AVR deve ter, agora quanto ao ripple do conversor, se é ou não um problema já depende da aplicação. Além disso, o ripple do conversor está mais dependente da ESR do condensador do que propriamente do seu valor.

Se usares o Vref interno não deverias ver as oscilações, ou pelo menos não tão pronunciadas. Já a medir a bateria com Vref = AVCC (5V) sim, deverias vê-las. Para confirmar só com osciloscópio. Podes configurar o AVR para expôr a Vref interna no pino AREF e fazer decoupling aí (o senso já falou nisso). Mas o condensador que lá metes deve ser pequeno, tipo 100nF. Se meteres um grande, o arranque e as mudanças de referência podem durar muito tempo, porque esse condensador tem que ser carregado/descarregado através de uma resistência de valor alto (interna ao AVR).
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 14 de Outubro de 2012, 00:11
Obrigado pela ajuda Njay.

O meu problema é que quando mudo para a referência interna (1.1v), nada acontece, a referência continua a 5v na mesma. Experimentei isto com megas novinhos e acontece a mesma coisa, com ou sem o condensador de 100nF.

Mas isto até nem é um problema muito importante. Porque apesar de ter as variações que vos falei está a funcionar.

Neste momento estou a modificar a parte do servidor para poder escrever os dados num microSD, e também enviá-los através de um módulo ethernet.

Vamos ver como é que isto corre
Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 14 de Outubro de 2012, 00:21
O meu problema é que quando mudo para a referência interna (1.1v), nada acontece, a referência continua a 5v na mesma. Experimentei isto com megas novinhos e acontece a mesma coisa, com ou sem o condensador de 100nF.
O condensador só ajuda a manter a tensão "mesmo" fixa todo o tempo, tê-lo lá ou não não altera a tensão que lá medes (por exemplo no AREF).
Se continua a 5V (e estou a assumir que tens boas razões para concluir isso), é porque não estás a mudá-la bem. Como estás a fazê-lo? Show us the code.
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 14 de Outubro de 2012, 00:31
Como vos tinha dito já alterei fisicamente o hardware, mas tinha um divisor de tensão que baixava a tensão para menos de 1.1v ligada ao pino analógico 0.

Código: [Seleccione]
* NO DE DOMOTICA v0.01
 
 */

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

//
// Configuração do NRF24L01
//

 
RF24 radio(10,9); // Define o RF24L01 radio em bus SPI bus mais os pinos 10 (CE) & 9 (CSN)

unsigned int payload[2];
unsigned int no_id=4;   //alterar o numero do no aqui
unsigned int carga_media;

void setup(void)
{
  Serial.begin(57600);
  analogReference(INTERNAL);
  printf_begin();
  //printf("\n\rRF24/examples/GettingStarted/\n\r");
  printf("DOMOTICA SERVER v0.01\n\r");
  printf("\n\r");
 
  radio.begin(); 
  radio.setChannel(101);   
  radio.setAutoAck(true);
  radio.setDataRate(RF24_250KBPS);
 
  radio.setPayloadSize(16); // define tamanho máximo da var a transmitir
  radio.setRetries(15,15); //define n de tentativas e tempo entre elas
 
//falta definir a potência de emissão

 
  const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // Radio pipe addresses for the 2 nodes to communicate.
  radio.openReadingPipe(1,pipes[0]); // abre o pipe para receber
  radio.openWritingPipe(pipes[1]);  // abre o pipe para enviar
 
  radio.printDetails(); //Mostra os detalhes do radio
  printf("ID do nó\n\r", no_id);
  printf("\n\r");
 
  radio.startListening(); // inicia a escuta
  radio.stopListening();  // Necessario para comecar a enviar dados
 
  printf("\n\rA escuta ...\n\r");
  printf("\n\r");
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
}


void loop(void)
{
  // Faz 20 leituras a bateria
  carga_media=0;
 
  for(int i=1;i<21;i++){
      carga_media=carga_media+analogRead(A0);
   }
   
  delay(20);
  radio.powerUp(); //necessario devido ao power down no fim do loop
 
  payload[1]=no_id;
  payload[2]=carga_media/20;
 
  Serial.print("Enviando... ");
  bool ok = radio.write( payload , sizeof(payload));
  if (ok)
  {
     Serial.print("ok ");
     digitalWrite(8, HIGH);
     delay(1);
     digitalWrite(8, LOW);
     Serial.print("ID ");
     Serial.print(payload[1]);
     Serial.print(" Bateria ");
     Serial.println(payload[2]);   
  }
  else
  {
     Serial.println("Erro na transmissão !!!");
  }


radio.powerDown(); // coloca o radio em stand-by
delay(5000);       // espera 5 segundos
}

No serial aparecia para a bateria um valor entre 170 e 230, o que era consistente com estar a utilizar os 5v como Aref, porque medindo com o multimetro no pino analógico 0 tinha sempre menos de 1.04v. Se estivesse a utilizar a referência interna (1.1v) deveria ter um número próximo de 1000.

Título: Re: Internal reference dos atmega168 e 368
Enviado por: Njay em 14 de Outubro de 2012, 00:58
Bom, não há mto que enganar, é arduino, basta invocar a analogReference.
Não tens nada ligado ao pino AREF, certo? Com a referência interna não podes ter lá nada ligado sem ser um condensador de decoupling (nã é bem assim mas para esta conversa, é).

Faz assim... experimenta mudar a chamada para o fim da setup().
Depois experimenta imprimir da porta série o valor de ADMUX (deve ser Serial.println(ADMUX)).

p.s.: testes num chip que ainda não tenha levado com 5V no AREF s.f.f. :)
Título: Re: Internal reference dos atmega168 e 368
Enviado por: kast em 14 de Outubro de 2012, 01:01
Já percebi .. queres ver se tem mesmo a referência interna ligada ...

ok

amanhã faço isso.

Muito obrigado pela ajuda NJay