LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: Asilva em 08 de Novembro de 2013, 15:20

Título: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 08 de Novembro de 2013, 15:20
Boas,
Estou a trabalhar com um arduino uno, um shield WaveShield (para audio) e um GPS.
Ao utilizar o WaveShield com a biblioteca WaveRP, funciona tudo bem, inclusive a parte de gravar audio. Ao utilizar o só o GPS, defino Portas serie (ss) nos pinos que o shield tem livres e tudo funciona bem.
Na utilização das duas coisas, tudo entra em parafuso, algumas vezes corria o setup() dentro do loop()?????, outras deixava de jogar audio, outras bloqueava, etc....
Isto deu-me muita dor de cabeça, e, depois de muita pesquisa, descobri e testei que o problema estava no facto de o (SoftwareSerial) na sua execução fazer uso de interupções que alteravam o normal funcionamento da biblioteca WaveRP.
Aquilo que eu peço, é uma sugestão vossa para a utilização do SoftwareSerial com o shield (com a biblioteca WaveShield) .(no fundo seria algo do genero de disabel da SS enquanto utiliza audio, ou outra sugestão onde coabitem todos.)
nota: para aquilo que pretendo preciso de 2 portas serie, uma para o GPS e outra para um sensor de distancia, e o meu arduino é o uno.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: jm_araujo em 08 de Novembro de 2013, 15:43
Se não usares o GPS ao mesmo tempo do sensor, podes utilizar um multiplexer externo e usar só a porta série de HW..


Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 08 de Novembro de 2013, 17:43
obrigado pela tua sugestão JM-ARAUJO, para ser sincero ainda não tinha ouvido falar nisso, vou pesquisar, mas á primeira vista parece-me que sugeres que ligue o rx do gps e do maxsonar ez1 juntos no tx do arduino(1), e que ligue o tx do gps e do maxsonar ez1 no rx do arduino (0).

esta não seria a solução ideal para mim, porque queria utilizar o maxsonar ez1 como uma bengala, que jogava um "bip" com um deley proporcional ao valor lido pelo sensor. Então, enquanto fazia a leitura do GPS para gravar um percurso, gostava de ter a opção da bengala.
se ouver outras soluções agradeço.
Já agora e como nunca utilizei as potas serial (0e1) com sensores, alguém me pode dizer como funciona: com o SoftwareSerial, eu estancio: #include <SoftwareSerial.h>  SoftwareSerial ss(6, 7); e no Setup()  ss.begin(38400); e depois utilizo ss.???();
como faço com as portas Serial??????,
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 08 de Novembro de 2013, 23:51
Bem, penso que compreendo agora o que querias dizer, o que falas é algo deste genero? https://www.sparkfun.com/products/8970 (https://www.sparkfun.com/products/8970) .
tentei usar a serial do arduino com o GPS e ele dá-me erro ao compilar, posso estar a dizer uma asneira mas penso que a serial do arduino uno está dedicada á comunicação com o computador (USB).
verifiquei entretanto que o sensor de distancia alem da comunicação com serial port tambem tem uma saida analogica, por ai já estava safo.....
será que estou errado quanto á porta serial???????  poderei eu utilizá-la para o GPS e monitor sem sem o multiplexer externo????????    se não, qual o multiplexer que me aconcelham ????????   e não precisa de codigo ?????????
estou aberto a ideias e sugestões, não pensem que quero utilizar o forum para a papinha toda, eu  pesquiso até bastante, mas as minhas limitações de ingles limitam-me muito.
agradeço toda a colaboração que me derem.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: tarquinio em 09 de Novembro de 2013, 14:28
será que estou errado quanto á porta serial???????  poderei eu utilizá-la para o GPS e monitor sem sem o multiplexer externo????????    se não, qual o multiplexer que me aconcelham ????????   e não precisa de codigo ?????????
Bem eu nunca usei esses shields especificamente, mas tu próprio é que disseste que o wave shield interfere com o softwareserial, por isso não parece ser mto boa idéia ir por esse caminho...
Quando ao multiplexer, uses seja qual for a idéia é sempre a mesma, tens de escrever algum código mas pouca coisa. Basicamente são apenas algumas linhas para configurar qual das portas queres usar, e estar semrpe a alternar entre uma e outra para fazer o efeito que tu querias (da bengala).
Mas se tambem dizes que o sensor tem uma saida analógica, eu iria antes por esse caminho... Simplificava tudo, tanto a nível de código como a nível de haardware!
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: rglove em 09 de Novembro de 2013, 14:38
A ideia do multiplexer é boa...
Em relação ao melhor multiplexer para essa aplicação, não faço a mínima ideia, mas um ic com 2 MUXs 2:1 com 1 bit de seleção serve para o que queres, pesquisa mais sobre isso
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 09 de Novembro de 2013, 15:28
Obrigado pelo vosso feedback, na verdade como disse na apresentação surgiam coisas estranhas quando juntei a solução GPS e WaveShield, testei alterar pedaços de codigo tanto de uma como de outra livraria, inclusivé impor condições para que enquanto estivesse a tocar o ficheiro não fizesse mais nada, mas aconteciam coisa variadas e desajustadas ao pretendido por mim, como por ex: a meio do loop() entrar no setup(), quando pelo conhecimento que tenho o setup só é executado uma unica vez no inicio do programa.
Tinha uma suspeita que pudesse ser de conflito nas interrupções mas não sabia o que originava isso, inicialmente achei que o codigo do gps usava interupções, o do WaveShild também e as mesmas entravam em conflito, não descarto isso por enquanto, mas havia mais do que isso porque comentei o codigo do GPS e mesmo assim não funcionava bem.
Pesquisei bastante e foi aí que encontrei isto: http://forums.adafruit.com/viewtopic.php?f=31&t=34003&p=168248&hilit=waverp#p168248 (http://forums.adafruit.com/viewtopic.php?f=31&t=34003&p=168248&hilit=waverp#p168248)  , dai comentei o codigo que defenia o SoftwareSerial e testei que as coisas já funcionavam.

O sensor de distancia já está resolvido adquirindo o sinal por uma porta analogica que ainda tenho disponivel, agora só preciso a Serial porta para o GPS, tentei ligar o GPS ao porto digital "0 e 1" e no  setup defeni Serial.begin(38400); que é o baud rate do GPS, mas ao tentar compilar dá-me erro, qualquer coisa como que a porta COM? já está atribuida, pesquisei alguma coisa e acho que no UNO a serial port está dedicada á ligação USB entre o Arduino e o computador, espero estar errado e que tudo isto não passe de codigo mal feito de minha parte, é por isso que peço a quem me possa ajudar nisto que o faça.
desde já agradecido pela vossa atenção e por qualquer sugestão de vossa parte.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: jm_araujo em 09 de Novembro de 2013, 19:15
A porta está atribuida ao USB mas nada impede que uses com outros dispositivos. A ligação do ATMega ao Serial-USB é feita por resistências de 1k, o que lá ligares vai-se sobrepor.
Mux estava a pensar em algo simples e comum, tipo o 74HC4052, mas pelo caminho que estás a seguir já não precisas.

Outra ideia: Se usas o waveshield só para emitir um bip, podes desfazer-te dele. Podes usar um besouro ou então usar um timer (0 é usado pelo arduino, o 1 e 2 devem estar livres) para gerar a frequencias do bip  e amplificar com um lm386 ou do género.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 10 de Novembro de 2013, 00:54
O WaveShild é fundamental no que estou a fazer, não só para emitir um "bee", mas também para jogar audio e inclusivé gravar audio, isto faz parte dum projecto já antigo que estive a desenvolver e durante muito tempo tive-o parado por diversas situações que foram acontecendo.
A ideia é gravar percursos para invisuais, e posteriormente os percursos servirem de guia para os mesmos invisuais, logo o audio é fundamental para este projecto. depois de o apresentar na escola (tenho de o acabar até ao fim deste ano) vou o apresentar aqui com todo detalhe.
Com as portas digital Serial (0 e1)utilizei assim o codigo:
Código: [Seleccione]
//#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
TinyGPS gps;
//SoftwareSerial ss(6, 7);

void setup()
{
  Serial.begin(38400);
 // ss.begin(38400);
 
  Serial.print("Simple TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (Serial.available())
    {
      char c = Serial.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("LAT=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" LON=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" PREC=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
 
  gps.stats(&chars, &sentences, &failed);
  Serial.print(" CHARS=");
  Serial.print(chars);
  Serial.print(" SENTENCES=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}
Não compilou dando-me o seguinte erro:"avrdude: stk500_getsync(): not in sync: resp=0x2a", também já chegou a dar-me um erro a dizer que a COM5 (a que usa) já estava atribuida.
Pesquisei no GOOGLE sobre o erro e encontrei algumas referencias de que com o arduino UNO os portos Serial estão dedicados á comunicação com o computador(mas como o meu ingles é fraquinho não posso estar totalmente certo disso), e, até aconcelhavam a não utilizar as portas para ver se o erro se resolvia.
Quando tenho as portas (0 e 1) ligadas, o erro dá-me sempre, se utilizo o SoftwareSerial funciona bem e não dá erro.
Pelo codigo que postei (que é do tinyGPS simple teste ajustado por mim ás portas Serial), sabendo que o baud rate do meu gps é 38400, estou a utilizar mal as portas Serial?????
se sim, como devo fazer?????
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: jm_araujo em 10 de Novembro de 2013, 14:53
Algo óbvio que pode ter passado e só me ocorreu a ler sobre erros getsync() na net: quando fazes upload do programa para o arduino não podes ter nada ligado no pino RX nem TX, senão pode-se sobrepor à programação e dar erro.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 10 de Novembro de 2013, 17:07
OK, e existe algem que tenha alguma ideia de algo que possa fazer para trabalhar com o GPS e o WaveShild simultaneamente..????????????
Agradecia qualquer sugestão,..... algumas vezes a solução vem das ideias mais inesperadas.
Fico agradecido pelo feedback.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: senso em 10 de Novembro de 2013, 20:14
Mandas o IDE do arduino para o lixo e fazes o código de raiz, garantidamente que funciona tudo junto e ainda sobram 2 timers, como é código miserável para arduino, toda a gente e a mãe deles precisam de interrupções e timers e não sei que mais...

E sim, não podes ter nada ligado ao Rx/Tx para programar, algumas coisas fazem tri-state aos pinos de serial e não interferem, mas dado que o tipico shield para arduino é desenhado meio á sorte, nunca pensam nessas coisas.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 10 de Novembro de 2013, 20:44
Obrigado senso, mas o que me sugeres é algo que vai além das minhas capacidades, esperava poder encontrar uma solução que me permitisse fazer uso do código existente, integrando-o no meu.
Concordo plenamente com o que tu dizes, mas as minhas limitações levam-me a tentar encontrar outras soluções, e, se tens alguma ideia de como me ajudar agradeço.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: senso em 10 de Novembro de 2013, 21:39
A biblioteca serial devia funcionar para o que queres, mas usar um timer, possivelmente o 1, e o wave shield vi agora que não faz nada externo, quem tem de tratar de tudo é o micro, assim sendo, a opção mais simples deve ser saltares para um arduino mega/ usar um atmega644p que tem 40 pinos, existe em DIP, e que tem duas portas serial, e é suportado pelo IDE do Arduino.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 10 de Novembro de 2013, 22:05
nenhuma solução mais barata????? é que já estourei muitas patacas nisto e mais 40 não me dava jeito nenhum......
agradeço ideias.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: senso em 10 de Novembro de 2013, 22:12
Dai ter referido um atmega644p, compras um por 4-5€ na Mouser, mais um cristal e uns condensadores, montas numa breadboard.
Isso é uma questão de código, tudo poderá ser resolvido sem gastares mais nada, vá quanto muito realmente teres de usar um multiplexer.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 12 de Novembro de 2013, 19:27
Obrigado senso pela dica, tenho estado atento ao topico, e se demorei a responder foi porque escapou-me que tinha mudado de pagina e julgava que não havia novas.
ainda me surge a duvida de como establecer contacto com o computador para compilar o codigo, mas a verdade é que ainda vou pesquisar sobre a tua ideia.
dado isto tudo, a verdade é que também estou a lutar contra o tempo, e tenho que alcançar resultados a curto prazo.
depois de pesquisar sobre isto direi qualquer coisa, mas desde já o meu muito obrigada.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 12 de Novembro de 2013, 22:11
as leituras que fiz iam no sentido de utilizar o UNO em um ISP que com o uso do software sanguino programa o chip atmega644p, e, posteriormente faz de interface entre o chip e o computador.
tambem li alguma coisa sobre a utilização do avrdude para programar o chip no caso de não o conseguir com o IDE do Arduino.
não sei se estou a ir bem orientado, mas estou a tentar trilhar caminho enquanto não tenho o material para experimentar.
ainda não vi informação sobre a correspondencia dos pinos do chip a as portas, por ex: quais são os pinos que correspondem ás portas serie ( tem 2 rx e 2 tx ? )
ainda não tive tempo para ver o datashet, ( vou ter algumas dificuldades por causa do meu ingles) mas o pouco que vi este trata de igual o 164 / 324 e 644. ( mas estou a falar um pouco á sorte.)
Alguém sabe de alguma imagem que mostre a correspondencia dos pinos todos do chip atmega644p com as portas (analogicas, digitais (dentro destas serial)). Se sim, postem-me o URL SFF.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: senso em 13 de Novembro de 2013, 10:07
Está tudo na datasheet, secção pinout ou algo assim parecido, tem imagens do chip e descrição de cada pino, e sim, tens duas portas serial.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 13 de Novembro de 2013, 22:16
foram umas duas horas a dar uma vista de olhos no datasheet para ter uma ideia das coisa,  e ontem já tinha dado uma vista de olhos nestes foruns: http://lusorobotica.com/index.php?topic=5640.0 (http://lusorobotica.com/index.php?topic=5640.0)  ,  http://lusorobotica.com/index.php?topic=4571.45 (http://lusorobotica.com/index.php?topic=4571.45)  , http://www.instructables.com/id/Turn-Your-Arduino-Into-an-ISP/?ALLSTEPS (http://www.instructables.com/id/Turn-Your-Arduino-Into-an-ISP/?ALLSTEPS)  , http://reprap.org/wiki/Burning_the_Sanguino_Bootloader_using_Arduino_as_ISP. (http://reprap.org/wiki/Burning_the_Sanguino_Bootloader_using_Arduino_as_ISP.)
vou mandar vir o material e quando tiver alguns resultados, posto um forum novo ( pois penso que é ajustado, visto que o titulo está a ficar desajustado ao conteudo) e neste forum farei uma referência ao outro.
só gostaria de perguntar ao senso se entende se pelas referências que deixei aqui,  estou a ir no caminho certo.
Título: Re: arduino, waveshield, gps - problema com SoftwareSerial
Enviado por: Asilva em 07 de Dezembro de 2013, 18:21
não tenho tempo para isto agora, e, na escola disponibilizaram-me um mega pelo tempo até á conclusão do projecto, no caso de poder ser util a alguém, deixo o URL desta imagem.
http://www.flickr.com/photos/stevemarple/6050076281/#in/photostream/ (http://www.flickr.com/photos/stevemarple/6050076281/#in/photostream/)
de futuro e com mais tempo penso vortar a isto.