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

0

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!!!

0

110 comments

  1. 0

    Caro Cláudio, boa noite.
    Voce está certo, esses divisores de tensão além de esquentar muito vão forçar o trafo. Vou pensar em outra saída menos quente.
    Valeu a orientação.
    Att,
    João

  2. 0

    Olá Cláudio, boa noite.
    Entendi. Relativo ao trafo, creio que suporte. Eu tirei ele de uma sucata de transmissor. O único problema é que só tem um enrolamento com 2 x 425 volts de onde consigo 600v para alimentar tudo. Se tivesse outro enrolamento seria mais prático.
    Só para encerrar, o divisor com um resistor só a outra extremidade vai à terra ou é a saída da tensão reduzida?
    Obrigado por sua atenção de sempre.
    73,
    João.

    1. 0

      Olá João! Com um resistor só em série, precisaria usar uma válvula reguladora de tensão a gás. Com dois resistores não precisa. Mas este método irá jogar fora uns 20 watts somente em calor. Não seria interessante usar outro transformador menor para os 300 volts?
      Cláudio

  3. 0

    Olá Cláudio, boa noite.
    Dá forma como você calculou com um só resistor não vai me atender. Os 600 volts oriundos do trafo eu preciso para alimentar a placa da válvula 6146. Aí desses 600 volts eu teria um divisor de tensão com 2 resistores em série, sendo que na intercessão deles eu tiraria os 250 volts para alimentar a placa da 12BY7. Voce calculou o primeiro resistor (R1=13K5/18watts) agora, como calcula o segundo resistor (R2)?
    Att,
    João

    1. 0

      Olá João!
      Ficou assim: do + b de 600 volts ligue o resistor de 13k5 (20 w). O outro terminal será ligado ao resistor de 9k7 (20w) ao negativo (chassi). No meio dos resistores teremos 250 volts. O único problema é se sua fonte de 600 volts não vai ‘arriar’ com uma carga de 26 mAmp.
      Claudio

  4. 0

    Caro Cláudio, boa noite.
    Voce saberia como calcular os resistores de um divisor de tensão para obter na intercessão uma tensão menor?
    Tenho 600 v já retificados e filtrados e pretendo reduzir para 250 volts para alimentar a placa da válvula 12BY7.
    Características da válvula:
    – Tensão de placa:250v
    – Corrente de placa: 26ma
    Att,
    Pretti

    1. 0

      Olá João!
      Válvulas não é minha praia. Mas para calcular divisores de tensão resistivo não é difícil. Terá que saber o valor da fonte (600 v), o valor desejado no nó de saída (250v) e a corrente desejada (0,026mA).
      A resistência interna da válvula será 250/0,026=9615 ohms.

      O valor da tensão sobre o resistor redutor será : 600v – 250v= 350v.
      O valor deste resistor redutor será: 350/0,026=13461 ohms.
      O valor dissipado por ele será: 350 x 0,026 = 9,1 watts (use o dobro).
      Mas se a corrente da válvula não for constante em 26 mA, então não funcionará ( surgindo tensões elevadas na placa quando aumentar a resistência interna).
      Cláudio

  5. 0

    Olá Cláudio, boa tarde.
    Voce fez o melhor e te agradeço muito pelo esforço e boa vontade. A questão é realmente estrutural. Pelo fato de ser um programa simples, gratuíto e relativamente pequeno o autor não se preocupou com detalhes, ou seja, fez divulgou e pronto. Mas valeu a tentativa em melhorá-lo.
    Vamos em frente, obrigado por sua disponibilidade, um bom fim de semana com votos de saúde/paz e que Deus te ilumine sempre.
    Atenciosamente,
    João.

  6. 0

    Olá Cláudio, boa tarde
    Consegui gravar o PIC com sucesso e o problema continua, então não é problema na gravação. A falha “mau contato” está mais acentuada no pino 7.
    Att,
    João.
    Em tempo: o problema é como se fosse um teclado; voce aperta a tecla e a letra não saí, entendeu. Voce digita a palavra mas fica faltando letras.
    Ex: laoraóri. A intenção era escrever laboratório.

    1. 0

      Olá João! Não fiz mudanças que pudessem resultar neste tipo de problema. Será que não é uma característica do projeto? Não tem um manual explicativo de uso?
      Cláudio

  7. 0

    Olá Cláudio, bom dia
    A gravação do PIC foi feita fora do circuito. Ela é concluida mas o IC-Prog registra um erro, que de repente é a causa do problema. A gravação não é concluída com sucesso.
    O problema surge nos pinos 6 e 7. às vezes num e às vezes no outro. Do nada ao aterrar o pino 7, por exemplo, não chaveia, como se houvesse um mau contato. Ao soltar a tecla e apertar novamente volta ao normal. Um detalhe simples, mas atrapalha tudo.
    Quanto a chave no pino 4 sem problema. Minha dúvida é com relação ao resistor de 4k7 no pino 4. Isto porque, com este resistor ou sem ele o circuito funciona.
    Att,
    João.

  8. 0

    Olá Cláudio, boa noite.
    Quando a tecla da chave perdeu o contato mantive ela travada e medi a tensão no pino 3, deu zero volts. Colocando o resistor de 4k7 no pino 4 e retirando permaneceu sem tensão no pino 3. O simples fato de apertar a outra tecla, fez com que a tecla travada voltasse ao normal e aí passou a ter tensão no pino 3. Então, estou acreditando que o problema esteja no programa. É como se fosse um “bug”. Do nada uma tecla perde contato e volta ao normal, também do nada.
    Quanto ao resistor de 4k7, não tem nada com o problema.
    Att,
    João.

  9. 0

    Olá Cláudio, boa noite.
    Tive dificuldade para gravar o PIC com o IC-Prog.
    Grava, mas ao final dá uma mensagem de erro “verificação falhou no endereço 0046h”. Tentei com alguns pic’s e o mesmo erro. Então,
    conectei o pic assim mesmo no circuito e a resposta foi positiva. Funcionou legal, mas de vez em quando uma das teclas da chave fica sem contato. Quando solta ou aperta a outra tecla fica normal. Parece um detalhe simples, mas atrapalha bem na hora de transmitir. Não sei se tem algo com o erro que apresentou após a gravação do PIC. Se não fosse este detalhe estaria realmente 100%. Qual a função do resistor de 4k7 alimentando o pino 4 do 12F629. Estou perguntando porque funciona com ou sem o resistor. Então não sei se o problema tem algo com esse resistor.
    Att,
    João.

    1. 0

      Olá João! Grave o pic fora do circuito, pois os capacitores nos pinos podem afetar a gravação. O pino 4 não tem pull up interno por isto foi colocado o resistor de 4k7. Eu não entendo de “CW’ mas parece que a chave no pino 4 é para incluir um espaço entre caracteres. O erro ocorre de vez em quando, é isto? Qual pino dá o erro?
      Cláudio

  10. 0

    Olá Cláudio, boa tarde.
    Enviei para voce por email um arquivo.mp3 com uma sequência de sons breves e uma sequência de sons longos, gerados por uma chave iâmbica.
    Att,
    João

  11. 0

    Olá Cláudio, bom dia.
    Estou com o circuito idêntico ao seu aqui no Protoboard.
    Resultado:
    Na saída, pino 3, coloquei um buzzer.
    Ao aterrar, via resistor 1k, o pino 6 ou 7 no buzzer sai um som constante, o que não é correto.
    Exemplo do correto:
    Aterrando-se o pino 6 deveria sai vários sons breves, dit dit dit dit….que são os pontos.
    Aterrando-se o pino 7 devria sair vários sons longos, dah dah dah dah- – – -que são os traços.
    Poderia ser o inverso, sem problema. Aí se mudaria a posição na chave, entendeu. O importante é que de um lado saia sons breves e do outro sons longos. O potenciômetro ajusta a velocidade desses sons.
    Att,
    João

    1. 0

      Olá João!
      Consegui achar o asm original e esquema (pik). Abri no Mplab duas instâncias, sendo que em uma coloquei o projeto com o asm para o 12f508a e na outra, para o projeto 12f675/629. Fiz as modificações para adequar ao hardware interno do pic 12f629/675. Rodei em ambos em modo de simulação, e obtive resultados iguais. Montei o circuito original, que usa um capacitor de 4n7 junto ao resistor de 22k (ou potenciômetro). Observei as formas de onda com o osciloscópio e parecem reagir conforme o esperado. Este dispositivo não emite som para monitor, apenas chaveia o transmissor conforme os pontos e traços. Coloquei um ‘monitor’, ou seja, um pequeno ‘buzzer’ que apita se a saída estiver alta . Apertando uma tecla, o som no buzzer é curto, com espaçamento entre o próximo apito. Apertando a outra tecla, o período parece umas 3 vezes maior, com espaçamento do anterior. Apertando as duas teclas, intercala ora um ora outro. Experimente, por favor, pegando o arquivo aqui.

      Cláudio

  12. 0

    Olá Cláudio, boa noite.
    Fico feliz pelos testes e resultados obtidos. Vou testar por aqui e te informo.
    O autor do programa, datado de 2001, é o radioamador de indicativo VK1OD, nome Owen, da Austrália.
    Att,
    João.

  13. 0

    Olá Cláudio, boa noite.
    Fique tranquilo e valeu o esforço até aqui.
    Vou continuar tentando;se conseguir algum sucesso de aviso.
    Forte abraço e que Deus te ilumine sempre.
    Att,
    João.

    1. 0

      Olá João!
      Fiz uns testes e consegui aparentemente ter sucesso, mas como não tinha o 12f629 eu usei o 12f675. Mas creio que o hex deva funcionar também no 12f629.
      Seria interessante, se você souber, citar o autor do programa original, pois ele merece os créditos.
      Cláudio

  14. 0

    Olá Cláudio, boa tarde.
    Com ou sem capacior de 100k nos pinos 6 e 7 à terra não fez diferença. Com ou sem resistor de 10K no pino 4, também, não fez diferença. Mantendo os resistores de 1k nos pinos 6 e 7, ou diminuindo para 200R, também, não fez diferença.
    Resultado:
    1) Ao ligar o oscilador ele já fica emitindo pulsos, ou seja, no pino 3 tem tensão e não deveria ter.
    A tensão no pino 3 só deve ocorrer quando aterrar o pino 6 ou 7. Se conseguir anular esta tensão no pino 3, quando em repouso, acredito que resolverá o problema.
    3) os pinos 6 (breves) e 7 (longos) estão atuando.
    2) O potenciômetro está atuando certindo, prá maior ou menor velocidade.
    3) O resistor de 10k do VCC ao pino 4 não está surtindo efeito.
    Conclusão: Ao ligar o oscilador ele não deve emitir nenhum sinal, ou seja, no pino 3 não deve ter tensão. A tensão no pino 3 só ocorrerá quando se aterrar os pinos 6 ou 7.
    Att,
    João

    1. 0

      Olá João! Não tem jeito. Terei que montar em um protoboard para fazer testes. Mas não tenho disponibilidade no momento. Assim que tiver um tempinho vou fazer isto e se tiver sucesso te retorno.
      Cláudio

  15. 0

    Olá Cláudio.

    Pino 2 : Do +5VCC para potenciômetro que vai ao pino 2. O potenciômetro altera velocidade dos pontos e traços.
    Pino 3 : Saída. É ligado na base de um NPN com o emissor à terra. Quando a base recebe tensão o transmissor é ativado.
    Pino 4 : Ligado a um capacitor de 1k à terra.
    Pino 5 : Não usa
    Pino 6 : Capacitor 100k à terra + resistor de 1K, sendo a outra extremidade do resistor ligada à chave que ao ser aterrada emite pulsos.
    Pino 7 : Capacitor 100k à terra + resistor de 1K,
    sendo a outra extremidade do resistor ligada à chave que ao ser aterrada emite pulsos.

    OBS: As ligações acima são para o PIC12C509.

    Att,
    João

    1. 0

      Olá João!
      Olá João!
      Então, realmente precisa dos pullups. Elimine para teste os 2 resisotres de 100k ao gnd. Mantenha a ligação a chave mas ao invés de resistor de 1k use de 220 ohms.
      Coloque o resistor de 10k ao pino 4, o outro lado ao vcc. Mantenha o capacitor neste pino ao gnd. Use o hex obtido pelo programa abaixo, incluido no fim deste comentário.

      asm:

      AUTOR ORIGINAL : VKD10D OWEN (Austrália)

      __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _EXTRC_OSC_NOCLKOUT ;

      LIST P=12f629
      __IDLOCS h’1′
      RADIX hex
      ERRORLEVEL -302
      #include

      #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 0x03 ;auto character spacing
      TX equ 0x04 ;keying output

      ;timing calibration values
      DAH equ 0xb5 ;counts for dah
      DIT equ 0x3b ;counts for dit
      REST equ 0x39 ;counts for dit rest
      ASPACE equ 0x76 ;counts for char space

      cblock 0x20 ;antes 07
      flgs
      timer1
      paddle
      endc
      ;======================================================================
      org 0x0
      goto start
      data ‘P’,’I’,’K’,’ ‘,’V’,’1′,’.’,’1′,’4′
      org 0x40 ;leave unprotected memory unused
      ;======================================================================
      start
      clrw ;initialise GPIO
      movwf GPIO
      BANK1
      movlw ~(1<<TX) ;mask for TRIS for output pins
      movwf TRISIO

      bsf IOC,3 ;liga interrupção por mudança pino 4
      bsf IOC,1 ;liga interrupção por mudança pino 6
      bsf IOC,0 ;liga interrupção por mudança pino 7

      bcf WPU,2 ;cancela pullup no pino 5
      bcf WPU,4 ;cancela pullup no pino 3
      bsf WPU,0 ;habilita pullup no pino 6
      bsf WPU,1 ;habilita pullup no pino 6
      ;tris GPIO ;and activate outputs

      movlw 0X00 ;setup the options bits
      movwf OPTION_REG
      ;clrw ;setup the options bits
      ;option
      BANK0
      bsf INTCON,3
      bsf INTCON,6
      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

      Gerou este hex:

      :020000040000FA
      :100000004028500049004B002000560031002E00CF
      :040010003100340087
      :10008000030185008316EF3085009615961416142B
      :1000900015111512151495140030810083128B155B
      :1000A0000B17073099000330A00105050339200420
      :1000B0008207702880287028630080288028702894
      :1000C000630070288028702869288028802870287C
      :1000D0006928A001A201A20976308F2022085528A4
      :1000E0000516A201A2093B3020158F200000051241
      :1000F0008519A01539308F202208013800005528B5
      :100100000516A201A209B53020118F2000000512AA
      :100110008519A01539308F20220802385528A100F2
      :0A0120000508A205A10B9028003489
      :084000000000000000000100B7
      :02400E00563F1B
      :00000001FF

      Cláudio

  16. 0

    Olá Cláudio.
    Fiz mais um teste.
    Alimentei os pinos 6 e 7 via resistor de 10k não aconteceu nada.
    Parei de alimentar o pino 4 via resistor.
    Veja bem. Qando aterra o pino 6 ou o pino 7 o oscilador responte certinho. O problema é que quando os pinos 6 e 7 estão livres (desaterrados) ele continua emitindo sons aleatórios.
    Se esses sons aleatórios parassem, estaria tudo certo, entendeu.
    Att,
    João.

    1. 0

      Olá João! Por favor, poderia repetir o que vai ligado em cada pino do circuito?
      Pino 2 – ligado a….. para… por meio de …. etc
      pino 3 …..
      pino 4 …
      pino 5…
      pino 6…
      pino 7 …

      Não tendo o esquema fica as vezes confuso saber o que ocorre.
      Cláudio

  17. 0

    Caro Cláudio, Boa noite.
    Desculpe.
    Esses resistores de 1K que tenho nos pinos 6 e 7 do circuito não tem nada a ver com “VCC”. Eles estão ligados nos pinos 6 e 7 e as outras extremidades são os contatos para terra.
    O que voce quer é que ligue o VCC aos pinos 6 e 7 via resistor. pode ser de 1K?
    Att,
    joão

  18. 0

    Olá Cláudio, boa noite.
    No circuito já tenho os resistores de 1K nos pinos 6 e 7.
    Quanto ao resistor no pino 4 do 12F629 não é necessário? Desculpe responder com outra pergunta.
    Todo circuito que vejo com o PIC12F629 tem esse resistor, por isso estou acrescentando. Mas não está fazendo nenhuma diferença com ou sem.
    Att,
    João.

    1. 0

      Olá João!
      Deixa ver se entendi: Ao pressionar a chave para um lado fornece VCC para o pino 6 e para o outro, para o pino 7, certo? E os resistores são para o Gnd (pulldown)? Se for isto, então não necessita estar ativo os pullups internos. Experimente então desliga-los por substituir esta porção no código:
      movlw 0X00 ;setup the options bits liga pullup
      movwf OPTION_REG

      por:
      movlw 0X80 ;setup the options bits desliga pullup
      movwf OPTION_REG

      Cláudio

  19. 0

    Olá Cláudio, bom dia.
    Para voce entender melhor o resultado: O pino 6 do PIC ao ser aterrado o oscilador emite uma sequência de sons curtos dit dit dit dit, que são os pontos. Ao aterrar o pino 7 ele emite uma sequência de sons longos dah dah dah dah que são os traços (funcionamento básico). O potenciômetro ligado ao pino 2 aumenta ou diminui a velocidade desses pontos e traços. O que está ocorrendo é que ao ligar o oscilador e sem aterrar o pino 6 ou 7 ele já fica emitindo sons aleatórios. O resistor de 10k no pino 4 não está surtindo nenhum efeito mas o potenciômetro está atuando para maior ou menor velocidade.
    Usei o seu HEX porque não consegui compilar o ASM.
    Att,
    João

    1. 0

      Olá João! Por favor, poderia fazer o seguinte teste: colocar 2 resistores de pullup (ao vcc) , sendo um no pino 6 e outro no pino 7. Verifique se normaliza. Quanto ao pino 4, está ligado como e qual a sua função?
      Cláudio

  20. 0

    Olá Cláudio. Segue o resultado do teste:
    Ao ligar o circuito com o PIC12F629 e mesmo sem alimentar o pino 4, via resistor de 10K, ele fica emitindo, aleatóriamente, uma sequência de traços _ _ _ _ (dah dah dah dah…). O potenciômetro está atuando, aumentando ou diminuindo a velocidade desses traços.
    Ao ligar o resistor de 10K no pino 4, permaneceu da mesma forma. Ou seja, o resistor não surtiu efeito.
    Os sons dos traços só param se desligar a chave.
    Att,
    João

    1. 0

      Olá João!
      Alterar modelo de Pic dá um pouco de canseira. Notei diferença na questão do pullup e modo sleep.
      Tente o seguinte:

      __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _EXTRC_OSC_NOCLKOUT ;

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

      #include

      #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 0x03 ;auto character spacing
      TX equ 0x04 ;keying output

      ;timing calibration values
      DAH equ 0xb5 ;counts for dah
      DIT equ 0x3b ;counts for dit
      REST equ 0x39 ;counts for dit rest
      ASPACE equ 0x76 ;counts for char space

      cblock 0x20 ;antes 07
      flgs
      timer1
      paddle
      endc
      ;======================================================================
      org 0x0
      goto start
      data ‘P’,’I’,’K’,’ ‘,’V’,’1′,’.’,’1′,’4′
      org 0x40 ;leave unprotected memory unused
      ;======================================================================
      start
      clrw ;initialise GPIO
      movwf GPIO
      BANK1
      movlw ~(1<

    2. 0

      Olá João! Atente que após o simbolo ‘menor que’ não irá aparecer neste editor, apagando completamente. Recupere esta informação no ‘include’ e nos outros lugares que aparecer. Troque as aspas e os benditos ‘x’. Ajuste para ‘sensitive case’ no mpasmwin.
      Claudio

  21. 0

    Olá Cláudio, boa tarde.
    O circuito com o PIC12C509 não precisa de alimentação, via 10K, no pino 4 e o potenciômetro para ajustar a velocidade de trabalho fica no pino 2. Este potenciômetro de 22K varia a tensão no pino 2.
    Ao substituir o PIC509 pelo PIC12F629, a única mudança que faço no circuito é acrescentar o resistor de 10k no pino 4.
    Vou fazer as mudanças no ASM depois te informo.
    Em tempo: Quanto ao TRISIO foi exatamente o que fiz e aí compilou legal.
    Att,
    João.

  22. 0

    Caro Cláudio, bom dia.
    Fiz um teste agora com o PIC12F629 no circuito, alimentando o pino 4 via resistor de 10K, não funcionou.
    Tirando o resistor de 10K e inserindo o PIC12C509, funciona normalmente.
    Att,
    João.

    1. 0

      Olá João! O trisio é um registrador que determina a direção da port. Coloque em letras maiúsculas para funcionar (TRISIO). Parece que o problema está na palavra de configuração (__config).
      O original trabalha com oscilador externo ‘RC’ usando um potenciômetro para ajustar a frequência de trabalho. Mas você citou que retirou o resistor de 10k e colocou o pic12c509 e funcionou. Não está usando mais o potenciômetro?

      Notei também que os pullups internos ficaram ligados. Mude a porção de código:
      movlw 0×00 ;setup the options bits
      movwf OPTION_REG

      para:

      movlw 0×80 ;setup the options bits ; desligando os pullups
      movwf OPTION_REG

      Mude também a palavra de configuração :

      __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _ExtRC_OSC ;ORIGINAL

      ou:
      __CONFIG 0X3FC6 ; PARA OSCILADOR COM RESISTOR/CAPACITOR

      para:

      __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _EXTRC_OSC_NOCLKOUT ;p/ 12f629

      Tente compilar e ver se funciona.

      Cláudio

  23. 0

    Caro Cláudio, bom dia.
    Consegui compilar. O HEX ficou igual ao seu.
    Fiz um teste no simulador do Proteus alimentando o pino 1 com 5,1v e o 4 via resistor 10k. o pino 3 é a saida para o speek. o pino 5 não usa. O pino 2 alimentei via resistor de 10k. Pelo circuito o pino 2 é alimentado via potenciômetro de 22K, para variar a velocidade. Então inseri um fixo de 10K só para testar.
    Resultado: Não emitiu nenhum sinal.
    O que pode ter saído errado na conversão?
    Att,
    João

  24. 0

    Olá Cláudio, boa noite.
    Agora está resumido em um erro e uma reportagem, conforme abaixo:
    Error[113] C:\TESTE\PIK.ASM 117 : Symbol not previously defined (trisio)
    Message[302] C:\TESTE\PIK.ASM 122 : Register in operand not in bank 0. Ensure that bank bits are correct.
    Esse TRISIO QUE ESTÁ COMPLICANDO TUDO!!!
    Não entendi o “x” nem quanto a cor “azul”??
    Mas reescrevi alguns “x” e os números de erros realmente reduziram.
    O que é esse trisio. O problema está relacionado com trisio.
    Att,
    João

  25. 0

    Olá Cláudio, boa noite.
    segue a lista dos erros que surgiram na compilação:
    Error[113] C:\TESTE\PIK.ASM 118 : Symbol not previously defined (×00)
    Error[112] C:\TESTE\PIK.ASM 118 : Missing operator
    Message[302] C:\TESTE\PIK.ASM 119 : Register in operand not in bank 0. Ensure that bank bits are correct.
    Error[115] C:\TESTE\PIK.ASM 160 : Duplicate label (“ASPACE” or redefining symbol that cannot be redefined)
    Error[115] C:\TESTE\PIK.ASM 168 : Duplicate label (“DIT” or redefining symbol that cannot be redefined)
    Error[115] C:\TESTE\PIK.ASM 186 : Duplicate label (“DAH” or redefining symbol that cannot be redefined)
    Os tres erros “código 115” aparecem porque não marquei o “case sensitive”.
    Att,
    Pretti

    1. 0

      Olá João!
      Estes erros tem que ver com grafia do ‘x’. Digite de novo se não estiver em cor azul.

      Gerou este hex abaixo:
      :020000040000FA
      :100000004028500049004B002000560031002E00CF
      :040010003100340087
      :10008000030185008316EF30850000308100831264
      :10009000073099000330A0010505033920048207C9
      :1000A0006728772867286300772877286728630000
      :1000B00067287728672860287728772867286028A6
      :1000C000A001A201A2097630862022084C2805163C
      :1000D000A201A2093B3020158620000005128519D7
      :1000E000A015393086202208013800004C2805165A
      :1000F000A201A209B5302011862000000512851941
      :10010000A01539308620220802384C28A1000508A5
      :08011000A205A10B87280034B1
      :084000000000000000000100B7
      :02400E00C63FAB
      :00000001FF

      Verifica se é funcional.
      Cláudio

  26. 0

    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

  27. 0

    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. 0

      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

  28. 0

    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.

  29. 0

    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.

  30. 0

    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. 0

      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. 0

      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. 0

      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. 0

      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

  31. 0

    Caro Cláudio bom dia.
    Fiz diversas alterações. O que consegui foi aumentar o número de erros ou então manter os tres já existentes.
    Estou tendo a liberdade de te enviar o programa, que é relativamente pequeno. Por favor, dê uma analisada. Segue abaixo: Att, João.
    __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _ExtRC_OSC
    LIST P=12C508A,mm=on
    __IDLOCS h’1′
    RADIX hex

    #include “p12C508A.inc”

    ;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 0x3 ;auto character spacing
    TX equ 0x4 ;keying output

    ;timing calibration values
    DAH equ 0xb5 ;counts for dah
    DIT equ 0x3b ;counts for dit
    REST equ 0x39 ;counts for dit rest
    ASPACE equ 0x76 ;counts for char space

    cblock 0x07
    flgs
    timer1
    paddle
    endc
    ;======================================================================
    org 0x0
    goto start
    data ‘P’,’I’,’K’,’ ‘,’V’,’1′,’.’,’1′,’4′
    org 0x40 ;leave unprotected memory unused
    ;======================================================================
    start clrw ;initialise GPIO
    movwf GPIO
    movlw ~(1<<TX) ;mask for TRIS for output pins
    tris GPIO ;and activate outputs
    clrw ;setup the options bits
    option
    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

    1. 0

      Olá João! Parece que você nem dormiu pensando neste asm, não é verdade (risos)?
      Assim que tiver um tempinho, irei ver se consigo, com meu parco conhecimento, te ajudar.
      Cláudio

    2. 0

      Olá João! Para o 12f508a ficou assim:

      __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _ExtRC_OSC

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

      #include

      ;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 0x03 ;auto character spacing
      TX equ 0x04 ;keying output

      ;timing calibration values
      DAH equ 0xb5 ;counts for dah
      DIT equ 0x3b ;counts for dit
      REST equ 0x39 ;counts for dit rest
      ASPACE equ 0x76 ;counts for char space

      cblock 0x07
      flgs
      timer1
      paddle
      endc
      ;======================================================================
      org 0x0
      goto start
      data ‘P’,’I’,’K’,’ ‘,’V’,’1′,’.’,’1′,’4′
      org 0x40 ;leave unprotected memory unused
      ;======================================================================
      start
      clrw ;initialise GPIO
      movwf GPIO
      movlw ~(1<<TX) ;mask for TRIS for output pins
      tris GPIO ;and activate outputs
      clrw ;setup the options bits
      option
      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

      Houve apenas pequenos erros de caracteres antigos.

      o hex ficou assim:

      :020000040000FA
      :10000000400A500049004B002000560031002E00ED
      :040010003100340087
      :1000800040002600EF0C060040000200030C670051
      :100090004601030E0701E201630A730A630A0300C3
      :1000A000730A730A630A0300630A730A630A5C0A29
      :1000B000730A730A630A5C0A670069006902760CB6
      :1000C00082090902480A8605690069023B0C470556
      :1000D00082090000860466066705390C8209090258
      :1000E000010D0000480A860569006902B50C470445
      :1000F00082090000860466066705390C8209090238
      :10010000020D480A280006026901E802830A000875
      :021FFE00E30FEF
      :00000001FF

      Agora, se for usar o 12f509 mudará o include apenas, assim:

      __CONFIG _MCLRE_OFF & _CP_ON & _WDT_OFF & _ExtRC_OSC

      LIST P=12C509,mm=on
      __IDLOCS h'1'
      RADIX hex

      #include

      ;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 0x03 ;auto character spacing
      TX equ 0x04 ;keying output

      ;timing calibration values
      DAH equ 0xb5 ;counts for dah
      DIT equ 0x3b ;counts for dit
      REST equ 0x39 ;counts for dit rest
      ASPACE equ 0x76 ;counts for char space

      cblock 0x07
      flgs
      timer1
      paddle
      endc
      ;======================================================================
      org 0x0
      goto start
      data ‘P’,’I’,’K’,’ ‘,’V’,’1′,’.’,’1′,’4′
      org 0x40 ;leave unprotected memory unused
      ;======================================================================
      start
      clrw ;initialise GPIO
      movwf GPIO
      movlw ~(1<<TX) ;mask for TRIS for output pins
      tris GPIO ;and activate outputs
      clrw ;setup the options bits
      option
      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

      O hex para o pic12f509 será este:

      :020000040000FA
      :10000000400A500049004B002000560031002E00ED
      :040010003100340087
      :1000800040002600EF0C060040000200030C670051
      :100090004601030E0701E201630A730A630A0300C3
      :1000A000730A730A630A0300630A730A630A5C0A29
      :1000B000730A730A630A5C0A670069006902760CB6
      :1000C00082090902480A8605690069023B0C470556
      :1000D00082090000860466066705390C8209090258
      :1000E000010D0000480A860569006902B50C470445
      :1000F00082090000860466066705390C8209090238
      :10010000020D480A280006026901E802830A000875
      :021FFE00E30FEF
      :00000001FF

      Ou seja, o mesmo hex, pois não vi alteração.
      Para usar o hex acima, copie em um arquivo de texto e salve com terminação ' .hex '. Ex meu_programa.hex ou o nome original se tiver.
      Divirta-se!
      Cláudio

  32. 0

    Prezado Cláudio.
    Até que tentei, mas não avancei em nada. Não detectei nenhuma linha repetida. Quanto a algum “;” que esteja faltando, se realmente está não sei como acertar.
    Voce poderia dar uma olhada no ASM?
    Att,
    João

  33. 0

    Caro Cláudio, boa noite e grato pela atenção.
    Segue os eros:
    Error[115] C:\TESTE\PIK.ASM 146 : Duplicate label (“ASPACE” or redefining symbol that cannot be redefined)
    Error[115] C:\TESTE\PIK.ASM 154 : Duplicate label (“DIT” or redefining symbol that cannot be redefined)
    Error[115] C:\TESTE\PIK.ASM 172 : Duplicate label (“DAH” or redefining symbol that cannot be redefined)
    Att, João

    1. 0

      Olá João!
      Parece que temos ‘label’s duplicados em seu programa. O que são os ‘label’? São rótulos que damos a endereços das linhas do programa para facilitar a vida do programador.
      Lembramos facilmente de nomes mas não de números.
      Observe está porção de código abaixo:

      MAIN ;<—–ISTO É UM 'LABEL' OU RÓTULO PARA O ENDEREÇO DA LINHA ( UM NOME FANTASIA PARA FACILITAR O PROGRAMADOR)
      ……..
      LIGAR ; <—-ESTE TAMBÉM É UM 'LABEL'
      BSF PORTA,0
      GOTO SAIR ; <—-ESTE TAMBÉM É UM 'LABEL'
      DESLIGAR ; <—-ESTE TAMBÉM É UM 'LABEL'
      BCF PORTA,0
      ……….
      SAIR ;<—-ESTE TAMBÉM É UM 'LABEL'
      GOTO MAIN

      Note que, se você declarar um mesmo ' label' em duas localizações do programa gerará o erro 115. Veja o exemplo abaixo:

      pula4
      goto main
      pula5
      goto ligar_equip
      pula6
      goto desligar_equip
      pula4 ;<—————————————- temos um label repetido, irá gerar um erro 115
      goto sair

      O que fazer? Mudamos alguma coisa no label!!!
      ex.
      pula4
      goto main
      pula5
      goto ligar_equip
      pula6
      goto desligar_equip
      xpula4 ;<—————————————- acrescentei um 'x', mas poderia ser trocado por outra palavra qualquer inexistente no programa.
      goto sair

      Importante: Terá que saber quais partes do programa migravam para este label via os 'gotos' ou 'call' e também alterar da mesma forma.

      ex.
      goto pula4
      ficará :
      goto xpula4

      Acontece muito isto quando fundimos pedaços de programa para formar um único programa.
      Tente então, primeiramente, identificar se existe estes 3 label: ASPACE,DIT e DAH, repetidos em alguma parte do programa.
      Pode até ser um comentário que perdeu o ';' e esta entrando para compilação.
      Divirta-se
      Cláudio

  34. 0

    Caro Cláudio, boa noite.
    Vira e volta estou por aqui com minhas dúvidas.
    Estou com um Projeto que quero montar mas ao complilar o ASM apresenta três erros, consequentemente não gerando o HEX. O ASM é para o PIC12C508A e gostaria que fosse para 12C509 que é o que tenho aqui. Fiz a alteração no programa complilei mas os três erros continuam aparecendo.
    Voce poderia dar uma analisada no ASM e tentar sanar esses três erros.
    Antecipadamente fico-lhe grato.
    Att,
    João

  35. 0

    Caro Claudio, bom dia.
    Grato pelo retorno. Vou continuar tentando alguma solução por aqui. Caso voce avance nos testes fico grato em me informar.
    Att,
    João.

  36. 0

    Caro Clauido, bom dia.
    Já fiz de tudo mas não conseguir acertar, então mais uma vez recorro a voce. Ao ligar o beacon do K-8 ele repete de 6 em 6 segundos uma chamada geral seguidas de duas letras U. Ex.:cq cq cq de U U ar K.
    Estas duas letras U estão erradas. Qual a rotina que o programa está seguindo para gerar estas letras U. O correto seria após os cq cq cq vir o indicativo, formado por no máximo 7 letras, que está no .asm.
    Já procurei por estas letras “U” no .asm e não encontrei.
    Voce teria como me ajudar?
    Att,
    João.

    1. 0

      Olá João! Até agora, não consegui acertar esta adaptação da versão do K8 (usando interruptor p/ beacon). Para mim, é um verdadeiro desafio testar os resultados, visto que não entendo ‘nada de nada’ de CW. Acompanhar o programa no simulador do Mplab_Ide também não é fácil, por haver muitíssimas rotinas dentro de rotinas, e a gente acaba se perdendo. Até que eu encontre uma solução prática para realizar os testes, não irei conseguir avançar no desfecho desta versão. Quanto a sugerir o que possa ser, não compreendo ainda muito bem o algorítimo empregado pelo autor, ficando difícil te dizer ‘faça isto ou faça aquilo’. Mas pode ter certeza, se eu obter algum progresso, você será informado.
      Cláudio

  37. 0

    Caro Claudio, boa noite.
    Agora o frequêncímetro está funcionando sem problema. Depois de vários testes fracassados, montei um pré com um BF494, um resistor de 1k, um resistor de 47k e um cpacitor 104, embaixo do soquete do PIC e a coisa funcionou cem por cento.
    Quanto ao menu, Add soma; sub diminui e zero exclui a FI lendo somente a frequência gerada pela fonte. O problema inicial estava ocorrendo devido o pré de RF estar muito afastado do pino 3 do PIC, estando interligado por um cabinho blindado. Agora o coletor do BF está ligado direto no pino 3.
    Forte abraço e mais uma vez muito obrigado por sua boa vontade em nos ajudar.
    Atenciosamente,
    Pretti.

  38. 0

    Caro Cláudio, boa tarde.
    Grato por disponibilizar o manual do frequency counter “traduzido”. Agora está tudo entendido.
    “Add” soma; “Sub” diminui e “Zero” o frequêncímetro exclui a FI e mostra apenas a frequência lida.
    Aproveitando alguns componentes da sucata montei um pré, diferente do que consta no circuito que lhe mandei, para adicionar ao frequêcímetro. Usei um J-310 e um 2n2222. Vou fazer uma conferência no circuito e testar, rs rs rs.
    Assim que concluir os testes te informo o resultado.
    Um bom domingo e vamos em frente.
    Att,
    João.

  39. 0

    Caro Cláudio, boa tarde.
    Estou refazendo toda a parte de RF que antecede o pino 3 do PIC. Estava aproveitando um circuito já pronto mas, pelo jeito, não ficou compatível com o circuito do frequency counter. Terminando a nova montagem e após os testes te informo os resultados.
    Grato por sua atenção de sempre e boa vontade em ajudar; um forte abraço e vamos em frente.
    Com relação ao ASM do K8, com beacon, caso voce faça alguma alteração por favor me disponibilize um exemplar do arquivo, pois me será muito útil.
    No mais, um bom fim de semana. Deus te ilumine sempre.
    Att,
    João

  40. 0

    Caro Claudio, boa tarde.
    OK. Realmente no menu tem a opção “ADD” e “SUB” .
    ADD soma a Frequência lida + FI e SUB possívelmente subtrai. Espero que sim.
    Fiz os testes iniciais com leitura direta e com o “ADD” deu tudo certo. Desliguei o frequêncímetro, liguei para fazer o teste com as outras funções e não leu mais nada. Só fica aparecendo o zero aceso no penúltimo display. Consigo entrar no menu, faz todas as operações, mas não lê mais nada. A fonte de sinal está ok, tem RF no pino 3, alimentação cc no pino 4 e 14, tudo certinho. Já chequei tudo com o multi-teste e a ponta de RF. Já gravei outro PIC e não tem jeito. O que pode estar ocorrendo?
    Att,
    João

    1. 0

      Olá João! Não tenho a menor ideia do que pode estar acontecendo. Verifique se você saiu do modo de programação usando o ‘QUIT’. Tente carregar o arquivo hex original fornecido pelo autor (versão 2). Note que o autor se dispôs a colocar outros valores no asm se lhe fosse pedido via email. Afinal, ele é a pessoa mais indicada para ajudar em suas dúvidas. Você experimentou colocar uma frequência acima da FI para testar ? Pode ser que abaixo ele não mostre, se você já conseguiu programar para subtrair o valor da FI(suposição).
      Cláudio

  41. 0

    Caro Cláudio, bom dia.
    Fiz a compilação do ASM com o MPLAB 7.0 fincando tudo cem por cento. Quanto ao uso da versão 2 e luminosidade dos displays, entendi.
    Teste prático:
    Sem sinal de RF no pino 3 do PIC acende o penúltimo display, indicando “0”.
    Com sinal de RF (16000 Khz) no pino 3 a leitura direta é precisa. Muito bom.
    Agora, Com os mesmos 16000 Khz na entrada e com a inserção da FI 8988,3 Khz está ocorrendo a somatória, quando o correto seria a subtração.
    É possível dentro do ASM corrigir a fórmula para ao invés de somar, diminuir? Acredito que a mudança corrigirá o problema.
    Att,
    João

    1. 0

      Olá João! Por favor, verifique no site que você baixou este programa como você deverá proceder para programar o frequencímetro em questão, para subtrair a FI. Existe um botão que poderá ser acionado para ajustar varias funções possíveis. Creio que lendo o ‘manual de operações’ fornecido junto ao site, você deverá ser bem sucedido em fazer estas alterações e conhecer outras.
      Cláudio

    2. 0

      Olá João! Creio que seja estas as informações para você programar seu frequencímetro:

      tradução:

      “”==================================================================
      Adicionando ou subtraindo uma freqüência de offset
      Se o contador é usado em um receptor de ondas curtas ou transceptor , você pode querer adicionar ou subtrair um valor de deslocamento do frequeny medido. A frequência deslocada é a mesma que a frequência intermédia , em muitos casos , porque o contador é normalmente ligado ao VFO receptores ( oscilador de frequência variável ) . Para este efeito , um modo de programação ( ou ” modo de configuração ” ) foi implementado no firmware para que você possa entrar em uma freqüência de offset sem reprogramação o firmware do PIC .

      O RA5 sinal (pino 4 do PIC 16F628 ) será usado para alternar entre o modo normal de operação para modo de programação. Normalmente, o nível de RA5 é elevado porque está ligado à tensão de alimentação , através da resistência pull-up ( 10k a 22 k ) . Se você nunca vai precisar adicionar ou subtrair um deslocamento de freqüência , conecte-o permanentemente com a tensão de alimentação ( deve haver um nível definido em RA5 , infelizmente, não tem resistor pullup interno). Tornando RA5 em nivel baixo ( conectar o pino 4 e pino 5 do PIC , com uma pequena chave de fenda ), o firmware será instruído a usar a freqüência atualmente medido como o novo valor de deslocamento . Em outras palavras , você deve aplicar a freqüência de offset para a entrada do contador , espere até que o valor é exibido corretamente, e , em seguida, entrar no modo de programação , como explicado abaixo.

      Modo de programação: O fluxograma programa da esquerda mostra como entrar no modo de programação , como selecionar um menu, e como executar a função associada . Para entrar no modo de programação , pressione e segure a tecla de programação ( ou conectar o pino 4 e 5 do PIC , com uma pequena chave de fenda ) , até que o PIC mostra ” Prog” no visor LED . Em seguida, solte a “chave” . Agora você está no primeiro menu do modo de programação.
      Para selecionar o próximo menu , pressione a tecla por um curto período de tempo (menos de um segundo). Para executar a função selecionada , pressione a tecla por um longo tempo (mais de um segundo). As funções do menu são:

      “Quit” : Sai do modo de programação sem alterar nada.

      “Adicionar” : Salva a freqüência previamente medida de forma permanente , por isso vai ser adicionada nas leituras futuras.

      “Sub” : Salva a freqüência previamente medida de forma permanente , por isso vai ser subtraída nas leituras futuras.

      ” Zero “: Define o deslocamento de freqüência zero , então o display mostrará a freqüência real medida , sem deslocamento. O valor programado anteriormente será perdido.

      “Tabela” : Permite-lhe seleccionar um valor predefinido deslocamento a partir de uma tabela. A tabela em si também está localizado na EEPROM de dados do PIC , então você pode encontrar valores diferentes na mesma. Ao saltar através da mesa , as frequências são mostradas em forma numérica , como 455,0 ( kHz ) , 4,1943 ( MHz ) , 4,4336 ( MHz ) , 10,700 ( MHz ) . Depois de seleccionar uma entrada (pressão prolongada no botão) , você será levado de volta ao menu principal para selecionar ” Adicionar ” ou ” subtrair” .

      ” PSave ” / ” NoPSV ” : liga e desliga a função de economia de energia . No modo de economia de energia , o visor é desligado após 15 segundos sem nenhuma mudança “significativa” na freqüência , e voltará assim que as mudanças de freqüência em mais de uma dúzia de Hertz ( no 3 .. faixa de medição de 4 MHz) . Adicionados em maio de 2006 para equipamentos movidos a bateria como transceptores QRP .

      Nota:

      Pode haver mais itens de menu do que mostrado aqui, mas o princípio permanece o mesmo.

      Os valores de deslocamento de freqüência são salvos como um número inteiro de 32 bits em EEPROM de dados do PIC ( em primeiros quatro posições de memória da EEPROM , de alto byte primeiro , de baixo byte último ) . Se você não tem gerador de sinais para produzir a freqüência de offset para a programação , ou não pode tocar a frequência BFO do seu receptor shortware homebrew , você pode inserir o valor de deslocamento com um programador PIC adequado (como WinPIC de DL4YHF ) . Use uma calculadora de bolso científica para converter a freqüência (em Hertz , positivo ou negativo) em um número hexadecimal , e digite este valor na janela de memória de dados do programador PIC EEPROM. Se você usar WinPIC , permitir que o editor HEX antes de digitar os valores na janela de memória. Alguns exemplos:

      4.194304 MHz : Adicionar = 00 40 00 00 Subtrair = FF C0 00 00 (sim, tão simples)
      4.433619 MHz : Adicionar = 00 43 A6 D3 Subtrair = FF BC 59 2D
      0.455000 MHz : Adicionar = 00 06 F1 58 Subtrair = FF F9 0E A8
      10,70000 MHz : Adicionar = 00 A3 44 E0 Subtrair = FF 5C BB 20
      8,988300 MHZ : Adicionar = 00 89 26 8C Subtrair = FF 76 D9 74
      8,989000 MHZ : Adicionar = 00 89 29 48 Subtrair = FF 76 D6 B8

      Se o deslocamento subtraído é maior do que a frequência de entrada do contador , o resultado da subtracção é negativo . O contador de freqüência faz com que o resultado positivo antes de exibi -lo. Dessa forma, você pode usar o contador também em receptores onde f_IF = f_RX + f_LO ou f_RX = f_IF – f_LO o que significa que o aumento da frequência LO significa diminuir de frequência RX (o contador parece que vai ” correr para trás “, mas isso não é erro).
      Exemplo para o DL2YEO 30 metros banda QRP transceptor : f_RX = f_LO – f_IF = 14,314 MHz – 4.194 MHz = 10,120 MHz , conforme o cálculo: ( f_LO = entrada medida , f_RX = valor de exibição , f_IF = programado offset) . Se você não precisa do digito de 10 MHz no display, defina o deslocamento de -14,194 MHz em vez de -4,194 MHz . Isso vai dar uma melhor resolução de apresentação, assim você só precisa de 4 dígitos ( f_RX = 10,120 MHz serão exibidos como 120,0 kHz, o que é suficiente porque faixa de sintonia do receptor é de apenas 20 kHz de qualquer maneira ) .

      Algumas comumente usadas freqüências intermediárias podem ser chamados a partir do menu “Tabela” , então você não tem que medir ou inseri-los você mesmo . Entre em contato comigo se você é um daqueles que gostam de montagem caseiras e quer ter outras freqüências no ASM .

      ====================================================””

      Espero que te ajude

      Cláudio

  42. 0

    Caro Claudio, boa tarde.
    Os arquivos do frequêncímetro que voce mandou por e-mail não chegaram. Por favor tente novamente.

    O meu arquivo .HEX do K-8 quando liga o beacon ele emite a mensagem correta, porém uma vez só. Não fica repetindo, apesar de no ASM está definido um tempo de 6 segundos. Alguma rotina está desabilitada. Voce tem uma idéia do que possa ser?
    Att,
    João

  43. 0

    Boa tarde Cláudio.
    É possível disponibilizar uma janela para enviar os arquivos por email?

    Outra coisa. Agora referente ao K-8 que voce passou para o Valter.
    Compilei o ASM que voce disponibilizou, não deu mensagem de erro. Contudo, ao testar o .HEX no simulador do PROTEUS, está ocorrendo um problema.
    – Ao fechar “PB” no pino 4 o oscilador teria que emitir o CQ mais o indicativo que está registrado no ASM, que no caso é PY2MG. Só que o oscilador está emitindo o CQ mais o som em morse de duas letras “U”. A mesma coisa está ocorendo quando aciona a chave de beacon. ele fica repetindo de 6 em 6 segundos o CQ mais duas letras UU e não o indicativo PY2MG que está registrado no ASM e também no .HEX.
    Fico no aguardo.
    Att,
    João.

  44. 0

    Caro Cláudio, boa noite.
    No ano passado conversamos muito sobre manipuladores eletrônicos e voce foi fundamental na solução do assunto.
    Agora, estou às voltas com um frequêcímetro de 05 displays usando o PIC16F628A. O suporte do autor me enviou um arquivo zipado contendo um .ASM, dois .HEX, um readme e dois arquivos com extensão MCP.
    Os arquivos MCP abri com o bloco de notas e não entendi praticamente nada.
    O arquivo readme explica que os dois .HEX foram gerados a partir do mesmo .ASM
    Ao complilar o .ASM com o MPASM (do MPLAB) apresentou mensagem de erros.
    Contactei o suporte do autor e fui informado que está tudo certo. Mas se na compilação apresenta mensagem de erro como é possível gerar o .HEX???
    Os dois .HEX que recebi estão aqui, mas gostaria muito de ter o .ASM pois com ele, poderia acrescentar uma frequência intermediaria (FI) e aí, sim, compilaria e teria o .HEX para gravar no PIC.
    No ASM existem 4 FI disponíveis em Mhz: (.455000 / .4194304 / .4433619 / .10700000).
    Acredito que poderia substituir estas pelas que me interessa, que no caso são (8988,30 Mhz e 8989,00 Mhz).
    Do acima exposto, solicito, se possível, uma analise técnica desses arquivos, em especial o .ASM , objetivando a correção de possíveis erros.
    Fico no aguardo e desde já agradeço.
    João.

    1. 0

      Olá Valter! Baixei os arquivos do site e testei no Mplab-Ide e com versões mais modernas apresentava um erro com o uso do label ‘CONFIG’ que estava sendo usado para rotinas comuns. Isto entrava em conflito com o ‘__CONFIG’ da palavra de configuração. Acertei colocando um ‘underline’ após o termo (‘CONFIG_’). Isto resolveu. Parou o erro e compilou. Gostaria, por favor, que quando tivesse um tempinho, pudesse testar e retornar o funcionamento. Adianto , que conforme citei anteriormente, não tenho qualificações de CW para testar e entender bem se está funcionando a contento. Link para o novo código aqui.
      Obrigado
      Cláudio

        1. 0

          Olá Valter!
          O que exatamente você se refere quando diz: ‘ não grava’? Você tentou usar os arquivos Hex fornecidos? Qual dos pics usou? 629 ou 675? Quais são as mensagens de erro que você obteve ao tentar compilar o arquivo ASM?
          Claudio

          1. 0

            defino pic f675 ;na ora de compilar aparece essa mensagem e não verifica o programa.Executing: “C:\Arquivos de programas\Microchip\MPASM Suite\MPASMWIN.exe” /q /p12F675 “k8_675_BC.asm.asm” /l”k8_675_BC.asm.lst” /e”k8_675_BC.asm.err”

  45. 0

    queria saber como fazer modo beacom no orig. é no pino 2, beacon repete constantemente a cada 7 segundos a mesma mensagem.
    obrigado.

    1. 0

      Olá py2xr!
      Verifiquei o ASM da adaptação do K8 para obter também a função ‘beacon’, por se colocar um interruptor entre o pino 2 e 4 do pic. Gostaria que, se possível, que pudesse testar, uma vez que não consigo fazer isto, por não entender de CW. Arquivos estão em pasta zipada aqui. Verifiquei o ASM da adaptação do K8 para obter também a função ‘beacon’, por se colocar um interruptor entre o pino 2 e 4 do pic. Gostaria que, se possível, que pudesse testar, uma vez que não consigo fazer isto, por não entender de CW.Cláudio
      Cláudio

    2. 0

      e essas tambêm, na hora de gravar

      ICD0152: Failed to read all of requested bytes (0x0 of 0x8)
      ICD0082: Failed MPLAB ICD 2 operation
      ICD0275: Programming failed.

      1. 0

        Olá Valter! Você tentou usar os hex fornecidos junto a pasta zipada?
        No Mplab, tente mudar o nome do arquivo e recompilar. Notei que tem ‘.asm.asm’ seguido. Talvez possa ser a causa do problema.
        Claudio

    1. 0

      Olá Valter! Estou revendo o artigo para tentar entender o que foi feito na época. Para mim é complicado, pois sou leigo em CW. Aguarde , por favor…

      Cláudio

    2. 0

      Olá Valter!
      Verifiquei o ASM da adaptação do K8 para obter também a função ‘beacon’, por se colocar um interruptor entre o pino 2 e 4 do pic. Gostaria que, se possível, você pudesse testar na prática, uma vez que não consigo fazer isto, por não entender de CW. Os arquivos estão zipados aqui.
      Necessito de um retorno, por favor.
      Cláudio

    1. 0

      Olá Valter! Infelizmente, somente fiz a conversão do código do pic anterior para o 12f629. Não entendo de CW. Se algum colega leitor deste blog puder ajudar com a resposta, eu agradeço.
      Claudio

      1. 0

        Bom dia Claudio , estive acompanhando todos os posts, o que esta acontecendo é o seguinte , no K8 com o PIC 12F629 quando se da a instrução por exemplo para trocar a chamada , aperta o botão de program pin 4 , depois entra com a instrução letra “C” ai grava todos caracteres do Indicativo o meu por exemplo é PY2EGS , para cada beep , manipulasse o caractere do indicativo , feito isso , aperta-se o botão de programa brevemente , ai deveria manipular o indicativo CQ CQ PY2EGS , o que esta acontecendo é que sai CQ CQ U U AR K , em modo beacon sai a mesma coisa CQ CQ U U AR K , como se faz para compilar esse código , já tentei de varia formas mas não consegui , tenho o Mplab v8.92 instalada no meu PC , és possivel com essa versão , por hora fico muito agradecido pela atenção desejando a voce toda sua família e todos da sua homepage um Feliz Ano Novo muito obrigado Gracias!!! Eli.´. mi correo py2egs@hotmail.com

        1. 0

          Olá Elisilva!
          Você mencionou que não conseguiu compilar com a sua versão de Mplab. Qual erro está obtendo? Esta adaptação do K8 para 12f629 foi feita na época a pedido do Sr. João, mas eu pessoalmente não entendo de CW e isto dificulta mexer neste código. Não sei dizer se isto está acontecendo ou não e também não me lembro dele ter tocado em algum problema desta natureza na época.
          Cláudio

          1. 0

            Boa tarde!!! Claudio , e me desculpe pela demora , obrigado por sua resposta, aqui nesse link esta o K8 que fiz mas com o PIC 12C509A https://www.youtube.com/watch?v=504-Fn5gbho ,o pequeno probleminha que esta acontecendo e na gravação da chamada principal do Indicativo conforme descrevi no post anterior , sei um pouquinho de programação , aprendo muito com seu códigos e sua excelente página , o meu email é py2egs@hotmail.com, caso tenha um email para contato envio a você o arquivo da forma que fiz, mais uma vez muitíssimo obrigado.
            Elionaldo.´. PY2EGS

          2. 0

            Olá EliSilva!
            Tente obter o código hex desta versão do K8 (com 12c509) de algum colega de CW que esteja funcionando a contento. Pode ser algum erro no código adquirido ou que tenha sofrido modificações por algum usuário. Se alguém do blog puder ajudar…
            Cláudio

Comments are closed.