USART arduino

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

USART arduino

Inlägg av Lullen »

Nu gav jag upp i försöken att få min PIC att kunna skicka signaler till min GPS. Så jag tog och köpte mig en arduino uno. Arduino ska ju vara så enkelt och bra (och visst är det enklare) men jag sitter och försöker ta emot signaler nu från GPSen och det går rätt illa...

Adafruit har ett library för GPSen (eller det är samma gps modul men annat fabrikat jag har) som jag försökte använda. Problemet var att jag aldrig fick någon data. Kollade igenom koden och det visade sig att available() aldrig blir sant. Jag tänkte att kanske har jag kopplat TX till RX o tvärtom så jag byter plats men fortfarande inget. Börjar fundera på om jag dödat något så testar olika portar men fortfarande samma resultat. Kollade då GPSen genom att koppla på min PIC igen och då får jag fram datan direkt!

Då tog jag och skrev en så enkelt program som möjligt för att säkerställa att det inte var något fel. Gjorde även samma tester här med att switcha RX med TX utan resultat.

Kod: Markera allt

#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2); // Har gpsen inkopplad på 3 o 2. Har testat att switcha

void setup() {
  Serial.begin(9600); //Testade även med 115200 innan som var den hastigheten i exemplet jag hittade
  Serial.println("Adafruit GPS library basic test!");
  mySerial.begin(9600);
}
void loop() {
  if(mySerial.available()){
    char c = mySerial.read();
    Serial.print(c);
  }
}
Vad är det jag missar? Varför får jag inte upp något i Serial Monitorn?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: USART arduino

Inlägg av sodjan »

Får du ut "Adafruit GPS library basic test!" ?

Examplet på http://arduino.cc/en/Reference/SoftwareSerialAvailable
använder inte available() på samma sätt.

Kod: Markera allt

void loop() {
  if (mySerial.available()>0){
  mySerial.read();
 }
}
Användarvisningsbild
Klas-Kenny
Inlägg: 11840
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: USART arduino

Inlägg av Klas-Kenny »

Sodjan: Just hur available() används borde ju inte spela någon roll, eftersom att allt som != 0 är TRUE i C.
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Re: USART arduino

Inlägg av Lullen »

Exakt!

Jag får upp "Adafruit GPS library basic test!" Tar jag bort available helt och bara använder read() så får jag bara ut ÿ vilket motsvarar -1 som motsvarar att det inte finns något (läste jag på något forum).
Kör även Arduino 1.0.5 så ska inte använda NewSoftwareSerial.

Jag räknade fram att med PICen så använder jag inte 9600 utan 9615.xxx så testade även att köra på det. Men å andra sidan så borde jag väl få fram något om än skittecken om jag så sätter baud rate till 4800?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: USART arduino

Inlägg av sodjan »

> ...eftersom att allt som != 0 är TRUE i C...

OK... :-)

Jag skulle stoppa in en LED eller liknande i loopen så
att man har något mer konkret som visar vad som händer.

I ett annan exempel använder de även pinMode():
http://arduino.cc/en/Reference/SoftwareSerialBegin

9600 eller 9615 ligger inom marginalerna och har ingen betydelse.
nifelheim
Den första
Inlägg: 2489
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: USART arduino

Inlägg av nifelheim »

som Sodjan säger har du kollat pinMode?
se exemplet:
http://arduino.cc/en/Tutorial/SimpleSoftwareSerial
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Re: USART arduino

Inlägg av Lullen »

Du Sodjan :bravo:
Konstigt att det inte finns flera exempel på detta. Speciellt Adafruits exempel som "skryter" om att de har så bra exempel och library. Man förväntar sig ju att det ska fungera då. Sen verkar folk tycka att det fungerar också. Jaja nu är det iaf löst!

Men jag får data i alla fall! Dock ser det ut så här:
$PGTOP,1q,2*ÿ¼ÇPGGA,21424p.¸ø/·“I‰Ó“ÉŠ ;sNÜþ¼ÿ–E,1,9,1.p1,3ù÷[]&)‰¹)KKJ›ãþÿ):¥&¥LNK˜˜–¸3ü¹ù,14,22,18,32lü·÷.¥n
Dvs det är nog rätt fram till 1an sen failar den och skriver q sen blir det lite korrekt igen fram till * och sen fail igen till PGGA...
Testade att ändra Serial.print(c) till UDR0 = c då det ska vara mycket snabbare men ingen skillnade. Ändrade också Serials baud rate till 115200.
Min tanke är att antingen hinner den inte med eller så är det fel baud rate (marginellt) men känns som att den inte hinner med...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: USART arduino

Inlägg av sodjan »

> Konstigt att det inte finns flera exempel på detta.

Ja, jag reagaerade på att det inte var alla exempelsidor
kring SoftwareSerial som också gjorde pinMode men ändå
ser ut som kompletta exempelprogram...

> $PGTOP,1q,2*ÿ¼ÇPGGA,21424p.¸ø/·“I‰Ó“ÉŠ..........

Vad borde det stå där? Om man vet det så kan man ganska
kolla upp om det är ett bit-fel eller något annat.
Är längden som sådan rimlig?
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Re: USART arduino

Inlägg av Lullen »

Satt o läste lite i natt och enligt något forum så ska SoftwareSerial sätta de till in/out men men...
Kan inte säga exakt vad det ska stå då GPGGA är position osv men lite av det kan jag iaf säga.

Det de står:
$PGTOP,1q,2*ÿ¼ÇPGGA,21424p.¸ø/·“I‰Ó“ÉŠ..........
Det de ska stå:
$PGTOP,11,2*6E\r\n$GPGGA,21424X.XXX så långt är jag säker. Där X är siffror
Så det verkar som om det saknas ett tecken (\r eller \n)

$GPGGA KAN se ut så här: $GPGGA,235944.800,,,,,0,0,,,M,,M,,*4D.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: USART arduino

Inlägg av sodjan »

\r\n är väl CR/LF (?).
Underligt, det verkar lite som att SoftwareSerial inte hinner med
eller något i den stilen. Hastigheten bör vara rätt eftersom
t.ex PGTOP blir korrekt... Tja... :-)
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: USART arduino

Inlägg av Icecap »

Nu är det jag undrar: varför använda en mjukvaru-UART? Finns det inte en hårdvara att använda istället?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: USART arduino

Inlägg av sodjan »

Jag undrade också men antog att den var upptaget av något annat. :-)
nifelheim
Den första
Inlägg: 2489
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: USART arduino

Inlägg av nifelheim »

Uno har bara en UART
Mega har 4 st :-)
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: USART arduino

Inlägg av Icecap »

En soft-UART tål ju oftast inte att det finns aktiva interrupt då timingen blir lidande - och det kan ju passa fint med att det finns goja på ledningen...

Lullen: gör om, gör rätt! Använd en µC med rätt mängd hårdvara.
nifelheim
Den första
Inlägg: 2489
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: USART arduino

Inlägg av nifelheim »

alla borde ha minst en i verktygslådan, under 100:- hela vägen hem i brevlådan :)

http://www.ebay.com/itm/1PCS-New-Good-M ... 1099113709?
Skriv svar