Witam
Napisałem sobie programik, który w założeniu ma sterować wyjściami i informować o zmianie wejść. Na razie wyjścia. Testując go przez UART PC, podpięty przez przejściówkę na FT232 działa całkiem nieźle. Odbiór z UART w przerwaniu
Niestety po podpięciu do AtMega32, LCD nic nie wyświetla. Moduł jest ustawiony w trybie tekstowym - po wysłaniu z innego numeru, SMS'a na numer modułu, RealTerm pokazuje coś takiego
+CMT: "+48790123456","","11/06/09,09:44:27+08"Test
i jeszcze SMS'y odebrane nie są zapisywane w pamięci modułu.
Może ktoś wypowie się co robię nie tak - jakieś uwagi
Napisałem sobie programik, który w założeniu ma sterować wyjściami i informować o zmianie wejść. Na razie wyjścia. Testując go przez UART PC, podpięty przez przejściówkę na FT232 działa całkiem nieźle. Odbiór z UART w przerwaniu
Niestety po podpięciu do AtMega32, LCD nic nie wyświetla. Moduł jest ustawiony w trybie tekstowym - po wysłaniu z innego numeru, SMS'a na numer modułu, RealTerm pokazuje coś takiego
+CMT: "+48790123456","","11/06/09,09:44:27+08"Test
i jeszcze SMS'y odebrane nie są zapisywane w pamięci modułu.
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 19200 ' predkość transmisji
$hwstack = 50 ' rozmiar stosu sprzętowego
$swstack = 50 ' rozmiar stosu programowego
$framesize = 32 ' rozmiar ramki
Config Debounce = 30
'********************* Konfiguracja wyświetlacza
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.3
Config Lcd = 24 * 2
'********************* Konfiguracja UART
Enable Urxc
On Urxc Uart_gsm
Enable Interrupts
'********************* Konfiguracja Timer1
Config Timer1 = Pwm , Prescale = 256 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect
Enable Timer1
'********************* Konfiguracja wejść i wyjść
Config Portd.7 = Output 'LCD1
Set Portd.7
Config Portd.6 = Output 'LCD2
Set Portd.6
Config Portd.5 = Output 'LCD3
Set Portd.5
Config Porta.0 = Input 'Przycisk W1
Set Porta.0
'********************* Deklaracje zmiennych
Dim Rx As Byte
Dim Ciag_rx As String * 65
Dim Gsm As Byte
Dim Gsm1 As String * 6
Dim Numer1 As String * 12
Dim Tekst1 As String * 15
Dim A1 As String * 5
Dim Lamp As String * 4
Dim M As String * 30
Dim Moc As Word
'********************* Deklaracje podprogramów
Declare Sub Led_1
'********************* Deklaracje Aliasów
Lcd1 Alias Portd.7
Lcd2 Alias Portd.6
Lcd3 Alias Portd.5
W1 Alias Pina.0
'********************* wartości stałe
A1 = "+CMT:"
Lcd1 = 1
Lcd2 = 0
'Lcd3 = 0
'***************************** szukanie w stringu
Cls
Cursor Off
Do
Locate 1 , 1
Lcd Numer1
Locate 2 , 1
Lcd Tekst1
Locate 1 , 13
Lcd Lamp
Locate 2 , 13
Lcd Ciag_rx
Gsm = Instr(ciag_rx , A1) ' szukaj w zmiennej Rs ciągu A1
Gsm1 = Mid(ciag_rx , Gsm , 5) ' zwraca fragment tekstu ze zmiennej Rs
'***************************** sterowanie
If Lamp = "led1" Then
Lcd2 = Moc
End If
If Lamp = "led2" Then
Pwm1a = Moc
End If
Debounce W1 , 0 , Led_1 , Sub
Waitms 10
'***************************** odczytuje ze stringu
If Gsm1 = "+CMT:" Then ' jesli zmienna Ramka1 = "$GPGGA" wtedy
Numer1 = Mid(ciag_rx , 8 , 12)
Tekst1 = Mid(ciag_rx , 46 , 15)
Lamp = Mid(ciag_rx , 46 , 4)
M = Mid(ciag_rx , 50 , 3)
Moc = Val(m)
End If
Loop
End
'********************* Odbór danych z UART
Uart_gsm:
Ciag_rx = ""
Do
Rx = Inkey()
Select Case Rx
Case 0
Case 10
Case 13 : If Ciag_rx <> "" Then Exit Do ' jeśli coś odebrane
Case Else
Ciag_rx = Ciag_rx + Chr(rx) ' utwórz ciąg
End Select
Loop
Return
Led_1:
Toggle Lcd2
Return
Może ktoś wypowie się co robię nie tak - jakieś uwagi