MANIPULADOR ELETRÔNICO K8 – PARA OS AMANTES DO CW , ADAPTADO P/ VERSÃO COM PIC12F629 OU 12F675

Para os amantes das transmissões em CW (o famoso ‘código Morse’ em transmissões), o incrível manipulador eletrônico criado pelo Sr. Steven T. Elliott em 1988, conhecido como “K8”, foi um salto tecnológico nestas transmissões, facilitando em muito as comunicações. Recentemente, foi me pedido sobre a possibilidade de mudar o modêlo do microcontrolador, para um mais atual, com memória flash. Veja o resultado….

Veja o esquema abaixo:

Podemos observar que o esquema, que não difere do original, exceto pela necessidade de colocar um pull up no pino 4. Foi dado opção de escolha entre o modelo 12f629 ou 12f675, bastando alterar comentando ou descomentando, no arquivo asm, e , em seguida, recompilar no MPLAB-IDE. Infelizmente, não tenho conhecimento de código ‘morse’,e portanto , ‘penei’ para entender a rotina (excelente, por sinal). Obtive a ajuda do Sr. João, profundo conhecedor da ‘arte’ do CW. O autor original também disponibilizou seu Email para eventuais dúvidas : email: steve@k1el.com or k1el@aol.com. Vários sites também poderão prover ajuda orientadoras para o uso deste dispositivo (aviso que eu não entendo).
Abaixo, segue os arquivos ASM e HEX compilados com o prefixo da estação original do autor. Servem para testes apenas.
Altere o prefixo para corresponder a sua estação no código ASM, na parte:

CALL_0 EQU M_P ;Coloque seu prefixo aqui, letra por letra (use sempre um M_ na frente da letra)
CALL_1 EQU M_Y ; não mais de 7 caracteres
CALL_2 EQU M_2
CALL_3 EQU M_M
CALL_4 EQU M_G
CALL_5 EQU M_END
CALL_6 EQU M_END
CALL_7 EQU M_END

SPEED_DEFAULT EQU WPM_15 ; E escolha aqui a velocidade padrão que usará nas comunicações

Depois recompile com o MPLAB-IDE para obter o arquivo HEX correto para sua estação.

Segue o arquivo ASM, de novembro de 2012 (obs. com bug ao enviar prefixo da estação em modo BEACON):
K8_629_ASM

Segue o arquivo HEX, de novembro de 2012, da compilação do ASM acima:
K8_629_HEX

Pasta zipada com algumas atualizações feitas em 10/03/2018, sendo corrigido o bug ao enviar prefixo da estação em modo BEACON):
K8_MAN_MORSE

Também, manipulador PIK adaptado para 12f675, de novembro de 2012 aqui.

Links técnicos:
datasheet Pic12f629

Curiosidades:
May Day
Titanic
Telegráfo e a previsão do tempo

Até o próximo artigo!!!

110 comments on “MANIPULADOR ELETRÔNICO K8 – PARA OS AMANTES DO CW , ADAPTADO P/ VERSÃO COM PIC12F629 OU 12F675

  1. Olá Cláudio, boa tarde.
    Sim, é um programa para chave iâmbica. Esta chave é bem simples, tendo o controle de velocidade por potenciômetro.
    Tentei compilar, não consegui. Surgiram muitos erros.
    At,
    João

  2. Caro Cláudio, boa noite.
    O programa com o PIC12C509 que voce saneou está muito bom.
    É possível e prático modificar o ASM para que possa ser gravado no PIC12F629, mantendo todas as funcionalidades do programa?
    Att,
    João.

    1. Olá João!
      Tem algumas diferenças entre os 2 modelos, como comparadores internos, posição inicial de ram, e registradores internos. Mas, creio que possa ser mais ou menos assim :
      ;__CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _ExtRC_OSC ;ORIGINAL

      __CONFIG 0X3FC6 ; PARA OSCILADOR COM RESISTOR/CAPACITOR
      ;__CONFIG 0X3FC4 ; PARA OSCILADOR INTERNO DE 4MHZ

      LIST P=12f629
      __IDLOCS h’1′
      RADIX hex

      #include “p12f629.inc”

      #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA
      #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1

      ;port & flgs mask definitions
      ;these equates must be contiguous from 0
      DITSW equ 0 ;dot switch (on paddle key)
      DAHSW equ DITSW+1 ;dash switch (on paddle key)
      IL equ DAHSW+1 ;iambic dash flag
      IC equ IL+1 ;in character

      AS equ 0×03 ;auto character spacing
      TX equ 0×04 ;keying output

      ;timing calibration values
      DAH equ 0xb5 ;counts for dah
      DIT equ 0x3b ;counts for dit
      REST equ 0×39 ;counts for dit rest
      ASPACE equ 0×76 ;counts for char space

      cblock 0×20 ;antes 07
      flgs
      timer1
      paddle
      endc
      ;======================================================================
      org 0×0
      goto start
      data ‘P’,’I’,’K’,’ ‘,’V’,’1′,’.’,’1′,’4′
      org 0×40 ;leave unprotected memory unused
      ;======================================================================
      start
      clrw ;initialise GPIO
      movwf GPIO
      BANK1
      movlw ~(1<<TX) ;mask for TRIS for output pins
      movwf trisio
      ;tris GPIO ;and activate outputs

      movlw 0x00 ;setup the options bits
      movwf OPTION_REG
      ;clrw ;setup the options bits
      ;option
      BANK0

      movlw 0X07
      movwf CMCON ;DESLIGA COMPARADORES

      movlw (1<<DAHSW|1<<DITSW) ;paddle pins
      clrflgs
      clrf flgs

      ;value used to jump into jump table
      ;bit use
      ;0 dit
      ;1 dah
      ;2 il
      ;3 ic

      route
      andwf GPIO,w ;or in the paddle
      andlw 1<<DITSW|1<<DAHSW ;mask paddle bits
      iorwf flgs,w ;or in the flgs
      addwf PCL,f ;computed goto

      jtable
      goto dit
      goto dah
      goto dit
      sleep

      goto dah
      goto dah
      goto dit
      sleep

      goto dit
      goto dah
      goto dit
      goto aspace

      goto dah
      goto dah
      goto dit
      goto aspace

      aspace
      clrf flgs
      clrf paddle ;clear the paddle latch
      comf paddle,f
      movlw ASPACE ;prepare for end of character delay
      call delay
      movfw paddle ;get paddle latch
      goto route

      dit
      bsf GPIO,TX ;tx hi
      clrf paddle ;clear the paddle latch
      comf paddle,f
      movlw DIT ;prepare for dit
      bsf flgs,IL ;iambic long flag
      call delay ;and delay
      nop
      bcf GPIO,TX ;tx lo

      btfsc GPIO,AS ;is autospace on
      bsf flgs,IC ;set in character flag
      movlw REST ;put element duration in W
      call delay
      movfw paddle ;get paddle latch
      iorlw 1<<DITSW ;ignore dit bit
      nop
      goto route

      dah
      bsf GPIO,TX ;tx hi
      clrf paddle ;clear the paddle latch
      comf paddle,f
      movlw DAH ;prepare for dah
      bcf flgs,IL ;iambic long flag
      call delay ;and delay
      nop
      bcf GPIO,TX ;tx lo

      btfsc GPIO,AS ;is autospace on
      bsf flgs,IC ;set in character flag
      movlw REST ;put element duration in W
      call delay
      movfw paddle ;get paddle latch
      iorlw 1<<DAHSW ;ignore dah bit
      goto route
      ;======================================================================
      ;delays (spins) for number of clicks in reg W
      ;5 cycles per click, 2.0mS at 10KHz (10wpm)
      delay
      movwf timer1
      movfw GPIO ;read paddle
      andwf paddle,f ;latch paddle
      decfsz timer1,1
      goto $-3
      retlw 0
      ;======================================================================
      end

      Tente compilar e verifique se funciona pois não tive oportunidade de testar.

      O que faz este circuito? Chave iambica?

      Cláudio

  3. Olá Cláudio, boa noite.
    Tudo certinho, entendi sua explanação. Quanto ao MPASMWIN marquei o “case sensitive” e agora compilou sem problemas.
    Muito bom mesmo, valeu de verdade seus ensinamentos.
    Muito obrigado por estas valiosas informações.
    Deus te abençoe sempre. Atenciosamente,
    João.

  4. Caro Cláudio, boa noite.
    Desconsidere a mensagem anterior.
    Beleza, consegui compliar com o MPLAB IDE. Ficou cem por cento.
    Fico-lhe muito grato mais uma vez pela atenção e boa vontade em ajudar.
    Deus te ilumine sempre e muito obrigado.
    Att,
    João.

  5. Caro Cláudio, boa tarde.
    Copiei o seu ASM conferi linha por linha com o meu ASM. Ao compilar com o MPASMWIN deu os mesmos tres erros e uma reportagem.
    Fiz um teste com outro programa ASM, compilou certinho.
    O que será que está ocorrendo. Se voce conseguiu compilar porque eu não consigo?
    Att,
    João.

    1. Olá João!
      É o mesmo programa que você me enviou? A únicas coisas que encontrei foi alguns caracteres diferentes apesar de semelhantes. Por exemplo, olhe na porção de código abaixo:

      LIST P=12C508A,mm=on
      __IDLOCS h’1′
      RADIX hex
      #include

      Observe como é as aspas na linha __IDLOCS h’1′.
      Mas se você digitar aspas fica assim __IDLOCS h’1′. Notou a diferença nelas ?
      As notações hexas corretas aparecem em azul. Ex. 0x03 , h’1′, etc, tem que ficar em azul. Se ficar em vermelho está errado.
      Também, observe como é o ‘x’ da porção de código abaixo:
      AS equ 0×03 ;auto character spacing
      TX equ 0×04 ;keying output

      Mas se digitar, será assim ( olhe somente o x):
      AS equ 0x03 ;auto character spacing
      TX equ 0x04 ;keying output

      Diferença sutil que estava dando erro ao tentar compilar.
      Para facilitar, usei o recurso ‘replace’ na aba ‘edit’ e substitui todas estas ocorrências ‘estranhas’ de uma única vez do texto asm.
      Daí compilou sem problemas. Talvez possa ser a versão do compilador, não sei.

      Cláudio

    2. Olá João! Esqueci um ponto. Verifique no mpasmwin se não está setado para diferenciar letras maiúsculas de minusculas . Se tiver, coloque para não diferenciar, pois no código tem locais que as letras foram escritas em maiúsculas e outros em minusculas. Veja o exemplo abaixo:
      aspace ; <– aqui em minusculas
      clrf flgs
      clrf paddle ;clear the paddle latch
      comf paddle,f
      movlw ASPACE ;prepare for end of character delay ;<- aqui está em maisculas
      call delay

      Claudio

    3. Olá João! Ultima forma. O Mpasmwin tem que diferenciar maiúsculas da minusculas, pois tem DIT equ 0x3b que é uma constante e ‘dit’ que é um label. Se ele não diferenciar, irá dar justamente os 3 erros que você reportou.

      Cláudio

    4. Olá João!
      Antes que pergunte como mudar no MPASMWIN, vá na pasta que está instalado e abra-o diretamente, por clicar 2 vezes. Aparecerá a tela do MPASMWIN. Na parte esquerda encontrará uma caixa que pode ser ticada de nome ‘CASE SENSITIVE’. Se ticada, irá diferenciar de maiúsculas de minusculas. Depois feche o programa e tente recompilar seu arquivo pelo mplab_ide.
      Cláudio

Comments are closed.

Back To Top