| Author |
Message
|
kekerott Poziom 3

Joined: 11 Oct 2003 Posts: 6
|
#1
19 Nov 2008 23:23 [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Witam,
posiadam moduł gps który chcę skomunikować z uC Atmega16. Sam moduł działa świetnie, komunikacja poprzez max232 z komputerem jest bezproblemowa. Problemy zaczynają się przy komunikacji przez UART z atmegą. Nic nie pojawia się na wejściu RxD/PD0, transmisja ustawiona wdg specyfikacji:
Nie wiem w czym tkwi problem? Czy trzeba coś dodatkowego wstawić pomiędzy moduł a uC (konwerter/inwerter)? Procesor działa na zew. kwarcu 16mhz (fuse'y ustawione). Atmega z komputerem świetnie komunikuje się poprzez UART/max232 ale z modułem działać nie chce, w czym może tkwić problem ?
Taki prosty kod działa z PC'tem (przez max232) a z modułem nie chce, nie wyświetla nic, nawet krzaków:
| Code: |
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Dim A As Byte
Cls
Do
If Ischarwaiting() = 1 Then
A = Inkey()
Lcd Chr(a)
End If
Loop
End
|
|
|
| Back to top |
|
 |
Google

|
#
19 Nov 2008 23:23 |
|
|
|
|
|
| Back to top |
|
 |
djsway Poziom 14

Joined: 14 Oct 2005 Posts: 174 Location: Kleszczowa
|
#2
20 Nov 2008 01:32 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
A w jakim standardzie dane wysyła gps? Odbieranie danych ja robiłem na przerwaniach od uartu. Jeżeli gps wysyła dane w NAMEA to jak przyjdzie przerwanie to sprawdzamy czy odebrał znak '$' jeżeli tak to mamy początek ramki, potem sprawdzamy co to za ramka. Jeżeli nas interesuje ta ramka, to ładujemy ją do jakiegoś bufora i potem dopiero obrabiamy.
|
|
| Back to top |
|
 |
kekerott Poziom 3

Joined: 11 Oct 2003 Posts: 6
|
#3
20 Nov 2008 07:51 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
GPS wysyła dane w formacie NMEA, problem w tym że kompletnie nic nie pojawia się na wejściu (czy to inkey czy waitkey). Najdziwniejsze że moduł gps podłączony przez maxa232 do komputera działa bezproblemowo a podłączony pod końcówkę RxD procesora nie. Procesor bez problemu na prędkości 9600 komunikuje się przez rs'a z pecetem.
wstępny kod do wyciągnięcia współrzędnych z ramki GPRMC napisałem następujący:
| Code: |
$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600
Config Serialin = Buffered , Size = 32
Enable Interrupts
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Dim A As Byte
Dim I As Byte
Dim Txt As String * 32
Cls
Do
If Ischarwaiting() = 1 Then
A = Inkey()
If A = 36 Then
' -- sprawdzenie jakie dane idą ---
Txt = ""
For I = 1 To 5
Gosub Czekajznak
A = Inkey()
Txt = Txt + Chr(a)
Next I
' -- wczytanie godziny
If Txt = "GPRMC" Then
Cls
Txt = ""
Gosub Opuscznak
For I = 1 To 6
Gosub Czekajznak
A = Inkey()
Txt = Txt + Chr(a)
Next I
'-- Latitude
Txt = ""
Gosub Doprzecinka
Gosub Doprzecinka
Do
Gosub Czekajznak
A = Inkey()
If A <> 44 Then
Txt = Txt + Chr(a)
End If
Loop Until A = 44
Lcd Mid(txt , 1 , 2) ; " " ; Mid(txt , 3)
Gosub Czekajznak
A = Inkey()
Lcd Chr(a) ' N/S
Lowerline
'-- Longitude
Txt = ""
Gosub Doprzecinka
Do
Gosub Czekajznak
A = Inkey()
If A <> 44 Then
Txt = Txt + Chr(a)
End If
Loop Until A = 44
If Mid(txt , 1 , 1) = "0" Then
Lcd Mid(txt , 2 , 2) ; " " ; Mid(txt , 4)
Else
Lcd Mid(txt , 1 , 2) ; " " ; Mid(txt , 3)
End If
Gosub Czekajznak
A = Inkey()
Lcd Chr(a) ' E/W
End If
End If
End If
Loop
End
Czekajznak:
Do
Loop Until Ischarwaiting() = 1
Return
Opuscznak:
Gosub Czekajznak:
A = Inkey()
Return
Doprzecinka:
Do
Gosub Czekajznak:
A = Inkey()
Loop Until A = 44
Return
|
Działa to świetnie przy emulacji wysyłanych danych przez komputer (prog w delphi/c wysyła na COM1 czyste dane NMEA).
Moje pytanie czy trzeba wstawić coś pomiędzy pin TxD modułu a RxD procesora, czy można połączyć wprost?
|
|
| Back to top |
|
 |
zumek Poziom 23

Joined: 08 Oct 2003 Posts: 3122 Location: Włocławek
|
#4
20 Nov 2008 09:00 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
| kekerott wrote: |
| ... Najdziwniejsze że moduł gps podłączony przez maxa232 do komputera działa bezproblemowo a podłączony pod końcówkę RxD procesora nie. Procesor bez problemu na prędkości 9600 komunikuje się przez rs'a z pecetem... |
Wszystko fajnie, tylko brakuje schematu. Pokaż lub opisz DOKŁADNIE, jak masz połączony odbiornik GPS z uC i jak to jest zasilane, bo często i gęsto, diabeł tkwi w szczegółach :-P
|
|
| Back to top |
|
 |
kekerott Poziom 3

Joined: 11 Oct 2003 Posts: 6
|
#5
20 Nov 2008 09:01 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
jak się okazuje powodem problemu był niski poziom stanu wysokiego jaki wychodzi z modułu gps: stan wysoki jest między 2.1 a 2.8 V:
Przepuściłem sygnał z modułu przez maxa232 a po drugiej stronie (wyjściowej) zwarłem rx z tx, dzięki czemu tx z modułu idzie przez max232, z powrotem do max232 i do RxD procesora. wydaje się działać :)
jest może jakiś prostszy sposób konwersji poziomów ttl:
0 - 0.8 => 0V
2.1 - 2.8 V => 5V
wzmacniacz, jakaś dioda zennera?
Póki co działa działa po przejściu dwukrotnie przez maxa232, ale interesuje mnie bardziej eleganckie rozwiązanie.
edit:
@zumek: pisałem tego posta chyba równolegle z Tobą. Połączenie przez maxa jest standardowe do bólu - tu chyba nic nie można sknocić :) Jeżeli jednak potrzeba schematu aby rozwiązać powyższy problem (dylemat bardziej, czy zostawiać tak jak jest przez zwartego maxa, czy szukac innego rozwiązania) to upnę go wykładach.
|
|
| Back to top |
|
 |
remzibi Poziom 18

Joined: 25 Jul 2002 Posts: 524 Location: Gdynia-Rumia
|
#6
20 Nov 2008 14:31 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
| kekerott wrote: |
jak się okazuje powodem problemu był niski poziom stanu wysokiego jaki wychodzi z modułu gps: stan wysoki jest między 2.1 a 2.8 V:
|
Cos chyba jednak zle robisz , jestem o tym przekonany . Te poziomy sa bardzo dobre do podlaczenia z mega .
Tu
http://www.elektroda.pl/rtvforum/topic1135809.html
jest projekt w ktorym z powodzeniem wykorzystalem ten modul (zreszta tez inne tego producenta) i dziala z atmega16 wysmienicie bez zadnych ale to zadnych niespodzianek czy dodatkowych kombinacji - wszystko ruszylo z kopa . Poprostu podpinasz i smiga - jesli tak nie jest to masz cos skopane - ale bez dokladniejszych informacji to raczej nie wiadomo co .
|
|
| Back to top |
|
 |
kekerott Poziom 3

Joined: 11 Oct 2003 Posts: 6
|
#7
20 Nov 2008 23:48 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
| remzibi wrote: |
| [...]Te poziomy sa bardzo dobre do podlaczenia z mega [...] |
muszę przyznać całkowitą rację. Początkowo moduł dołączyłem do płytki ewaluacyjnej z atmegą16, zapewne znajduje się coś na tej płytce co osłabia sygnał wchodzący na PD0 - gdyż stan wysoki (2.8) podwyższony przez maxa działał, zwykły nie.
Połączyłem wprost moduł z atmegą na dedykowanej płytce i wszystko tak jak pisze @remzibi 'ruszyło z kopa'.
|
|
| Back to top |
|
 |
remzibi Poziom 18

Joined: 25 Jul 2002 Posts: 524 Location: Gdynia-Rumia
|
#8
21 Nov 2008 19:51 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
| kekerott wrote: |
| remzibi wrote: |
| [...]Te poziomy sa bardzo dobre do podlaczenia z mega [...] |
muszę przyznać całkowitą rację. Początkowo moduł dołączyłem do płytki ewaluacyjnej z atmegą16, zapewne znajduje się coś na tej płytce co osłabia sygnał wchodzący na PD0 - gdyż stan wysoki (2.8) podwyższony przez maxa działał, zwykły nie.
Połączyłem wprost moduł z atmegą na dedykowanej płytce i wszystko tak jak pisze @remzibi 'ruszyło z kopa'. |
No to teraz masz ogromne pole do popisu - moduly swietnie pracuja na wiekszych czestotliwosciach - update 5Hz , ten akurat swietnie sie konfiguruje na np. predkosc transmisji 34800 (osobiscie testowalem) i wyzej , jesli dodamy do tego prosta konfiguracje naszego modulu GPS wlaczjac go do wspolracy z systemami poprawek pozycjonowania dla systemow WAAS i SBAS dla Europy nadawane przez satelity gostacjonarne EGNOS . WAAS jako taki ma byc dokladniejszy od certyfikowanego RTCM . Skutki tych poprawek beda lepiej widoczne w strefach nadmorskich i lotniskowych (do 100mil) ale zapewne beda dzialac znakomicie na calym obszarze europejskim jako juz dosc mocno robudowany system .
A wszystko dzieki komendom chipsetu MTK - to te $PMTKxxxxxxx :) .
To ostatecznie mamy naprawde super malutki , leciutki i dokladny modul GPS idealny do wszelkich zastosowan .
Proponuje tez jakos "sciesnic" ten NMEA parsing bo cosik wyszedl jakby troszku ogromniasty :) , djsway dobrze podpowiada .
Zycze powodzenia w projekcie :) .
|
|
| Back to top |
|
 |
Google

|
#
21 Nov 2008 19:51 |
|
|
|
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#9
23 Dec 2010 17:58 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Witam, odkopię temat, ponieważ mam dość podobny problem, i podobny sprzęt.
Schemat:
http://img10.imageshack.us/img10/152/schematri.jpg
Połączenie z LCD jest ok, tekst się bezproblemowo wyświetla.
Po uruchomieniu programu na LCD wyskakuje napis "Start", a po chwili "Znalazłem początek ramki". I wtedy pojawia się ciąg pięciu bajtów w kodzie hex - jednak nigdy pierwszym bajtem nie jest 47 odpowiadające literze G w Ascii. Zazwyczaj początkowy bajt ma wartość 98 lub D8, choć zdarzają się różne.
Próbowałem podłączyć ATmege bez udziału programatora, efekt ten sam.
Po zmianie wyszukiwanego znaku z "$" na "G" znajduje ten znak, jednak trzeba na to czekać kilka sekund.
GPS-http://www.maritex.com.pl/pl/shop/productInfo/ggid/10/pid/17682/page/1/backurl/shop/special%3Fid%3D10%26page%3D1
9600b/8bit/bez parzystości/1bit stopu.
Co dziwne, w DS jest napisane typowe napięcie zasilania - 3.3V. Jednak gdy nastawiam je potencjometrem, układ poprawnie działa dopiero przy 4,7V...
| Code: |
'Odebranie jakiejkolwiek informacji z modułu GPS
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Config Lcd = 20 * 4 ' Wyswietlacz 20x4
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cls
Dim Dana As Byte
Dim Licznik As Byte
Dim Tekst As String * 32
Dim Warunek As Bit
Warunek = 0
Lcd "Start"
Do
If Ischarwaiting() = 1 Then
Dana = Inkey()
If Dana = 36 Then 'Obrebrano znak $
Tekst = ""
For Licznik = 1 To 5
Do
Loop Until Ischarwaiting() = 1 ' czeka na następny znak
Dana = Inkey()
Tekst = Tekst + Hex(dana)
Next Licznik
Lowerline
Lcd "Znalazlem poczatek ramki"
Lcd Tekst
If Tekst = "GPGGA" Then
Thirdline
Lcd "Znalazl te Ramke!"
Warunek = 1
End If
End If
End If
Loop Until Warunek = 1
Do
Loop
End 'end program
|
Czy niemożność znalezienia ramki może być powiązana ze złym połączeniem (Gdy odłącze programator od USB układ pracuje, więc nie sądzę by były różne potencjały)?
Dodam ze gps nie łapie fix'a, jednak z tego co wiem mimo to powinien wysyłać ramki.
Jeśli ktoś ma jakąś rade to byłbym za nią wdzięczny.
|
|
| Back to top |
|
 |
Fredy Poziom 18

Joined: 05 Oct 2003 Posts: 513
|
#10
24 Dec 2010 14:35 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Spróbuj tak:
| Code: |
'Odebranie jakiejkolwiek informacji z modułu GPS
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Config Lcd = 20 * 4 ' Wyswietlacz 20x4
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cls
Dim Dana As string * 1
Dim Licznik As Byte
Dim Tekst As String * 32
Dim Warunek As Bit
Warunek = 0
Lcd "Start"
Do
If Ischarwaiting() = 1 Then
Dana = Inkey()
If Dana = "$" Then 'Obrebrano znak $
Tekst = ""
For Licznik = 1 To 5
Do
Loop Until Ischarwaiting() = 1 ' czeka na następny znak
Dana = Inkey()
Tekst = Tekst + dana
Next Licznik
Lowerline
Lcd "Znalazlem poczatek ramki"
Lcd Tekst
If Tekst = "GPGGA" Then
Thirdline
Lcd "Znalazl te Ramke!"
Warunek = 1
End If
End If
End If
Loop Until Warunek = 1
Do
Loop
End 'end program
|
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#11
24 Dec 2010 14:44 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
rozumiem że zmiany dokonałeś tutaj
| Code: |
Loop Until Ischarwaiting() = 1 ' czeka na następny znak
Dana = Inkey()
Tekst = Tekst + dana |
Znajduje więc ramke jak poprzednio, a potem wywala krzaki z ASCII, rzadko jakąś litere z alfabetu.
|
|
| Back to top |
|
 |
Fredy Poziom 18

Joined: 05 Oct 2003 Posts: 513
|
#12
24 Dec 2010 16:27 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Najlepiej zrób buforowanie UARTA - wtedy złapiesz wszystko i nie będziesz musiał się tak "śpieszyć".
|
|
| Back to top |
|
 |
Google

|
#
24 Dec 2010 16:27 |
|
|
|
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#13
24 Dec 2010 16:38 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
czyli wypisać XX bajtów do tej zmiennej tekst i na końcu wyświetlić je wszystkie?
Choć skoro po "$" nie ma "G" to nie wiem w czym to miałoby pomóc.. Ale sprawdzę.
|
|
| Back to top |
|
 |
Fredy Poziom 18

Joined: 05 Oct 2003 Posts: 513
|
#14
24 Dec 2010 19:42 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
A spróbuj tak:
| Code: |
Dim X As Byte
Dim Znak As String * 1
Dim Ramka As String * 20
Do
Ramka = ""
Gosub Czytaj_znak
If Znak = "G" Then
For X = 1 To 20
Ramka = Ramka + Znak
Gosub Czytaj_znak
Next X
End If
Print Ramka
Loop
Czytaj_znak:
Znak = ""
Do
Znak = Inkey()
Loop Until Asc(znak) <> 0
Return
|
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#15
25 Dec 2010 17:09 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
dodałem do tego kodu obsługę LCd, zmieniłem print na LCD.
Bardzo długo - z 2 min - nic się nie działo, następnie wyskoczyło coś takiego:
http://img145.imageshack.us/f/image071f.jpg/
Wrzucam foto, może zrobiłem jakąś inną głuptę i komuś nasunie się rozwiązanie.
|
|
| Back to top |
|
 |
Fredy Poziom 18

Joined: 05 Oct 2003 Posts: 513
|
#16
25 Dec 2010 18:32 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
a ty dałeś negator pomiedzy wyjście gpsa a wejściem kontrolera? Bo jak nie to napewno dostaniesz taka chińczszczyznę. Powienien być tam tranzystr albo jakiś max232.
Proszę poprawić pisownię.
Robak
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#17
25 Dec 2010 18:34 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
nie, nie dałem. Czyli musi być coś co podbije sygnał?
Myślałem że max wymagany byłby tylko w kontakcie z pc.
|
|
| Back to top |
|
 |
Fredy Poziom 18

Joined: 05 Oct 2003 Posts: 513
|
#18
25 Dec 2010 18:49 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
tu nie chodzi tylko o poziom sugnału (chociaz też zwróc na to uwagę). Tylko chodzi o to że gps daje sygnał zanegowany, potrzebny jest jakis negator i dopiero wtedy jest sygnał ok.
Możesz spróbować w bascomie zastosować programowy UART , i ustawić go w opcji inwerted to wtedy moze uciekniesz od koniecznośći negacji.
Z tym że sprzętowy UART napewno jest lepszy więc chyba lepiej dać jeden tranzystor i po sprawie.
Proszę poprawić pisownię.
Robak
|
|
| Back to top |
|
 |
Jaca Poziom 20

Joined: 21 Jun 2002 Posts: 831 Location: Ostróda
|
#19
26 Dec 2010 12:59 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
1. Odłącz całkowicie 3D-FIX modułu i zostaw pin wolny (nie używaj go);
2. Podłącz VBACKUP do napięcia 2V-4.3V np 5V przez dwie diody prostownicze lub akumulator Li-Ion 3.7V bezpośrednio do tego pinu.
Po tych czynnościach zacznie działać prawidłowo.
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#20
26 Dec 2010 17:07 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
ale negator nadal potrzebny?
3,7V mogę uzyskać też z tego zasilacza 5V przez potencjometr?
|
|
| Back to top |
|
 |
Jaca Poziom 20

Joined: 21 Jun 2002 Posts: 831 Location: Ostróda
|
#21
26 Dec 2010 22:19 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Nie słuchaj innych, żaden negator nie jest potrzebny.
|
|
| Back to top |
|
 |
Fredy Poziom 18

Joined: 05 Oct 2003 Posts: 513
|
#22
27 Dec 2010 00:38 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
| Jaca wrote: |
| Nie słuchaj innych, żaden negator nie jest potrzebny. |
Jesteś tego pewien? U góry jest napisane że GPS komunikuje się prawidłowo z komputerem PC przez Maxa , czyli tam stosuje negację.
A niby dlaczego nie jest wymagana ta negacja przy współpracy z prockiem?
Używałem już kilka gpsów z wyjściem RSowym i zawsze musiałem dać tranzystor na wejściu procka aby odwrócić transmisję.
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#23
27 Dec 2010 11:49 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
pewnie dlatego że sam standard RS232 ma odwróconą logike.
jutro sprawdzę proponowane przez kolegę Jaca podłączenie.
Edit.
Niestety pod odpięciu 3D-Fix i podaniu przez potencjometr 2,7V i 4,0V na backup moduł nadal wywala bzdury, jednak teraz pierwszym bajtem po $ jest już więcej kombinacji, 98, B8, 41, 49, 20, D8 itp.
Cd negatora
jeśli dobrzę rozumuję: G reprezentuje w ascii 47h(01000111), więc nawet jeśli to zanegujemy, powinienem otrzymać bajt C8(10111000), a taki bajt nigdy nie pojawił się po $...
|
|
| Back to top |
|
 |
Jaca Poziom 20

Joined: 21 Jun 2002 Posts: 831 Location: Ostróda
|
#24
27 Dec 2010 12:37 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Umieść odbiór danych w obsłudze przerwania od URXC.
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#25
27 Dec 2010 13:16 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Zrobiłem to tak:
| Code: |
'Odebranie jakiejkolwiek informacji z modułu GPS
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Enable Interrupts
Enable Urxc
On Urxc Przerwanie_rx
Config Lcd = 20 * 4 ' Wyswietlacz 20x4
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cls
Dim Dana As Byte
Dim Tekst As String * 32
Dim Warunek As Bit
Warunek = 0
Lcd "Start"
Lowerline
Do
If Warunek = 1 Then
Lcd Tekst
End If
Loop
End 'end program
Przerwanie_rx:
Dana = Inkey()
Tekst = Tekst + Hex(dana)
If Dana = 36 Then
Tekst = "xxxx"
Warunek = 1
End If
Return |
http://img27.imageshack.us/gal.php?g=image072tp.jpg
Czyli po znalezieniu "$" wprowadza "xxxx"i wypisuje zawartość pomiędzy kolejnymi "$". Czasem są to trzy bajty, czasem dużo więcej, ale nadal kolejnymi po "$" są np 80689BFF, (często to się potwarza jako zawartość pomiędzy "$", a także jako "nagłówek" zawartości)
Tak jakby ten moduł generował inne ramki, bo jakaś powtarzalność jest, ale w dokumentacji wyraźnie napisano o NMEA...
Zauważyłem też że atmega zaczęła się resetować, dobrze myślę że to sprawka watchdoga?
|
|
| Back to top |
|
 |
Google

|
#
27 Dec 2010 13:16 |
|
|
|
|
|
| Back to top |
|
 |
Jaca Poziom 20

Joined: 21 Jun 2002 Posts: 831 Location: Ostróda
|
#26
27 Dec 2010 13:26 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
| Code: |
$hwstack = 64
$swstack = 64
$framesize = 128
Dim Dane As String * 1
Dim Parametr As Byte
Dim Bufor As String * 16
Dim Naglowek As String * 16
Dim Latitude As String * 16
Dim Longitude As String * 16
Dim Flaga As Byte
[...]
Urxc_irq:
Dane = Chr(udr)
Select Case Dane
Case "{010}" :
Case "{013}" :
Case "$" :
Parametr = 0
Bufor = ""
Case "," :
If Parametr = 0 Then
Naglowek = Bufor
Else
Select Case Naglowek
Case "GPRMC" :
Select Case Parametr
Case 3 :
Flaga = 0
Latitude = Bufor
Case 5 :
Longitude = Bufor
Flaga = 1
End Select
End Select
End If
Incr Parametr
Bufor = ""
Case Else :
Bufor = Bufor + Dane
End Select
Return
|
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#27
27 Dec 2010 14:11 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Umieściłem to w ten sposób
| Code: |
'Odebranie jakiejkolwiek informacji z modułu GPS
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 128
Enable Interrupts
Enable Urxc
On Urxc Przerwanie_rx
Config Lcd = 20 * 4 ' Wyswietlacz 20x4
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1 , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5
Cls
Dim Dana As String * 32
Dim Tekst As String * 32
Dim Naglowek As String * 32
Dim Bufor As String * 32
Dim Latitude As String * 32
Dim Longitude As String * 32
Dim Parametr As Byte
Dim Warunek As Bit
Dim Flaga As Bit
Warunek = 0
Lcd "Start"
Lowerline
Do
Lowerline
Lcd "Latitude "
Lcd Latitude
Thirdline
Lcd "Longitude "
Lcd Longitude
Loop
End 'end program
Przerwanie_rx:
Dana = Chr(udr)
Select Case Dana
Case "{010}" :
Case "{013}" :
Case "$" :
Parametr = 0
Bufor = ""
Case "," :
If Parametr = 0 Then
Naglowek = Bufor
Else
Select Case Naglowek
Case "GPRMC" :
Select Case Parametr
Case 3 :
Flaga = 0
Latitude = Bufor
Case 5 :
Longitude = Bufor
Flaga = 1
End Select
End Select
End If
Incr Parametr
Bufor = ""
Case Else :
Bufor = Bufor + Dana
End Select
Return |
I po słowach Longitude i Latitude wywala krzaki
http://img534.imageshack.us/img534/6159/image076xn.jpg
może mieć to jakiś związek z posiadaniem przez moduł chipsetu MTK? Choć ramka też nie zaczyna się u mnie od $PMTK...
napięcie na pinie RX atmegi waha się między 2 a 3V gdy sprawdzam woltomierzem.
|
|
| Back to top |
|
 |
Jaca Poziom 20

Joined: 21 Jun 2002 Posts: 831 Location: Ostróda
|
#28
27 Dec 2010 14:21 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
1. W swoim kodzie wyżej dodałem deklaracje zmiennych - przepisz je;
2. Wyświetlaj odebrane dane gdy Flaga = 1;
3. Sprawdź taktowanie uC !!! Zrób miganie diodą i sprawdź, czy czasy włączenia i wyłączenia będą prawidłowe;
4. Napięcie na RX jest wartością średnią (zmiany poziomów podczas nadawania danych).
|
|
| Back to top |
|
 |
ariello87 Poziom 7

Joined: 13 Apr 2008 Posts: 24
|
#29
27 Dec 2010 14:27 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
ad 1. przepisałem
ad 2
| Code: |
Lcd "Start"
Lowerline
Do
If Flaga = 1 Then
Lowerline
Lcd "Latitude "
Lcd Latitude
Thirdline
Lcd "Longitude "
Lcd Longitude
End If
Loop
End |
Wyświetla się wyłącznie napis Start, napisy Longitute i latitude nie pokazują się na lcd. Nie definiowalem wartości Flagi, jednak po chwili powinna się sama ustawić na 0 lub 1, wychodzi więc na to że program nigdy nie wchodzi w pętle w których jest zmiana flagi
ad 3. nie bardzo wiem o co chodzi, mam kwarc 8mhz, poprzednie programy z przerwaniem od int0 chodziły.
ad 4. wiem, w sumie to musi więc oscylować wokół tych wartości.
|
|
| Back to top |
|
 |
Jaca Poziom 20

Joined: 21 Jun 2002 Posts: 831 Location: Ostróda
|
#30
27 Dec 2010 14:39 Re: [Atmega16][Bascom] moduł gps -> uart -> atmega16 |
|
|
|
Co do taktowania to jest ono ściśle powiązane z prędkością transmisji ! W przypadku niezgodności deklaracji $crystal z rzeczywistą częstotliwością taktowania uC, podczas odbierania danych po RS'ie otrzymasz krzaki.
Dlatego zrób program migania diodą co 1s i sprawdź, czy rzeczywiście będzie tak migać.
Znak "$" to pewnie inny, losowy znak wyłapywany z masy krzaków i nie jest on początkiem ramki. :)
|
|
| Back to top |
|
 |