AS5311 Bascom

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

Re: AS5311 Bascom

Post autor: Jacek » 12 gru 2021, 22:31

Ok jutro postaram się podpiąć oscyloskop do linii CLK i DO i zobaczę czy AS5311 wysyła jakieś sygnały do Atmegi32, na razie dzięki Koledzy mam nadzieję że pomożecie mi opanować ten czujnik, liczę na waszą pomoc.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AS5311 Bascom

Post autor: niveasoft » 12 gru 2021, 22:32

Ogólnie to lepiej jak nawet lokalne zmienne mają inne nazwy niż globalne. Jak funkcja zwraca cos co jest globalną to naprawdę trzeba wiedzieć co sie robi bo to jest faktyczny skrót, ale pomyłka będzie kosztować...
Byval i Byref mam nadzieję że opanowane?
nazwy lokalnych w Bascom powinny sie róznić od globalnych. To z nów nie aż tak trudne.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 12 gru 2021, 22:41

Bartku, zobaczę czy nie mam babola ;) sprzętowego i czy AS odzywa się do Atmegi.
pozdrawiam.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 19 gru 2021, 22:08

Witam, dzisiaj podłączyłem oscyloskop do AS5311 i nagrałem filmik https://www.youtube.com/watch?v=TIQGW-Phhk0
na filmie widać że kanały A i B działają, oraz działa PWM niestety na lcd nic się nie zmienia jest to oryginalny program z tej publikacji którą znalazł w necie Paweł Pikczu.
Jedynie co zmieniłem to częstotliwość rezonatora z 10MHz na 16MHz.
Proszę o podpowiedź jak napisać sub rutynę aby działał odczyt z interfejsu szeregowego.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AS5311 Bascom

Post autor: niveasoft » 25 gru 2021, 10:35

Napiszę Tobie, że przez nawał pracy nie było wcześniej czasu na to spojrzeć a to się wydaje bajecznie proste.

To jest enkoder z wyjściem 12 bitowym. Ten Czech to robił w tym kodzie na piechotę. Podawał jeden sygnał zegarowy i sprawdzał co jest na wyjściu Data. Jeśli 1 to dodawał do zmiennej 1. W kolejnym kroku mnożył wszystko *2 i znowu po jednym cyklu zegara sprawdzał Data i tak dwanaście razy. Słaba implementacja :P
Nie dość, że zamiast *2 mógł użyć Shift Zmienna Left 1 to tak naprawdę tutaj można użyć Shiftin Zmienna_Word , 18
Zerknę do tego.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 25 gru 2021, 10:49

Witam - ok jasne dziękuje.
pozdrawiam Jacek.
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AS5311 Bascom

Post autor: niveasoft » 25 gru 2021, 11:32

Zacząłem to przerabiać i znalazłem jeden potencjalny błąd.
Tam w pętli głównej jest zdefiniowany sposób resetowania całego wskazania. Reaguje na PINC.7
Ty nigdzie PINC.7 nie konfigurujesz i tutaj jeśli pojawi się stan wysoki to resetuje wskazania.
Skonfigurowałem ten pin i podciągnąłem do plusa a w pętli reaguję na stan niski.
Sprawdź bo może to zadziała i nie będę dalej nic kombinował. Wiesz... dalej nie mam za dużo czasu :D
Normalnie rozwiązałbym to przez Shiftin do zmiennej Dword.
W tym czasie jak Ty będziesz sprawdzał to ja zdążę machnąć coś innego.
  1. $regfile = "m32adef.dat"
  2. $crystal = 1600000
  3. $hwstack = 32
  4. $swstack=8
  5. $framesize = 64
  6.  
  7. $projecttime = 25
  8.  
  9. Config Submode = New
  10.  
  11.  
  12. Config Lcd = 16x4
  13. Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3
  14.  
  15. Data_out Alias Pina.0 : Config Data_out = Input : Set Porta.0       'DO + pullup
  16. Cs Alias Porta.1 : Config Cs = Output : Set Cs               'chip select Hi=Inactive
  17. Clk Alias Porta.2 : Config Clk = Output : Set Clk            'clock output readed when clk is low
  18.  
  19. Pin_reset Alias Pinc.7 : Portc.7 = 1                        'pullup
  20.  
  21.     Declare Sub Poloha(byref P As Integer)
  22.     Declare Sub Determinuj_polohu(p_old As Integer , P_new As Integer , Sm As Integer , Pp As Integer)
  23.     Declare Sub Cti_data(byref Pozice As Integer)
  24.     Declare Sub Ssi_init
  25.     Declare Sub Ssi_close
  26.  
  27.  
  28.     Dim Pozice As Integer
  29.     'Dim Poloha As Long
  30.     Dim Vzd_pom As Long
  31.     Dim Vzdalenost As Long
  32.     Dim Mm2 As Integer
  33.     Dim Draha As String * 16
  34.     Dim Pom_str As String * 16
  35.     Dim Pom_s As Single
  36.     Dim Pozice_old As Integer
  37.     Dim Pozice_new As Integer
  38.     Dim Pozice_start As Integer
  39.     Dim Smer As Integer
  40.     Dim Priznak As Integer
  41.     Dim Fix_prechodu As Bit
  42.     Dim Pocitadlo As Integer
  43.     Dim Ocf As Byte
  44.     Dim Cof As Byte
  45.     Dim Lin As Byte
  46.     Dim Mag_inc As Byte
  47.     Dim Mag_dec As Byte
  48.     Dim Parita As Byte
  49.     Dim Poms As String * 16
  50.  
  51.  
  52.  
  53.     Call Poloha(pozice_start)
  54.     Pozice_old = Pozice_start
  55.  
  56.  
  57.     Do
  58.  
  59.        If Pin_reset = 0 Then
  60.         'określ pozycję wyjściową'
  61.           Mm2 = 0
  62.           Call Poloha(pozice_start)                                                 'Poloha--> Pozycja
  63.           Pozice_old = Pozice_start
  64.        End If
  65.  
  66.  
  67.        Call Poloha(pozice_new)
  68.        Call Determinuj_polohu(pozice_old , Pozice_new , Smer , Priznak)
  69.  
  70.        If Smer = 0 Then                                     'Smer--> Kierunek
  71.           If Priznak = 0 Then
  72.            'Odległość rośnie w ciągu 2 m
  73.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  74.              Vzdalenost = Vzd_pom + Pozice_new
  75.           Else
  76.            'Odległość rośnie ponad 2mm
  77.              Incr Mm2
  78.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  79.              Vzdalenost = Vzd_pom + Pozice_new
  80.           End If
  81.        Else
  82.           If Priznak = 0 Then
  83.            'Odległość spada w granicach 2mm
  84.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  85.              Vzdalenost = Vzd_pom + Pozice_new
  86.           Else
  87.            'Odległość spada ponad 2mm
  88.              Decr Mm2
  89.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  90.              Vzdalenost = Vzd_pom + Pozice_new
  91.           End If
  92.        End If
  93.  
  94.         Waitus 20
  95.  
  96.        'wartość pojawia się na wyświetlaczu co 20 cykli
  97.       Incr Pocitadlo
  98.        If Pocitadlo > 50 Then
  99.           Pocitadlo = 0
  100.           Cls : Lcd Pozice_new
  101.           Lowerline
  102.           Pom_s = Vzdalenost / 2048
  103.           Lcd Fusing(pom_s , "#.###")
  104.        End If
  105.        Pozice_old = Pozice_new
  106.     Loop
  107.     End
  108.  
  109.  
  110.     ' ****************************
  111.     'určí směr pohybu a překrocění hranice 0 /-/ 4095-->określa kierunek ruchu i przekroczenie granicy 0 / - / 4095
  112.     ' ****************************
  113.     Sub Determinuj_polohu(p_old As Integer , P_new As Integer , Sm As Integer , Pp As Integer)
  114.     'Sm ... směr
  115.     ' 0 = vzdaluji se od reference-->Odchodzę od referencji
  116.     ' 1 = přibližuji se-->zbliżam się
  117.     'Pp ... příznak přechodu přes 4095-->Pp ... przekraczanie flagi ponad 4095
  118.     ' 0 = nepřekročil jsem 4095-->nie przekroczyłem 4095
  119.     ' 1 = překročil jsem přes 4095-->przekroczyłem 4095
  120.        Dim Delta As Single
  121.        Dim Sgn_delta As Single
  122.        Dim Abs_delta As Single
  123.        Delta = P_new - P_old
  124.        Abs_delta = Abs(delta)
  125.        Sgn_delta = Sgn(delta)
  126.        Select Case Delta
  127.     'delta je kladné nebo nula-->delta jest dodatnia lub zero
  128.           Case Is >= 0
  129.              If Abs_delta < 1000 Then
  130.     'vzdálenost roste a jsem v rozsahu 2 mm-->odległość rośnie i jestem w zakresie 2 mm
  131.                 Sm = 0 : Pp = 0
  132.              Else
  133.     'vzdálenost klesá a překročil jsem 2 mm-->odległość maleje i przekroczyłem 2 mm
  134.                 Sm = 1 : Pp = 1
  135.              End If
  136.     'delta je záporné-->delta jest ujemna
  137.           Case Else
  138.              If Abs_delta < 1000 Then
  139.     'vzdálenost klesá a jsem v rozsahu 2 mm-->odległość maleje i jestem w zakresie 2 mm
  140.                 Sm = 1 : Pp = 0
  141.              Else
  142.     'vzdálenost klesá a překročil jsem 2 mm-->odległość maleje i przekroczyłem 2 mm
  143.                 Sm = 0 : Pp = 1
  144.              End If
  145.        End Select
  146.     End Sub
  147.     ' ****************************
  148.     'vyčte polohu z čipu-->odczytaj pozycję z chipa
  149.     ' ****************************
  150.     Sub Poloha(byref P As Integer)
  151.     'inicializace čipu-->inicjalizacja chipa
  152.        Ssi_init
  153.     'čtení hodnoty-->wartość odczytu
  154.        Call Cti_data(p)
  155.     'ukončení komunikace s čipem-->zakończenie komunikacji z chipem
  156.        Ssi_close
  157.     End Sub
  158.     ' ****************************
  159.     'Přečte data z měřiče, bit po bitu-->Odczytuje dane z licznika, bit po bicie
  160.     ' ****************************
  161.     Sub Cti_data(byref Pozice As Integer)
  162.        Dim Pom As Byte
  163.     'Pin 2 portu A jsou hodiny-->'Pin 2 portu A to zegar
  164.     'Proměnná Pozice vrací hodnotu-->Zmienna Pozice zwraca wartość
  165.        Pozice = 0
  166.     'D11
  167.        Reset Porta.2
  168.        If Pinc.0 = 1 Then
  169.           Pozice = Pozice + 1
  170.        End If
  171.        Set Porta.2
  172.     'D10
  173.        Pozice = Pozice * 2
  174.        Reset Porta.2
  175.        If Pinc.0 = 1 Then
  176.           Pozice = Pozice + 1
  177.        End If
  178.        Set Porta.2
  179.     'D9
  180.        Pozice = Pozice * 2
  181.        Reset Porta.2
  182.        If Pinc.0 = 1 Then
  183.           Pozice = Pozice + 1
  184.        End If
  185.        Set Porta.2
  186.     'D8
  187.        Pozice = Pozice * 2
  188.        Reset Porta.2
  189.        If Pinc.0 = 1 Then
  190.           Pozice = Pozice + 1
  191.        End If
  192.        Set Porta.2
  193.     'D7
  194.        Pozice = Pozice * 2
  195.        Reset Porta.2
  196.        If Pinc.0 = 1 Then
  197.           Pozice = Pozice + 1
  198.        End If
  199.        Set Porta.2
  200.     'D6
  201.        Pozice = Pozice * 2
  202.        Reset Porta.2
  203.        If Pinc.0 = 1 Then
  204.           Pozice = Pozice + 1
  205.        End If
  206.        Set Porta.2
  207.     'D5
  208.        Pozice = Pozice * 2
  209.        Reset Porta.2
  210.        If Pinc.0 = 1 Then
  211.           Pozice = Pozice + 1
  212.        End If
  213.        Set Porta.2
  214.     'D4
  215.        Pozice = Pozice * 2
  216.        Reset Porta.2
  217.        If Pinc.0 = 1 Then
  218.           Pozice = Pozice + 1
  219.        End If
  220.        Set Porta.2
  221.     'D3
  222.        Pozice = Pozice * 2
  223.        Reset Porta.2
  224.        If Pinc.0 = 1 Then
  225.           Pozice = Pozice + 1
  226.        End If
  227.        Set Porta.2
  228.     'D2
  229.        Pozice = Pozice * 2
  230.        Reset Porta.2
  231.        If Pinc.0 = 1 Then
  232.           Pozice = Pozice + 1
  233.        End If
  234.        Set Porta.2
  235.     'D1
  236.        Pozice = Pozice * 2
  237.        Reset Porta.2
  238.        If Pinc.0 = 1 Then
  239.           Pozice = Pozice + 1
  240.        End If
  241.        Set Porta.2
  242.     'D0
  243.        Pozice = Pozice * 2
  244.        Reset Porta.2
  245.        If Pinc.0 = 1 Then
  246.           Pozice = Pozice + 1
  247.        End If
  248.        Set Porta.2
  249.     'čtení stavových bitů-->odczytaj bity statusu
  250.     'OCF
  251.     'Waitus 10
  252.        Reset Porta.2
  253.        Ocf = Pinc.0
  254.        Set Porta.2
  255.     'COF
  256.     'Waitus 10
  257.        Reset Porta.2
  258.        Cof = Pinc.0
  259.        Set Porta.2
  260.     'LIN
  261.     'Waitus 10
  262.        Reset Porta.2
  263.        Lin = Pinc.0
  264.        Set Porta.2
  265.     'Mag_INC
  266.     'Waitus 10
  267.        Reset Porta.2
  268.        Mag_inc = Pinc.0
  269.        Set Porta.2
  270.     'Mag_DEC
  271.     'Waitus 10
  272.        Reset Porta.2
  273.        Mag_dec = Pinc.0
  274.     End Sub
  275.     ' ****************************
  276.     ' ****************************
  277.     Sub Ssi_init
  278.     'A.1 CS ¨¨¨¨¨______
  279.     'A.2 CLK ¨¨¨¨¨¨¨__¨¨
  280.     ' us 2 1 1 1
  281.     'PortA.2 CLK ... clock
  282.        Set Porta.2
  283.     'PortA.1 CS ... chip select
  284.        Set Porta.1
  285.        Waitus 2
  286.        Reset Porta.1
  287.        Waitus 1
  288.        Reset Porta.2
  289.        Waitus 1
  290.        Set Porta.2
  291.        Waitus 1
  292.     End Sub
  293.     ' ****************************
  294.     ' ****************************
  295.     Sub Ssi_close
  296.     'A.1 CS ___¨¨¨¨
  297.     'A.2 CLK _¨¨¨¨¨¨
  298.     ' us 1 2
  299.     'čtu ^
  300.     'PortA.2 CLK ... clock
  301.     'PortA.1 CS ... chip select
  302.     'Parita
  303.        Set Porta.2
  304.        Parita = Pinc.0
  305.        Waitus 1
  306.        Set Porta.1
  307.        Waitus 2
  308.     End Sub
  309.     ' ****************************
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AS5311 Bascom

Post autor: niveasoft » 25 gru 2021, 11:48

Jeszcze coś rzuciło mi się w oczy. Data_out to niby Pina.0 a czytany był Pinc.0
Zmieniłem w kodzie wszystko na Aliasy i tak proponuję robić bo łatwiej uniknąć błędów.
Teraz pin danych to PINA.0. Jak chcesz inny to zmień tylko Alias u góry.
Zmieniłem też Pozice = Pozice * 2 na Shift Pozice , Left , 1

BTW. Ten czeski kod to taki mały potworek :D Ahahahahaha :D
  1. $regfile = "m32adef.dat"
  2. $crystal = 1600000
  3. $hwstack = 32
  4. $swstack=8
  5. $framesize = 64
  6.  
  7. $projecttime = 35
  8.  
  9. Config Submode = New
  10.  
  11.  
  12. Config Lcd = 16x4
  13. Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3
  14.  
  15. Data_out Alias Pina.0 : Config Data_out = Input : Set Porta.0       'DO + pullup
  16. Cs Alias Porta.1 : Config Cs = Output : Set Cs              'chip select Hi=Inactive
  17. Clk Alias Porta.2 : Config Clk = Output : Set Clk           'clock output readed when clk is low
  18.  
  19. Pin_reset Alias Pinc.7 : Portc.7 = 1                        'pullup
  20.  
  21.     Declare Sub Poloha(byref P As Integer)
  22.     Declare Sub Determinuj_polohu(p_old As Integer , P_new As Integer , Sm As Integer , Pp As Integer)
  23.     Declare Sub Cti_data(byref Pozice As Integer)
  24.     Declare Sub Ssi_init
  25.     Declare Sub Ssi_close
  26.  
  27.  
  28.     Dim Pozice As Integer
  29.     'Dim Poloha As Long
  30.     Dim Vzd_pom As Long
  31.     Dim Vzdalenost As Long
  32.     Dim Mm2 As Integer
  33.     Dim Draha As String * 16
  34.     Dim Pom_str As String * 16
  35.     Dim Pom_s As Single
  36.     Dim Pozice_old As Integer
  37.     Dim Pozice_new As Integer
  38.     Dim Pozice_start As Integer
  39.     Dim Smer As Integer
  40.     Dim Priznak As Integer
  41.     Dim Fix_prechodu As Bit
  42.     Dim Pocitadlo As Integer
  43.     Dim Ocf As Byte
  44.     Dim Cof As Byte
  45.     Dim Lin As Byte
  46.     Dim Mag_inc As Byte
  47.     Dim Mag_dec As Byte
  48.     Dim Parita As Byte
  49.     Dim Poms As String * 16
  50.  
  51.  
  52.  
  53.     Call Poloha(pozice_start)
  54.     Pozice_old = Pozice_start
  55.  
  56.  
  57.     Do
  58.  
  59.        If Pin_reset = 0 Then
  60.         'określ pozycję wyjściową'
  61.           Mm2 = 0
  62.           Call Poloha(pozice_start)                                                 'Poloha--> Pozycja
  63.           Pozice_old = Pozice_start
  64.        End If
  65.  
  66.  
  67.        Call Poloha(pozice_new)
  68.        Call Determinuj_polohu(pozice_old , Pozice_new , Smer , Priznak)
  69.  
  70.        If Smer = 0 Then                                     'Smer--> Kierunek
  71.           If Priznak = 0 Then
  72.            'Odległość rośnie w ciągu 2 m
  73.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  74.              Vzdalenost = Vzd_pom + Pozice_new
  75.           Else
  76.            'Odległość rośnie ponad 2mm
  77.              Incr Mm2
  78.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  79.              Vzdalenost = Vzd_pom + Pozice_new
  80.           End If
  81.        Else
  82.           If Priznak = 0 Then
  83.            'Odległość spada w granicach 2mm
  84.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  85.              Vzdalenost = Vzd_pom + Pozice_new
  86.           Else
  87.            'Odległość spada ponad 2mm
  88.              Decr Mm2
  89.              Vzd_pom = Mm2 * 4096 : Vzd_pom = Vzd_pom - Pozice_start
  90.              Vzdalenost = Vzd_pom + Pozice_new
  91.           End If
  92.        End If
  93.  
  94.         Waitus 20
  95.  
  96.        'wartość pojawia się na wyświetlaczu co 20 cykli
  97.       Incr Pocitadlo
  98.        If Pocitadlo > 50 Then
  99.           Pocitadlo = 0
  100.           Cls : Lcd Pozice_new
  101.           Lowerline
  102.           Pom_s = Vzdalenost / 2048
  103.           Lcd Fusing(pom_s , "#.###")
  104.        End If
  105.        Pozice_old = Pozice_new
  106.     Loop
  107.     End
  108.  
  109.  
  110.     ' ****************************
  111.     'určí směr pohybu a překrocění hranice 0 /-/ 4095-->określa kierunek ruchu i przekroczenie granicy 0 / - / 4095
  112.     ' ****************************
  113.     Sub Determinuj_polohu(p_old As Integer , P_new As Integer , Sm As Integer , Pp As Integer)
  114.     'Sm ... směr
  115.     ' 0 = vzdaluji se od reference-->Odchodzę od referencji
  116.     ' 1 = přibližuji se-->zbliżam się
  117.     'Pp ... příznak přechodu přes 4095-->Pp ... przekraczanie flagi ponad 4095
  118.     ' 0 = nepřekročil jsem 4095-->nie przekroczyłem 4095
  119.     ' 1 = překročil jsem přes 4095-->przekroczyłem 4095
  120.        Dim Delta As Single
  121.        Dim Sgn_delta As Single
  122.        Dim Abs_delta As Single
  123.        Delta = P_new - P_old
  124.        Abs_delta = Abs(delta)
  125.        Sgn_delta = Sgn(delta)
  126.        Select Case Delta
  127.     'delta je kladné nebo nula-->delta jest dodatnia lub zero
  128.           Case Is >= 0
  129.              If Abs_delta < 1000 Then
  130.     'vzdálenost roste a jsem v rozsahu 2 mm-->odległość rośnie i jestem w zakresie 2 mm
  131.                 Sm = 0 : Pp = 0
  132.              Else
  133.     'vzdálenost klesá a překročil jsem 2 mm-->odległość maleje i przekroczyłem 2 mm
  134.                 Sm = 1 : Pp = 1
  135.              End If
  136.     'delta je záporné-->delta jest ujemna
  137.           Case Else
  138.              If Abs_delta < 1000 Then
  139.     'vzdálenost klesá a jsem v rozsahu 2 mm-->odległość maleje i jestem w zakresie 2 mm
  140.                 Sm = 1 : Pp = 0
  141.              Else
  142.     'vzdálenost klesá a překročil jsem 2 mm-->odległość maleje i przekroczyłem 2 mm
  143.                 Sm = 0 : Pp = 1
  144.              End If
  145.        End Select
  146.     End Sub
  147.     ' ****************************
  148.     'vyčte polohu z čipu-->odczytaj pozycję z chipa
  149.     ' ****************************
  150.     Sub Poloha(byref P As Integer)
  151.     'inicializace čipu-->inicjalizacja chipa
  152.        Ssi_init
  153.     'čtení hodnoty-->wartość odczytu
  154.        Call Cti_data(p)
  155.     'ukončení komunikace s čipem-->zakończenie komunikacji z chipem
  156.        Ssi_close
  157.     End Sub
  158.     ' ****************************
  159.     'Přečte data z měřiče, bit po bitu-->Odczytuje dane z licznika, bit po bicie
  160.     ' ****************************
  161.     Sub Cti_data(byref Pozice As Integer)
  162.        Dim Pom As Byte
  163.     'Pin 2 portu A jsou hodiny-->'Pin 2 portu A to zegar
  164.     'Proměnná Pozice vrací hodnotu-->Zmienna Pozice zwraca wartość
  165.        Pozice = 0
  166.     'D11
  167.        Reset Clk
  168.        If Data_out = 1 Then
  169.           Pozice = Pozice + 1
  170.        End If
  171.        Set Clk
  172.     'D10
  173.        Shift Pozice , Left , 1
  174.        Reset Clk
  175.        If Data_out = 1 Then
  176.           Pozice = Pozice + 1
  177.        End If
  178.        Set Clk
  179.     'D9
  180.        Pozice = Pozice * 2
  181.        Reset Clk
  182.        If Data_out = 1 Then
  183.           Pozice = Pozice + 1
  184.        End If
  185.        Set Clk
  186.     'D8
  187.        Shift Pozice , Left , 1
  188.        Reset Clk
  189.        If Data_out = 1 Then
  190.           Pozice = Pozice + 1
  191.        End If
  192.        Set Clk
  193.     'D7
  194.        Shift Pozice , Left , 1
  195.        Reset Clk
  196.        If Data_out = 1 Then
  197.           Pozice = Pozice + 1
  198.        End If
  199.        Set Clk
  200.     'D6
  201.        Shift Pozice , Left , 1
  202.        Reset Clk
  203.        If Data_out = 1 Then
  204.           Pozice = Pozice + 1
  205.        End If
  206.        Set Clk
  207.     'D5
  208.        Shift Pozice , Left , 1
  209.        Reset Clk
  210.        If Data_out = 1 Then
  211.           Pozice = Pozice + 1
  212.        End If
  213.        Set Clk
  214.     'D4
  215.        Shift Pozice , Left , 1
  216.        Reset Clk
  217.        If Data_out = 1 Then
  218.           Pozice = Pozice + 1
  219.        End If
  220.        Set Clk
  221.     'D3
  222.        Shift Pozice , Left , 1
  223.        Reset Clk
  224.        If Data_out = 1 Then
  225.           Pozice = Pozice + 1
  226.        End If
  227.        Set Clk
  228.     'D2
  229.        Shift Pozice , Left , 1
  230.        Reset Clk
  231.        If Data_out = 1 Then
  232.           Pozice = Pozice + 1
  233.        End If
  234.        Set Clk
  235.     'D1
  236.        Shift Pozice , Left , 1
  237.        Reset Clk
  238.        If Data_out = 1 Then
  239.           Pozice = Pozice + 1
  240.        End If
  241.        Set Clk
  242.     'D0
  243.        Shift Pozice , Left , 1
  244.        Reset Clk
  245.        If Data_out = 1 Then
  246.           Pozice = Pozice + 1
  247.        End If
  248.        Set Clk
  249.     'čtení stavových bitů-->odczytaj bity statusu
  250.     'OCF
  251.     'Waitus 10
  252.        Reset Clk
  253.        Ocf = Data_out
  254.        Set Clk
  255.     'COF
  256.     'Waitus 10
  257.        Reset Clk
  258.        Cof = Data_out
  259.        Set Clk
  260.     'LIN
  261.     'Waitus 10
  262.        Reset Clk
  263.        Lin = Data_out
  264.        Set Clk
  265.     'Mag_INC
  266.     'Waitus 10
  267.        Reset Clk
  268.        Mag_inc = Data_out
  269.        Set Clk
  270.     'Mag_DEC
  271.     'Waitus 10
  272.        Reset Clk
  273.        Mag_dec = Data_out
  274.     End Sub
  275.     ' ****************************
  276.     ' ****************************
  277.     Sub Ssi_init
  278.     'A.1 CS ¨¨¨¨¨______
  279.     'A.2 CLK ¨¨¨¨¨¨¨__¨¨
  280.     ' us 2 1 1 1
  281.     'PortA.2 CLK ... clock
  282.        Set Clk
  283.     'PortA.1 CS ... chip select
  284.        Set Cs
  285.        Waitus 2
  286.        Reset Cs
  287.        Waitus 1
  288.        Reset Clk
  289.        Waitus 1
  290.        Set Clk
  291.        Waitus 1
  292.     End Sub
  293.     ' ****************************
  294.     ' ****************************
  295.     Sub Ssi_close
  296.     'A.1 CS ___¨¨¨¨
  297.     'A.2 CLK _¨¨¨¨¨¨
  298.     ' us 1 2
  299.     'čtu ^
  300.     'PortA.2 CLK ... clock
  301.     'PortA.1 CS ... chip select
  302.     'Parita
  303.        Set Clk
  304.        Parita = Data_out
  305.        Waitus 1
  306.        Set Cs
  307.        Waitus 2
  308.     End Sub
  309.     ' ****************************
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 25 gru 2021, 13:22

:D super prezent na święta Bartku https://www.youtube.com/watch?v=SZ68yft1MHc
działa tak jak trzeba wielkie dzięki.
pozdrawiam Jacek.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 01 sty 2022, 21:25

Witam w nowym roku, mała aktualizacja https://www.youtube.com/watch?v=I1iVYxS_r3A
AS5311 odczytuje i przesyła do edytora Nextion i w symulacji jest odczyt tak jak na wyświetlaczu lcd, trochę niezręcznie przesuwam czujnik ale to tylko testy jeszcze raz dziękuję wszystkim i życzę zdrowia i pomyślności w nowym roku.
pozdrawiam Jacek.
ODPOWIEDZ