FAQ | Points | Add... | Recent posts | Search | Register | Log in


[Atmega16][Bascom] moduł gps -> uart -> atmega16


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [Atmega16][Bascom] moduł gps -> uart -> atmega16
Author
Message
kekerott
Poziom 3
Poziom 3


Joined: 11 Oct 2003
Posts: 6

Post#1 Post from the author of the topic 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:
[Atmega16][Bascom] moduł gps -> uart -> atmega16 [Atmega16][Bascom] moduł gps -> uart -> atmega16
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

Google Adsense


Post# Post from the author of the topic 19 Nov 2008 23:23   





Back to top
   
djsway
Poziom 14
Poziom 14


Joined: 14 Oct 2005
Posts: 174
Location: Kleszczowa

Post#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
Poziom 3


Joined: 11 Oct 2003
Posts: 6

Post#3 Post from the author of the topic 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
Poziom 23


Joined: 08 Oct 2003
Posts: 3122
Location: Włocławek

Post#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
Poziom 3


Joined: 11 Oct 2003
Posts: 6

Post#5 Post from the author of the topic 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:
[Atmega16][Bascom] moduł gps -> uart -> atmega16

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
Poziom 18


Joined: 25 Jul 2002
Posts: 524
Location: Gdynia-Rumia

Post#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
Poziom 3


Joined: 11 Oct 2003
Posts: 6

Post#7 Post from the author of the topic 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
Poziom 18


Joined: 25 Jul 2002
Posts: 524
Location: Gdynia-Rumia

Post#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

Google Adsense


Post# 21 Nov 2008 19:51   





Back to top
   
ariello87
Poziom 7
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 18


Joined: 05 Oct 2003
Posts: 513

Post#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
Code:

Back to top
   
ariello87
Poziom 7
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 18


Joined: 05 Oct 2003
Posts: 513

Post#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

Google Adsense


Post# 24 Dec 2010 16:27   





Back to top
   
ariello87
Poziom 7
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 18


Joined: 05 Oct 2003
Posts: 513

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 18


Joined: 05 Oct 2003
Posts: 513

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 18


Joined: 05 Oct 2003
Posts: 513

Post#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
Poziom 20


Joined: 21 Jun 2002
Posts: 831
Location: Ostróda

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 20


Joined: 21 Jun 2002
Posts: 831
Location: Ostróda

Post#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
Poziom 18


Joined: 05 Oct 2003
Posts: 513

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 20


Joined: 21 Jun 2002
Posts: 831
Location: Ostróda

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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

Google Adsense


Post# 27 Dec 2010 13:16   





Back to top
   
Jaca
Poziom 20
Poziom 20


Joined: 21 Jun 2002
Posts: 831
Location: Ostróda

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 20


Joined: 21 Jun 2002
Posts: 831
Location: Ostróda

Post#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
Poziom 7


Joined: 13 Apr 2008
Posts: 24

Post#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
Poziom 20


Joined: 21 Jun 2002
Posts: 831
Location: Ostróda

Post#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
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [Atmega16][Bascom] moduł gps -> uart -> atmega16
Page 1 of 2 Go to page 1, 2  Next
Similar topics
[ATmega16][C] Moduł GPS nie przesyła ramek NMEA (7)
atmega16 (ATMEGA16-16AU SMD) bascom - problem z portemC (3)
ATMEGA16 BASCOM UART pomocy Bascom 1.11.7.4 (20)
[ATMEGA16+ATMEGA8] [BASCOM] problem z komunikacją UART (5)
[atmega16][bascom] Komunikacja UART (11)
ATmega16 + Bascom + uart = problem (5)
[atmega16][bascom] atmega16 + siemens s55 + uart (4)
Problem z UART atmega16 (1)
UART -> USB na atmega16 (1)
[ATmega16][C] UART i przesłanie 0x00 (11)

Page generation time: 0.294 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed