Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "github.com/tggo/periph/devices/si5351"
  6. "log"
  7. "periph.io/x/periph/host"
  8. "periph.io/x/periph/conn/i2c/i2creg"
  9. "flag"
  10. "time"
  11. )
  12.  
  13. func main() {
  14. fmt.Println("starting")
  15.  
  16.  
  17.  
  18. // Make sure periph is initialized.
  19. if _, err := host.Init(); err != nil {
  20. log.Fatal(err)
  21. }
  22.  
  23. // Use i2creg I²C bus registry to find the first available I²C bus.
  24. b, err := i2creg.Open("1")
  25. if err != nil {
  26. log.Fatalf("failed to open I²C: %v", err)
  27. }
  28. defer b.Close()
  29.  
  30.  
  31. d, err := si5351.New(b, 0x60, &si5351.DefaultOpts)
  32. if err != nil {
  33. log.Fatalf("failed to initialize si5351: %v", err)
  34. }
  35. fmt.Println("end create device")
  36.  
  37. d.UpdateSysStatus()
  38. d.UpdateIntStatus()
  39.  
  40. //fmt.Printf("%v\n", d)
  41.  
  42. //fmt.Println("Set Output #0 to 13.703704 MHz")
  43. //// vco = 25 MHz * (24 + 2 / 3) = 616.67 MHz
  44.  
  45. //var p1,p2,p3, pllFreq int64
  46.  
  47. // 25 mhz * (p1 + p2 / p3)
  48. //p1 = 24
  49. //p2 = 2
  50. //p3 = 3
  51. //p1 = 24
  52. //p2 = 666800
  53. //p3 = 1000000
  54. //p1, p2, p3 = d.PLLCalc(894762000)
  55. //
  56. //vco := 25 * (float64(p1)+float64(p2)/float64(p3))
  57. //d.SetupPLL(0, p1, p2, p3)
  58. //
  59. //
  60. ////vco mhz / (p1 + p2 / p3)
  61. //p1 = 66
  62. //p2 = 0
  63. //p3 = 1
  64. //freq := vco / (float64(p1)+float64(p2)/float64(p3))
  65. //d.SetupMultisynth(0, 0, p1, p2 , p3)
  66. //fmt.Printf("vco: %v, freq: %v\n", vco, freq)
  67. //d.EnableOutputs(true)
  68.  
  69.  
  70. PfFreq := flag.Int("pf", 8000000, "an int")
  71. freq := flag.Int("freq", 3650000, "an int")
  72. cycle := flag.Int("cycle", 0, "number of cycle or not (zero)")
  73. cycleDealy := flag.Int("delay", 100, "ms to delay in cycle")
  74. cycleStep := flag.Int("step", 500, "step in cycle")
  75. calibrationOffset := flag.Int("calibration", 700, "Hz to calibrate syntezator")
  76.  
  77. flag.Parse()
  78.  
  79.  
  80. PF_freq:=int32(*PfFreq)
  81.  
  82.  
  83. d.SetupFreq(1, PF_freq )
  84. d.OutputEnable(1, true)
  85.  
  86.  
  87. //startFreq := int32(6990000)
  88. //startFreq := int32(7000000)
  89. startFreq := int32(*freq-*calibrationOffset)
  90. //startFreq := int32(3740000)
  91. //startFreq := int32(0)
  92.  
  93.  
  94. fmt.Println("freq:", startFreq)
  95. fmt.Println("clk0:", startFreq+PF_freq)
  96.  
  97. //p1,p2,p3, pllFreq := d.CalcMultiSynth( int64(startFreq),0)
  98. //fmt.Println("-MuS---- pllFreq: ", pllFreq, " p1,p2,p3:",p1,p2,p3)
  99. //// vco = 25 * ( 65 + 0 / 1 )
  100. //pp1,pp2,pp3 := d.PLLCalc(si5351.PLLA, pllFreq)
  101. //fmt.Println("-PLL---- pllFreq: ", pllFreq, " pp1,pp2,pp3:",pp1,pp2,pp3)
  102. //d.SetupPLL(0, pp1, pp2, pp3)
  103. //d.SetupMultisynth(0, 0, p1, p2 , p3)
  104. //d.EnableOutputs(false)
  105.  
  106. d.SetupFreq(0, startFreq+PF_freq )
  107. d.OutputEnable(0, true)
  108.  
  109. //d.SetupFreq(1, startFreq )
  110. //d.OutputEnable(1, true)
  111. //
  112. //d.SetupFreq(2, 1100000 )
  113. //d.OutputEnable(2, true)
  114.  
  115.  
  116. //// SIMPLE SWITCHING
  117. //for i := 0; i<50; i++ {
  118. // d.OutputEnable(0, true)
  119. // time.Sleep(3 * time.Millisecond)
  120. // d.OutputEnable(0, false)
  121. // time.Sleep(3 * time.Millisecond)
  122. //
  123. //}
  124. //
  125. //d.OutputEnable(0, false)
  126.  
  127. //
  128. //// OLD METHOD
  129. //for i := 0; i<100; i++ {
  130. // freq:= int64(startFreq + i*10)
  131. //
  132. // fmt.Println(freq)
  133. // //d.EnableOutputs(false)
  134. // //d.Reset()
  135. // p1,p2,p3, pllFreq = d.CalcMultiSynth( freq,0)
  136. // //pp1,pp2,pp3 := d.PLLCalc(si5351.PLL_A, pllFreq)
  137. // //d.SetupPLL(0, pp1, pp2, pp3)
  138. // d.SetupPLLFreq(0, int32(pllFreq))
  139. // //d.SetupMultiSynth(0, 0, p1, p2 , p3)
  140. // d.SetupMultiSynthNew(0, 0, p1, p2 , p3, false, 0, 0)
  141. // //d.EnableOutputs(true)
  142. // d.OutputEnable(0, true)
  143. //
  144. // time.Sleep(30 * time.Millisecond)
  145. //}
  146. //
  147. //
  148.  
  149.  
  150. //
  151. //
  152. // NEW METHOD
  153. if *cycle > 0 {
  154. for i := 0; i<*cycle; i++ {
  155.  
  156. freq:= int64(startFreq + int32(i * *cycleStep ))
  157.  
  158. fmt.Println("Freq: ", freq )
  159. d.SetupFreq(0, int32(freq)+ PF_freq)
  160. ////d.EnableOutputs(false)
  161. ////d.Reset()
  162. //p1,p2,p3, pllFreq = d.CalcMultiSynth( freq,0)
  163. ////pp1,pp2,pp3 := d.PLLCalc(si5351.PLL_A, pllFreq)
  164. ////d.SetupPLL(0, pp1, pp2, pp3)
  165. //d.SetupPLLFreq(0, int32(pllFreq))
  166. ////d.SetupMultiSynth(0, 0, p1, p2 , p3)
  167. //d.SetupMultiSynthNew(0, 0, p1, p2 , p3, false, 0, 0)
  168. ////d.EnableOutputs(true)
  169. d.OutputEnable(0, true)
  170.  
  171. time.Sleep(time.Duration(*cycleDealy) * time.Millisecond)
  172. }
  173. }
  174.  
  175.  
  176.  
  177.  
  178. //
  179. //
  180. //
  181. //d.Reset()
  182. //fmt.Println( 600/25 )
  183.  
  184.  
  185. //d.SetupMultisynth(0, 0, 45, 1 , 2)
  186.  
  187.  
  188. /* Setup Multisynth 1 to 13.55311MHz (PLLB/45.5) */
  189. //d.SetupMultisynth(0, 0, 45, 1 , 2)
  190.  
  191. //// out = 616.67 MHz / 45 = 13.703704 MHz
  192. //d.SetupMultisynth(0, 0, 45, 0 , 1)
  193.  
  194.  
  195. //// si.setupRdiv(0, si.R_DIV_64)
  196.  
  197. //d.SetupPLL(0, 24, 2, 3)
  198.  
  199. //d.SetupFreq(0, 13.703704)
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206. //fmt.Println("enabling")
  207.  
  208. //d.EnableOutputs(false)
  209.  
  210.  
  211. //d.EnableOutputs(false)
  212. //d.EnableOutputs(true)
  213.  
  214. //time.Sleep(25000 * time.Millisecond)
  215. //d.OutputEnable(0, false)
  216. //d.OutputEnable(1, false)
  217.  
  218. fmt.Println("ending")
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement