DS1267-jak sterować każdym kanałem osobno ?

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

DS1267-jak sterować każdym kanałem osobno ?

Post autor: kulamario » 23 paź 2018, 1:07

Witam kolegów
Mam problem z potencjometrem DS1267 - nie wiem jak sterować każdy kanał osobno,może by ktoś pomógł czy wytłumaczył ?
W datasheed jest napisane z tego co rozumiem ze chyba można ale tak czy inaczej trzeba wysłać 17 bitów czyli na oba kanały po 8 i kończący 1, jak to zrobić panowie ?
  1. '************* Konfiguracja uC *****************
  2. '***********************************************
  3. $regfile = "attiny13.dat"
  4. $crystal = 9600000
  5. Config Portb = &B11111010 : Portb = &B11100101
  6.  
  7. Rst Alias Portb.3
  8. Dq Alias Portb.1
  9. Clk Alias Portb.4
  10. Splus Alias Pinb.0
  11. Sminus Alias Pinb.2
  12.  
  13. $hwstack = 20
  14. $swstack = 10
  15. $framesize = 40
  16. '********** Konfiguracja uC Koniec  ************
  17.  
  18. '******************  Zmienne *******************
  19. '***********************************************
  20. Dim N As Byte , Dane As Word
  21. Dim Licz_sw(2) As Byte
  22. Dim Glos As Byte
  23. Dim Autosave As Byte
  24. '*************  Zmienne Koniec  ****************
  25.  
  26. '************ Warunki Poczatkowe ***************
  27. '***********************************************
  28. N = 15
  29. Readeeprom Glos , 1
  30.  
  31. Glos = Glos / 2                                             'te dwie linijki robią zawsze parzystą wartsc
  32. Glos = Glos * 2                                             'na wypadek bledu odczytu
  33.  
  34. Clk = 0
  35. Dane = 256 * Glos
  36. Dane = Dane + Glos
  37. Rst = 1
  38. '*******  Warunki Poczatkowe Koniec  ***********
  39.  
  40. '**************  Petla glowna ******************
  41. '***********************************************
  42. Do
  43.   If Rst = 1 Then                                           'wysylanie
  44.     If Clk = 1 Then
  45.       If N <> 255 Then
  46.         Dq = Dane.n
  47.         Decr N
  48.       Else
  49.         Rst = 0
  50.         Dq = 0
  51.         N = 15
  52.       End If
  53.     End If
  54.     Toggle Clk
  55.   Else
  56.     Waitms 5
  57.     '******************************** przyciski
  58.     If Splus = 0 Then
  59.       Incr Licz_sw(1)
  60.       If Licz_sw(1) = 10 Then
  61.         Licz_sw(1) = 0
  62.         If Glos <= 253 Then
  63.           Autosave = 250
  64.           Glos = Glos + 2
  65.           Clk = 0
  66.           Dane = 256 * Glos
  67.           Dane = Dane + Glos
  68.           Rst = 1
  69.           Waitms 50
  70.         End If
  71.       End If
  72.     Else
  73.       Licz_sw(1) = 0
  74.     End If
  75.  
  76.     If Sminus = 0 Then
  77.       Incr Licz_sw(2)
  78.       If Licz_sw(2) = 10 Then
  79.         Licz_sw(2) = 0
  80.         If Glos >= 2 Then
  81.           Autosave = 250
  82.           Glos = Glos - 2
  83.           Clk = 0
  84.           Dane = 256 * Glos
  85.           Dane = Dane + Glos
  86.           Rst = 1
  87.           Waitms 50
  88.         End If
  89.       End If
  90.     Else
  91.       Licz_sw(2) = 0
  92.     End If
  93.     '******************************** przyciski koniec
  94.  
  95.     If Autosave > 0 Then
  96.       Decr Autosave
  97.       If Autosave = 0 Then
  98.         Writeeeprom Glos , 1
  99.       End If
  100.     End If
  101.  
  102.   End If
  103. Loop
  104. End
  105. '************ Petla glowna Koniec **************
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: DS1267-jak sterować każdym kanałem osobno ?

Post autor: niveasoft » 23 paź 2018, 8:41

Ten kod się chyba sam tłumaczy ;)
  1. $regfile = "m32def.dat"
  2. $crystal = 8000000
  3. $hwstack = 32
  4. $swstack = 8
  5. $framesize = 64
  6.  
  7. Config Submode = New
  8.  
  9. Clk Alias Portb.4 : Config Clk = Output
  10. Dq Alias Portb.3 : Config Dq = Output
  11. Rst Alias Portb.2 : Config Rst = Output
  12.  
  13. Dim L As Byte , R As Byte
  14.  
  15. Sub Set_vol(byval Left_ch As Byte , Byval Right_ch As Byte)
  16.  
  17.  Local Temp_vol As Word
  18.  Local Temp_data As Long
  19.  
  20.  Temp_vol = Makeint(left_ch , Right_ch)                     'join two Bytes into Word  &B1111111111111111 (16Bits)
  21.  Temp_data = Temp_vol                                       'load it into 32Bit variable &B00000000000000001111111111111111
  22.  Shift Temp_data , Left , 16                                'after shift result is &B11111111111111110000000000000000
  23.   Set Rst
  24.  Shiftout Dq , Clk , Temp_data , 1 , 17                     'send only 17Bits (option 1=MSB first when CLK->HI)
  25.   Reset Rst
  26.  
  27. End Sub
  28.  
  29. L = 255
  30. R = 255
  31.  
  32.  Call Set_vol(l , R)                                        'call sub with &B11111111 and &B11111111
  33.  
  34. End
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1267-jak sterować każdym kanałem osobno ?

Post autor: kulamario » 23 paź 2018, 20:23

Dziękuję za oodzew
Bartek a czy możesz każda linie kodu opisać dokładnie co ona robi po polsku ?
bardzo bym prosił
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1267-jak sterować każdym kanałem osobno ?

Post autor: kulamario » 24 paź 2018, 5:17

Spox juz wiem co się dzieje
dzięki za pomoc
A teraz drugie pytanie
Jak sterować potencjometrem ze by ustawić volty?
Wymyśliłem ze przez ADC będzie mierzył napięcie na wyjściu układu i odpowiednio przeliczal i podawał do potencjometru
Czy dobrze myślę że tak to powinno wyglądać ?
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: DS1267-jak sterować każdym kanałem osobno ?

Post autor: niveasoft » 24 paź 2018, 8:18

No może to tak działać, ale co tak konkretniej potrzebujesz? Pytam bo może lepiej tam użyć DAC. To też łatwe w sterowaniu urządzenie ;)
Mój ulubiony MCP4726 to maleństwo SMD, ale są też w DIL.
No chyba, że ten DS1267 Tobie zalega w szufladzie a nie chcesz czekać na nic ze sklepów :D
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1267-jak sterować każdym kanałem osobno ?

Post autor: kulamario » 24 paź 2018, 13:20

Chciałem skończyć ten generator na AD9850 i już mam zrobiony układ wyjściowy na opampach i teraz dodałem cyfrowy potencjometr do ustawiania offsetu i voltow no jak jest cyfrowo to i by przydało się widzieć na ekranie wartości jakie są aktualnie no i tak sobie pomyślałem o ADC
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: DS1267-jak sterować każdym kanałem osobno ?

Post autor: kulamario » 27 paź 2018, 1:58

Zrobiłem coś takiego na 4 swatchach i działa
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 32
  4. $swstack = 8
  5. $framesize = 64
  6.  
  7.  
  8. Config Lcd = 16 * 2
  9. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2       'ZL2AVR
  10.  
  11.  
  12. Cursor Off
  13. Cls
  14.  
  15.  
  16. Config Submode = New
  17.  
  18. Clk Alias Portb.3 : Config Clk = Output
  19. Dq Alias Portb.2 : Config Dq = Output
  20. Rst Alias Portb.4 : Config Rst = Output
  21.  
  22. '-------------------------------------------------------------------------------
  23. Amplitude_up Alias Pinb.6 : Config Amplitude_up = input
  24. Amplitude_down Alias Pinb.7 : Config Amplitude_down = input
  25. '-------------------------------------------------------------------------------
  26. '-------------------------------------------------------------------------------
  27. offset_up Alias Pinb.0 : Config offset_up = input
  28. offset_down Alias Pinb.1 : Config offset_down = input
  29. '-------------------------------------------------------------------------------
  30.  
  31. Amplitude_up=1
  32. Amplitude_down=1
  33.  
  34. offset_up=1
  35. offset_down =1
  36.  
  37. '-------------------------------------------------------------------------------
  38.  
  39. Dim offset As Byte , amplitude As Byte
  40.  
  41. offset = 255
  42.  
  43. amplitude = 255
  44.  
  45. Sub Set_vol(byval Left_ch As Byte , Byval Right_ch As Byte)
  46.  
  47.    Local Temp_vol As Word
  48.    Local Temp_data As Long
  49.  
  50.    Temp_vol = Makeint(left_ch , Right_ch)                     'join two Bytes into Word  &B1111111111111111 (16Bits)
  51.  
  52.    Temp_data = Temp_vol                                       'load it into 32Bit variable &B00000000000000001111111111111111
  53.  
  54.    Shift Temp_data , Left , 16                                'after shift result is &B11111111111111110000000000000000
  55.  
  56.    Set Rst
  57.  
  58.    Shiftout Dq , Clk , Temp_data , 1 , 17                     'send only 17Bits (option 1=MSB first when CLK->HI)
  59.  
  60.    Reset Rst
  61.  
  62. End Sub
  63.  
  64. '--------------------------------------------------------------------------------------------------------------------------------------
  65.  
  66. sub up_offset
  67.  
  68. incr offset
  69.  
  70. Call Set_vol(offset , amplitude)                                        'call sub with &B11111111 and &B11111111
  71.  
  72. end sub
  73.  
  74. '--------------------------------------------------------------------------------------------------------------------------------------
  75.  
  76. sub down_offset
  77.  
  78. decr offset
  79.  
  80.  
  81. Call Set_vol(offset , amplitude)                                        'call sub with &B11111111 and &B11111111
  82.  
  83. end sub
  84.  
  85. '--------------------------------------------------------------------------------------------------------------------------------------
  86.  
  87. sub up_amplitude
  88.  
  89. incr amplitude
  90.  
  91. Call Set_vol(offset , amplitude)                                        'call sub with &B11111111 and &B11111111
  92.  
  93. end sub
  94.  
  95. '--------------------------------------------------------------------------------------------------------------------------------------
  96.  
  97. sub down_amplitude
  98.  
  99. decr amplitude
  100.  
  101.  
  102. Call Set_vol(offset , amplitude)                                        'call sub with &B11111111 and &B11111111
  103.  
  104. end sub
  105.  
  106. Do
  107.  
  108.  
  109. '------------------------------------------
  110. if offset_up = 0 then
  111.  
  112. waitms 50
  113.  
  114.  
  115. if offset_up = 0 then call up_offset
  116.  
  117.  
  118. end if
  119.  
  120.  
  121. if offset_down = 0 then
  122.  
  123. waitms 50
  124.  
  125. if offset_down = 0 then call down_offset
  126.  
  127. end if
  128.  
  129.  
  130.  
  131. '------------------------------------------
  132. if amplitude_up = 0 then
  133.  
  134. waitms 50
  135.  
  136.  
  137. if amplitude_up = 0 then call up_amplitude
  138.  
  139.  
  140. end if
  141.  
  142.  
  143. if amplitude_down = 0 then
  144.  
  145. waitms 50
  146.  
  147. if amplitude_down = 0 then call down_amplitude
  148.  
  149. end if
  150.  
  151.  
  152.  
  153.  
  154. locate 1,1
  155. lcd offset
  156.  
  157. locate 2,1
  158. lcd amplitude
  159.  
  160.  
  161.  
  162. loop
  163.  
  164.  
  165. End
ODPOWIEDZ