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


[Atmega32][Bascom] UART sprzętowy a programowy


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [Atmega32][Bascom] UART sprzętowy a programowy
Author
Message
Elektronik_Kraków
Poziom 10
Poziom 10


Joined: 04 Mar 2011
Posts: 52
Location: Kraków

Post#1 Post from the author of the topic 30 May 2011 22:34   

[Atmega32][Bascom] UART sprzętowy a programowy


Witam
Nie za bardzo wychodzi mi wykorzystanie z dwóch portów UART.
UART sprzętowy odbiera ramki z modułu GPS ( Tx modułu do Rx AtMega32 ) i to działa.
Działa do momentu gdy włączę UART sprzętowy ( tylko Rx na jednym z portów Atmega do Tx portu Com w komputerze - korzystam z przejściówki, ale to chyba nie problem ), wtedy informacje na LCD nie są aktualizowane do momentu naciśnięcia Enter'a ( każdorazowe naciśnięcie Enter, nawet bez żadnych znaków odświeża LCD ). Natomiast nie wykonuje tego co było w założeniu.

Umieszczam tylko istotną część kodu, pominąłem biblioteki do zapisu SD, to działa poprawnie.
Code:

$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600                                                ' predkość transmisji
$hwstack = 128                                              ' rozmiar stosu sprzętowego
$swstack = 128                                              ' rozmiar stosu programowego
$framesize = 128                                            ' rozmiar ramki

Open "comd.7:9600,8,n,1" For Input As #2

Dim Rs1 As String * 54
Dim Gps1 As Byte
Dim Usart2 As String * 12
Dim Usart2_dane As Byte

A1 = "$GPGGA"
A2 = "$GPGSA"
A3 = "$GPRMC"
A4 = "$GPGSV"
A5 = "data"

Do
    Gps1 = Inkey()
    If Gps1 = 13 Then Exit Do                               ' jeśli koniec linii
    Rs1 = Rs1 + Chr(gps1)                                   ' utwórz ciąg
Loop

Do
    Usart2_dane = Inkey(#2)
    If Usart2_dane = 13 Then Exit Do                        ' jeśli koniec linii
    Usart2 = Usart2 + Chr(usart2_dane)                      ' utwórz ciąg
Loop

Ramka = Instr(rs1 , A1)                                     ' szukaj w zmiennej Rs ciągu A1
Ramka1 = Mid(rs1 , Ramka , 6)                               ' zwraca fragment tekstu ze zmiennej Rs

Ramka8 = Instr(usart2 , A5)                                 ' szukaj w zmiennej Rs ciągu A5
Ramka9 = Mid(usart2 , Ramka8 , 6)                           ' zwraca fragment tekstu ze zmiennej Rs

If Ramka5 = "$GPRMC" Then                                   ' jesli zmienna Ramka1 =  "$GPRMC" wtedy
'*****************************  obliczanie długości geograficznej
La1 = Mid(rs3 , 18 , 2)                                     ' zwróć wartość 2 kolejnych pól licząc od znaku 18-go z ciągu Rs
La2 = Mid(rs3 , 20 , 2)
La3 = Mid(rs3 , 23 , 3)
Lak = Mid(rs3 , 29 , 1)
'*****************************  obliczanie szerokości geograficznej
Lo1 = Mid(rs3 , 32 , 2)
Lo2 = Mid(rs3 , 34 , 2)
Lo3 = Mid(rs3 , 37 , 3)
Lok = Mid(rs3 , 43 , 1)
'*****************************  obliczanie prędkości
Speed1 = Mid(rs3 , 45 , 3 )                                 'wartość 3 kolejnych pól licząc od znaku 45
Speed2 = Instr(speed1 , Znaczek )                           'określa numer miejsca położenia ","
Speed3 = Mid(speed1 , 1 , Speed2)
Speed4 = Val(speed3)

Speed5 = Speed4 * 1.852                                     ' prędkość jako string do wyświetlania

Speed55 = Str(speed5)                                       ' prędkość jako string dla zapisu na Sd

N_sig1 = Mid(rs3 , 10 , 1)                                  'wykrywa literę V, co oznacza brak ramki

End If

'***************************** ustawianie daty
If Ramka8 = "data" Then                                     ' jesli zmienna Ramka1 =  "$GPGGA" wtedy
 Day1 = Mid(usart2 , 5 , 2 )
 Day = Val(day1)
 Month1 = Mid(usart2 , 7 , 2 )
 Month = Val(month1)
 Call Settime

End If
Waitms 199
Rs1 = ""
Usart2 = ""

'***********************  Obsługa zapisu na SD

Sub Write_to_sd()
Local Errorcode As Byte                                     ''()
     Gbdriveerror = Driveinit()
    If Gbdriveerror = 0 Then
      Errorcode = Initfilesystem(1)
      If Errorcode <> 0 Then
         Blad_sd = 1
      Else

         Open "gps.txt" For Append As #3                    'otwórz plik pomiar.txt aby dopisać dane
         Write #3 , Data_czas , Gps_data , Speed55 , Sd     'zapisz dane: data, czas , odczyt temperatury
         Flush #3                                           'zapisz bufor pliku na karcie SD
         Close #3                                           'zamknij kanał transmisji sprzętowego urządzenia
         Blad_sd = 0                                        'ustaw zmienna na 0
      End If
    Else
      Blad_sd = 1
   End If

End Sub


Może jakieś sugestie ?
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 30 May 2011 22:34   





Back to top
   
Macias86
Poziom 21
Poziom 21


Joined: 06 Dec 2003
Posts: 1369
Location: Gdynia

Post#2 30 May 2011 22:45   

Re: [Atmega32][Bascom] UART sprzętowy a programowy


Elektronik_Kraków wrote:

UART sprzętowy odbiera ramki z modułu GPS ( Tx modułu do Rx AtMega32 ) i to działa.
Działa do momentu gdy włączę UART sprzętowy



?
Back to top
   
Google

Google Adsense


Post# 30 May 2011 22:45   





Back to top
   
Elektronik_Kraków
Poziom 10
Poziom 10


Joined: 04 Mar 2011
Posts: 52
Location: Kraków

Post#3 Post from the author of the topic 30 May 2011 22:57   

Re: [Atmega32][Bascom] UART sprzętowy a programowy


Działa w wersji programu bez:
Code:

Open "comd.7:9600,8,n,1" For Input As #2

czyli co 1 sekundę aktualizuje pozycje na LCD i jest OK

Dołożenie drugiego ( programowego ) portu USART:
Code:

Open "comd.7:9600,8,n,1" For Input As #2

powoduje, że LCD nic nie wyświetla, naciśnięcie Enter powoduje aktualizację wyświetlania na LCD, jeśli naciskam enter co 1 sekundę, to dane na LCD się zmieniają.
Celem włączenie UART programowy ma być możliwość konfiguracji np. daty i czasu przez port RS232 z komputera ( przyszłościowo jakiś moduł GSM ).

Pierwszy raz używam ( raczej próbuję użyć ) UART sprzętowy. Nie wiem, czy nie zrobiłem sobie zamieszania przez te kanały do zapisu na SD.

-----------------------------------------
Tzn. już wiem, że "oryginalny" UART programowy , czeka w pętli na kolejne bity transmisji i w tym czasie proc jest uziemiony, stąd te przerwy w odświeżaniu LCD
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 30 May 2011 22:57   





Back to top
   
Macias86
Poziom 21
Poziom 21


Joined: 06 Dec 2003
Posts: 1369
Location: Gdynia

Post#4 31 May 2011 10:00   

Re: [Atmega32][Bascom] UART sprzętowy a programowy


Pomyśl o procku z 2 uartami sprzętowymi. Jak będziesz chciał budowac lokalizator (gps+gsm) będzie o wiele łatwiej (polecam do tego PIC18F26J50 w ostateczności Atmega128 ;) )
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [Atmega32][Bascom] UART sprzętowy a programowy
Page 1 of 1
Similar topics
[Bascom][Atmega8] Sprzętowy uart - zła wartość zmiennej (6)
[BASCOM][ATmega32] Programowy RESET (5)
atmega 644, bascom, programowy uart, pytanie (2)
Bascom , programowy UART , wisi na pinie (6)
ATMega32 i programowy UART (2)
ATMega32 i uart programowy (4)
Programowy Uart, a może 2 x sprzętowy? Co wybrać? (11)
Programowy i sprzętowy UART w Bascomie (6)
ATMEGA32 BASCOM PROGRAMOWY UART (9)
ATMEGA32 BASCOM UART (5)

Page generation time: 0.152 seconds


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