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 » 11 gru 2021, 22:05

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

Re: AS5311 Bascom

Post autor: Press » 12 gru 2021, 12:52

Może wywal tą linie, skoro i tak jest zakomentowana?

U mnie kompiluje się bez błędów.
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 12 gru 2021, 13:03

Jaka masz wersję Bascom'a?
P.S. jak wywalę to na lcd mam 4095 i na lcd nic się nie zmienia.
Awatar użytkownika
tomaszdko
Posty: 62
Rejestracja: 06 gru 2018, 19:58

Re: AS5311 Bascom

Post autor: tomaszdko » 12 gru 2021, 19:34

Jacek ..dopisz zero bo masz 1,6MHz" $crystal = 1600000 "
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AS5311 Bascom

Post autor: niveasoft » 12 gru 2021, 19:40

Mhihi :D Trzeba uważać bo każdemu może się zdarzyć błąd rzędu wielkości.
Awatar użytkownika
tomaszdko
Posty: 62
Rejestracja: 06 gru 2018, 19:58

Re: AS5311 Bascom

Post autor: tomaszdko » 12 gru 2021, 19:45

Skompilowałem i wgrałem dla testu ...na lcd w górnym lewym rogu mam 0.000_
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: AS5311 Bascom

Post autor: niveasoft » 12 gru 2021, 19:51

Jakieś wnioski? Masz Saleae za 35zł? Może linia leży może nie. No wybacz, ale jeszcze nie wróżymy z fusóFF :D
Przy okazji zerknąłem do kodu i widzę zakomentowane Waitus 10. Przy zmianie stanu pinu przynajmniej ze trzy NOP`y przed badaniem stanu pinu po zmianie. To jak badać dotykowy panel... musisz mu dać chwilę. A tu wieksza prędkość jeszcze.
Ciekawe jak czasy maja sie do noty. Nie mam czasu czytać.
Press
Posty: 65
Rejestracja: 21 sty 2018, 23:08

Re: AS5311 Bascom

Post autor: Press » 12 gru 2021, 20:37

Wersja BASCOM 2.0.8.4
Awatar użytkownika
Jacek
Posty: 384
Rejestracja: 25 kwie 2016, 19:14

Re: AS5311 Bascom

Post autor: Jacek » 12 gru 2021, 21:24

No tak stare oczy, czas zmienić okulary Tomek skompilowałeś z zakomentowaną linią 31 czy odkomentowaną?
jak możesz prześlij mi hexa z kwarcem 16MHz.
pozdrawiam Jacek.
Awatar użytkownika
tomaszdko
Posty: 62
Rejestracja: 06 gru 2018, 19:58

Re: AS5311 Bascom

Post autor: tomaszdko » 12 gru 2021, 22:26

Dziwne że zmienna zwie się tak samo jak funkcja ...coś pokręcone a może błąd i będzie dobrze bez tej zmiennej. Nie mam takiego czujnika więc nie sprawdzę.
ODPOWIEDZ