sterowanie kątem polaryzacji yagi

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: sterowanie kątem polaryzacji yagi

Post autor: Jacek » 26 sty 2019, 21:04

Witam - a więc tak driver działa - ale mam problem z zatrzymaniem oto kod
  1. '**********************************************
  2. 'PROGRAM TESTOWY STEROWANIA ZMIANA POLARYZACJI
  3. 'ANTENY TYPU YAGI MIKROKONTROLER ATMEGA32 16MHz
  4. '**********************************************
  5. $regfile = "m32def.dat"
  6. $crystal = 16000000
  7. $hwstack = 64
  8. $swstack = 64
  9. $framesize = 128
  10. $baud = 19200
  11. Config Submode = New
  12. 'Config Watchdog = 4096
  13. 'Start Watchdog
  14.  
  15. 'Debug Off
  16. 'Debug On
  17. '--------------------------------------------------------------------
  18. 'KONFIGURACJA LCD
  19. Config Lcd = 16 * 4
  20. Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5
  21. '--------------------------------------------------------------------
  22. 'KONFIGURACJA TIMER'ÓW
  23. Config Timer1 = Timer , Prescale = 8
  24. On Timer1 Przertimer1
  25. Enable Timer1
  26. 'Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_down , Prescale = 1
  27. Config Timer2 = Pwm , Compare_pwm = Clear_up , Prescale = 1024
  28. On Timer2
  29. '--------------------------------------------------------------------
  30. Enable Interrupts
  31.  
  32.  
  33. '--------------------------------------------------------------------
  34. 'KONFIGURACJA ADC
  35. Config Adc = Single , Prescaler = Auto
  36. '--------------------------------------------------------------------
  37. 'KONFIGURACJA PORTÓW
  38. Config Porta.6 = Input : Pina.6 = 1                         'ADC VNH5019
  39. Config Porta.7 = Input : Pina.7 = 1                         'ADC POTI ACTUATOR
  40. Config Portb.0 = Output : Portb.0 = 1                       'IN_A
  41. Config Portb.1 = Output : Portb.1 = 1                       'IN_B
  42. Config Portb.2 = Output : Portb.2 = 1                       'CS_DIS
  43. Config Portb.3 = Output : Portb.3 = 1                       'ENA/DIAGA
  44. Config Portb.4 = Output : Portb.4 = 1                       'ENA/DIAGB
  45. Config Portb.5 = Input : Pinb.5 = 1                         'SW_LEFT
  46. Config Portb.6 = Input : Pinb.6 = 1                         'SW_HOLD
  47. Config Portb.7 = Input : Pinb.7 = 1                         'SW_RIGHT
  48. Config Portc.3 = Output : Portc.3 = 1                       'LED_HOLD
  49. Config Portc.7 = Output : Portc.7 = 1                       'LED_LIVE
  50. Config Portd.7 = Output : Portd.7 = 1                       'PWM
  51.  
  52. '--------------------------------------------------------------------
  53. 'ALIASY PORTÓW
  54. In_a Alias Portb.0
  55. In_b Alias Portb.1
  56. Cs_dis Alias Portb.2
  57. Ena_da Alias Portb.3
  58. Ena_db Alias Portb.4
  59. Led_hold Alias Portc.3
  60. Sw_left Alias Pinb.5                                        'Pinc.4
  61. Sw_hold Alias Pinb.6                                        'Pinc.5
  62. Sw_right Alias Pinb.7                                       'Pinc.6
  63. Led_live Alias Portc.7                                      'Dioda Led sygnalizująca prace układu
  64. Pwm_ Alias Portd.7
  65. '--------------------------------------------------------------------
  66. 'ZMIENNE   CZASU
  67. Dim Timer_tikx10 As Byte                                    'zmienna liczaca przepełnienie timera
  68. Dim Timertikx100 As Byte
  69. Dim Timertikx200 As Byte
  70. Dim Timer_tik_flag As Byte
  71. Flaga10ms Alias Timer_tik_flag.0
  72. Flaga100ms Alias Timer_tik_flag.1
  73. Flaga500ms Alias Timer_tik_flag.2
  74. Flaga1s Alias Timer_tik_flag.3
  75. Flaga2s Alias Timer_tik_flag.4
  76. Flaga2_5s Alias Timer_tik_flag.5
  77. 'zostaly jeszce trzy wolne flagi
  78. ' a uzylem tylko jednego bajtu
  79. ' Paweł - pikczu
  80. '--------------------------------------------------------------------
  81. 'ZMIENNE
  82. Dim Dane_adc As Word
  83. Dim Kanal_adc As Byte
  84. Dim Poti As Word
  85. Dim Prad As Word
  86. Dim Hamulec_help As Bit
  87. '--------------------------------------------------------------------
  88. 'POBIERANIE DANYCH Z ADC
  89. Sub G_adc()
  90.  
  91. End Sub
  92. '--------------------------------------------------------------------
  93. 'MRUGANIE DIODĄ LED CO 1 SEKUNDĘ
  94. ' CO BY BYŁO WIDAĆ ŻE UKŁAD ŻYJE
  95. Sub Blink_()
  96.    Toggle Led_live
  97. End Sub
  98. '-------------------------------------------------------------------
  99. 'WYŚWIETLANIE WYNIKU MA LCD
  100. Sub Display_()
  101.  
  102. End Sub
  103. '------------------------------------------------------------------
  104. 'HAMULEC
  105. Sub Hold_()
  106.    In_a = 0
  107.    In_b = 0
  108.    Ena_da = 1
  109.    Ena_db = 1
  110.    Led_hold = 0
  111. End Sub
  112. '------------------------------------------------------------------
  113. 'LEWO
  114. Sub Left_()
  115.    In_a = 0
  116.    In_b = 1
  117.    Ena_da = 1
  118.    Ena_db = 1
  119.    Led_hold = 1
  120. End Sub
  121. '------------------------------------------------------------------
  122. 'PRAWO
  123. Sub Right_()
  124.    In_a = 1
  125.    In_b = 0
  126.    Ena_da = 1
  127.    Ena_db = 1
  128.    Led_hold = 1
  129. End Sub
  130. '------------------------------------------------------------------
  131. 'USTAWIENIA POCZATKOWE
  132. Ena_da = 0
  133. Ena_db = 0
  134. In_a = 0
  135. In_b = 0
  136. Sw_hold = 1
  137. Sw_left = 1
  138. Sw_right = 1
  139. Led_hold = 1
  140. Waitms 500
  141. Cursor Off Noblink
  142. Cls
  143. '--------------------------------------------------------------------
  144. 'PĘTLA GŁÓWNA
  145. Do
  146.    If Timer_tikx10 >= 10 Then                               'jelsi uplynelo 100ms to
  147.       Flaga100ms = 1                                        'ustaw flage uplynelo 100ms
  148.       Incr Timertikx100
  149.       Timer_tikx10 = 0                                      ''zeruj liczenie
  150.    End If
  151.    If Timertikx100 >= 10 Then                               'jelsiuplynela sekunda
  152.       Flaga1s = 1                                           'ustaw flage sekundy
  153.       Incr Timertikx200
  154.       Timertikx100 = 0                                      'zeruj liczenie
  155.    End If
  156.    If Timertikx200 >= 2 Then
  157.       Flaga2s = 1
  158.       Timertikx200 = 0
  159.    End If
  160.    If Flaga10ms = 1 Then
  161.       Flaga10ms = 0
  162.    End If
  163.    If Flaga100ms = 1 Then                                   'co 100ms
  164.       'Call G_adc()
  165.       Flaga100ms = 0                                        'wyzeruj Flaga100ms
  166.    End If
  167.    If Flaga1s = 1 Then
  168.       Call Blink_()
  169.      ' Call Display_()
  170.       Flaga1s = 0
  171.    End If
  172.    If Flaga2s = 1 Then                                      'co2s
  173.       Flaga2s = 0
  174.    End If
  175. '*********************************************************************
  176.  'OBSŁUGA PRZYCISKU ZATRZYMANIA
  177.    If Sw_hold = 0 Then
  178.       Incr Flaga10ms
  179.       If Flaga10ms => 3 Then
  180.          Call Hold_
  181.          Flaga10ms = 0
  182.       End If
  183.    End If
  184. '*********************************************************************
  185. 'OBSŁUGA PRZYCISKU W LEWO
  186.    If Sw_left = 0 Then
  187.       Incr Flaga10ms
  188.       If Flaga10ms => 3 Then
  189.          Call Left_
  190.          Flaga10ms = 0
  191.       End If
  192.    End If
  193. '*********************************************************************
  194. 'OBSŁUGA PRZYCISKU W PRAWO
  195.    If Sw_right = 0 Then
  196.       Incr Flaga10ms
  197.       If Flaga10ms => 3 Then
  198.          Call Right_
  199.          Flaga10ms = 0
  200.       End If
  201.    End If
  202. '*********************************************************************
  203. Loop
  204. End
  205.  
  206. '--------------------------------------------------------------------
  207. 'PODPROGRAM PRZERWAŃ TIMER1
  208. Przertimer1:
  209.    Timer1 = 45536                                           'wstawienie do Timer1 wartości 45536
  210.    Incr Timer_tikx10
  211.    If Timer_tikx10 = 1 Then
  212.       Set Flaga10ms
  213.    End If
  214. Return
  215. '----------------------------------------------------------------------
nie działa sub hamulec - jak go uaktywnię to nie mogę kręcić w lewo ani w prawo bez aktywnego suba hamulec kręcenie lewo, prawo działa co mam źle napisane.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: sterowanie kątem polaryzacji yagi

Post autor: niveasoft » 27 sty 2019, 19:48

Trochę dziwny ten kod i ma kilka błędów.
Jadąć od góry nie włączyłeś podciągania na przyciskach bo napisałeś PINB.5 = 1 a powinno być PORTB.5 = 1
Z rejestru PINx można tylko czytać. Nie da się go ustawiać. Wpis do PINx wiec nic nie dał i miałeś przyciski bez ustalonego stanu.

Nie wiem co ma oznaczać w linii 28 ten zapis "On Timer2"
Z takiego wpisu się korzysta gdy włączasz przerwanie od przepełnienia timera. Wtedy musiałbyś też podac gdzie ma skoczyć czyli coś na kształt "On Timer2 Timer2_isr"
Przy PWM jednak rzadko się w ogóle włącza przerwanie. Właśnie po to PWM jest sprzętowe żeby timer robił wszystko sam bez potrzeby obsługi przerwań.

Ciekawe też ze nigdzie nie napisałeś ile to PWM ma wynosić i teraz teoretycznie masz PWM =0
Sprawdż ten poprawiony kod. Gdyby PWM nie działało tak jak powinno to wypróbuj jeszcze "Compare_pwm = Clear_down"

Osobną sprawą jest też wykorzystanie flag ale na bitach. Bit może mieć tylko dwie wartości 0 lub 1 a Ty zwiększasz Flaga10ms do 3 hahahaha :D
Chyba Flaga10m powinna być zadeklarowana jako Byte a w linii 71 zakomentowałbym wpis "Flaga10ms Alias Timer_tik_flag.0 "
  1. '**********************************************
  2. 'PROGRAM TESTOWY STEROWANIA ZMIANA POLARYZACJI
  3. 'ANTENY TYPU YAGI MIKROKONTROLER ATMEGA32 16MHz
  4. '**********************************************
  5. $regfile = "m32def.dat"
  6. $crystal = 16000000
  7. $hwstack = 64
  8. $swstack = 64
  9. $framesize = 128
  10. $baud = 19200
  11. Config Submode = New
  12. 'Config Watchdog = 4096
  13. 'Start Watchdog
  14.  
  15. 'Debug Off
  16. 'Debug On
  17. '--------------------------------------------------------------------
  18. 'KONFIGURACJA LCD
  19. Config Lcd = 16x4
  20. Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5
  21. '--------------------------------------------------------------------
  22. 'KONFIGURACJA TIMER'ÓW
  23. Config Timer1 = Timer , Prescale = 8
  24. On Timer1 Przertimer1
  25. Enable Timer1
  26. 'Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_down , Prescale = 1
  27. Config Timer2 = Pwm , Compare_pwm = Clear_up , Prescale = 1024
  28.  
  29. '--------------------------------------------------------------------
  30. Enable Interrupts
  31.  
  32.  
  33. '--------------------------------------------------------------------
  34. 'KONFIGURACJA ADC
  35. Config Adc = Single , Prescaler = Auto
  36. '--------------------------------------------------------------------
  37. 'KONFIGURACJA PORTÓW
  38. Config Porta.6 = Input : Pina.6 = 1                         'ADC VNH5019
  39. Config Porta.7 = Input : Pina.7 = 1                         'ADC POTI ACTUATOR
  40. Config Portb.0 = Output : Portb.0 = 0                       'IN_A
  41. Config Portb.1 = Output : Portb.1 = 0                       'IN_B
  42. Config Portb.2 = Output : Portb.2 = 1                       'CS_DIS
  43. Config Portb.3 = Output : Portb.3 = 1                       'ENA/DIAGA
  44. Config Portb.4 = Output : Portb.4 = 1                       'ENA/DIAGB
  45. Config Portb.5 = Input : Portb.5 = 1                        'SW_LEFT
  46. Config Portb.6 = Input : Portb.6 = 1                        'SW_HOLD
  47. Config Portb.7 = Input : Portb.7 = 1                        'SW_RIGHT
  48. Config Portc.3 = Output : Portc.3 = 1                       'LED_HOLD
  49. Config Portc.7 = Output : Portc.7 = 1                       'LED_LIVE
  50. Config Portd.7 = Output : Portd.7 = 1                       'PWM
  51.  
  52. '--------------------------------------------------------------------
  53. 'ALIASY PORTÓW
  54. In_a Alias Portb.0
  55. In_b Alias Portb.1
  56. Cs_dis Alias Portb.2
  57. Ena_da Alias Portb.3
  58. Ena_db Alias Portb.4
  59. Led_hold Alias Portc.3
  60. Sw_left Alias Pinb.5                                        'Pinc.4
  61. Sw_hold Alias Pinb.6                                        'Pinc.5
  62. Sw_right Alias Pinb.7                                       'Pinc.6
  63. Led_live Alias Portc.7                                      'Dioda Led sygnalizująca prace układu
  64. Pwm_ Alias Portd.7
  65. '--------------------------------------------------------------------
  66. 'ZMIENNE   CZASU
  67. Dim Timer_tikx10 As Byte                                    'zmienna liczaca przepełnienie timera
  68. Dim Timertikx100 As Byte
  69. Dim Timertikx200 As Byte
  70. Dim Timer_tik_flag As Byte
  71. Flaga10ms Alias Timer_tik_flag.0
  72. Flaga100ms Alias Timer_tik_flag.1
  73. Flaga500ms Alias Timer_tik_flag.2
  74. Flaga1s Alias Timer_tik_flag.3
  75. Flaga2s Alias Timer_tik_flag.4
  76. Flaga2_5s Alias Timer_tik_flag.5
  77. 'zostaly jeszce trzy wolne flagi
  78. ' a uzylem tylko jednego bajtu
  79. ' Paweł - pikczu
  80. '--------------------------------------------------------------------
  81. 'ZMIENNE
  82. Dim Dane_adc As Word
  83. Dim Kanal_adc As Byte
  84. Dim Poti As Word
  85. Dim Prad As Word
  86. Dim Hamulec_help As Bit
  87. '--------------------------------------------------------------------
  88. 'POBIERANIE DANYCH Z ADC
  89. Sub G_adc()
  90.  
  91. End Sub
  92. '--------------------------------------------------------------------
  93. 'MRUGANIE DIODĄ LED CO 1 SEKUNDĘ
  94. ' CO BY BYŁO WIDAĆ ŻE UKŁAD ŻYJE
  95. Sub Blink_()
  96.    Toggle Led_live
  97. End Sub
  98. '-------------------------------------------------------------------
  99. 'WYŚWIETLANIE WYNIKU MA LCD
  100. Sub Display_()
  101.  
  102. End Sub
  103. '------------------------------------------------------------------
  104. 'HAMULEC
  105. Sub Hold_()
  106.    In_a = 0
  107.    In_b = 0
  108.    Pwm2 = 255                                               'pełna moc
  109.    Led_hold = 0
  110. End Sub
  111. '------------------------------------------------------------------
  112. 'LEWO
  113. Sub Left_()
  114.    Pwm2 = 100                                               'obniżenie mocy
  115.    In_a = 0
  116.    In_b = 1
  117.    Led_hold = 1
  118. End Sub
  119. '------------------------------------------------------------------
  120. 'PRAWO
  121. Sub Right_()
  122.    Pwm2 = 100                                               'obnizenie mocy
  123.    In_a = 1
  124.    In_b = 0
  125.    Led_hold = 1
  126. End Sub
  127. '------------------------------------------------------------------
  128. 'USTAWIENIA POCZATKOWE
  129.   Ena_da = 1
  130.   Ena_db = 1
  131.  
  132. Waitms 500
  133. Cursor Off , Noblink
  134. Cls
  135. '--------------------------------------------------------------------
  136. 'PĘTLA GŁÓWNA
  137. Do
  138.    If Timer_tikx10 >= 10 Then                               'jelsi uplynelo 100ms to
  139.       Flaga100ms = 1                                        'ustaw flage uplynelo 100ms
  140.       Incr Timertikx100
  141.       Timer_tikx10 = 0                                      ''zeruj liczenie
  142.    End If
  143.    If Timertikx100 >= 10 Then                               'jelsiuplynela sekunda
  144.       Flaga1s = 1                                           'ustaw flage sekundy
  145.       Incr Timertikx200
  146.       Timertikx100 = 0                                      'zeruj liczenie
  147.    End If
  148.    If Timertikx200 >= 2 Then
  149.       Flaga2s = 1
  150.       Timertikx200 = 0
  151.    End If
  152.    If Flaga10ms = 1 Then
  153.       Flaga10ms = 0
  154.    End If
  155.    If Flaga100ms = 1 Then                                   'co 100ms
  156.       'Call G_adc()
  157.       Flaga100ms = 0                                        'wyzeruj Flaga100ms
  158.    End If
  159.    If Flaga1s = 1 Then
  160.       Call Blink_()
  161.      ' Call Display_()
  162.       Flaga1s = 0
  163.    End If
  164.    If Flaga2s = 1 Then                                      'co2s
  165.       Flaga2s = 0
  166.    End If
  167. '*********************************************************************
  168.  'OBSŁUGA PRZYCISKU ZATRZYMANIA
  169.    If Sw_hold = 0 Then
  170.       Incr Flaga10ms
  171.       If Flaga10ms => 3 Then
  172.          Call Hold_
  173.          Flaga10ms = 0
  174.       End If
  175.    End If
  176. '*********************************************************************
  177. 'OBSŁUGA PRZYCISKU W LEWO
  178.    If Sw_left = 0 Then
  179.       Incr Flaga10ms
  180.       If Flaga10ms => 3 Then
  181.          Call Left_
  182.          Flaga10ms = 0
  183.       End If
  184.    End If
  185. '*********************************************************************
  186. 'OBSŁUGA PRZYCISKU W PRAWO
  187.    If Sw_right = 0 Then
  188.       Incr Flaga10ms
  189.       If Flaga10ms => 3 Then
  190.          Call Right_
  191.          Flaga10ms = 0
  192.       End If
  193.    End If
  194. '*********************************************************************
  195. Loop
  196. End
  197.  
  198. '--------------------------------------------------------------------
  199. 'PODPROGRAM PRZERWAŃ TIMER1
  200. Przertimer1:
  201.    Timer1 = 45536                                           'wstawienie do Timer1 wartości 45536
  202.    Incr Timer_tikx10
  203.    If Timer_tikx10 = 1 Then
  204.       Set Flaga10ms
  205.    End If
  206. Return
  207. '----------------------------------------------------------------------
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: sterowanie kątem polaryzacji yagi

Post autor: Jacek » 27 sty 2019, 20:47

Witam - Bartku dziękuje za poprawienie moich wypocin. Twój kod działa wyśmienicie - do tej pory zamiast pwm z atmegi miałem podłączony generator SDG 2042X i regulowałem z niego pwm.
Dopisałem odczyt adc i wyświetlanie na lcd - ale chyba coś nie tak bo na lcd mam cały czas 1023

  1.  
  2. '**********************************************
  3. 'PROGRAM TESTOWY STEROWANIA ZMIANA POLARYZACJI
  4. 'ANTENY TYPU YAGI MIKROKONTROLER ATMEGA32 16MHz
  5. 'POPRAWIONY PRZEZ NIVEASOFFT
  6. '**********************************************
  7. $regfile = "m32def.dat"
  8. $crystal = 16000000
  9. $hwstack = 64
  10. $swstack = 64
  11. $framesize = 128
  12. $baud = 19200
  13. Config Submode = New
  14. 'Config Watchdog = 4096
  15. 'Start Watchdog
  16. 'Debug Off
  17. 'Debug On
  18. '--------------------------------------------------------------------
  19. 'KONFIGURACJA LCD
  20. Config Lcd = 16x4
  21. Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5
  22. '--------------------------------------------------------------------
  23. 'KONFIGURACJA TIMER'ÓW
  24. Config Timer1 = Timer , Prescale = 8
  25. On Timer1 Przertimer1
  26. Enable Timer1
  27. 'Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_down , Prescale = 1
  28. Config Timer2 = Pwm , Compare_pwm = Clear_up , Prescale = 1024
  29.  
  30. '--------------------------------------------------------------------
  31. Enable Interrupts
  32.  
  33.  
  34. '--------------------------------------------------------------------
  35. 'KONFIGURACJA ADC
  36. Config Adc = Single , Prescaler = Auto , Reference = Aref
  37. Start Adc
  38. '--------------------------------------------------------------------
  39. 'KONFIGURACJA PORTÓW
  40. Config Porta.6 = Input : Pina.6 = 1                         'ADC VNH5019
  41. Config Porta.7 = Input : Pina.7 = 1                         'ADC POTI ACTUATOR
  42. Config Portb.0 = Output : Portb.0 = 0                       'IN_A
  43. Config Portb.1 = Output : Portb.1 = 0                       'IN_B
  44. Config Portb.2 = Output : Portb.2 = 1                       'CS_DIS
  45. Config Portb.3 = Output : Portb.3 = 1                       'ENA/DIAGA
  46. Config Portb.4 = Output : Portb.4 = 1                       'ENA/DIAGB
  47. Config Portb.5 = Input : Portb.5 = 1                        'SW_LEFT
  48. Config Portb.6 = Input : Portb.6 = 1                        'SW_HOLD
  49. Config Portb.7 = Input : Portb.7 = 1                        'SW_RIGHT
  50. Config Portc.3 = Output : Portc.3 = 1                       'LED_HOLD
  51. Config Portc.7 = Output : Portc.7 = 1                       'LED_LIVE
  52. Config Portd.7 = Output : Portd.7 = 1                       'PWM
  53.  
  54. '--------------------------------------------------------------------
  55. 'ALIASY PORTÓW
  56. In_a Alias Portb.0
  57. In_b Alias Portb.1
  58. Cs_dis Alias Portb.2
  59. Ena_da Alias Portb.3
  60. Ena_db Alias Portb.4
  61. Led_hold Alias Portc.3
  62. Sw_left Alias Pinb.5                                        'Pinc.4
  63. Sw_hold Alias Pinb.6                                        'Pinc.5
  64. Sw_right Alias Pinb.7                                       'Pinc.6
  65. Led_live Alias Portc.7                                      'Dioda Led sygnalizująca prace układu
  66. Pwm_ Alias Portd.7
  67. '--------------------------------------------------------------------
  68. 'ZMIENNE   CZASU
  69. Dim Timer_tikx10 As Byte                                    'zmienna liczaca przepełnienie timera
  70. Dim Timertikx100 As Byte
  71. Dim Timertikx200 As Byte
  72. Dim Timer_tik_flag As Byte
  73. Flaga10ms Alias Timer_tik_flag.0
  74. Flaga100ms Alias Timer_tik_flag.1
  75. Flaga500ms Alias Timer_tik_flag.2
  76. Flaga1s Alias Timer_tik_flag.3
  77. Flaga2s Alias Timer_tik_flag.4
  78. Flaga2_5s Alias Timer_tik_flag.5
  79. 'zostaly jeszce trzy wolne flagi
  80. ' a uzylem tylko jednego bajtu
  81. ' Paweł - pikczu
  82. '--------------------------------------------------------------------
  83. 'ZMIENNE
  84. Dim Dane_adc As Word
  85. Dim Kanal_adc As Byte
  86. Dim Poti As Word
  87. Dim Prad As Word
  88. Dim Hamulec_help As Bit
  89. '--------------------------------------------------------------------
  90. 'POBIERANIE DANYCH Z ADC
  91. Sub G_adc()
  92.    Prad = Getadc(6)
  93.    Poti = Getadc(7)
  94. End Sub
  95. '--------------------------------------------------------------------
  96. 'MRUGANIE DIODĄ LED CO 1 SEKUNDĘ
  97. ' CO BY BYŁO WIDAĆ ŻE UKŁAD ŻYJE
  98. Sub Blink_()
  99.    Toggle Led_live
  100. End Sub
  101. '-------------------------------------------------------------------
  102. 'WYŚWIETLANIE WYNIKU MA LCD
  103. Sub Display_()
  104.    Locate 1 , 1 : Lcd "PRAD " ; Prad ; "  "
  105.    Locate 2 , 1 : Lcd "POTI " ; Poti ; "  "
  106. End Sub
  107. '------------------------------------------------------------------
  108. 'HAMULEC
  109. Sub Hold_()
  110.    In_a = 0
  111.    In_b = 0
  112.    Pwm2 = 255                                               'pełna moc
  113.    Led_hold = 0
  114.    Cs_dis = 1
  115. End Sub
  116. '------------------------------------------------------------------
  117. 'LEWO
  118. Sub Left_()
  119.    Pwm2 = 100                                               'obniżenie mocy
  120.    In_a = 0
  121.    In_b = 1
  122.    Led_hold = 1
  123.    Cs_dis = 0
  124. End Sub
  125. '------------------------------------------------------------------
  126. 'PRAWO
  127. Sub Right_()
  128.    Pwm2 = 100                                               'obnizenie mocy
  129.    In_a = 1
  130.    In_b = 0
  131.    Led_hold = 1
  132.    Cs_dis = 0
  133. End Sub
  134. '------------------------------------------------------------------
  135. 'USTAWIENIA POCZATKOWE
  136. Ena_da = 1
  137. Ena_db = 1
  138.  
  139. Waitms 500
  140. Cursor Off , Noblink
  141. Cls
  142. '--------------------------------------------------------------------
  143. 'PĘTLA GŁÓWNA
  144. Do
  145.    If Timer_tikx10 >= 10 Then                               'jelsi uplynelo 100ms to
  146.       Flaga100ms = 1                                        'ustaw flage uplynelo 100ms
  147.       Incr Timertikx100
  148.       Timer_tikx10 = 0                                      ''zeruj liczenie
  149.    End If
  150.    If Timertikx100 >= 10 Then                               'jelsiuplynela sekunda
  151.       Flaga1s = 1                                           'ustaw flage sekundy
  152.       Incr Timertikx200
  153.       Timertikx100 = 0                                      'zeruj liczenie
  154.    End If
  155.    If Timertikx200 >= 2 Then
  156.       Flaga2s = 1
  157.       Timertikx200 = 0
  158.    End If
  159.    If Flaga10ms = 1 Then
  160.       Flaga10ms = 0
  161.    End If
  162.    If Flaga100ms = 1 Then                                   'co 100ms
  163.       Call G_adc()
  164.       Flaga100ms = 0                                        'wyzeruj Flaga100ms
  165.    End If
  166.    If Flaga1s = 1 Then
  167.       Call Blink_()
  168.       Call Display_()
  169.       Flaga1s = 0
  170.    End If
  171.    If Flaga2s = 1 Then                                      'co2s
  172.       Flaga2s = 0
  173.    End If
  174. '*********************************************************************
  175. 'OBSŁUGA PRZYCISKU ZATRZYMANIA
  176.    If Sw_hold = 0 Then
  177.       Call Hold_
  178.    End If
  179. '*********************************************************************
  180. 'OBSŁUGA PRZYCISKU W LEWO
  181.    If Sw_left = 0 Then
  182.       Call Left_
  183.    End If
  184. '*********************************************************************
  185. 'OBSŁUGA PRZYCISKU W PRAWO
  186.    If Sw_right = 0 Then
  187.       Call Right_
  188.    End If
  189. '*********************************************************************
  190. Loop
  191. End
  192.  
  193. '--------------------------------------------------------------------
  194. 'PODPROGRAM PRZERWAŃ TIMER1
  195. Przertimer1:
  196.    Timer1 = 45536                                           'wstawienie do Timer1 wartości 45536
  197.    Incr Timer_tikx10
  198.    If Timer_tikx10 = 1 Then
  199.       Set Flaga10ms
  200.    End If
  201. Return
  202. '----------------------------------------------------------------------
  203.  
czy odczyt adc mam również źle zrobiony - wyjście CS z VNH5019 mam na porcie PA6 a z potencjometru siłownika na PA7 Atmegi32
wejście Vref atmegi32 mam w powietrzu zblokowane kondensatorem 100n - musiałem go dolutować dzisiaj bo na EvB 4v3 nie ma go fabrycznie.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: sterowanie kątem polaryzacji yagi

Post autor: niveasoft » 27 sty 2019, 20:51

Reference = Aref oznacza że punktem odniesienia będzie to co podasz na pin AREF. Takiego ustawienia się używa jak masz jakieś swoje dokładniejsze źródło napięcia odniesienia. Jak tam nic nie masz to wszystko będzie większe i zawsze odczyta 1023.
Powinno być raczej Reference = Avcc to już powinno podać wewnętrznie napięcie zasilania procesora na nóżkę AREF. Można to nawet zmierzyć multimetrem.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: sterowanie kątem polaryzacji yagi

Post autor: Jacek » 27 sty 2019, 21:00

Witam - no tak miałem avcc i wówczas odczyt z VNH5019 nadal 1023 ale już z potencjometru pokazuje około 900 (skacze) czy mam suwak potencjometru na maksa w lewo czy w prawo i jest taki sam.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: sterowanie kątem polaryzacji yagi

Post autor: niveasoft » 27 sty 2019, 21:06

Po pierwsze nigdy nie możesz przekroczyć napięcia zasilania procesora.
Myślę, ze trzeba złapać miernik. 1023 pokaże tylko jak się zbliżysz do maksimum..więc tu się trochę już martwię :D

Zmierz ile jest na wyjściu potencjometra w skrajnych połozeniach.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: sterowanie kątem polaryzacji yagi

Post autor: Jacek » 27 sty 2019, 21:17

Witam - pomierzyłem i tak pomimo stanu niskiego na wejściu CS_DIS z VNH5019 cały czas wynosi 4.89V czy silnik pracuje czy nie - pobór prądu 280mA. Zmierzyłem napięcie na wejściu ADC7 - podczas jazy od minimum do maksimum potencjometru i wynosi od 0.03V do 4.89V - jakaś rada.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: sterowanie kątem polaryzacji yagi

Post autor: niveasoft » 27 sty 2019, 21:29

W instrukcji pisze, ze pinu CS_DIS można w ogóle nie podłączać. Powinno mierzyć na pinie CS.
Co do rady to bym może zaczął od podłączenia zwykłego potencjometru zamiast tych wyjść i sprawdził czy procek pokazuje odczytane dane w pełnym zakresie.
Czegoś zawsze trzeba być pewnym...
Piny ADC na których mierzysz nie powinny mieć podciągania.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: sterowanie kątem polaryzacji yagi

Post autor: Jacek » 27 sty 2019, 22:17

Witam - a więc tak oba porty ADC6 oraz ADC7 podłączone do 2 potencjometrów 10k na płytce testowej EvB i na lcd oba wyświetlane są podczas kręcenia prawidłowo od 0 do 1023 - czy przyczyna mogą być zakłócenia od samego VNH5019?
pozdrawiam Jacek.
Edit:
:evil: :oops: Ku........ chińskie żabki odczyt z potencjometru działa juz prawidłowo :D
pozdrawiam Jacek.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: sterowanie kątem polaryzacji yagi

Post autor: Jacek » 17 lut 2019, 21:38

Witam - jak przeliczyć napięcie wychodzące z VNH5019 na mA w tej chwili adc atmegi do którego podłączony jest sygnał CS pokazuje max 8 przy poborze prądu z zasilacza 230mA
ODPOWIEDZ