Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[atmega][sim508] USART dziala z PC, nie dziala z GPS

17 Aug 2010 23:47 2040 2
  • Level 15  
    Witam!

    Problem polega na tym iz atmega komunikuje sie z PC, natomiast nie komunikuje sie z GPS.Pomimo prawidlowych predkosci oraz identycznego podlaczenia.

    Posiadam:
    - atmega644p
    - evb sim548 (gotowa plytka dostarczona przez producenta simcom, zasilona, z wyjsciem rs232 poprzedzonym jakims klonem max232)
    - plytka z max232n

    Pewniki są takie:
    # PC odbiera dane z GPS, mozna bez problemu z NMEA odczytac recznie pozycje oraz zapisac sobie przykladowo 2 minuty transmisji do pliku

    # Atmega + max232n bez problemu komunikuja sie z PC w obydwie strony. Rowniez symulacja polegajaca na wysylaniu do atmegi wczytywanych z pliku przykladowych ramek NMEA dziala.

    # PC komunikuja sie z GPS na predkosci: 4800,8bit, 1bity stop, no parity i odbiera dane bez problemu

    Program jest nastepujacy:
    Code:
    --------------------&-------------------------
    
    #define baud ((F_CPU/(predkosc*16UL))-1) // obliczanie baud ze wzoru
    #define predkosc 4800             // baud: 4800
    #define F_CPU 16000000UL
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <stdio.h>
    #include <util/delay.h>
    #include <string.h>
    #include <stdlib.h>
    #include "lcd.h"

    void usart_init()                     
    {
    UBRR0H = (unsigned char) (baud>>8);  // ustawiamy predkosc transmisji
    UBRR0L = (unsigned char) baud;       //
    UCSR0B = (1<<RXEN0) | (1<<TXEN0);    // WLANCZA ODBIORNIK I NADAJNIK
    UCSR0C = (0<<USBS0) | (3<<UCSZ00); // 8bitow danych, 1 bity stopu, no parity
    }

    unsigned char usart_recive(void)
    {
    while(!(UCSR0A & (1<<RXC0)));

    return UDR0;
    }

    int main (void)
    {
    char wynik[16]="\0";
       while(1)
       {
       usart_init();
          for(i=0; i<15; i++) // odczytujemy 15 znaków z UART
          {
          wynik[i]=usart_recive();
          }
       LCD_init();
          for(k=0;k<15;k++) // wyswietla odczytane znaki na LCD, zebym wiedzial ze cos odebral
          {
          LCD_xy(k,0);
          LCD_putchar(wynik[k]);
          }
       delayms(1000);
             
    }
    }
    ---------------------------&-------------------------------
  • Level 13  
    Może to problem z połączeniem. Nie napisałeś jak łączysz te układy. Jeśli kit z evb sim548 ma gotowe dwa porty RS (DB9 żeński i męski) no to do męskiego podpinasz PC do żeńskiego Atmega (przez max232). Jeśli masz jakieś uniwersalne wtyki/przejściówki, to między gps a atmega trzeba zamienić piny RX i TX (2 i 3 w DB9).
  • Level 15  
    stosuje polaczenie null modem..ze wszystkimi mozliwosciami Handshake albo i bez niego

    poradzilem sobie z problemem wpinajac sie bezposrednio do sim548c, pominelem klona max232
pcbway logo