Witam, po miesiącach obijania się w temacie hobby (praca mnie zaabsorbowała), postanowiłem powalczyć z programowaniem AVR-ów w Bascomie.
To moje pierwsze podejście do programowania AVR, napisałem monitor ramek do ARPS. Urządzenie ma za zadanie wyświetlać na panelu lcd 20x4 ramki które wyrzuca MiniTNC za pomocą łącza szeregowego.
Jako środowisko testowe użyłem kitu AVT 3500 i procesora 2313. Oczywiście 2kb miejsca na procesorze i kod w baskomie to straszna bieda. Ale na początek wystarcza.
Może koledzy podzielą się jakimiś ciekawymi programami (własnego autorstwa). Gdzie na przykładzie będzie można się czegoś nauczyć.
Środowisko testowe na zdjęciu.
A tutaj kod.
Kod:
' SQ9MDD <rlabus@luxmat.com> 2010
'
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program; if not, write to the Free Software
' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
' MA 02110-1301, USA.
Config Serialin = Buffered , Size = 15
Dim Na As String * 15
Dim Nb As String * 9
Dim Nc As String * 9
Dim Nd As String * 9
Dim Ma As String * 7
Dim Mb As String * 7
Dim Mc As String * 7
Dim Md As String * 7
Dim Whereis As Integer
Dim Zstart As Bit
Enable Interrupts
Cursor Off
'-----------------------------------------------------------------
Cls
Locate 1 , 1
Lcd "APRS MONITOR.v.0.02a"
Locate 2 , 1
Lcd "-------SQ9MDD-------"
Wait 5
Locate 4 , 1
Lcd "waiting for data..."
'-----------------------------------------------------------------
Do
If Ischarwaiting() = 1 Then 'jesli bufor nie jest pusty
Input Na Noecho 'wczytuje dane z bufora znak stacji
' jesli bufor dluzszy niz 14 znakow to!
If Len(na) > 14 And Zstart = 1 Then
Whereis = Instr(na , ">" ) ' tutaj sprawdzam gdzie jest znak ">"
Whereis = Whereis + 1 'gmeranie kursorem na prawo i lewo
Ma = Mid(na , Whereis , 4) 'co ramke sprodukowalo wyciagam tu
Whereis = Whereis - 3 'wywalam jakies smieci z poczatku stringa nie wiem jak sie tam znalazly
Na = Mid(na , 2 , Whereis) ' a tutaj wycinam caly znak bo wiem gdzie jest >
'obsluga typu trakera
If Ma = "APK1" Then
Ma = "TM-D700"
Elseif Ma = "APND" Then
Ma = "DIGINed"
Elseif Ma = "APNU" Then
Ma = "UIDigi"
Elseif Ma = "APOT" Then
Ma = "OT"
Elseif Ma = "APNX" Then
Ma = "TNC-X"
Elseif Ma = "APU2" Then
Ma = "UiView"
Elseif Ma = "URQU" Then
Ma = "VX-8"
Elseif Ma = "APJI" Then
Ma = "jAPRSI"
Elseif Ma = "APJS" Then
Ma = "javAPR"
Elseif Ma = "APZW" Then
Ma = "MAP27"
Elseif Ma = "APN3" Then
Ma = "KPC-3"
Elseif Ma = "APK0" Then
Ma = "TH-D7"
Elseif Ma = "APTT" Then
Ma = "TT.v.1"
End If
If Nb <> Na And Nb <> Na And Nc <> Na And Nd <> Na Then ' jesli string dla drugiej lini inny niz dla pierwszej dodaj na szczyt listy zabezpieczenie przed wyswietlaniem tych samych powtorzonych ramek
Cls 'czysc wyswietlacz
Locate 1 , 1 'kursr do gory
Lcd Na
Locate 1 , 11 'przesuwamy kursor o 6 znakow prze koniec lcd w pierwszym wierszu
Lcd Ma 'Wyswietl Biezacy Znak Stacji
Locate 2 , 1 'ustawianie kursora
Lcd Nb ;
Locate 2 , 11
Lcd Mb
Locate 3 , 1
Lcd Nc
Locate 3 , 11
Lcd Mc
Locate 4 , 1
Lcd Nd
Locate 4 , 11
Lcd Md
Nd = Nc
Nc = Nb
Nb = Na
Md = Mc
Mc = Mb
Mb = Ma
'przepisz biezacy znak do drogiej zmiennej
End If
End If
Zstart = 1
End If
Waitms 5 '1,5msec potrzebuje wyswietlacz na realizacje $home
Loop
'-----------------------------------------------------------------
End