logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak skonfigurować komunikację z modułem GPS-FGPMMOPA6B?

shel82 15 Lip 2010 11:50 5918 22
  • #1 8294411
    shel82
    Poziom 18  
    Witam, może ktoś podpowie jak ponieważ po raz pierwszy próbuję podłączyć moduł GPS na początek do HyperTerminala, ale nic mi z tego nie wychodzi.
    Moduł GPS podłączyłem zgodnie ze schematem z data sheetu:
    Jak skonfigurować komunikację z modułem GPS-FGPMMOPA6B?

    Zasiliłem go 3.3V i podłączyłem linię TX modułu poprzez interfej oparty na ST3232:
    Jak skonfigurować komunikację z modułem GPS-FGPMMOPA6B?

    Efekt jest taki, że w HyperTerminalu tylko podczas podłączenia zasilania pojawią się dwa trzy symbole, a potem już nic??
    Jak skonfigurować komunikację z modułem GPS-FGPMMOPA6B?

    Interfejs sprawny - jak zewrę RX i TX i piszę na klawiaturze wysyła i przyjmuje prawidłowo.

    HyperTerminal skonfigurowany następująco:
    Liczba bitów na sekundę: 9 600
    Bity danych: 8
    Parzystość: Brak
    Bity stopu: 1
    Sterowanie przepływem: Xon/Xoff
  • #2 8294674
    Kuba_eM
    Poziom 24  
    Czy masz podpięte napięcia na nogi 1, 2 i 4? Dodatkowo, gdzieś na jakimś forum (modelarskim?) czytałem, że były problemy z tym modułem, jeśli się nie podłączyło diody FIX sygnalizującej ustalenie pozycji.
  • #3 8294791
    shel82
    Poziom 18  
    Pierwszą nogę - 1 czyli Vcc (zasilanie) mam podpiętą,
    2 czyli ENABLE wisi w powietrzu, tu przyznam się, że nie za bardzo rozumiem stwierdzenia "High active, or keep floating for normal working"
    4 czyli podtrzymanie także nie podpiąłem
    Natomiast diodę FIX mam podłączoną...
  • #4 8295371
    rpal
    Poziom 27  
    Poziom napięć PC-GPS ma kolega prawidłowo dopasowany. Coś mi się zdaje że moduł wysyła dane jako RS232-TTL a PC-et ma poziom napięć -12V/+12V więc brak tutaj bufora ?
  • #5 8295900
    koodpl
    Poziom 12  
    Większość tych modułów gps musi mieć podpięte VBACKUP (4) - po prostu połącz z VCC (1). Sterowanie przepływem ustaw na None.
  • #6 8296198
    MaxX850
    Poziom 13  
    Witam!

    Troszkę OT i nie ten dział ale może ktoś widział bibliotekę do Eagle z tym modułem ?
  • #7 8296572
    Kuba_eM
    Poziom 24  
    shel82 napisał:
    Pierwszą nogę - 1 czyli Vcc (zasilanie) mam podpiętą,
    2 czyli ENABLE wisi w powietrzu, tu przyznam się, że nie za bardzo rozumiem stwierdzenia "High active, or keep floating for normal working"
    4 czyli podtrzymanie także nie podpiąłem
    Natomiast diodę FIX mam podłączoną...

    Podłącz wszystkie: 1, 2 i 4.

    MaxX850 napisał:
    Troszkę OT i nie ten dział ale może ktoś widział bibliotekę do Eagle z tym modułem ?...

    Zrobienie jej zajmuje kilka minut... Opis jak to zrobić w dziale Projektowanie PCB. Mi wyszło takie coś:
    Jak skonfigurować komunikację z modułem GPS-FGPMMOPA6B?
  • #8 8296798
    MaxX850
    Poziom 13  
    Wyszło Ci całkiem zgrabnie, a ja nie miałem jeszcze okazji tworzyć nowego elementu. Poszukam jakiejś pomocy we wspomnianym dziale i spróbuje coś samemu stworzyć na podstawie wymiarów z datasheeta.
  • Pomocny post
    #9 8300133
    aut18
    Poziom 12  
    Wszystkie trzy nóżki do V+.
    Enable zezwala na działanie gdy jest na V+, gdy na GND to usypia moduł.
    Vbackup podtrzymuje pamięć pozycji gdy moduł śpi lub jest wyłączony.
    Stosuję ten typ od kilku miesięcy i jestem zadowolony z czułości; pozycjonuje się na biurku bez problemów. Wśród drzew kluczy - Twoja droga będzie wyglądać jak po kilku głębszych: +/_ 3m od osi drogi, ale w lesie się nie gubi!
    Tylko zimny start to koło minuty, a gorący to też ładnych kilka do kilkanaście sekund - na to trzeba uważać.
    To połączenie na schemacie w pierwszym poscie dotyczy RS - TTL, stosuje się do innego procka. Do PC tylko przez konwerter napięć typ ...232.
    Ten typ jest na tyle wspaniałomyślny, że możesz podłączyć się z wyjść D+ i D- bezpośrednia do wejścia kabla USB do PCta (pomijając cały RS232) i jesteś w domu! To działa.
    Fabrycznie ustawiony na 9600baud i odświeżanie co 1s.
    Krzysztof

    Dodano po 6 [minuty]:

    Ten interfejs z fotografii powinien być dobry.
    Tylko nogi 2 i 4 do V+.
    Dioda Fix nic nie daje ani nie przeszkadza, całkowicie nieistotna przy komunikacji, sygnalizuje tylko dobre dostrojenie (siła sygnału, ilość odebieranych satelit, jakość pozycjonowania.
    Powodzenia Krzysztof
  • #10 8392295
    shel82
    Poziom 18  
    aut18 napisał:
    Wszystkie trzy nóżki do V+.
    Enable zezwala na działanie gdy jest na V+, gdy na GND to usypia moduł.
    Vbackup podtrzymuje pamięć pozycji gdy moduł śpi lub jest wyłączony.
    Stosuję ten typ od kilku miesięcy i jestem zadowolony z czułości; pozycjonuje się na biurku bez problemów. Wśród drzew kluczy - Twoja droga będzie wyglądać jak po kilku głębszych: +/_ 3m od osi drogi, ale w lesie się nie gubi!
    Tylko zimny start to koło minuty, a gorący to też ładnych kilka do kilkanaście sekund - na to trzeba uważać.
    To połączenie na schemacie w pierwszym poscie dotyczy RS - TTL, stosuje się do innego procka. Do PC tylko przez konwerter napięć typ ...232.
    Ten typ jest na tyle wspaniałomyślny, że możesz podłączyć się z wyjść D+ i D- bezpośrednia do wejścia kabla USB do PCta (pomijając cały RS232) i jesteś w domu! To działa.
    Fabrycznie ustawiony na 9600baud i odświeżanie co 1s.
    Krzysztof

    Dodano po 6 [minuty]:

    Ten interfejs z fotografii powinien być dobry.
    Tylko nogi 2 i 4 do V+.
    Dioda Fix nic nie daje ani nie przeszkadza, całkowicie nieistotna przy komunikacji, sygnalizuje tylko dobre dostrojenie (siła sygnału, ilość odebieranych satelit, jakość pozycjonowania.
    Powodzenia Krzysztof


    Dzięki Krzyśku, GPS ruszył i odbiera dane.
    Irytuje mnie teraz inna sprawa, ramka $GPGGA - z tego wydłubuje pozycje i przykładowo wygląda to tak:
    $GPGGA,182136.000,5232.9210,N,01941.9850,E,1,5,3.25,92.8,M,38.6,M,,*69
    czyli
    52°32'92"10 N, 19°41'98"50 E
    GPS chodził dobre 5 min., ale podane współrzędne odbiegają od rzeczywistego położenia o 30 km - dlaczego?

    i jeszcze dopytam co znaczy .000 po czasie?
    $GPGGA,182136.000,
  • #11 8392610
    Jaca
    Poziom 31  
    1. Moduł przekazuje dane współrzędnych geograficznych w formacie WGS84 (o ile takie masz ustawione w module). Musisz je przeliczyć na odpowiedni format. Wg Twoich danych to: 52°32'55.26" N 19°41'59.10" E (Płock, Sportowa 1)
    2. Czas po kropce to ułamkowe części sekundy.

    ps. Moduł odbiera wg przykładu 5 sats (trochę mało = spory błąd pozycjonowania)
  • #12 8393553
    aut18
    Poziom 12  
    Drobny dodatek do wyjaśnień kolegi.
    Gdy używasz jakiegoś programu na PC dołączony do sprzętu GPS do nawigacji lub znaleziony w sieci to masz wszystko przeliczone od razu.
    Gdy pracujesz z AVR to musisz wyłuskać wszystko po kolei.
    U mnie po zapisaniu czasu (godz, min, sek) trafiam na kropkę, która powoduje opuszczenie przeglądania do czasu odczytu następnego przecinka.
    Te zera są nieistotne, Twój sprzęt ich nie wykorzysta, to są tysięczne części sekundy.
    Podobnie cyfry po kropce we współrzędnych oznaczają dziesięciotysięczne części minuty geograficznej, a stopnie i minuty pisane są ciurkiem!
    Gratuluję sukcesów i pozdrawiam.
    Krzysztof
  • #13 8456305
    shel82
    Poziom 18  
    Mam problem z konwertowaniem kodu zapisanego w WGS84 na obsługiwany przez mapy Google. Naczytałem się już kilku opracowań, ale dalej pustka w głowie, może ktoś z was potrafi mi wyjaśnić albo podać jakiś prosty algorytm translacyjny?
  • #14 8457422
    Jaca
    Poziom 31  
    Tu masz przykład mojej konwersji w Delphi:

    procedure WGS84ToGoogle(WLong,WLat: double;var GLong,GLat: double);
    
      function ConvertToDecimal(Coord: double): double;
      var
        Petla: integer;
      begin
        Result:=0;
        try
          for Petla:=0 to 3 do
          begin
            Result:=Result+(Trunc(Coord)/Power(60,Petla));
            Coord:=Frac(Coord)*100;
          end;
        except
          Result:=0;
        end;
      end;
    
    begin
      GLong:=ConvertToDecimal(WLong);
      GLat:=ConvertToDecimal(WLat);
    end;
    
  • #15 8457962
    shel82
    Poziom 18  
    Jaca napisał:
    Tu masz przykład mojej konwersji w Delphi:

    Result:=Result+(Trunc(Coord)/Power(60,Petla)); 
            Coord:=Frac(Coord)*100;
    


    OK masz pętle o nazwie "Pętla", która wykonuje 3 kroki na początku argument Result ustawiasz na 0, a co dokładnie znaczy reszta?
  • #16 8458101
    Jaca
    Poziom 31  
    Pętla wykonuje się 4 a nie 3 razy. Spróbuj zrozumieć kod a jak nie dasz rady - pomogę Ci... Odszukaj zastosowanie funkcji Trunc(), Frac() i Power().

    Edit:

    Zrobiłem inną procedurę, która okazała się bardziej "prawidłowa" i przelicza współrzędne pobrane bezpośrednio z ramki NMEA:

    function GPSToGoogle(Coords: array of string): TCoords;
    begin
      with Result do
        try
          if (Coords[0]='') or (Coords[1]='')
            or (Coords[2]='') or (Coords[3]='') then
          begin
            CLong:=0;
            CLat:=0;
            Exit;
          end;
          CLong:=StrToFloat(StringReplace(Coords[0],'.',',',[rfReplaceAll]))/100;
          CLong:=RoundTo(Int(CLong)+(Frac(CLong)/0.6),-6);
          if Coords[1]='W' then
            CLong:=-CLong;
          CLat:=StrToFloat(StringReplace(Coords[2],'.',',',[rfReplaceAll]))/100;
          CLat:=RoundTo(Int(CLat)+(Frac(CLat)/0.6),-6);
          if Coords[3]='S' then
            CLat:=-CLat;
        except
          CLong:=0;
          CLat:=0;
        end;
    end;
    
    


    To przykład z Delphi a zasada przeliczania jest taka:

    1. Pobierz współrzędną+wskaźnik NS/EW z odbiornika GPS jako tekst
    2. Zamień separator dziesiętny z "." na "," (jeśli potrzebujesz)
    3. Zamień współrzędną na liczbę typu double i podziel ją przez 100
    4. Do części całkowitej liczby dodaj część ułamkową tej liczby podzieloną przez 0.6
    5. Zaokrąglij otrzymaną liczbę do 6 miejsca po przecinku
    6. Gdy wskaźnik strony geograficznej jest równy S lub W zmień otrzymaną liczbę na ujemną
  • #17 8638817
    piotr_go
    Konstruktor DIY elektronika
    Witam
    Kupiłem ostatnio 2 te moduły i mam z nimi problem. Obydwa nie działają na 9600 a na około 6000bps !
    Fixa nie łapią, po usb nie działają. Spotkał się ktoś z czymś takim?
    Wadliwa seria czy co?
    Zasilanie 4V z li-iona na piny 1,2,4.


    ====================== update =======================
    HAHA, działa.
    Dziwna sprawa, miałem LEDa podpiętego do 3D-FIX(do + żeby świecił jak złapie) i to powodowało problemy.
    Jeżeli moduł włączam bez LEDa a dopiero później go podłączam to jest wszystko OK.
  • #18 8787618
    shel82
    Poziom 18  
    @Jaca

    Ponieważ znalazłem trochę czasu postanowiłem wrócić do tematu, ponieważ nadal mam problemy z poprawnym przeliczeniem wartości ramki NMEA (WGS84) na współrzędne obsługiwane przez Google Maps.

    Odszukałem zastosowanie poszczególnych funkcji:
    Trunc() - funkcja Trunc zaokrągla w kierunku zera (dla liczb dodatnich oznacza to "w dół", dla liczb ujemnych - "w górę") podaną liczbę rzeczywistą i zwraca ją w postaci liczby całkowitej. Innymi słowy funkcja Trunc obcina część ułamkową,
    przykład:
    WriteLn(Trunc(-3.8)); // wyświetli -3
    WriteLn(Trunc(1.1)); // wyświetli 1


    Frac() - funkcja usuwa z parametru liczby rzeczywistej część ułamkową,
    przykład:
    Writeln(FloatToStr(Frac(123.345))); // zwraca: 0.345
    Writeln(FloatToStr(Frac(-1.34))); // zwraca -0.34


    Power() - funkcja podnosi liczbę do dowolnej potęgi, potęga może być ułamkiem,
    przykład:
    Writeln('2^3 = ', FloatToStr(Power(2, 3)));

    Ogólnie problem w tym, że jak widać ramka NMEA nie używa sekund, żeby je uzyskać trzeba przeliczyć ułamki na sekundy, a ponieważ minuta ma 60[sek] to otrzymujemy proporcję:
    1[min] 0.xxxx[min]
    -------=-----------
    60[sek] x[sek]

    Natomiast po zastosowaniu tej konwersji i wpisaniu współrzędnych geograficznych do Google Maps i tak wyświetla z błędem - dlaczego?

    Dla przykładu trzymając się danych z początku posta z ramki NMEA wyszło:
    5232.9210,N,01941.9850,E
    po konwersji (czyli w przybliżeniu wymnożeniu części ułamkowej przez 0,6):
    52°32'55.26" N 19°41'59.10" E
    ale po wpisaniu tych danych do przeglądarki nie otrzymujemy:
    (Płock, Sportowa 1) tylko dzikie pole:
    http://maps.google.com/maps?q=52.325526,19.415910
  • #19 8792666
    namlooc
    Poziom 15  
    shel82 napisał:

    po konwersji (czyli w przybliżeniu wymnożeniu części ułamkowej przez 0,6):
    52°32'55.26" N 19°41'59.10" E
    ale po wpisaniu tych danych do przeglądarki nie otrzymujemy:
    (Płock, Sportowa 1) tylko dzikie pole:
    http://maps.google.com/maps?q=52.325526,19.415910


    Wszystko dobrze przeliczasz ale zle wpisujesz dane do google maps..

    Powinno byc
    52 32 55.26 N 19 41 59.10 E


    http://maps.google.com/maps?f=q&source=s_q&hl....677068&sspn=31.371289,86.572266&ie=UTF8&z=15
  • #21 8928148
    Konto nie istnieje
    Konto nie istnieje  
  • #22 8928245
    sq3fyk
    Poziom 11  
    Witam
    A ja zapisuje dane na karcie pamięci w postaci gps.txt

    Kopiuje do PC zmieniam rozszerzenie na gps.nmea tak przygotowany plik przeciągam do google earth i trasa się rysuje :)

    Pozdrawiam
  • #23 9229632
    zielu_pl
    Poziom 1  
    Nie ma potrzeby konwersji z systemu dziesiętno-minutowego na dziesiętny. Google przyjmuje wiele o ile nie wszystkie formy składni pozycji GPS.
    Instrukcja http://mapki.com/wiki/Google_Map_Parameters.

    Aby wprowadzić współrzędne w Google wystarczy skopiować dane praktycznie w takiej formie w jakiej są w ramce GGA

    Podana tu w przykładzie ramka
    $GPGGA,182136.000,5232.9210,N,01941.9850,E,1,5,3.25,92.8,M,38.6,M

    Skopiowane współrzędne
    5232.9210,N,01941.9850,E

    zmieniamy na
    52 32.9210N,019 41.9850E

    Wystarczy tylko wstawić spacje i usunąć przecinki. Znaki N i E nie są wymagane
    http://maps.google.com/?q=52 32.9210N,019 41.9850E
REKLAMA