CW Callgever

callgever

callgeverCW callgever

Een handige schakeling om je call in CW te kunnen geven, en tevens de eerste ervaringen op te doen met het programmeren van processoren uit de MicroChip PIC familie. Om eens iets met PICs (Programmable Interrupt Controller) te doen kun je het best simpel beginnen. PICs van Microchip zijn er in maten en soorten. De 8-bit, 8-pin versies zijn het eenvoudigst.


Het eindresultaat: een handig doosje dat in CW je call seint. 

Callgever

 

De hier gebruikte microchip is een 8-bits versie.

Pic12f675

Leuke chips om mee te beginnen zijn de 12F629, 12F675 en 12F683. Het makkelijkst werkt de –I/P versie (DIL8).  Deze familie PICs heeft 6 I/O pins die afzonderlijk als input of output geprogrammeerd kunnen worden (behalve pin 4, altijd input). Verder hebben de PICs 1K of 2K flash program memory, een comparator en een timer aan boord. Ook ontbreekt een 10-bits ADC niet bij de 12F675 en 12F683. De 12F675 kan werken met een extern 20MHz kristal of een interne 4 MHz oscillator. De 12F683 heeft een 8 MHz interne oscillator en 2K flashmemory.

En dat alles voor 3 euro per PIC ( www.conrad.nl ). Overigens kunnen free samples via de website van Microchip aangevraagd worden: www.microchip.com  Hier is ook de volledige datasheet (>100 pagina’s per PIC) van elke PIC te downloaden. Zoeken kan op deze pagina.

Om een 8, 14 of 18 pins PIC te kunnen programmeren is er een programmer nodig. De PicProg4 is een simpele programmer van Ezkits die aan een seriële COM poort van je PC geknoopt kan worden. De programmer kan kant-en-klaar en als kitje besteld worden.

Zie voor meer info http://ezkits.illumicon.nl/nl/picprog4.html

Programmer

Om de PIC met HEX-codes (‘assembler’) te branden is WinPic een heel geschikt programma. http://freenet-homepage.de/dl4yhf/winpicpr.html

WinPicProgrammer

Een compiler is onmisbaar wanneer je zelf programma’s in een hogere-orde programmeertaal wilt schrijven. Na het schrijven van het programma genereert een compiler de HEX-code die in de PIC met WinPic geladen wordt. Er bestaan compilers voor C, C+, JAL en BASIC. BASIC is erg toegankelijk en werkt  overzichtelijk. ProtonIDE is zo’n fraaie BASIC compiler. Een trial-versie ProtonLITE kan gratis gedownload worden: http://www.picbasic.org/proton_lite.php

Beperkingen van de Lite-versie zijn; 30 dagen geldigheid, geschikt voor 4 typen PICs (12C508, 12F675/12F683/12F629, 16F877, 16F628A) en maximaal 50 programmeerregels. Maar dit is ruim voldoende voor een eerste kennismaking met PIC-programming.

CWcallgever

De callgever maakt gebruik van drie I/O pinnen (input switch pin 5, output LS pin 6 en output LED pin 7). Input pin 4 wordt niet gebruikt en met een pull-up weerstand met +5V verbonden. Het schema is erg eenvoudig geworden. Er zou nog verder bezuinigd kunnen worden door in plaats van de externe X-tal oscillator de interne 4 MHz oscillator te gebruiken. Geen probleem, want de callgever hoeft geen tijd-kritische taken uit te voeren. Het 8 ohms luidsprekertje (hier een 0.1 Watt exemplaar uit een oude PC) wordt direct via een 10 μF elkootje aangesloten. Het klinkt uiteindelijk wat blikkerig, maar HiFi is niet nodig.

schema

Prototype 1

Prototype2

In de initialisatie is aangegeven dat hier de kristal oscillator gebruikt wordt: XTAL = 20.

Voor device is de 12F675 gekozen, terwijl ik de HEX-code in een 12F683 heb gebrand.

Het programmaatje wilde ik rond het MID$ commando schrijven. Echter string commando’s bleken alleen voor 16-bit PICs ondersteund te worden. Een uitstekend commando voor de callgever bleek het LOOKUP commando.

Dit commando maakt het mogelijk een reeks aan symbolen (maximaal zelfs 128)  één voor één in te lezen en toe te kennen aan een variabele. De hier gebruikte symbolen hier zijn 1, 2, 3 en 4.

O.m. op http://www.picbasic.nl/ kan een lijst van alle beschikbare BASIC commando’s in Proton teruggevonden worden.

Bij analyse van CW signalen blijken 4 symbolen voldoende om elke karakter in CW te kunnen definiëren. (kort aan, kort uit, lang aan, lang uit).

Audacity

Vanzelfsprekend moet voor andere calls de symbolenreeks worden aangepast. Moeten er woordspaties gebruikt gaan worden dan zal en extra symbool voor ‘ extra lang uit ‘ moeten worden toegevoegd.

De luidspreker wordt direct met het commando FREQOUT aangestuurd. FREQOUT maakt het mogelijk een audiosignaal met een gedefinieerde duur en frequentie (in theorie tot max. 65 KHz) op te wekken zonder een externe audiogenerator te gebruiken.

'****************************************************************

'*  Name    : CW7.BAS voor 12F675 of 12F683                     *

'*  Author  : Ron van den Brink, PA2RF                          *

'*  Notice  : Copyright (c) 2007                                *

'*          : All Rights Reserved                               *

'*  Date    : 31-1-07                                           *

'*  Version : 1.2                                               *

'*  Notes   : PA2RF morse after push switch                     *

'*          : LED aan pin 7, LS aan pin 6, switch pin 5         *

'****************************************************************

 

;Initialisatie

 

OPTIMISER_LEVEL = 6             ;Set for maximum optimiser level

Device 12F675                   ;Gebruik een 12F675 of 12F683 type PIC

XTAL = 20                       ;Gebruik 20 MHz X-tal

DelayMS 100                     ;Wacht tot pic gestabiliseerd is

ALL_DIGITAL TRUE                ;Alle ingangen digitaal

TRISB = %00001100               ;PORTB naar output  behalve B.3  en B.2

Symbol LED1 = GPIO.0            ;Poort B.0 (pin 7) nu de naam LED1

Symbol S1   = GPIO.2            ;Poort B.2 (pin 5) heeft nu de naam S1

Dim INDEX As Byte

Dim Frame As Byte

 

;Hoofdprogramma

While 1 = 1                   ;Oneindige lus

   

    If S1 = 0 Then            ;S1 gesloten (=laag) dan naar morse

    DelayMS 25                ;debounce

    GoSub Morse               

    Else LED1 = 1             ;LED uit

    EndIf

   

Wend

 

;Subroutine MORSE

Morse:                       

   

    For INDEX = 0 To 34

    Frame = LookUp INDEX , [ 1 , 2 , 3 , 2 , 3 , 2 , 1 , 4 , 1 , 2 , 3 , 4 , 1 , 2 , 1 , 2 , 3 , 2 , 3 , 2 , 3 , 4 , 1 , 2   , 3 , 2 , 1 , 4 , 1 , 2 , 1 , 2 , 3 , 2 , 1 ] 

    If Frame = 1 Then GoSub AANKORT

    If Frame = 2 Then GoSub UITKORT

    If Frame = 3 Then GoSub AANLANG

    If Frame = 4 Then GoSub UITLANG

    Next

 

Return

 

 

AANKORT:        LED1 = 0                        ' LED aan kort

                FreqOut PORTB.1 , 20 , 3500     ' 3500 Hz toon op pin 6 voor 20 ms

                Return

 

UITKORT:        LED1 = 1                        ' LED uit kort

                DelayMS 20

Return

 

AANLANG:        LED1 = 0                        ' LED aan lang

                FreqOut PORTB.1 , 60 , 3500     ' 3500 Hz toon op pin 6 voor 60 ms

 

Return

 

UITLANG:        LED1 = 1                            ' LED uit lang

                DelayMS 60

Return

 

;Einde programma

End                          

Het programmaatje voor de callgever in PROTON Lite

Om te controleren of de code goed in elkaar steekt heb ik het uitgangssignaal van de callgever aan MixW aangeboden. Dit programma bezit een CW-decoder. Het resultaat:

MixWview

Een gamecontroller van een jaartje of 20 oud is nu de behuizing van de callgever. Naast de callgever is hier plaats genoeg voor twee stuks 3,6 Volt Lithium-ion batterijen. Aan de voorzijde is een schakelaartje met groene aan/uit LED ingebouwd. De audiocall wordt begeleid door het knipperen van een blauwe LED.

Final view

Bronnen:

http://www.picbasic.nl/
http://www.picbasic.org/proton_lite.php
http://www.microchip.com
http://freenet-homepage.de/dl4yhf/winpicpr.html
http://ezkits.illumicon.nl/nl/picprog4.html