Odpowiedz 
 
Ocena wątku:
  • 4 Głosów - 5 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Sterownik przemiennika
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #1
Copyleft Sterownik przemiennika
Ależ się nam offtop zrobił, ale to dobrze, może będzie można wątek pociachać i fajny dział o programowaniu wyjdzie.

Jak obiecałem usiadłem w niedzielę do nauki bascoma.
I oto co mi wyszło z pod palców:

Kod:
'-------------------------------------------------------------------------------
'      REPEATER CONTROLER v.2.0.L
'      L - obsługa LCD
'      N - brak sygnalizacji zewnętrznej
'      D - sygnalizacja diodowa
'      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.
'-------------------------------------------------------------------------------
$regfile = Attiny2313.def
$crystal = 4000000
$baud = 9600
$hwstack = 24
$swstack = 0
$framesize = 32

Config Portb = &B11111111
Config Portd = &B1001101

Portb = &B00000000
Portd = &B0110010

Rx_signal Alias Pind.1
Morsepin Alias Portb.0
Ptt Alias Portd.6

Beep_option_jumper Alias Pind.4
Ident_after_jumper Alias Pind.5


'zegar on
Enable Interrupts
Config Timer1 = Timer , Prescale = 64
Enable Timer1

'definicje stałych
Const Speed = 12
Const Czestotliwosc = 450
Const Kropka = Czestotliwosc / Speed
Const Kreska = 3 * Kropka

'definicje zmiennych
Dim Sendchar As String * 1
Dim Charcode As Byte
Dim Dataindex As Byte
Dim Charindex As Byte
Dim Nextcharindex As Byte
Dim Charstring As String * 12
Dim Stringlength As Byte
Dim Codelength As Byte
Dim Codeindex As Byte
Dim Codeelement As String * 1
Dim Sendcw As Bit
Dim Tx_flag As Bit
Dim Rx_flag As Bit
Dim Beep_flag As Bit
Dim Podtrzymanie_flag As Bit
Dim Rx As Bit
Dim Rxa As Bit
Dim Sekunda As Byte
Dim Minuta As Byte
Dim Countdown As Byte
Dim Beep_option As Bit
Dim Inputtekst As String * 6
Dim Ident_after_tx As Bit
Dim Sendcwinterwal As Byte
Dim Czaspodtrzymania As Byte

'konfiguracja zmiennych sterownika
Inputtekst = "SR5WM"     'znamiennik max 6 znaków jesli chcesz wiekszy zmien rozmiar zmiennej Inputtekst
Sendcwinterwal = 5       'czas automatycznego wysyłania znamiennika w minutach
Czaspodtrzymania = 4     'czas podtrzymania nosnej w sekundach
'Beep_option = 1
'Ident_after_tx = 1

'-------------------------------------------------------------------------------
'tutaj zaczynamy prace programu
'tutaj uruchamiam timer do odliczania wyłączania flag
On Timer1 Liczmy
Wait 3
'Uruchomienie Przemiennika Wysyłamy znamiennik
Sendcw = 1

If Beep_option_jumper = 1 Then
   Beep_option = 0       '0/1 beepek na koniec RX
Else
   Beep_option = 1
End If

If Ident_after_jumper = 1 Then
   Ident_after_tx = 0    '0/1 czy nadawac znamiennik na koniec kazdego tx-a  czy tylko co ustalony interwał czasowy
Else
   Ident_after_tx = 1
End If


'główna pętla programu
'-------------------------------------------------------------------------------
Do

'obsługa sygnału RX i ustawianie flagi RX i Beep
'-------------------------------------------------------------------------------
'jesli pin RX zwarty do masy
   If Rx_signal = 0 Then
'ustawiam bit pomocniczy
         Rx = 1
'jeśli po 20ms nadal wciśnięty
      If Rx = 1 And Rxa = 0 Then
         Rxa = 1
'ustawiamy flage jest RX
         Rx_flag = 1
      End If
'jeśli sygnał braku zajętości znika to
   Elseif Rxa = 1 Then
         Beep_flag = 1
         Rx_flag = 0
'zeruj obydwa bity pomocnicze
         Rx = 0 : Rxa = 0
      End If


'ustawianie flagi TX jesli ustawione flagi RX lub podtrzymanie
'-------------------------------------------------------------------------------

'ustawianie flagi podtrzymanie jesli zapalony RX
If Rx_flag = 1 Then
         Podtrzymanie_flag = 1
         Countdown = 0
End If

'ustawiamy flage TX jesli mamy RX-a lub dziala podtrzymanie
If Rx_flag = 1 Or Podtrzymanie_flag = 1 Then
   Tx_flag = 1
Else
   Tx_flag = 0
End If

'ustawiamy port PTT jesli mamy flage tx
If Tx_flag = 1 Then
'wysterowanie nadajnika
    Ptt = 1
'tutaj beep jesli koniec nadawania i beep_option enabled
    If Beep_flag = 1 And Rx_flag = 0 And Beep_option = 1 Then
    Waitms 150
      Sound Morsepin , Kropka , Czestotliwosc
      Beep_flag = 0
    End If
Else
'wysterowanie nadajnika
    Ptt = 0
End If

'procedura wysylania znamiennika
'-------------------------------------------------------------------------------
If Sendcw = 1 Then
'uruchamiam sobie TX
Ptt = 1
'blokujemy timer na czas wysylania znamiennikabo chrypi2
Stop Timer1
Waitms 300
   Stringlength = Len(inputtekst)
'wlaczyc pin PTT tutaj
'tutaj przesuwamy się po ciągu znaków i będziemy odtwarzać każdą literę z osobna
   For Charindex = 1 To Stringlength
   Sendchar = Mid(inputtekst , Charindex , 1)
   Charcode = Asc(sendchar)

    Dataindex = Charcode - 48
    Charstring = Lookupstr(dataindex , Alfabet)
    Codelength = Len(charstring)

'ta pętla generuje kazda litere znaku
         For Codeindex = 1 To Codelength
               Codeelement = Mid(charstring , Codeindex , 1)
            If Codeelement = "." Then
'Zagraj kropke
               Sound Morsepin , Kropka , Czestotliwosc
            Else
'Zagraj kreske
               Sound Morsepin , Kreska , Czestotliwosc
            End If
            If Codeindex < Codelength Then
               Waitms Kropka
            End If
         Next Codeelement
'odstęp pomiedzy znakami 3 x kropka
      Waitms Kreska
'i wracamy do początku pętli po następną literę
   Next Charindex
'skonczylismy gasimy flaga nadawania znamiennika
'resetujemy lflagi
   Sendcw = 0
   Tx_flag = 0
   Sekunda = 0
'skonczylismy nadawac znamiennik odpalamy timer 1
   Start Timer1
   End If

'koniec pętli
Loop
'koniec programu
End


'obsługa
'-------------------------------------------------------------------------------

Liczmy:
Timer1 = 0
'tutaj proste naliczanie w sekundzie i cos (dla uproszczenia i skrocenia kodu uzyłem timera tc1/64 to daje 1s = 1,05S)
   Sekunda = Sekunda + 1
   If Sekunda = 60 Then
      Minuta = Minuta + 1
      If Minuta = 60 Then
         Minuta = 0
      End If
      Sekunda = 0
   End If

'jesli podtrzymanie na 1 a rx spadl zczynamy odliczanie do wylaczenia
   If Podtrzymanie_flag = 1 And Rx_flag = 0 Then
     Countdown = Countdown + 1
'jesli doszlismy do konca gas flagi
      If Countdown >= Czaspodtrzymania Then
         Podtrzymanie_flag = 0
         Tx_flag = 0
         Countdown = 0
'jesli zaznaczona flaga identylfikacji po odpuszczeniu tx to zagraj znamiennik
         If Ident_after_tx = 1 Then
            Minuta = Sendcwinterwal
         End If
      End If
'reset licznika jesli pojawi sie flaga rx w trakcie podtrzymania
   Elseif Podtrzymanie_flag = 1 And Rx_flag = 1 Then
      Countdown = 0
   End If

'okresowe wysyłanie znamiennika jesli przekroczono czas i nikt nie nadaje
   If Minuta >= Sendcwinterwal And Rx_flag = 0 Then
        Tx_flag = 1
        Sendcw = 1
        Minuta = 0
   End If

Return
'-------------------------------------------------------------------------------

Alfabet:
Data "-----"             '0  Znaki pokolei tak jak są ustawione w tablicy ASCII
Data ".----"             '1  przy wywoływaniu musimy tylko przestawić indeks o 48
Data "..---"             '2  ponieważ cyfra 0 ma kod ASCII 48
Data "...--"             '3
Data "....-"             '4
Data "....."             '5
Data "-...."             '6
Data "--..."             '7
Data "---.."             '8
Data "----."             '9
Data "."                 ': do generowania znamienników znaki specjalne nie są potrzebne
Data "."                 ';
Data "."                 '<
Data "."                 '=
Data "."                 '>
Data "."                 '?
Data "."                 '@
Data ".-"                'A  Literki
Data "-..."              'B
Data "-.-."              'C
Data "-.."               'D
Data "."                 'E
Data "..-."              'F
Data "--."               'G
Data "...."              'H
Data ".."                'I
Data ".---"              'J
Data "-.-"               'K
Data ".-.."              'L
Data "--"                'M
Data "-."                'N
Data "---"               'O
Data ".--."              'P
Data "--.-"              'Q
Data ".-."               'R
Data "..."               'S
Data "-"                 'T
Data "..-"               'U
Data "...-"              'V
Data ".--"               'W
Data "-..-"              'X
Data "-.--"              'Y
Data "--.."              'Z

Jest to bardzo prosty sterownik przemiennika, zrealizowany na ATTiny2313.
Funkcje które posiada:

- opcje konfigurujemy przed kompilacją programu
- podtrzymanie nośnej w sekundach
- beep po zdjęciu sygnału RX jako opcja
- identyfikacja cw co zadany okres czasu w minutach
- identyfikacja cw po każdym tx jako opcja

Obsługę czasów zrealizowałem na zegarze i przerwaniu od tegoż zegara.
Źródło które tutaj wkleiłem starałem się mocno skomentować by umożliwić kolegom szybką analizę i ewentualne poprawki. Całość została skompilowana i przetestowana na płytce testowej. W tym tygodniu uruchomię układ z tym programem w realnych warunkach.

Kod jest na licencji GPL, można kopiować modyfikować, umieszczać we własnych projektach sprzedawać itd...


2010.08.18 UPDATE

Poprawiłem w kodzie kilka oczywistych błędów, zmieniłem opcję beep i identyfikacja cw na obsługiwaną z dipswitcha.

Pracujący sterownik wersja bardzo mocno testowa:
İmage


2010.08.19 UPDATE

Kolega narysował schemat do mojego programu. W załączeniu poniżej.

İmage


Załączone pliki
.zip  repeater-controler-v2.0.N.zip (Rozmiar: 3.08 KB / Pobrań: 1775)

...przede wszystkim nie zakłócać...
16-08-2010 11:33
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
Sterownik przemiennika - SQ9MDD - 16-08-2010 11:33
RE: Sterownik przemiennika - SQ9MDD - 11-09-2010, 10:50
RE: Sterownik przemiennika - SQ9MDD - 22-09-2010, 13:51
RE: Sterownik przemiennika - SQ9MDD - 17-10-2010, 22:28
RE: Sterownik przemiennika - sq6acm - 21-10-2010, 18:40
RE: Sterownik przemiennika - SQ6ADE - 21-10-2010, 21:59
RE: Sterownik przemiennika - sq6acm - 22-10-2010, 7:50
RE: Sterownik przemiennika - SQ6ADE - 22-10-2010, 8:14
RE: Sterownik przemiennika - SQ9MDD - 22-10-2010, 12:31
RE: Sterownik przemiennika - SQ9MDD - 22-10-2010, 8:15
RE: Sterownik przemiennika - SQ6OXK - 22-10-2010, 9:20
RE: Sterownik przemiennika - sq6acm - 22-10-2010, 12:25
RE: Sterownik przemiennika - SQ6OXK - 22-10-2010, 14:27
RE: Sterownik przemiennika - SQ9MDD - 22-10-2010, 16:49
RE: Sterownik przemiennika - SQ6OXK - 22-10-2010, 21:45
RE: Sterownik przemiennika - SQ6ADE - 22-10-2010, 22:06
RE: Sterownik przemiennika - SQ6OXK - 23-10-2010, 3:44
RE: Sterownik przemiennika - SP5SAI - 23-10-2010, 9:39
RE: Sterownik przemiennika - SQ9MDD - 23-10-2010, 10:00
RE: Sterownik przemiennika - SQ6ADE - 23-10-2010, 13:57
RE: Sterownik przemiennika - sq6acm - 24-10-2010, 1:19
RE: Sterownik przemiennika - SQ6ADE - 24-10-2010, 10:00
RE: Sterownik przemiennika - SQ9MDD - 24-10-2010, 10:50
RE: Sterownik przemiennika - sq6acm - 25-10-2010, 8:39
RE: Sterownik przemiennika - SQ9MDD - 05-11-2010, 22:18
RE: Sterownik przemiennika - SP1WSY - 12-11-2010, 3:16
RE: Sterownik przemiennika - SQ6ADE - 12-11-2010, 10:05
RE: Sterownik przemiennika - SQ6ADE - 19-11-2010, 22:45
RE: Sterownik przemiennika - SP1WSY - 23-11-2010, 9:49
RE: Sterownik przemiennika - SP5SAI - 24-11-2010, 10:28
RE: Sterownik przemiennika - SQ6ADE - 23-11-2010, 12:56
RE: Sterownik przemiennika - sq6acm - 23-11-2010, 19:27
RE: Sterownik przemiennika - SQ6ADE - 23-11-2010, 22:42
RE: Sterownik przemiennika - sq6acm - 24-11-2010, 18:20
RE: Sterownik przemiennika - SQ6ADE - 24-11-2010, 22:53
RE: Sterownik przemiennika - SP1WSY - 30-01-2011, 19:28
RE: Sterownik przemiennika - SQ9MDD - 31-01-2011, 0:15
RE: Sterownik przemiennika - SP1WSY - 02-02-2011, 9:41
RE: Sterownik przemiennika - SQ9MDD - 17-02-2011, 13:29
RE: Sterownik przemiennika - SP1WSY - 17-02-2011, 23:43
RE: Sterownik przemiennika - SQ9MDD - 19-02-2011, 12:42
RE: Sterownik przemiennika - SQ6ADE - 19-02-2011, 13:08
RE: Sterownik przemiennika - SP1WSY - 19-02-2011, 15:40
RE: Sterownik przemiennika - SQ6ADE - 19-02-2011, 18:18
RE: Sterownik przemiennika - SQ9MDD - 24-08-2011, 11:59
RE: Sterownik przemiennika - SP1WSY - 20-02-2011, 13:57
RE: Sterownik przemiennika - SQ6ADE - 20-02-2011, 14:08
RE: Sterownik przemiennika - SQ9MDD - 15-04-2011, 12:14
RE: Sterownik przemiennika - SQ9MDD - 23-08-2011, 11:55
RE: Sterownik przemiennika - SQ6ADE - 23-08-2011, 19:36
RE: Sterownik przemiennika - SQ6OXK - 23-08-2011, 22:32
RE: Sterownik przemiennika - SQ9MDD - 24-08-2011, 1:12
RE: Sterownik przemiennika - SQ6OXK - 24-08-2011, 7:59
RE: Sterownik przemiennika - SQ6ADE - 24-08-2011, 9:05
RE: Sterownik przemiennika - SQ6OXK - 24-08-2011, 9:36
RE: Sterownik przemiennika - SQ6ADE - 24-08-2011, 10:13
RE: Sterownik przemiennika - SQ6OXK - 24-08-2011, 23:16
RE: Sterownik przemiennika - SQ9MDD - 24-08-2011, 10:13
RE: Sterownik przemiennika - SQ6ADE - 24-08-2011, 10:28
RE: Sterownik przemiennika - SQ9MDD - 27-08-2011, 22:40
RE: Sterownik przemiennika - SQ6OXK - 28-08-2011, 8:28
RE: Sterownik przemiennika - SQ6ADE - 28-08-2011, 12:12
RE: Sterownik przemiennika - SP3SWJ - 28-08-2011, 12:56
RE: Sterownik przemiennika - SQ9MDD - 28-08-2011, 14:13
RE: Sterownik przemiennika - SP3SWJ - 28-08-2011, 14:24
RE: Sterownik przemiennika - SQ7EHO - 28-08-2011, 22:13
RE: Sterownik przemiennika - sp9uxy - 05-09-2011, 12:28
RE: Sterownik przemiennika - SQ7EHO - 13-09-2011, 12:07
RE: Sterownik przemiennika - SQ9MDD - 13-09-2011, 12:56
RE: Sterownik przemiennika - SQ6ADE - 13-09-2011, 20:02
RE: Sterownik przemiennika - SQ7EHO - 14-09-2011, 23:21
RE: Sterownik przemiennika - SQ6ADE - 15-09-2011, 11:48
RE: Sterownik przemiennika - SQ7EHO - 17-09-2011, 12:16
RE: Sterownik przemiennika - SP4BK - 24-03-2012, 7:57
RE: Sterownik przemiennika - Lukasz - 10-03-2013, 21:40
RE: Sterownik przemiennika - SP9KN - 18-01-2015, 15:59
RE: Sterownik przemiennika - SP3SUZ - 13-08-2015, 9:07
RE: Sterownik przemiennika - SQ6ADE - 13-08-2015, 20:56
RE: Sterownik przemiennika - SP7QHP - 08-10-2020, 18:45
RE: Sterownik przemiennika - SQ8MVY - 08-10-2020, 20:05
RE: Sterownik przemiennika - SP7QHP - 08-10-2020, 20:59
RE: Sterownik przemiennika - SQ8MVY - 08-10-2020, 21:31
RE: Sterownik przemiennika - SP7QHP - 09-10-2020, 18:43
RE: Bascom - HM_DIPOL - 21-08-2010, 8:46
RE: Bascom - SQ9MDD - 21-08-2010, 11:55
RE: Bascom - SP5SAI - 21-08-2010, 13:24
RE: Bascom - SQ9MDD - 22-08-2010, 19:54
RE: Bascom AVR - SQ9MDD - 25-08-2010, 12:31
RE: Bascom AVR - SP5SAI - 25-08-2010, 15:24
RE: Bascom AVR - SP5FCS - 25-08-2010, 23:44
RE: Bascom AVR - 3Z6AEF - 26-08-2010, 7:56
RE: Bascom AVR - SP5SAI - 26-08-2010, 11:54
RE: Bascom AVR - SQ9MDD - 26-08-2010, 18:13
RE: Bascom AVR - SP5FCS - 27-08-2010, 19:31
RE: Bascom AVR - SQ9MDD - 28-08-2010, 16:20
RE: Bascom AVR - SP5SAI - 28-08-2010, 19:56
RE: Bascom AVR - SQ9MDD - 28-08-2010, 21:53
RE: Bascom AVR - SQ9MDD - 29-08-2010, 18:26
[split] Bascom AVR - SQ9MDD - 01-09-2010, 13:27
RE: Bascom AVR - SQ9MDD - 02-09-2010, 11:59
RE: Bascom AVR - SP5SAI - 02-09-2010, 13:09
RE: Bascom AVR - SQ9MDD - 05-09-2010, 19:33

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości