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
HM_DIPOL Offline
Heniek
***

Liczba postów: 172
Dołączył: 27-04-2010
Post: #2
RE: Bascom
Cytat:Kolega SQ9MDD napisał:
Kolega narysował schemat do mojego programu. W załączeniu poniżej.

Ryszard, chcesz zrobić druk do tego schematu ?
Może dać ATmega8 SMD (koszt podabny, mniejsza obudowa, większe możliwości) lub dodać LCD to będzie można uruchaniać soft bez kupowania zestawu startowego?
(Ten post był ostatnio modyfikowany: 21-08-2010 8:53 przez HM_DIPOL.)
21-08-2010 8:46
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #3
RE: Bascom
(21-08-2010 8:46)dipol napisał(a):  Ryszard, chcesz zrobić druk do tego schematu ?
Sam to pewnie nie zrobię, bo brak czasu, brak umiejętności. Ale jeśli Ty lub któryś z kolegów ma ochotę się dołączyć do tego otwartego projektu to serdecznie zapraszam. Smile

(21-08-2010 8:46)dipol napisał(a):  Może dać ATmega8 SMD (koszt podabny, mniejsza obudowa, większe możliwości) lub dodać LCD to będzie można uruchaniać soft bez kupowania zestawu startowego?

Ten projekcik powstał nie do końca jako tylko nauka bascoma. Ja chciałem zagospodarować dwa ręczne radia które leżały i się kurzyły, a przy okazji sterownik taki będzie obsługiwał SR5WM i SR5A.

Jasne jest też że do sterownika NHRC jeszcze mu daleko, aczkolwiek wcale się na nim nie wzoruje.

Rzeczy które chcę poprawić może na "ósemce" to:
- programowanie z RS-232
- opcjonalnie wyświetlacz 2x16 znaków
- przeniesienie wszystkich parametrów konfiguracyjnych do EEPROM
- obsługa tonów DTMF (do zdalnego wyłączania przemiennika)
- opcjonalny interfejs do podpięcia komputera z echolinkiem

...przede wszystkim nie zakłócać...
21-08-2010 11:55
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5SAI Offline
Andrzej
***

Liczba postów: 110
Dołączył: 24-03-2010
Post: #4
RE: Bascom
(21-08-2010 11:55)SQ9MDD napisał(a):  Sam to pewnie nie zrobię, bo brak czasu, brak umiejętności. Ale jeśli Ty lub któryś z kolegów ma ochotę się dołączyć do tego otwartego projektu to serdecznie zapraszam. Smile
Ten projekcik powstał nie do końca jako tylko nauka bascoma. Ja chciałem zagospodarować dwa ręczne radia które leżały i się kurzyły, a przy okazji sterownik taki będzie obsługiwał SR5WM i SR5A.

Jasne jest też że do sterownika NHRC jeszcze mu daleko, aczkolwiek wcale się na nim nie wzoruje.

Rzeczy które chcę poprawić może na "ósemce" to:
- programowanie z RS-232
- opcjonalnie wyświetlacz 2x16 znaków
- przeniesienie wszystkich parametrów konfiguracyjnych do EEPROM
- obsługa tonów DTMF (do zdalnego wyłączania przemiennika)
- opcjonalny interfejs do podpięcia komputera z echolinkiem

Jeśli to ma być „pro publico bono” i na dodatek dla przemienników również dla mojego rodzinnego miasta. No to bracie(a), oferuję ze swojej strony zaprojektowanie druku, oferuję wytrawienie metodami amatorskimi płytki prototypu, nawiercenie, zmontowanie pierwszego prototypu i uruchomienie go, oferuję ATMEGi 32 (DIP40) z programowaniem. W projektach publicznych proponuję stosowanie elementów przewlekanych, jeśli miejsca jest dość i nie trzeba koniecznie miniaturyzować a elementy „dipowe” są powszechnie dostępne. Nie miałem śmiałości zaproponować tych wszystkich dodatkowych funkcji jakie planujesz, bo aż się prosi przy tych możliwościach obecnych mikrokontrolerów i oczywiście bibliotek BASCOMa.

Pozdrawiam Andrzej SP5SAi
( SP5 Stanisław Adam Irena )
21-08-2010 13:24
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #5
RE: Bascom
(21-08-2010 13:24)SP5SAi napisał(a):  Jeśli to ma być „pro publico bono” i na dodatek...

No taki był plan od początku, by stworzyć coś razem nie ukrywając niczego w "hexach" Smile Pierwsze próby robiłem na płytce testowej AVT ale gdy już program zaczął stabilnie działać zlutowałem pajączka i podpiąłem dwa radyjka by na stole zrobić testy. W międzyczasie kol. Sebastian SQ5MGE zaoferował pomoc z narysowaniem schematu i poprawieniem mojego pajączka.
Ustaliłem z nim, że spotkamy się w przyszłym tygodniu i narysujemy schemat z uwzględnieniem zmian o których tutaj dyskutowaliśmy.
To jak dobrze pójdzie pod koniec przyszłego tygodnia będzie można już o schemacie podyskutować i koledzy którzy rysują będą mogli już coś działać.
Mam nadzieję że ktoś się przyłączy do projektu.

Tak sobie myślę że gabaryty urządzenia nie są tak istotne jak przy innych konstrukcjach więc nie ma parcia na smd.

...przede wszystkim nie zakłócać...
22-08-2010 19:54
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #6
RE: Bascom AVR
Poprosił mnie kolega z piątego okręgu by zrobić sterownik o którym tutaj pisaliśmy w wersji podstawowej. Potrzebne do nowo uruchamianego przemiennika.
W związku z tym moje pytanie czy któryś z kolegów może narysować płytkę do schematu jak poniżej?
Wiecej info i ustaleń najlepiej na GG, telefon lub priv.

İmage

...przede wszystkim nie zakłócać...
25-08-2010 12:31
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5SAI Offline
Andrzej
***

Liczba postów: 110
Dołączył: 24-03-2010
Post: #7
RE: Bascom AVR
(25-08-2010 12:31)SQ9MDD napisał(a):  Poprosił mnie kolega z piątego okręgu by zrobić sterownik o którym tutaj pisaliśmy w wersji podstawowej. Potrzebne do nowo uruchamianego przemiennika.
W związku z tym moje pytanie czy któryś z kolegów może narysować płytkę do schematu jak poniżej?
Wiecej info i ustaleń najlepiej na GG, telefon lub priv.

Chętnie machnę tą płytkę, ale jestem jeszcze na urlopie a licencjonowany program mam tylko na komputerze w pracy, tą końcówkę urlopu przeznaczyłem na załatwienie pozwolenia radiowego na używanie radiostacji amatorskiej, bo mam nie ważne. Właśnie wróciłem z UKE z formularzami do wypełnienia i odnośnymi wpłatami na konto. Zaraz jak złożę wszystkie papiery przystąpimy do projektowania płytki. Na początek jeden szczegół, który na pewno przyda się wszystkim, którzy zaczynają, lub chcą zacząć projektować płytki drukowane. Warto płytkę drukowaną projektować do konkretnej obudowy, na konkretny wymiar. Np., jako płytkę do chassis RADMORa 30xx, do uniwersalnej obudowy plastikowej od Maszczyka itp. Jak myślicie, co będzie lepsze: czy jako zewnętrzny moduł we własnej uniwersalnej obudowie, czy na jakiś konkretny wymiar do wnętrza przemiennika? Albo wymiar nie gra roli, to projektujemy do uniwersalnej obudowy i można wtedy stosować z własną obudową lub bez. Jakie sugestie ?

Pozdrawiam Andrzej SP5SAi
( SP5 Stanisław Adam Irena )
25-08-2010 15:24
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5FCS Offline
Adam
*****

Liczba postów: 1,072
Dołączył: 02-02-2009
Post: #8
RE: Bascom AVR
(25-08-2010 12:31)SQ9MDD napisał(a):  .... W związku z tym moje pytanie czy któryś z kolegów może narysować płytkę do schematu jak poniżej?

Ryszard, mówisz i masz, takie rzeczy robimy od ręki, na "cuda" trzeba chwilę poczekać!

Na zdjęciu ekran z projektem płytki, na wolnych pinach dałem zworki do masy aby można było dodać jakieś elementy konfiguracyjne ewentualnie dodatkowe sterowanie. W ATtiny2313 możesz zrezygnować z rezonatora i pracować na wewnętrznym generatorze dlatego również te piny są na złączu. Dodatkowo dodałem stabilizator na +5V gdyby układ był zasilany z 12V. Elementy przewlekane, druk jednostronny pod termotransfer tak aby szybko wykonać kilka płytek do testów. Jeśli wszystko będzie OK należałoby umieścić kilka płytek na jednej formatce.
Projekt do modyfikacji w pliku LayOut 5.0. Proszę o uwagi, poprawki, modyfikacje.

PS.
Waldek, dzięki za kilka trafnych poprawek. Do Twojej wersji dodałem opisy elementów i kilka kosmetycznych poprawek połączeń (ver.3).
Może uda się powoli "rozkręcić" pracę zespołową i zachęcić innych Kolegów do takiego sposobu projektowania.


Załączone pliki Miniatury
İmage İmage

.lay  sterownik.LAY (Rozmiar: 50.8 KB / Pobrań: 1420)
.lay  sterownik3.LAY (Rozmiar: 63.8 KB / Pobrań: 1705)

73 Adam
25-08-2010 23:44
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
3Z6AEF Offline
Waldek
***

Liczba postów: 237
Dołączył: 27-06-2009
Post: #9
RE: Bascom AVR
(25-08-2010 23:44)sp5fcs napisał(a):  [...]Projekt do modyfikacji w pliku LayOut 5.0. Proszę o uwagi, poprawki modyfikacje.[...]
Przeniosłem sygnał analogowy RX na prawo, dodałem kondensator na +12V.
Nie wiem jakie są domyślne poziomy na SQL i sterowaniu PTT - trzeba
ewentualnie dodać rezystory w bazach tranzystorów do masy albo VCC.


Załączone pliki
.lay  sterownik1.LAY (Rozmiar: 55.07 KB / Pobrań: 1305)
(Ten post był ostatnio modyfikowany: 26-08-2010 8:04 przez 3Z6AEF.)
26-08-2010 7:56
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5SAI Offline
Andrzej
***

Liczba postów: 110
Dołączył: 24-03-2010
Post: #10
Smile RE: Bascom AVR
No to Adam pokazał zawodowstwo, a społeczność krótkofalarska zyskała następny projekt dla wszystkich i to jest właśnie duch krótkofalarstwa jakby ktoś nie wiedział. W takim razie nie mając co robić jadę do Pana Marka do UKE dalej załatwiać swoje pozwolenie radiowe. Jeszcze raz brawo Adam i oczywiście Ryszard Exclamation

Pozdrawiam Andrzej SP5SAi
( SP5 Stanisław Adam Irena )
(Ten post był ostatnio modyfikowany: 26-08-2010 11:55 przez SP5SAI.)
26-08-2010 11:54
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


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