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

AVR + GPS + GSM - pomoc w zorganizowaniu całości.

jareq00 23 Lut 2011 20:07 4494 11
  • #1 9193887
    jareq00
    Poziom 11  
    Witam szanownych użytkowników.
    Chciałbym zrobić układ, który będzie w stanie wysłać SMS z wiadomością, gdzie się znajduje. Przejrzałem już wiele tematów i mam mentlik w głowie.
    Wszystkie programy uC napisane przez innych użytkowników są bardzo skomplikowane, ja chciałbym zacząć od początku, by coś z tego zrozumieć. Mam podstawowe wiadomości o programowaniu w C, i w tym języku chciałbym napisać program. Niech zobrazowaniu mojego zamiaru służy układ kolegi Adama: Lokalizator GPS
    Do rzeczy. Próbuję połączyć ze sobą:
    Moduł GPS - mam GPS Navibe, identyczny, jak w temacie: Wyprowadzanie TxD z GPS Navibe
    GSM - Nokia 3310, pod baterią ma wyprowadzenia: GND, VCC, TxD, RxD
    AVR - tutaj jeszcze nie zdecydowałem, mam na stanie uC AtMega8515, lecz ma on tylko jednego sprzętowego USART'a, potrzebne są dwa, dlatego chyba zdecyduję się na AtMega162 (z software'owym USART'em raczej sobie nie poradzę)

    Na początek podłączenie hardware. W podanym temacie Wyprowadzanie TxD z GPS Navibe kolega neguje sygnał. Podobno GPS daje zanegowany sygnał, ale pewien nie jestem. Może to ktoś potwierdzić?
    Kolejny problem to napięcia. Najchętniej wszystko zasiliłbym 5V - GPS ma ładowarkę 5V, Nokia również, AVR oczywiście zasilanie 5V.
    Czy dobrze myślę? Może mnie ktoś naprowadzić? Czy coś jeszcze muszę wiedzieć przed wstępnym podłączeniem układów?
  • #2 9196517
    LordBlick
    VIP Zasłużony dla elektroda
    UART-a można multipleksować, przecież do wysyłania SMS to tylko przez moment potrzebna jest komunikacja..
  • #4 9199161
    jareq00
    Poziom 11  
    Ok. W takim razie znajdę inną komórkę, mam jeszcze SGH-600, ale pewnie odpada, poszukam czegoś innego. Jak będzie z tymi poziomami napięć w GPS? I z tym multipleksowaniem może być problem, od programowej strony, nie znam się na tym za dobrze.
  • #7 9201121
    Lucky Tom
    Poziom 10  
    Może zobacz na mikromania.pl tam mają moduły GPS i GSM. Oba moduły mają dostosowanie do poziomo 5V więc możesz podłączyć do Atmegi. Atmege zastosuj z dwoma uartami, odpadnie ci pisanie softwarowego uarta lub przełączanie przez multiplekser. Czy to będzie 162 czy 128 to już nie ma znaczenia (no chyba że braknie miejsca we flashu to może od razu mega128).
  • #8 9205695
    jareq00
    Poziom 11  
    Ok. Kupię uC z 2 UARTAMI. Zasilę wszystko 3,3V. Teraz problem z oprogramowaniem. Od czego zacząć pisanie programu? Mógłby ktoś pomóc w tej kwestii?
  • #9 9206092
    xury
    Specjalista automatyka domowa
    Acha. Widzę, że już sobie wszystko ustaliłeś "tylko" pozostała drobna kwestia napisania oprogramowania no i nie wiesz jak zacząć. Ano zacząć trzeba od decyzji w jakim języku. Potem tylko nauczyć się tego języka robiąc zestawy migające diodami, potem obsluga USART itd. Kiedy to zostanie opanowane, szukamy w sieci informacji o komunikacji przez komendy AT i jak parsować dane NMEA. A potem to już tylko czysta przyjemność tworzenia głównego oprogramowania.
  • #10 9207246
    Lucky Tom
    Poziom 10  
    Proponuję winavr jako środowisko do pisania w C i AVRStudio lub AVRDUDE do programowania kontrolera. Pod WINAVR jest sporo przykładów w sieci.
  • #11 9226368
    jareq00
    Poziom 11  
    Język oczywiście C, o czym wspomniałem na początku. Miganie diodami, obsługa wyświetlacza, itp. mam już za sobą. Komendami AT też się już trochę bawiłem w K550i (który niestety padł - układ Vincenne :|). Pytanie, co teraz? Wszystko wydaje mi się niezrozumiałe, gotowych listingów w ogóle nie rozumiem, są za skomplikowane, dlatego proszę o pomoc.
  • #12 9245397
    namlooc
    Poziom 15  
    Totalnie ci to nie wyjdzie jezeli bedziesz myslal ze odrazu zaczniesz pisac kod gotowego lokalizatora gps/gsm. Najpierw musisz opanowac komunikacje usart komp<-->atmega.

    - Sciagnij Realterm (taki lepszy hyperterminal).
    - kup kabel usb<-->com i podlacz tx rx gnd do pd0 i pd1 (pd2 pd3 zalezy jaka masz wersje avr)
    - sciagnij instrukcje do swojego avr i poszukaj opisu USART

    Znajdziesz tam gotowy kod do inicjalizacji:
    #define baud ((F_CPU/(predkosc*16UL))-1)
    #define predkosc 9600
    #define baud2 ((F_CPU/(predkosc2*16UL))-1)
    #define predkosc2 4800
    #define F_CPU 16000000UL

    void usart_init(void)                     //PD2->RXD   PD3->TXD   USART_1 GSM
    {
    UBRR1H = (unsigned char) (baud>>8);  // ustawiamy predkosc transmisji
    UBRR1L = (unsigned char) baud;       
     
    UCSR1B = (1<<RXEN1) | (1<<TXEN1) | (1<<RXCIE1);    // WLANCZA ODBIORNIK I NADAJNIK
    
    UCSR1C = (0<<USBS1) | (3<<UCSZ10); // 8bitow danych, 2 bity stopu, brak kontroli przeplywu
    
    }


    Znajdziesz gotowy kod do odbioru danych:
    sei();// wlaczenie przerwania

    
    volatile char bufor[100];
    volatile int i=0;
    .
    .
    ISR(USART0_RX_vect) //przerweanie odbioru
    {
    bufor[i]=UDR1 
    i++;
    }
    
    itp.

    Kod do wysylania danych:
    void usart_transmit(char data)  // TRANSMISJA ZNAKU DLA PD2->RXD   PD3->TXD  USART_1  GSM
    {
    while (!(UCSR1A & (1<<UDRE1)));// sprawdzamy czy flaga UDRE1 w rejestrze UCSR1A ma wartosc 1, czyli bufor nadawania jest pusty
    UDR1=data;                       //  UCSR1A & (1<<UDRE1)  Maska pozwalajaca nam wykryc 1 we fladze UDRE0   
    }
    
    void wyslij(char *data0)
    {
    int j;
    int x=strlen(data0);
        for(j=0;j<x;j++)
        {
        usart_transmit(data0[j]);
        }
    }



    Pamietaj ze nazwy rejestrow roznia sie w zaleznosci od procesora. Ja podalem ci kod do atmega664p (2x usart). Wszystko masz w dokumentacji ladnie opisane w dziale usart..z gotowym kodem!


    Staraj sie wysylac cos recznie z kompa..i w atmedze odpowiednio reagowac na dane slowa. Opanuj dokladnie cala transmisje..pomysl jak odbierac znaki zeby ich nie gubic (zapelniania bufora w przerwaniu).

    Pamietaj ze modem GSM wymaga nie tyle wysylania do niego komend ale analizowania odpowiedzi. Czynniki utrudniajace ta analize to np. nieprzewidziane zdarzenia w postaci np. braku zasiegu, ring, zwiekszenia czasu odpowiedzi na komende to 1minuty..itd. Tylko stworzenie wmiare niezawodnych procedur parsujacych pozwoli ci na bezbledne rozpoznawanie odpowiedzi modemu.
REKLAMA