Sida 1 av 2
USART arduino
Postat: 9 juni 2014, 22:47:30
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?
Re: USART arduino
Postat: 9 juni 2014, 23:11:17
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();
}
}
Re: USART arduino
Postat: 9 juni 2014, 23:20:38
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.
Re: USART arduino
Postat: 9 juni 2014, 23:22:59
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?
Re: USART arduino
Postat: 9 juni 2014, 23:26:43
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.
Re: USART arduino
Postat: 9 juni 2014, 23:37:52
av nifelheim
som Sodjan säger har du kollat pinMode?
se exemplet:
http://arduino.cc/en/Tutorial/SimpleSoftwareSerial
Re: USART arduino
Postat: 10 juni 2014, 00:07:05
av Lullen
Du Sodjan
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...
Re: USART arduino
Postat: 10 juni 2014, 11:18:59
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?
Re: USART arduino
Postat: 10 juni 2014, 14:15:42
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.
Re: USART arduino
Postat: 10 juni 2014, 15:13:19
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...

Re: USART arduino
Postat: 10 juni 2014, 17:18:57
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?
Re: USART arduino
Postat: 10 juni 2014, 19:01:25
av sodjan
Jag undrade också men antog att den var upptaget av något annat.

Re: USART arduino
Postat: 10 juni 2014, 20:06:12
av nifelheim
Uno har bara en UART
Mega har 4 st

Re: USART arduino
Postat: 10 juni 2014, 20:09:33
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.
Re: USART arduino
Postat: 10 juni 2014, 23:02:12
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?