Ir ao conteúdo

Posts recomendados

Postado

Ola pessoal,

 Gostaria de converter um firmware em Bascom ARV para Arduino, o motivo e simples, tenho certa experiência com eletronica, porém o pouco que sei de

   Programaçao é em Arduino, e gostaria de fazer algumas modificaçoes no firmware, segue o firmware e o link da fonte.
 

‘*******************************************************************************
‘ 80M VCO
‘ PLL LM7001
‘ ATMega8
‘ 16×2 LCD
‘ 10MHz IF Freq
‘*******************************************************************************
$regfile = “m8def.dat”
$crystal = 8000000
$swstack = 32
$hwstack = 32
$framesize = 32
Declare Sub Send_command(byval Pmode As Word , Byval Value As Word )
Declare Sub Init_pll
Declare Sub Incr_pll
Declare Sub Decr_pll
Declare Sub Store_pll
Declare Sub Dsp_freq
‘*******************************************************************************
‘ config pin
‘*******************************************************************************
Config Lcdmode = Port
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Config Portd = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Input
Cen Alias Portd.7
Clk Alias Portd.6
Dat Alias Portd.5
‘*******************************************************************************
‘ Variable
‘*******************************************************************************
Dim I As Word
Dim J As Byte
Dim Pmode As Word
Dim Button As Byte
Dim Freq As Word
Dim Efreq As Eram Word At &H10
Dim Sfreq As Word
Dim Dfreq As Word
Dim Sdfreq As String * 5
‘*******************************************************************************
‘ main program
‘*******************************************************************************
Initialization:
   Waitms 100
   Reset Cen
   Reset Clk
   Reset Dat
   Set Portb.0
   Set Portb.1
   Set Portb.2
   Deflcdchar 0 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 32
   Deflcdchar 0 , 31 , 31 , 32 , 17 , 27 , 27 , 31 , 31                         ‘ antenna symb
   Deflcdchar 1 , 31 , 31 , 31 , 30 , 29 , 11 , 23 , 31                         ‘ memory
   Deflcdchar 2 , 14 , 16 , 12 , 2 , 30 , 9 , 9 , 9                             ‘ S/N
   Deflcdchar 4 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 32                         ‘ S1
   Deflcdchar 5 , 32 , 32 , 32 , 32 , 1 , 31 , 31 , 32                          ‘ S2
   Deflcdchar 6 , 32 , 32 , 32 , 7 , 31 , 31 , 31 , 32                          ‘ S3
   Deflcdchar 7 , 1 , 7 , 31 , 31 , 31 , 31 , 31 , 32                           ‘ S4
   Cls : Cursor Off
   Locate 1 , 1 : Lcd “80m RX SSB V1.0 “
   Locate 2 , 1 : Lcd “Jalapindai 2010 “
   Waitms 10
Main:
‘   Pmode = 704
‘   Pmode = 896
   Cls
   Locate 1 , 1 : Lcd ”             KHz”
   Locate 2 , 1 : Lcd ” jalapindai.com “
   Call Init_pll
   Call Dsp_freq
   Do
      Button = Pinb And &H07
      Select Case Button
         Case 3 : Call Store_pll
         Case 5 : Call Decr_pll
         Case 6 : Call Incr_pll
      End Select
   Loop
   Goto Main
 End
‘*******************************************************************************
‘ Init PLL
‘*******************************************************************************
Sub Init_pll
   Freq = Efreq
   If Freq = 65535 Then
      Freq = 10000
   End If
   Call Send_command(704 , Freq)
   Call Dsp_freq
   Locate 1 , 1 : Lcd Chr(1)
   Locate 1 , 2 : Lcd Chr(0)
End Sub
‘*******************************************************************************
‘ Incr_PLL
‘*******************************************************************************
Sub Incr_pll
   Incr Freq
   If Freq > 14500 Then
      Freq = 14500
   End If
   Call Send_command(704 , Freq)
   Call Dsp_freq
   Locate 1 , 1 : Lcd ” “
End Sub
‘*******************************************************************************
‘ Decr_PLL
‘*******************************************************************************
Sub Decr_pll
   Decr Freq
   If Freq < 10000 Then
      Freq = 10000
   End If
   Call Send_command(704 , Freq)
   Call Dsp_freq
   Locate 1 , 1 : Lcd ” “
End Sub
‘*******************************************************************************
‘ Store PLL
‘*******************************************************************************
Sub Store_pll
   If Sfreq <> Freq Then
      Efreq = Freq
      Sfreq = Efreq
   End If
   Locate 1 , 1 : Lcd Chr(1)
   Waitms 50
End Sub
‘*******************************************************************************
‘ Display PLL
‘*******************************************************************************
Sub Dsp_freq
   Dfreq = Freq – 8000
   Sdfreq = Str(dfreq)
   Sdfreq = Format(sdfreq , “0.000”)
   Locate 1 , 8 : Lcd Sdfreq
   Waitms 50
End Sub
 ‘*******************************************************************************
‘ Send Command
‘*******************************************************************************
Sub Send_command(byval Pmode As Word , Byval Value As Word)
   Set Cen
   Waitus 20
‘   Shiftout Dat , Clk , Cmode , 3 , 24 , 10
‘bit 0 to 13 (N value)
   For I = 0 To 13
      If Value.i = 1 Then
         Set Dat
      Else
         Reset Dat
      End If
      Waitus 10
      Set Clk
      Waitus 10
      Reset Clk
      Waitus 10
   Next I
‘bit 14-23 (mode)
   For I = 0 To 9
      If Pmode.i = 1 Then
         Set Dat
      Else
         Reset Dat
      End If
      Waitus 10
      Set Clk
      Waitus 10
      Reset Clk
      Waitus 10
   Next I
   Waitus 20
   Reset Cen
End Sub

 



 O link da fonte https://diankurniawan.wordpress.com/2010/06/25/low-cost-simple-wide-band-vco-lm7006-74hc04/

  Outra duvida é se alguem tem alguma apostila de Bascom com o SET de instruçoes, e se poderia comentar esse firmware, e qual a funçao dessas linhas de comando.

$swstack = 32
$hwstack = 32
$framesize = 32


Att Iuri

 

  • Membro VIP
Postado

Paulão, já já ele aparece,  é o + hiperindicado pra te orientar. De minha parte penso que você deve publicar o esquema mas uma olhadela rápida no seu link e minha intuição sugere que eu lhe sugira pra pesquisar por lm7001 arduino...

 

Postado

@Isadora Ferraz Ola,

 Em outros tópicos que li, eu reparei que ele tem bastante conhecimento em Bascom.
 Sobre o LM7001 + Arduino, eu já garimpei por tudo, e o mais proximo que encontrei foi este mencionado
 Como minha experiência com Microcontrolador é pequena, essa parte de SPI é bem complicada pra que eu consiga escrever do zero, segue o esquema.

Att Iuri

pll-microcontroller.jpg

  • Membro VIP
Postado

Ao googlar termo semelhante, vi isso

https://translate.google.com.br/translate?hl=pt-BR&sl=auto&tl=pt&u=https%3A%2F%2Fwww.elektroda.pl%2Frtvforum%2Ftopic3310984.html

Aparentemente naquele caso, o cara quer criar uma spi 'na raça' por sw. No seu caso talvez nem precise pois o mc do arduíno possui a interface em hw mesmo.

Mas caso não possua ou não seja compatível com o algoritmo do lm7001, se resume a entender os comandos dele (não vi o d.s.) e enviá-los corretamente.

Dei uma lidinha rápida no fonte bascon e vi isso...

 

Sub Send_command(byval Pmode As Word , Byval Value As Word)
   Set Cen
   Waitus 20
‘   Shiftout Dat , Clk , Cmode , 3 , 24 , 10
‘bit 0 to 13 (N value)
   For I = 0 To 13
      If Value.i = 1 Then
         Set Dat
      Else
         Reset Dat
      End If
      Waitus 10
      Set Clk
      Waitus 10
      Reset Clk
      Waitus 10
   Next I
‘bit 14-23 (mode)
   For I = 0 To 9
      If Pmode.i = 1 Then
         Set Dat
      Else
         Reset Dat
      End If
      Waitus 10
      Set Clk
      Waitus 10
      Reset Clk
      Waitus 10
   Next I
   Waitus 20
   Reset Cen
End Sub

onde aparentemente é o nivel mais baixo e essencial da comunicação. Aparentemente ela roda 13 bits (N value) e depois + 9 (mode) com 1 pulso de clock em cada bit. Em C, algo como
 

#define dat PORT0.0 //p.ex. .. verifique como seu compilador define os ports e pinos
#define clk PORT0.1
#define cen PORT0.2

void Send_command(unsigned int Pmode, unsigned int Value)
{
cen=1;
for (i=0;i<13;i++)
{
dat=Value&1;
delay(10);//uS
clk=1;
delay(10);//uS
clk=0;
delay(10);//uS
Value>>=1; //próximo bit
}

for (i=0;i<9;i++)
{
dat=Pmode&1;
delay(10);//uS
clk=1;
delay(10);//uS
clk=0;
delay(10);//uS
Pmode>>=1; //próximo bit
}
cen=0;
}

Como percebes a interface spi é bem simples - com o chip habilitado (cen=1), dá um pulsinho de clock a cada bit a ser enviado. Portanto nem precisa ser muito expert nela.

 

Agora se achar que ctrl-c ctrl-v vai resolver seu problema, receba um cóqui virtual!!

 

Postado

Ola,

Cóqui virtua, kkkkkkk
Quanto ao copie e cole, não é isso que quero, até por que quero adicionar outras Funções etc.
O por que de eu querer usar o LM700, por que tenho bastante deles guardados Aqui, e além de aproveitar alguns equipamentos que tenho aqui, seria pela Aprendizagem, e sobre o link do tio guugli, eu ate tinha visto mas como Aquele também esta em Bascom, não me chamou muito a atenção.

Ou seja, em Arduino, que acho que um C superficial se nao estiver enganado, Esse firmware seria o ponto de partida para implementar outras funções, como
Offset para repetidoras no equipamentos de VHF de frequência fixa que tenho Aqui, outras funções de FI, medidores de ROE, para HF também,
Eu ate tenho outras opções também, por exemplo montar um contador binario TTL a partir do 74HC193 ou outro parecido, e usar o microcontrolador em Modo PARALELO, e construir o phase detector, o problema e que ficaria um Circuito grande, e para VHF eu teria que usar um prescaler, já que a maioria Dos TTL só vão ate cerca de 60MHZ, uma outra opção seria, usar o LM7001 Com uma configuração fixa, e aproveitar o sinal de referencia e o phase Detector dele, e criar um divisor ajustável no Arduino, não sei se isso é possível No Atmega328.

Mas de qualquer forma fico agradecido pela ajuda, vou tentar escrever algo  a partir do que postou em C, se nao der certo vou ver se consigo alguma Apostila sobre BASCOM, como disse meu conhecimento com firmware e bem Limitado, ao ponto de só controlar displays, algumas lógicas etc.

Att Iuri

Postado

@Biogato ,

 

Fala meu amigo !

Veja que na área de microcontroladores tem um tópico destacado, sobre programação em Basic para Avrs, lá tem a minha apostila, acho que vai te ajudar bastante, e tem muita informação espalhada ao longo de vários anos de postagens .

 

 

Sou radioamador, PY2APK, faço vários projetos para automação de estação usando Atmegas.

 

Antes que me pergunte, não entendo patavina nenhuma de C ou a IDE do Arduino, só programo em Bascom e Assembly.

 

73’

 

Paulo

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!