CW 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.
De hier gebruikte microchip is een 8-bits versie.
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
Om de PIC met HEX-codes (‘assembler’) te branden is WinPic een heel geschikt programma. http://freenet-homepage.de/dl4yhf/winpicpr.html
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.
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.
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).
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:
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.
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