Callgever

Alles over zelfbouwprojecten.
Plaats reactie
Bericht
Auteur
Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Callgever

#1 Bericht door PD5B »

Geachte forumleden, in 2013 was ik begonnen om een callgever te bouwen, maar in verband met tijdgebrek is dat toen niets geworden.
Nu heb ik de tijd om de callgever te bouwen, in 2013 heb ik een jal file gedownload van de Veron dit was een ontwerp van PAØDMM voor een 12F683, deze heb ik ook aan de praat gekregen, het enige wat ik niet voor elkaar krijg is het niet uitzenden van de call bij iedere keer het bedienen van de Mic. Dat wil ik zeker niet en ik vind dit storend.

Als ik de Mic. Bedien dan gaat de set op zenden en wordt de call uitgezonden, en de zender blijft zenden zo lang tot de call ten einde is, dit vind ik prima, en na de ingestelde tijd gaat de LED weer knipperen als teken dat de call weer bezig is, maar dan wordt de zender niet ingeschakeld, allen als ik dan aan het praten ben en de Mic. Los laat blijft de zender ingeschakeld zolan tot de call ten einde is, en dat is ook goed.

Maar ik krijg het niet voor elkaar om de call niet bij iedere keer bediening van de Mic. De call ook uitgezonden wordt.
Ook heb ik hier op het forum gelezen dat PA8C de software iets heeft aangepast zodat de 12F683 dat doet wat ik graag zou willen, maar helaas aan deze software kom ik niet.

Deze callgever is alleen voor mij gedacht en niet voor verkoop of voor derden.
Is er misschien iemand die mij verder wil helpen om het programma zo aan te passen dat het mij lukt om de callgever zo te programmeren.

Met vriendelijke groet
PD5B

Ps. Krijg het schema niet hier geplaatst

Gebruikersavatar
pa3dsc
Berichten: 1166
Lid geworden op: 21 dec 2005, 20:02
Roepletters: pa3dsc
Locatie: Nuenen
Contacteer:

Re: Callgever

#2 Bericht door pa3dsc »

Lijkt me comform specs.
Alleen de call zenden bij een eigen uitzending om de 5 minuten.
Als je de mic. niet gebruikt hoef je ook geen call uit te zenden.
Bij het peron geluk aan laten staan van de set tijdens jou afwezigheid gaat de set NIET aan.
In de software van de pic zal dat te herleiden zijn.
Automatiseren gaat sneller, maar duurt langer

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#3 Bericht door PD5B »

Dat is zeker de bedoeling PA3DSC, maar ik kan het niet vinden in de Jal file, ben niet zo goed in programmeren, daarom de hoop dat iemand mij een beetje helpt.

Gr. PD5B

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#4 Bericht door PD5B »

-- programma 'calgever' versie 1 d.d. 1-sept-2013
-- dit genereerd ongeveer iedere 5 de geprogrammeerde call sign in morse
-- start van de 5 minuten timer gebeurt doordat de PTT input 0 wordt
-- zolang deze input 0 is wordt de call sign iedere 5 minuten gegenereerd.
-- output is zowel beschikbaar als wisselspanning (van de PWM) als digitaal
-- beschikbaar (digitaal I/O pen) die tevens de PTT schakelaar bedient.
-- dit is nodig omdat als anders de PTT wordt losgelaten tijdens het genereren
-- van de call sign een onvolledige call sign wordt uitgezonden !!!
-- geschreven door PA0DMM voor publicatie in ELECTRON
--
-- gebruikte IC pen bezetting :
-- +5V.......1 8....... GND
-- NOT USED..2 7....... 1 = morse output actief ; 0 = niet actief
-- NOT USED..3 6....... Key output 1 = key down ; 0 = key up
-- PTT input.4 5....... Morse code audio uit (5V blogolf +/- 1750 Hz)
--
-- PTT input pen (4) moet begrensd worden op + 5V bij 0V (GND) wordt periodiek
-- de callsign in morse (key en audio) gegenereerd.

-- definieer de gebruikte chip en laad de daarbij behorende bibliotheek
INCLUDE 12F683
; include 12F617
-- definieren van de te generen callsign, sein snelheid en intervaltijd enz.
var volatile byte Callsign[] = "PA0DMM" ; vul hier de gewenste call in
Var volatile byte Woorden_per_minuut = 18 ; gewenste seinsnelheid in WPM
Var volatile word Toon_Frequentie = 1000 ; Toon frequentie voor de morse code
Var volatile word Start_Delay = 1 ; wacht tijd voordat het seinen begint
Var volatile word Interval_secondes = 300 ; tijd in seconden tussen het
; uitzenden van de call sign
const bit beep = true ; 1750Hz beep bij start

-- definieer de gebruikte chip en instellingen
pragma target OSC INTOSC_NOCLKOUT ; interne clock geen clock uitgang
pragma target CLOCK 8_000_000 ; 8 MHz clock
pragma target WDT disabled ; geen watchdog
pragma target BROWNOUT enabled ; wel brown out
pragma target PWRTE enabled ; wel reset bij spanning terugkomst
pragma target CP disabled ; geen code bescherming
pragma target MCLR internal ; internal Master Clear

;OSCCON_IRCF = 7 ; 8 MHZ clock voor 12F683 zie include
enable_digital_io() ; alleen digitale I/O , geen analoog
comparator_off() ; de comparator wordt niet gebruikt
adc_off() ; de AD converter wordt niet gebruikt

INTCON_GIE = 0 ; disable interupts

-- ----------------------------------------------------------------------------

-- Timer0 wordt gebruikt voor bepalen van de interval tijd
-- Met deze timer kan een tijd van 256 x 256 x clock periodetijd x 4 gehaald
-- worden. Voor langere tijden hebben we nog een extra teller nodig.
-- Timer0 geeft een interrupt als deze afloopt, om dit te verwerken is een
-- interrupt service routine nodig! Dit is procedure ISRT . De Timer0 interrupt
-- wordt pas bij het starten van het programma vrijgegeven.

Var volatile byte Timer0_teller
Timer0_teller = 0 ; reset de teller op 0


-- de digitale output die de PTT laag moet houden tijdens morse output
var volatile bit PTT_uit is PIN_A5
pin_A5_direction = output ; definieer pen 2 als uitgang (PTT uit)

-- de digitale output die seinsleutel output geeft
-- kan eventueel een LED met serie weerstand naar GND aansturen voor visule
-- indicatie van de geseinde code (of een relais (max 20mA spoel !) aansturen)
var volatile bit Key is PIN_A4
pin_A4_direction = output ; definieer pen 3 als uitgang (Key)

-- de digitale input die de PPT op de microfoon monitort
var volatile bit PTT_in is PIN_A3 ; definieren van de PTT input
pin_A3_direction = input ; definieer pen 4 als input (PTT lijn)
; dit is de enige input die GEEN
; weak pull up heeft. Los hangend is dus
; 0 Volt = false = 0 .
; We moetten dus zelf voor een pull up
; zorgen met b.v. 10k naar +5V


-- andere timingen zoals punt en streep tijden worden met delays gerealiseerd
-- spatie tussen morse tekens in een letter is gelijk aan een punt
-- spatie tussen letters is gelijk aan een streep
-- spatie tussen woorden zijn gelijk aan 7 punten
-- NIET alle mogelijke tekens zijn gedefinieerd. (speciale tekens onbreken)
-- de tijd in ms die een punt duurt is 1200/WPM
-- een streep duurt 3 keer zo lang als een punt
-- de spatie tussen punten en streken duurt net zo lang als een punt
-- de spatie tussen letters duurt net zo lang als een streep (3 punten)
-- de spatie tussen woorden duurt net zo lang als 7 punten
var volatile word punt
var volatile word streep
var volatile word letterspatie
var volatile word woordspatie
var volatile word Timer

-- definieren van de diverse gebruikte variabelen
var volatile byte Positie

-- Configure PWM (pulsbreedte modulator) voor gebruik als toon generator
-- de morse toon wordt opgewekt door de PWM (50% pulsbreedte) generator en
-- met een RC filter worden de hogere harmonischen verzwakt (band breedte !!)
-- de PWM frequentie setting is niet heel precies maar een goede benadering.
include pwm_hardware
pwm_set_frequency(Toon_frequentie) ; de gekozen frequentie van de PWM
pwm1_on() ; PWM module in de PIC aanzetten
pin_ccp1_direction = output

-- definieren hoe de character data (alphabetisch en morse) is opgeslagen.
-- de lijst is niet compleet en kan naar behoefte uitgebreid worden, dan moet
-- tevens de lijst in de procedure Sein_character uitgebreid worden !!
const byte A_[] = "A.-"
const byte B_[] = "B-.--"
const byte C_[] = "C-.-."
const byte D_[] = "D-.."
const byte E_[] = "E."
const byte F_[] = "F..-."
const byte G_[] = "G--."
const byte H_[] = "H----"
const byte I_[] = "I.."
const byte J_[] = "J.---"
const byte K_[] = "K-.-"
const byte L_[] = "L.-.."
const byte M_[] = "M--"
const byte N_[] = "N-."
const byte O_[] = "O---"
const byte P_[] = "P.--."
const byte Q_[] = "Q--.-"
const byte R_[] = "R.-."
const byte S_[] = "S..."
const byte T_[] = "T-"
const byte U_[] = "U..-"
const byte V_[] = "V...-"
const byte W_[] = "W.--"
const byte X_[] = "X-..-"
const byte Y_[] = "Y-.--"
const byte Z_[] = "Z--.."
const byte _1[] = "1.----"
const byte _2[] = "2..---"
const byte _3[] = "3...--"
const byte _4[] = "4...._"
const byte _5[] = "5....."
const byte _6[] = "6-...."
const byte _7[] = "7--..."
const byte _8[] = "8---.."
const byte _9[] = "9----."
const byte _0[] = "0-----"
const byte Slash[] = "/-..-."
const byte Space[] = " "
const byte Period[] = "..-.-.-"
const byte Comma[] = ",--..--"
const byte Vraag[] = "?..--.."
const byte Uitroep[] = "!.-.-.--"
-- ----------------------------------------------------------------------------
; dit is de delay timer voor de spatie
; tussen de punten, strepen en tekens
procedure Delay_1ms (word in time) is
var byte i
var word t
t = 0
repeat ; herhaal een delay
i = 0
repeat
_usec_Delay(100) ; in stappen van 100 micro seconde
i = i + 1
until ( i == 10 ) ; dit doen we 10 maal om een ms te krijgen
t = t + 1
until (t == time) ; dit herhalen we 't' maal om de gewenste
end procedure ; gewenste delay van 't' ms te krijgen
-- ----------------------------------------------------------------------------
; Delay timer instelbaar in seconden
; deze wordt gebruikt in de inteval timer
procedure Delay_1sec (word in time) is
var word t
t = 0
repeat
Delay_1ms(1000)
t = t + 1
until ( t == time)
end procedure
-- ----------------------------------------------------------------------------
; 1750Hz beep bij start uitzending
procedure Beep1750 (Bit in beep) is
if beep
then
pwm_set_frequency(1750)
pwm1_on() ; genereer 1750Hz
Delay_1ms(250) ; gedurende 2 maal 250 ms
Delay_1ms(250) ; is totaal 0.5 seconde
pwm1_off () ; daarna weer stil
pwm_set_frequency(Toon_frequentie) ; gekozen frequentie van de PWM voor morse
end if
end procedure

-- ----------------------------------------------------------------------------
; deze procedure seint de betreffende punten, strepen en pauzes
procedure Morse (Byte in teken[]) is
var byte pos = 1 ; pos[1] is de eerste punt of streep
if (teken[0] == " ") ; pos[0] is het ascii teken zelf
then Delay_1ms(woordspatie) ; de delay tussen woorden bij een spatie
else
while (pos < count(teken)) loop
Key = 1
pwm1_on () ; key uitgang = 0 Volt (xmitter aan)
pwm1_set_percent_dutycycle(50) ; genereer een symetrische blok
if teken[pos] == "." then Delay_1ms(punt) end if
if teken[pos] == "-" then Delay_1ms(streep) end if
Key = 0
pwm1_off() ; key uitgang = 1 (xmitter uit !)
Delay_1ms(punt) ; de delay tussen punten en strepen
pos = pos + 1 ; naar de volgende punt of streep wordt
end loop ; geseind als het teken nog niet af is
end if
end procedure

-- ----------------------------------------------------------------------------
; deze procedure zet het ascii character om in punten en strepen
; en stuurt het naar de procedure Morse die het eigenlijk seinwerk doet
; ascii die niet in onderstaande tabel voorkomen worden genegeerd.
; de tabel kan eventueel aangevuld worden met nieuwe ascii characters.
procedure Sein_character (byte in teken) is
CASE teken OF
"A","a": Morse (A_)
"B","b": Morse (B_)
"C","c": Morse (C_)
"D","d": Morse (D_)
"E","e": Morse (E_)
"F","f": Morse (F_)
"G","g": Morse (G_)
"H","h": Morse (H_)
"I","i": Morse (I_)
"J","j": Morse (J_)
"K","k": Morse (K_)
"L","l": Morse (L_)
"M","m": Morse (M_)
"N","n": Morse (N_)
"O","o": Morse (O_)
"P","p": Morse (P_)
"Q","q": Morse (Q_)
"R","r": Morse (R_)
"S","s": Morse (S_)
"T","t": Morse (T_)
"U","u": Morse (U_)
"V","v": Morse (V_)
"W","w": Morse (W_)
"X","x": Morse (X_)
"Y","y": Morse (Y_)
"Z","z": Morse (Z_)
" " : Morse (Space)
"." : Morse (Period)
"," : Morse (Comma)
"?" : Morse (Vraag)
"!" : Morse (Uitroep)
"/" : Morse (Slash)
"0" : Morse (_0)
"1" : Morse (_1)
"2" : Morse (_2)
"3" : Morse (_3)
"4" : Morse (_4)
"5" : Morse (_5)
"6" : Morse (_6)
"7" : Morse (_7)
"8" : Morse (_8)
"9" : Morse (_9)
end case
end procedure

-- ----------------------------------------------------------------------------
; deze procedure initieert het seinen van een bericht en stuurt het bericht
; per ascii caharter door naar de procedure Sein_character
procedure Sein_Message (byte in Message[])is
PTT_uit = 1 ; leg de PPT lijn gedwongen naar 5 volt (FET geleid)
Positie = 0
while (Positie <= count(Message)) loop
Sein_character (Message[Positie])
Delay_1ms(letterspatie)
Positie = Positie + 1
end loop
PTT_uit = 0 ; laat de PPT lijn weer los (bediening door operator)
end procedure

-- ----------------------------------------------------------------------------
; deze procedure seint een CQ procedure bestaande uit :
; - eerst een QRL (vraag of de frequentie bezet is)
; - daarna luister een luister periode van 10 seconde
; waarin als de PTT bedient wordt de verdere CQ procedure afgelast wordt
; omdat de frequentie bezet is
; - als de PTT niet bedient is wordt de rest van de CQ procedure uitgevoerd
; deze zend 3 X CQ daarna de callsign 2x en daarna AR
; - DEZE PRCEDURE WORDT NOG NIET GEBRUIKT IN DE SOFTWARE (TOEKOMSTIG ?!)
; OF EIGEN INITIATIEF VAN DE LEZER OM DIT TE IMPLEMENTEREN IN HET GEHEEL.
Procedure CQ is
Var bit Freq_bezet = false
Var byte luistertijd = 0

PTT_uit = 1 ; leg de PPT lijn gedwongen naar 5 volt (FET geleid)
Sein_Message ("QRL")
PTT_uit = 0 ; laat de PPT lijn weer los (bediening door operator)

For 100 USING luistertijd loop ; luister 10 seconde uit
Delay_1ms(100) ; en bedien de PTT tenminste 0.1 seconde
IF (PTT_in == false) ; als de frequentie bezet is
then Freq_bezet = true
end if
end loop

IF !Freq_bezet ; dan wordt de CQ niet uitgezonden !!
then
PTT_uit = 1 ; leg de PPT lijn gedwongen naar 5 volt (FET geleid)
Sein_Message ("CQ CQ CQ de ")
Sein_Message (Callsign)
Sein_Message (" ")
Sein_Message (Callsign)
Sein_Message (" AR")
PTT_uit = 0 ; laat de PPT lijn weer los (bediening door operator)
end if
end procedure

-- ----------------------------------------------------------------------------
; initialisatie van het programma en setten van de instellingen
punt = 1200/Woorden_per_minuut ; bepalen van de lengt evan een punt
; afhankelijk van de seinsnelheid
; antwoord is in ms
streep = 3 * punt ; streep 3 keer zo lang als een punt
letterspatie = 3 * punt ; spatie tussen de letters is 3 punten
woordspatie = 7 * punt ; spatie tussen woorden is 7 punten
Key = 0 ; maak de Key uitgang 0 volt
PTT_uit = 0 ; maak de PTT_uit gang 0 volt (FET spert)

; de eindeloze lus waar het programma in draait
Forever loop
If (PTT_in == false) ; als het PTT niveau laag is
then
Beep1750 (beep) ; als enabled dan 1750Hz toon 0.5 seconde
Delay_1sec(Start_Delay) ; wacht X seconde voordat geseind word
If (PTT_in == false) ; als het PTT niveau nog steeds laag is
then
Sein_Message (Callsign) ; sein dan de call sign
end if
Timer = 0 ; Reset interval Timer
while ((PTT_in == false) & (Timer < Interval_secondes)) loop
Delay_1sec(1) ; wacht 1 seconde
Timer = Timer + 1 ; tel de wacht tijd in seconden
end loop ; tot de interval tijd verstreken is
end if
Delay_1ms(1) ; wacht 1 ms (is niet noodzakelijk!)
end loop ; en begin vooraan in de eindeloze lus.
-- ----------------------------------------------------------------------------

PA3CQN
Berichten: 791
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Callgever

#5 Bericht door PA3CQN »

Ik ken het programma niet verder, maar om je een idee te geven:
Een aanpassing zoals dit zou je probleem kunnen oplossen.
(NB ook de 1750 piep heb ik weggehaald, tenzij iemand een repeater kent die dat nog gebruikt ?? )

Code: Selecteer alles

; de eindeloze lus waar het programma in draait
Forever loop
  If (PTT_in == false) ; als het PTT niveau laag is
  then    
     Timer = 0 ; Reset interval Timer 
     while ((PTT_in == false) & (Timer < Interval_secondes)) loop
        Delay_1sec(1) ; wacht 1 seconde
        Timer = Timer + 1 ; tel de wacht tijd in seconden
     end loop ; tot de interval tijd verstreken is of de microfoon losgelaten
     If (PTT_in == false) ; als de microfoon nog steeds ingeknepen is
     then
       Sein_Message (Callsign) ; sein dan de call sign
     end if
  end if
  Delay_1ms(1) ; wacht 1 ms (is niet noodzakelijk!)
end loop ; en begin vooraan in de eindeloze lus.
Zoals gebruikelijk geen garantie en zo ..
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#6 Bericht door PD5B »

Bedankt, ga het straks proberen

Gr. PD5B

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#7 Bericht door PD5B »

Helaas PA3CQN dit is ook niet de oplossing, de call gaat iedere keer er uit bij het inknijpen van de Mic. Ook de interval van 5 min. werkt niet.
Wat mijn bedoeling is:
1: De call mag bij uitgezonder worden bij opstarten van de zet.
2: De call mag niet uitgezonden worden bij ieder keer dat ik de Mic bedien.
3: De call moet telkens om de 5 min. uitgezonden worden, maar niet de zender inschakelen,
4: De call moet de zender ingeschakeld houden bij het loslaten van de Mic.zo dat de gehele
Call hoorbaar is.
En als laatste wil ik vragen of er iemand is die wat af weet van de programmeertaal JAL.
Met vriendelijke groet
PD5B
Bijlagen
Call gever pa0dmm001.jpg

PE5PVB
Berichten: 814
Lid geworden op: 10 apr 2006, 16:03
Roepletters: PE5PVB
Locatie: Oisterwijk
Contacteer:

Re: Callgever

#8 Bericht door PE5PVB »

Hi, kom je er niet uit. Ik heb callgever pakketjes waarbij dit allemaal op die manier gaat.
https://www.tweedehands.nl/zendamateur/ ... 39250.html

PA3CQN
Berichten: 791
Lid geworden op: 10 dec 2014, 21:59
Roepletters: PA3CQN
Locatie: Groningen
Contacteer:

Re: Callgever

#9 Bericht door PA3CQN »

PD5B schreef:Helaas PA3CQN dit is ook niet de oplossing, de call gaat iedere keer er uit bij het inknijpen van de Mic. Ook de interval van 5 min. werkt niet.
Jammer. Ik heb er lang naar gestaard maar kennelijk maak ik toch een gedachtenfout? Het compileert hier gewoon, dus ik verwachtte dat het zou werken. ( neem aan dat je zelf ook opnieuw gecompileerd hebt?)
Ik heb geen PIC meer dus verder testen lukt helaas niet.
_______________________________________________
Na jaren afwezig toch maar weer eens rondkijken.
UV-B5, RTL stick, SDRPlay2, miniwhip, magloop, X300
http://www.pa3cqn.nl
_______________________________________________

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#10 Bericht door PD5B »

Ik wil iedereen bedanken voor het meedenken, het is uiteindelijk met wat hulp gelukt.
Het was een denkfout van mij, de call gever werkt zoals beschreven, iedere keer als potje 4 laag wordt de call gever geactiveerd en zend hij de call uit (ingestelde tijd) dus wat ik wilde kan met deze schakeling niet.

Gr. PD5B

Gebruikersavatar
PA0ETE
Berichten: 5692
Lid geworden op: 21 feb 2006, 00:59
Roepletters: PA0ETE
Locatie: Amersfoort
Contacteer:

Re: Callgever

#11 Bericht door PA0ETE »

Als je de gate van de BS170 loshaalt van poot 2 en aan massa legt, kan het IC de PTT van de zender niet meer bedienen. Tenminste als ik het goed zie. (Je kunt in plaats daarvan ook de BS170 eruit solderen).

Nadeel is dan wel dat hij ook later de mic niet ingedrukt kan houden en dan misschien een onvolledige call uitzendt. Dat zou ik echter eerder een voordeel vinden dan een nadeel :-)

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#12 Bericht door PD5B »

Maar daarom ging het mij, dat de zender in blijft als de call eruit gaat, nu heb ik het zo dat de call iedere 3 minuten gaat, als ik dan net aan het praten ben dan kun je de call op de achtergrond horen, maar als ik tijden het uitzenden van de call de Mic loslaat stopt wordt de call afgekapt, en dat wilde ik anders.
Maar dat komt zeker nog een keer.

Gr. PD5B

Gebruikersavatar
PA0ETE
Berichten: 5692
Lid geworden op: 21 feb 2006, 00:59
Roepletters: PA0ETE
Locatie: Amersfoort
Contacteer:

Re: Callgever

#13 Bericht door PA0ETE »

Dan heb ik het net verkeerdom begrepen :-)

De callgever die ik volgens PA8C heb doet juist precies dat. Ik lees dat ik het inderdaad verkeerd gelezen heb...

Gebruikersavatar
PD5B
Berichten: 132
Lid geworden op: 15 okt 2009, 16:43

Re: Callgever

#14 Bericht door PD5B »

Dat kan kloppen, maar ik kan natuurlijk een kopen dat is de makkelijkste weg, ik wil namelijk zelf iets maken, de software heb ik van PAØDDM helaas is hij niet meer onder ons, als ik het voor elkaar krijg om dit te verwezenlijken, dan plaats ik de software hier om te downloaden, ik ga zo wie zo het product toegankelijk maken voor ander zendamateurs.

Gr. PD5B

Plaats reactie