Pomoc przy wyświetlaczach 7seg...

Pytania, kody i porady dotyczące nie tylko Bascom.
maxd89pl
Posty: 21
Rejestracja: 20 kwie 2017, 21:44

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: maxd89pl » 25 kwie 2017, 16:06

Witam, timer ma odliczać w dół, pouzupełniałem to o czym mówiłeś, trochę dopisałem kodu i większość skomentowałem, i teraz w miarę to działa. Obsługę multipleksacji mam stąd .
a program na tą chwile wygląda tak:
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6.  
  7. Config Portd = Output
  8. Config Portb.0 = Output
  9. Config Portb.1 = Output
  10. Config Portb.2 = Output
  11. Config Portb.3 = Output
  12. Config Pinc.0 = Input
  13. Config Pinc.1 = Input
  14. Config Pinc.2 = Input
  15.  
  16. Portc.0 = 1
  17. Portc.1 = 1
  18. Portc.2 = 1
  19. Portb.0 = 0
  20. Portb.1 = 0
  21. Portb.2 = 0
  22. Portb.3 = 0
  23. Portd = 255
  24.  
  25. W1 Alias Portb.0
  26. W2 Alias Portb.1
  27. W3 Alias Portb.2
  28. W4 Alias Portb.3
  29. Prz1 Alias Pinc.0
  30. Prz2 Alias Pinc.1
  31. Enter Alias Pinc.2
  32. Segmenty Alias Portd
  33.  
  34. Declare Sub Dec2bcd(byval Liczba As Byte , Byval Pozycja_wysw As Byte , Byref Tab() As Byte)
  35.  
  36.  
  37.  
  38. Dim s1 as Byte
  39. Dim m1 as byte
  40. Dim Sekundy As Byte
  41. Dim Minuty as byte
  42. Dim Wyswietlacz As Byte
  43. Dim Tablica(4) As Byte
  44. Dim Kr1 as Bit
  45. Dim Kr2 as Bit
  46. Dim Kr3 as Bit
  47. Dim Kr4 as Bit
  48. Dim f_Odej as Bit
  49. Dim f_Dodaj as Bit
  50. Dim Startuj as bit
  51. dim 1_sek as Word
  52. Dim Menu as Byte
  53. Dim 8msek as Byte
  54. Dim f_timer2 as bit
  55.  
  56. Config Timer0 = Timer , Prescale = 256
  57. Config TIMER2 = Timer , Prescale = 256
  58. On Ovf0 Przerwanie
  59. On Timer2 Odmierz_1s
  60. Load Timer0 = 65
  61. Load Timer2 = 250
  62.  
  63. Enable Ovf0
  64. Enable Timer2
  65. Enable Interrupts
  66.  
  67. s1 = 0
  68. m1 = 0
  69. Sekundy = 0
  70. Startuj = 0
  71. Menu = 1
  72. 8msek = 0
  73.  
  74.  
  75. Stop timer2
  76. Do
  77.  
  78. Select Case Menu
  79.  
  80.    Case 1:
  81.  
  82. If f_Dodaj = 0 Then
  83.    if Prz1 = 0 then                       ' Jeśli przycisk wciśnięty, czekaj 15ms(drgania styku) sprawdz ponownie przycisk, jeśli przyciśnięty to:
  84.       waitms 15
  85.          If Prz1 = 0 Then
  86.  
  87.             s1 = s1 + 1                   ' zwiększ o 1 zmienną s1
  88.             gosub Wyswietl
  89.  
  90.                if s1 = 60 Then            ' jeśli zmienna s1 dobije do 60 to
  91.  
  92.                   m1 = m1 + 1             ' zwiększ o 1 zmienną m1
  93.                   s1 = 0                  ' wyzeruj zmienną s1
  94.                   gosub Wyswietl          ' przejdz do podprogramu, by przekazać zmienne s1 i m1 do zmiennych Sekundy i Minuty, a następnie je wyświetlić
  95.  
  96.                end if
  97.  
  98.          waitms 30                        ' opuźnienie 30ms przycisku
  99.  
  100.          end if
  101.    End if
  102. End if
  103.  
  104.  
  105.    if f_Odej = 0 then                     ' flaga pomocnicza, przy wartości zmiennych s1 = 0 i m1 = 0, wyłącza obsługe przycisku, uniemożliwiając dalsze odejmowanie
  106.       if Prz2 = 0 then                    ' jeśli wcisznięty
  107.          waitms 15                        ' drganie styków
  108.             If Prz2 = 0 Then              ' ponownie jeśli wciśnięty  to:
  109.  
  110.                s1 = s1 - 1                ' zmniejsz zmienną s1 o 1
  111.                gosub Wyswietl             ' idz to wyświetlić
  112.  
  113.                   If m1 > 0 Then
  114.                                           ' jeśli wartość minut jest większa niż 0 a sekund równa się 0 to:
  115.                      If s1 = 0 Then
  116.  
  117.                         m1 = m1 - 1       ' zmniejsz minuty o 1
  118.                         s1 = 60           ' a sekundy ustaw na 60
  119.  
  120.                      end if
  121.  
  122.              waitms 30                    ' opuźnienie przycisku
  123.  
  124.                   end if
  125.             end if
  126.       End if
  127.    end if
  128.  
  129.    if Enter = 0 Then                      ' jeśli przycisk enter przyciśnięty to:
  130.       waitms 15                           ' drganie styków
  131.          if Enter = 0 Then                ' jeśli dalej wciśnięty to
  132.  
  133.             Incr Menu                     ' zwiększ menu o 1 przechodząc do następnej funkcji menu z odliczaniem i bez obsługi przycisków
  134.  
  135.             Bitwait Enter , Set           ' ale poczekaj zanim powróci stan wysoki
  136.  
  137.          end if
  138.    End if
  139.  
  140.  
  141.  
  142.           If m1 > 0 Then                   ' zapalanie kropki gdy min większe od 0
  143.  
  144.              Set Kr2
  145.  
  146.              else
  147.  
  148.              Reset Kr2
  149.  
  150.           End if
  151.  
  152.  
  153.           If m1 = 0 then                    ' jeśli minuty są równe 0 i sekundy też 0 to:
  154.  
  155.             If s1 = 0 Then
  156.  
  157.                f_Odej = 1
  158.                                             ' przestaw flagę od przycisku odejmowania co by go wyłączyć, albo nie jeśli główny warunek nie zostanie spełniony
  159.                else
  160.  
  161.                f_Odej = 0
  162.  
  163.             End if
  164.           end if
  165.  
  166.           If m1 = 15 then                   ' jeśli minuty mają wartość 15 i sekundy 0 to: (ustawiłem na 15, bo przy testowaniu nie chciało mi się czekać do 30)
  167.  
  168.             If s1 = 0 then
  169.  
  170.                s1 = 0                       ' zeruj minuty i sekundy
  171.                m1 = 0                       ' idz to wyświetlić
  172.                gosub Wyswietl
  173.  
  174.             End if
  175.           End if
  176.  
  177.  
  178.  
  179.    Case 2:                                  ' następna fukncja menu uruchamiana przyciskiem enter, odliczanie w dół bez już obsługi przycisków plus i minus
  180.  
  181.    If f_timer2 = 0 then                     ' flaga pomocnicza zezwalająca na start timer2
  182.  
  183.       Start timer2
  184.  
  185.       else
  186.  
  187.       Stop Timer2
  188.  
  189.    End if
  190.  
  191.  
  192.  
  193.    If m1 = 0 then                            ' jeśli sekundy i minuty dobiją do zera to:
  194.  
  195.       If s1 = 0 Then
  196.  
  197.          set f_timer2                        ' resetowanie flagi i stop timer2
  198.  
  199.       End if
  200.    end if
  201.  
  202.    If m1 > 0 Then                            'zapalanie kropki gdy min większe od 0
  203.  
  204.       Set Kr2
  205.  
  206.       else
  207.  
  208.       Reset Kr2
  209.  
  210.    End if
  211.  
  212.  
  213.    if Enter = 0 Then                      ' jeśli przycisk enter przyciśnięty to:
  214.       waitms 15                           ' drganie styków
  215.          if Enter = 0 Then                ' jeśli dalej wciśnięty to
  216.  
  217.             toggle f_timer2               ' pauza lub wznowienie odliczania
  218.  
  219.             Bitwait Enter , Set           ' ale poczekaj zanim powróci stan wysoki
  220.  
  221.          end if
  222.    End if
  223.  
  224.  
  225. End Select
  226.  
  227.  
  228.  
  229.  
  230. Loop
  231. End                                                         'end program
  232.  
  233.  
  234. '**************************************************************
  235.  
  236. Wyswietl:                                   ' podprogram wyświetlania, zmienne s1 i m1 przekazywane do zmiennych Sekundy i Minuty, a następnie multipleksowane na wyś. LED
  237.  
  238.  
  239.  
  240.  
  241.       Sekundy = s1
  242.       Dec2bcd Sekundy , 3 , Tablica(1)
  243.  
  244.       Minuty = m1
  245.       Dec2bcd Minuty , 1 , Tablica(1)
  246.  
  247.  
  248.  
  249.  
  250. return
  251.  
  252.  
  253. Odmierz_1s:                                  ' podprogram obliczania 1 sek
  254.  
  255. Load Timer2 = 250
  256. Incr 8msek
  257.  
  258. if 8msek = 125 then
  259.  
  260.    8msek = 0
  261.    s1 = s1 - 1
  262.    gosub Wyswietl
  263.  
  264.       If m1 > 0 Then
  265.  
  266.          If s1 = 0 Then
  267.  
  268.             m1 = m1 - 1
  269.             s1 = 59
  270.  
  271.          end if
  272.        end if
  273.  
  274.  
  275.  
  276. end if
  277.  
  278. Return
  279.  
  280.  
  281. Przerwanie:
  282.  
  283.       Load Timer0 , 65
  284.  
  285.       Incr Wyswietlacz
  286.  
  287.  
  288.       If Wyswietlacz = 5 Then
  289.          Wyswietlacz = 1
  290.       End If
  291.  
  292.  
  293.       Select Case Wyswietlacz
  294.             Case 1:
  295.                              W4 = 1
  296.                              Segmenty = Lookup(tablica(1) , Kody7seg)
  297.                              Portd.7 = Kr1
  298.                              W1 = 0
  299.             Case 2:
  300.                              W1 = 1
  301.                              Segmenty = Lookup(tablica(2) , Kody7seg)
  302.                              Portd.7 = Kr2
  303.                              W2 = 0
  304.             Case 3:
  305.                              W2 = 1
  306.                              Segmenty = Lookup(tablica(3) , Kody7seg)
  307.                              Portd.7 = Kr3
  308.                              W3 = 0
  309.             Case 4:
  310.                              W3 = 1
  311.                              Segmenty = Lookup(tablica(4) , Kody7seg)
  312.                              Portd.7 = Kr4
  313.                              W4 = 0
  314.  
  315.       End Select
  316.  
  317. Return
  318.  
  319. '************************************************************
  320.  
  321. Sub Dec2bcd(byval Liczba As Byte , Byval Pozycja_wysw As Byte , Byref Tab() As Byte)
  322.  
  323.     Local Pomocnicza1 As Byte
  324.     Local Pomocnicza2 As Byte
  325.  
  326.      Pomocnicza1 = Makebcd(liczba)
  327.      Pomocnicza2 = Pomocnicza1 And &B00001111
  328.      Tablica(pozycja_wysw + 1) = Pomocnicza2
  329.      Shift Pomocnicza1 , Right , 4
  330.      Pomocnicza2 = Pomocnicza1 And &B00001111
  331.      Tablica(pozycja_wysw) = Pomocnicza2
  332. End Sub
  333.  
  334. Kody7seg:
  335.  
  336. Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110, '---> 0 , 1 , 2 , 3 , 4
  337. Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111  '---> 5 , 6 , 7 , 8 , 9
  338.  
  339. '  dp , g , f , e , d , c , b , a


docelowo w kodzie będę musiał zmienić wykrywanie przycisków z 0 na 1 gdyż chcę użyć dotykowych przycisków atmela at42 1010 a tam stanem aktywnym jest 1. Bawiłem się też timerem i jak ustawiłem preskaler na 1024 i wartoś początkową timera na 77 to wyświetlacze mrugają.
Co dziwne nie rozumiem pewnej rzeczy czym się różni zapis
  1. Load Timer0 , 65
a tym
  1. Load Timer0 = 65
, bo przy tym pierwszym działa wszystko ok a z znakiem = wyświetlacze mrugają.

Następny problem to gdy odlicza sekundy w dół na wyświetlaczu widzę 02 -> 01 -> 00 -> 58 ->57 gdzieś ginie 59

Noi na koniec doszedłem do wniosku po twojej sugestii, że przerobie program tak by jednym przyciskiem(minusem) zmieniać minuty a drugi (plusem) zmieniać sekundy, bo tak jak mówisz w poprzedniej wersji by ustawić na 20min strasznie długo trzeba było trzymać przycisk.
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: niveasoft » 25 kwie 2017, 18:18

Musisz używać jakiegoś starego Bascom`a bo nowsze nie pozwalają już na taki zapis i zgłoszą błąd.
Prawidłowe są tylko zapisy "Load TIMERx , Wartość" , albo, bez LOAD, "TIMERx = Wartość"

W dużym uproszczeniu Timery liczą "w górę" do swojego maksimum. Dla takiego TIMER0 i TIMER2 maksimum to 255
TIMER = Wartość oznacza, że do Timera wpisujesz już jakąś wstępna wartość. Kiedy wpiszesz 100 to Timer liczy od 100 do 255, czyli będzie liczył 155 ticków. Wtedy sam musisz policzyć co wpisać do Timera żeby Ci odliczył tyle ile chcesz.

Kiedy chcesz by liczył określoną liczbę ticków nie musisz tego liczyć na piechotę. Kiedy użyjesz funkcji LOAD to program sam odejmie od maksimum określona liczbę ticków i resztę wpisze do Timera.

Na przykład chcesz by Timer odliczył 100 ticków to piszesz Load TIMERx, 100 a tak naprawdę procesor wpisze do Timera 155.
Timer zacznie liczyć od 155 i jak dojedzie do 255 to będzie akurat sto ticków.

Kiedy piszesz Load TIEMR0, 65 to procesor wpisuje do Timera 190 (255-65)
Możesz to sprawdzić pisząc Timer = 190. Efekt będzie identyczny.
maxd89pl
Posty: 21
Rejestracja: 20 kwie 2017, 21:44

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: maxd89pl » 25 kwie 2017, 20:05

niveasoft pisze: ↑
25 kwie 2017, 18:18
Musisz używać jakiegoś starego Bascom`a bo nowsze nie pozwalają już na taki zapis i zgłoszą błąd.
Prawidłowe są tylko zapisy "Load TIMERx , Wartość" , albo, bez LOAD, "TIMERx = Wartość"

Widzisz teraz to ja wiem o co biega.

Zmieniłem te przyciski teraz, że jednym się zmienia minuty a drugim sekundy, dodałem troche animacji na początek programu i gdy odliczanie dobiegnie do końca, ale znowu się wszystko krzaczy menu mam na select case i gdy program startuje od włączenia zasilania to jest ok, czyli 0000 ale po ustawieniu czasu case 2 , później po odliczaniu case 3 i animacji po skonczeniu odliczania w case 4 i w niej jak nacisne przycisk enter to wracamy do case 2 i zamiast na wyświetlaczu być 0000 to jest 95 w sekundach nie wiem skąd. Najlepiej zobacz na film, który tłumaczy chyba wszystko, bo tak opisać to trudne

Może znalazł byś troszkę czasu przeanalizować ten kod i wskazać mi potencjalne babole głownie te obliczenia na zmiennych

Mój brudnopis:
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6.  
  7. Config Portd = Output
  8. Config Portb.0 = Output
  9. Config Portb.1 = Output
  10. Config Portb.2 = Output
  11. Config Portb.3 = Output
  12. Config Pinc.0 = Input
  13. Config Pinc.1 = Input
  14. Config Pinc.2 = Input
  15.  
  16. Portc.0 = 1
  17. Portc.1 = 1
  18. Portc.2 = 1
  19. Portb.0 = 1
  20. Portb.1 = 1
  21. Portb.2 = 1
  22. Portb.3 = 1
  23. 'Portd = 255
  24.  
  25. W1 Alias Portb.0
  26. W2 Alias Portb.1
  27. W3 Alias Portb.2
  28. W4 Alias Portb.3
  29. Prz1 Alias Pinc.0
  30. Prz2 Alias Pinc.1
  31. Enter Alias Pinc.2
  32. Segmenty Alias Portd
  33.  
  34. Declare Sub Dec2bcd(byval Liczba As Byte , Byval Pozycja_wysw As Byte , Byref Tab() As Byte)
  35.  
  36.  
  37.  
  38. Dim s1 as Byte
  39. Dim m1 as byte
  40. Dim Sekundy As Byte
  41. Dim Minuty as byte
  42. Dim Wyswietlacz As Byte
  43. Dim Tablica(4) As Byte
  44. Dim Kr1 as Bit
  45. Dim Kr2 as Bit
  46. Dim Kr3 as Bit
  47. Dim Kr4 as Bit
  48. Dim f_Odej as Bit
  49. Dim f_Dodaj as Bit
  50. Dim Startuj as bit
  51. dim 1_sek as Word
  52. Dim Menu as Byte
  53. Dim 8msek as Byte
  54. Dim f_timer2 as bit
  55. Dim S_time as Bit
  56. Dim restart as Byte
  57.  
  58. Config Timer0 = Timer , Prescale = 256
  59. Config TIMER2 = Timer , Prescale = 256
  60. 'On Ovf0 Przerwanie
  61. stop timer0
  62. On Timer2 Odmierz_1s
  63. Load Timer0 = 65
  64. Load Timer2 = 250
  65.  
  66. Enable Ovf0
  67. Enable Timer2
  68. Enable Interrupts
  69.  
  70. s1 = 0
  71. m1 = 0
  72. Sekundy = 0
  73. Startuj = 0
  74. Menu = 1
  75. 8msek = 0
  76. 1_sek = 0
  77.  
  78. Stop timer2
  79. Do
  80.  
  81. Select Case Menu
  82.    Case 1:
  83.  
  84.    reset w1
  85.    Portd = &B01101101
  86.    waitms 400
  87.    set w1
  88.    reset w2
  89.    Portd = &B01111001
  90.    waitms 400
  91.    set w2
  92.    reset w3
  93.    Portd = &B01111100
  94.    waitms 400
  95.    set w3
  96.    reset w4
  97.    Portd = &B01110111
  98.    waitms 400
  99.    set w4
  100.  
  101.  
  102.    incr Menu
  103.  
  104.     On Ovf0 Przerwanie
  105.     start timer0
  106.  
  107.  
  108.  
  109.    Case 2:
  110.  
  111.    stop timer2
  112.    f_timer2 = 1
  113.    start timer0
  114.  
  115.  
  116.  
  117.   ' if m1 > 0 then
  118.  
  119.    'if s1 = 0 then
  120.     '  s1 = 60
  121.      ' else
  122.     '  s1 = 0
  123.    'end if
  124.    'end if
  125.  
  126.  
  127.  
  128.  
  129.    if Prz1 = 0 then                       ' Jeśli przycisk wciśnięty, czekaj 15ms(drgania styku) sprawdz ponownie przycisk, jeśli przyciśnięty to:
  130.       waitms 15
  131.          If Prz1 = 0 Then
  132.  
  133.  
  134.                s1 = s1 + 1                   ' zwiększ o 1 zmienną s1
  135.                gosub Wyswietl
  136.  
  137.              if s1 = 60 Then            ' jeśli zmienna s1 dobije do 60 to
  138.  
  139.                s1 = 0                  ' wyzeruj zmienną s1
  140.                gosub Wyswietl          ' przejdz do podprogramu, by przekazać zmienne s1 i m1 do zmiennych Sekundy i Minuty, a następnie je wyświetlić
  141.  
  142.              end if
  143.  
  144.          waitms 100
  145.  
  146.  
  147.  
  148.          end if
  149.    End if
  150.  
  151.  
  152.  
  153.  
  154.       if Prz2 = 0 then                    ' jeśli wcisznięty
  155.          waitms 15                        ' drganie styków
  156.             If Prz2 = 0 Then              ' ponownie jeśli wciśnięty  to:
  157.  
  158.                m1 = m1 + 1                ' zmniejsz zmienną s1 o 1
  159.                gosub Wyswietl             ' idz to wyświetlić
  160.  
  161.                   If m1 = 30 Then
  162.                                           ' jeśli wartość minut jest większa niż 0 a sekund równa się 0 to:
  163.                      m1 = 0
  164.  
  165.  
  166.  
  167.                   end if
  168.  
  169.              waitms 100                    ' opuźnienie przycisku
  170.  
  171.                   end if
  172.  
  173.       End if
  174.  
  175.  
  176.    if Enter = 0 Then                      ' jeśli przycisk enter przyciśnięty to:
  177.       waitms 15                           ' drganie styków
  178.          if Enter = 0 Then                ' jeśli dalej wciśnięty to
  179.  
  180.             Incr Menu                     ' zwiększ menu o 1 przechodząc do następnej funkcji menu z odliczaniem i bez obsługi przycisków
  181.  
  182.             Bitwait Enter , Set           ' ale poczekaj zanim powróci stan wysoki
  183.  
  184.          end if
  185.    End if
  186.  
  187.  
  188.  
  189.           If m1 > 0 Then                   ' zapalanie kropki gdy min większe od 0
  190.  
  191.              Set Kr2
  192.  
  193.              else
  194.  
  195.              Reset Kr2
  196.  
  197.           End if
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.    Case 3:                                  ' następna fukncja menu uruchamiana przyciskiem enter, odliczanie w dół bez już obsługi przycisków plus i minus
  208.  
  209.    If f_timer2 = 0 then                     ' flaga pomocnicza zezwalająca na start timer2
  210.  
  211.       Start timer2
  212.  
  213.       else
  214.  
  215.       Stop Timer2
  216.  
  217.    End if
  218.  
  219.  
  220.  
  221.    If m1 = 0 then                            ' jeśli sekundy i minuty dobiją do zera to:
  222.  
  223.       If s1 = 0 Then
  224.  
  225.          set f_timer2
  226.          menu = 4                        ' resetowanie flagi i stop timer2
  227.  
  228.       End if
  229.    end if
  230.  
  231.    If m1 > 0 Then                            'zapalanie kropki gdy min większe od 0
  232.  
  233.       Set Kr2
  234.  
  235.       else
  236.  
  237.       Reset Kr2
  238.  
  239.    End if
  240.  
  241.  
  242.    if Enter = 0 Then                      ' jeśli przycisk enter przyciśnięty to:
  243.       waitms 15                           ' drganie styków
  244.          if Enter = 0 Then                ' jeśli dalej wciśnięty to
  245.  
  246.             toggle f_timer2               ' pauza lub wznowienie odliczania
  247.  
  248.             Bitwait Enter , Set           ' ale poczekaj zanim powróci stan wysoki
  249.  
  250.          end if
  251.    End if
  252.  
  253. Case 4:
  254.  
  255.  
  256.  
  257. if enter = 0 then
  258.  
  259.    menu = 2
  260.  
  261.    bitwait enter , set
  262.  
  263.    's1 = 0
  264.    'sekundy = 0
  265.    'm1 = 0
  266.    'minuty = 0
  267. end if
  268.  
  269. stop timer0
  270. reset w1
  271. reset w2
  272. reset w3
  273. reset w4
  274.  
  275. Portd = &B00000001
  276. waitms 50
  277. Portd = &B00000010
  278. waitms 50
  279. Portd = &B00000100
  280. waitms 50
  281. Portd = &B00001000
  282. waitms 50
  283. Portd = &B00010000
  284. waitms 50
  285. Portd = &B00100000
  286. waitms 50
  287. Portd = &B01000000
  288. waitms 50
  289.  
  290.  
  291.  
  292.  
  293. End Select
  294.  
  295.  
  296.  
  297.  
  298. Loop
  299. End                                                         'end program
  300.  
  301.  
  302. '**************************************************************
  303.  
  304. Wyswietl:                                   ' podprogram wyświetlania, zmienne s1 i m1 przekazywane do zmiennych Sekundy i Minuty, a następnie multipleksowane na wyś. LED
  305.  
  306.  
  307.  
  308.  
  309.       Sekundy = s1
  310.       Dec2bcd Sekundy , 3 , Tablica(1)
  311.  
  312.       Minuty = m1
  313.       Dec2bcd Minuty , 1 , Tablica(1)
  314.  
  315.  
  316.  
  317.  
  318. return
  319.  
  320.  
  321. Odmierz_1s:                                  ' podprogram obliczania 1 sek
  322.  
  323. Load Timer2 = 250
  324. Incr 8msek
  325.  
  326. if 8msek = 125 then
  327.  
  328.    8msek = 0
  329.    s1 = s1 - 1
  330.    gosub Wyswietl
  331.  
  332.       If m1 > 0 Then
  333.  
  334.          If s1 = 1 Then
  335.  
  336.             m1 = m1 - 1
  337.             s1 = 60
  338.  
  339.          end if
  340.        end if
  341.  
  342.  
  343.  
  344. end if
  345.  
  346. Return
  347.  
  348.  
  349. Przerwanie:
  350.  
  351.       Load Timer0 , 65
  352.  
  353.       Incr Wyswietlacz
  354.       Incr 1_sek
  355.  
  356.       If Wyswietlacz = 5 Then
  357.          Wyswietlacz = 1
  358.       End If
  359.  
  360.       If 1_sek = 481 then
  361.  
  362.          1_sek = 0
  363.          Incr restart
  364.       end if
  365.  
  366.  
  367.       Select Case Wyswietlacz
  368.             Case 1:
  369.                              W4 = 1
  370.                              Segmenty = Lookup(tablica(1) , Kody7seg)
  371.                              Portd.7 = Kr1
  372.                              W1 = 0
  373.             Case 2:
  374.                              W1 = 1
  375.                              Segmenty = Lookup(tablica(2) , Kody7seg)
  376.                              Portd.7 = Kr2
  377.                              W2 = 0
  378.             Case 3:
  379.                              W2 = 1
  380.                              Segmenty = Lookup(tablica(3) , Kody7seg)
  381.                              Portd.7 = Kr3
  382.                              W3 = 0
  383.             Case 4:
  384.                              W3 = 1
  385.                              Segmenty = Lookup(tablica(4) , Kody7seg)
  386.                              Portd.7 = Kr4
  387.                              W4 = 0
  388.  
  389.       End Select
  390.  
  391. Return
  392.  
  393. '************************************************************
  394.  
  395. Sub Dec2bcd(byval Liczba As Byte , Byval Pozycja_wysw As Byte , Byref Tab() As Byte)
  396.  
  397.     Local Pomocnicza1 As Byte
  398.     Local Pomocnicza2 As Byte
  399.  
  400.      Pomocnicza1 = Makebcd(liczba)
  401.      Pomocnicza2 = Pomocnicza1 And &B00001111
  402.      Tablica(pozycja_wysw + 1) = Pomocnicza2
  403.      Shift Pomocnicza1 , Right , 4
  404.      Pomocnicza2 = Pomocnicza1 And &B00001111
  405.      Tablica(pozycja_wysw) = Pomocnicza2
  406. End Sub
  407.  
  408. Kody7seg:
  409.  
  410. Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110, '---> 0 , 1 , 2 , 3 , 4
  411. Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111  '---> 5 , 6 , 7 , 8 , 9
  412.  
  413. '  dp , g , f , e , d , c , b , a
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: niveasoft » 25 kwie 2017, 20:08

Napisałem to przy kubku kawy.
Obecnie nie pisze już tak programów, ale nie chciałem zbyt daleko odbiec od Twojego kodu tak byś mógł z tego coś wyciągnąć.
Opisałem go jako tako bo muszę wracać do swoich zadań. Kod możesz przerobić/rozwinąć.

Powinien liczyć dobrze ;)
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6.  
  7. ' PO WŁĄCZENIU PROGRAM WYŚWIETLA TYLKO DWA ZERA
  8. ' KIEDY WCIŚNIESZ RAZEM PLUS I MINUS TO ZEGAR USTAWI SIĘ NA
  9. ' 30min i 00sec
  10. ' KRÓTKIE WCIŚNIĘCIE ENTER URUCHAMIA BĄDŹ ZATRZYMUJE ODLICZANIE
  11. ' OCZYWIŚCIE MOŻNA SAMEMU USTAWIĆ ŻĄDANY CZAS PLUS/MINUS
  12.  
  13. Config Portd = Output : Portd = 255 : Segmenty Alias Portd
  14.  
  15. 'anody wyswietlaczy
  16. Config Portb.0 = Output : W1 Alias Portb.0
  17. Config Portb.1 = Output : W2 Alias Portb.1
  18. Config Portb.2 = Output : W3 Alias Portb.2
  19. Config Portb.3 = Output : W4 Alias Portb.3
  20.  
  21. 'przyciski
  22. Config Pinc.0 = Input : Portc.0 = 1 : Prz1 Alias Pinc.0
  23. Config Pinc.1 = Input : Portc.1 = 1 : Prz2 Alias Pinc.1
  24. Config Pinc.2 = Input : Portc.2 = 1 : Enter Alias Pinc.2
  25.  
  26. Const Sw_mask = &B00000111              'maska przycisków (testowane tylko C0,C1 i C2)
  27.  
  28. Dim 5ms As Byte , Miliseconds As Byte , Helpb As Byte , Odliczanie As Byte
  29. Dim S1 As Byte , M1 As Byte , Wyswietlacz As Byte , Tablica(4) As Byte
  30. Dim Sw_licznik As Byte , Sw_stan As Byte , Lock As Byte
  31.  
  32. 'timer dla 4x50Hz = 200Hz = 5ms
  33. Config Timer0 = Timer , Prescale = 256
  34.  Load Timer0 , 155                      '5ms @8MHz/256
  35.   On Timer0 Przerwanie : Enable Timer0
  36.  
  37. Enable Interrupts
  38.  Gosub Przelicz                         'wpisz dane dla wyswietlaczy
  39.  
  40. Do
  41.  
  42.  
  43.   If 5ms = 1 Then
  44.    5ms = 0
  45.  
  46.     Sw_stan = Pinc And Sw_mask          'sprawdź przyciski
  47.  
  48.     If Sw_stan <> Sw_mask Then          'jesli któryś wciśnięty
  49.  
  50.      If Sw_licznik < 80 Then            'policz co 5ms od 75 do 80 = 25ms
  51.       Incr Sw_licznik
  52.      Else
  53.       Sw_licznik = 50                   'przyspiesz autoklik
  54.  
  55.       Select Case Sw_stan               'sprawdź który przycisk
  56.  
  57.        Case &B00000110                  'plus
  58.  
  59.         Gosub Dodawaj
  60.          Gosub Przelicz
  61.  
  62.        Case &B00000101                  'minus
  63.  
  64.         Gosub Odejmuj
  65.          Gosub Przelicz
  66.  
  67.        Case &B00000011                  'enter
  68.         If Lock = 0 Then
  69.          Lock = 1                       'zablokuj by nie wyłaczyć odliczania autoklikiem
  70.           If Odliczanie = 0 Then Odliczanie = 1 Else Odliczanie = 0
  71.         End If
  72.        Case &B00000100                  'plus i minus razem
  73.  
  74.            Odliczanie = 0               'zatrzymaj odlicznie jeśli uruchomione
  75.             M1 = 30 : S1 = 0            'wpisz 30min 00sec
  76.              Gosub Przelicz
  77.  
  78.       End Select
  79.  
  80.      End If
  81.  
  82.     Else
  83.      Lock = 0
  84.      Sw_licznik = 75
  85.     End If
  86.  
  87.  
  88.    'tutaj liczenie do sekundy
  89.  
  90.     If Miliseconds < 199 Then           '200 x 5ms = 1000ms = 1s
  91.      Incr Miliseconds
  92.     Else
  93.      Miliseconds = 0
  94.  
  95.       If Odliczanie = 1 Then            'jesli zezwolono odliczać
  96.        Gosub Odejmuj
  97.         Gosub Przelicz
  98.       End If
  99.  
  100.     End If
  101.  
  102.   End If
  103.  
  104. Loop
  105. End
  106.  
  107. Dodawaj:
  108.  If M1 < 30 Then
  109.   Incr S1
  110.    If S1 > 59 Then
  111.     Incr M1
  112.      S1 = 0
  113.    End If
  114.  End If
  115. Return
  116.  
  117. Odejmuj:
  118.  If S1 > 0 Then
  119.    Decr S1
  120.  Else
  121.    If M1 > 0 Then
  122.     Decr M1
  123.      S1 = 59
  124.    End If
  125.  End If
  126. Return
  127.  
  128. Przelicz:
  129.  If M1 > 9 Then Helpb = M1 / 10 Else Helpb = 10
  130.   Tablica(1) = Lookup(helpb , Kody7seg)
  131.  
  132.  If M1 > 0 Then
  133.   Helpb = M1 Mod 10
  134.    Tablica(2) = Lookup(helpb , Kody7seg)
  135.    Set Tablica(2).7
  136.  Else
  137.    Tablica(2) = 0
  138.  End If
  139.  
  140.  
  141.  Helpb = S1 / 10
  142.   Tablica(3) = Lookup(helpb , Kody7seg)
  143.  
  144.  Helpb = S1 Mod 10
  145.   Tablica(4) = Lookup(helpb , Kody7seg)
  146. Return
  147.  
  148. Przerwanie:
  149.  
  150.   Load Timer0 , 155
  151.  
  152.   If Wyswietlacz > 3 Then Wyswietlacz = 0
  153.  
  154.    Portb = Portb Or &B00001111          'wylącz wszystkie wyświetlacze (0-3)
  155.     Segmenty = Tablica(wyswietlacz + 1) 'ustaw port wartością
  156.      Reset Portb.wyswietlacz            'włącz własciwy wyświetlacz
  157.  
  158.     'Segmenty = Not Segmenty            'tylko dla mnie bo mam inne sterowanie wyświetlaczami
  159.    Incr Wyswietlacz
  160.  
  161.   5ms = 1                               'flaga - minęło 5 milisekund
  162.  
  163. Return
  164.  
  165. Kody7seg:
  166. '      *GFEDCBA
  167. Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110       '---> 0 , 1 , 2 , 3 , 4
  168. Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111       '---> 5 , 6 , 7 , 8 , 9
  169. Data &B00000000                         'pusty gasi zera wiodące
maxd89pl
Posty: 21
Rejestracja: 20 kwie 2017, 21:44

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: maxd89pl » 25 kwie 2017, 20:29

Nie no kolego bardzo ci dziękuje, ale jak i kiedy jesteś bardzo szybki, nie chciał bym wyjść na nie miłego ale ile czasu trzeba poświęcić by być takim profesjonalistą jak ty, ja nawet nie mam szkoły w tym kierunku.

Sprawdze jutro bo teraz to już do pracy sie szykuje.
Ja przy kubku kawy co najwyżej moge się podrapać po głowie heh

ad.
Kod działa wspaniale, ale nigdy nie widziałem takiej obsługi przycisków, więc postanowiłem go trochę przerobić i dodać dwu funkcyjność. Z tego co mi dałeś chyba nauczyłem się obsługi przycisków bez użycia waitms. Więc zrobiłem przyciski po swojemu i dodawanie działa super dodaje po 1 a po upływie 2,5sek ciągłego przyciskania dodaje 10. Zadowolony postępami zrobiłem tak samo odejmowanie ale jak zwykle coś musiałem sp... bo przy odejmowaniu w tej drugiej fazie czyli po 10 na wyświetlaczu od sekund w miejscu dziesiętnym pojawiają się niezdfiniowane liczby.

Wiesz może co ja tu nabroiłem:
  1.                $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6.  
  7. ' PO WŁĄCZENIU PROGRAM WYŚWIETLA TYLKO DWA ZERA
  8. ' KIEDY WCIŚNIESZ RAZEM PLUS I MINUS TO ZEGAR USTAWI SIĘ NA
  9. ' 30min i 00sec
  10. ' KRÓTKIE WCIŚNIĘCIE ENTER URUCHAMIA BĄDŹ ZATRZYMUJE ODLICZANIE
  11. ' OCZYWIŚCIE MOŻNA SAMEMU USTAWIĆ ŻĄDANY CZAS PLUS/MINUS
  12.  
  13. Config Portd = Output : Portd = 255 : Segmenty Alias Portd
  14.  
  15. 'anody wyswietlaczy
  16. Config Portb.0 = Output : W1 Alias Portb.0
  17. Config Portb.1 = Output : W2 Alias Portb.1
  18. Config Portb.2 = Output : W3 Alias Portb.2
  19. Config Portb.3 = Output : W4 Alias Portb.3
  20.  
  21. 'przyciski
  22. Config Pinc.0 = Input : Portc.0 = 1 : Prz1 Alias Pinc.0
  23. Config Pinc.1 = Input : Portc.1 = 1 : Prz2 Alias Pinc.1
  24. Config Pinc.2 = Input : Portc.2 = 1 : Enter Alias Pinc.2
  25.  
  26. Const Sw_mask = &B00000111              'maska przycisków (testowane tylko C0,C1 i C2)
  27.  
  28. Dim 5ms As Byte , Miliseconds As Byte , Helpb As Byte , Odliczanie As Byte
  29. Dim S1 As Byte , M1 As Byte , Wyswietlacz As Byte , Tablica(4) As Byte
  30. Dim Sw_licznikP As Byte , Sw_licznikM As Byte , Sw_stanP As Byte , Sw_stanM As Byte , Lock As Byte
  31.  
  32.  
  33.  
  34. 'timer dla 4x50Hz = 200Hz = 5ms
  35. Config Timer0 = Timer , Prescale = 256
  36.  Load Timer0 , 155                      '5ms @8MHz/256
  37.   On Timer0 Przerwanie : Enable Timer0
  38.  
  39. Enable Interrupts
  40.  Gosub Przelicz                         'wpisz dane dla wyswietlaczy
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  Do
  48.  
  49.  
  50. If 5ms = 1 Then
  51.    5ms = 0
  52.  
  53.    If Prz1 = 0 Then
  54.       incr Sw_licznikP
  55.          If Sw_licznikP = 25 Then
  56.             Sw_licznikP = 0
  57.             Incr Sw_stanP
  58.             Select Case Sw_stanP
  59.  
  60.                      Case 0 to 20 :
  61.  
  62.                         Gosub Dodawaj
  63.                         Gosub Przelicz
  64.  
  65.                      Case 21 to 100 :
  66.  
  67.                         Gosub Dodawaj10
  68.                         Gosub Przelicz
  69.                         Sw_stanP = 21
  70.             End Select
  71.          End If
  72.    Else
  73.  
  74.       Sw_stanP = 0
  75.  
  76.    End if
  77.  
  78.    If Prz2 = 0 Then
  79.       incr Sw_licznikM
  80.          If Sw_licznikM = 25 Then
  81.             Sw_licznikM = 0
  82.             Incr Sw_stanM
  83.             Select Case Sw_stanM
  84.  
  85.                      Case 0 to 20 :
  86.  
  87.                         Gosub Odejmuj
  88.                         Gosub Przelicz
  89.  
  90.                      Case 21 to 100 :
  91.  
  92.                         Gosub Odejmuj10
  93.                         Gosub Przelicz
  94.                         Sw_stanM = 21
  95.             End Select
  96.          End If
  97.    Else
  98.  
  99.       Sw_stanM = 0
  100.  
  101.    End if
  102.  
  103. End if
  104.  
  105.  
  106.    'tutaj liczenie do sekundy
  107.  
  108.     If Miliseconds < 199 Then           '200 x 5ms = 1000ms = 1s
  109.      Incr Miliseconds
  110.     Else
  111.      Miliseconds = 0
  112.  
  113.       If Odliczanie = 1 Then            'jesli zezwolono odliczać
  114.        Gosub Odejmuj
  115.         Gosub Przelicz
  116.       End If
  117.  
  118.     End If
  119.  
  120.  
  121.  
  122. Loop
  123. End
  124.  
  125. Dodawaj:
  126.  If M1 < 30 Then
  127.   Incr S1
  128.    If S1 > 59 Then
  129.     Incr M1
  130.      S1 = 0
  131.    End If
  132.  End If
  133. Return
  134.  
  135. Dodawaj10:
  136.  If M1 < 30 Then
  137.   S1 = S1 + 10
  138.    If S1 > 59 Then
  139.     Incr M1
  140.      S1 = 0
  141.    End If
  142.  End If
  143. Return
  144.  
  145. Odejmuj:
  146.  If S1 > 0 Then
  147.    Decr S1
  148.  Else
  149.    If M1 > 0 Then
  150.     Decr M1
  151.      S1 = 59
  152.    End If
  153.  End If
  154. Return
  155.  
  156. Odejmuj10:
  157.  If S1 > 0 Then
  158.    S1 = S1 - 10
  159.  Else
  160.    If M1 > 0 Then
  161.     Decr M1
  162.      S1 = 59
  163.    End If
  164.  End If
  165. Return
  166.  
  167. Przelicz:
  168.  If M1 > 9 Then Helpb = M1 / 10 Else Helpb = 10
  169.   Tablica(1) = Lookup(helpb , Kody7seg)
  170.  
  171.  If M1 > 0 Then
  172.   Helpb = M1 Mod 10
  173.    Tablica(2) = Lookup(helpb , Kody7seg)
  174.    Set Tablica(2).7
  175.  Else
  176.    Tablica(2) = 0
  177.  End If
  178.  
  179.  
  180.  Helpb = S1 / 10
  181.   Tablica(3) = Lookup(helpb , Kody7seg)
  182.  
  183.  Helpb = S1 Mod 10
  184.   Tablica(4) = Lookup(helpb , Kody7seg)
  185. Return
  186.  
  187. Przerwanie:
  188.  
  189.   Load Timer0 , 155
  190.  
  191.   If Wyswietlacz > 3 Then Wyswietlacz = 0
  192.  
  193.    Portb = Portb Or &B00001111          'wylącz wszystkie wyświetlacze (0-3)
  194.     Segmenty = Tablica(wyswietlacz + 1) 'ustaw port wartością
  195.      Reset Portb.wyswietlacz            'włącz własciwy wyświetlacz
  196.  
  197.     'Segmenty = Not Segmenty            'tylko dla mnie bo mam inne sterowanie wyświetlaczami
  198.    Incr Wyswietlacz
  199.  
  200.   5ms = 1                               'flaga - minęło 5 milisekund
  201.  
  202. Return
  203.  
  204. Kody7seg:
  205. '      *GFEDCBA
  206. Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110       '---> 0 , 1 , 2 , 3 , 4
  207. Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111       '---> 5 , 6 , 7 , 8 , 9
  208. Data &B00000000                         'pusty gasi zera wiodące      
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: niveasoft » 26 kwie 2017, 19:47

Możesz dodać posta pod postem bo wtedy obserwujący temat dostają powiadomienia ;)

Akurat założyłem ulubione słuchafony więc może gdzieś tu nonszalancko popełniam błąd, ale tak na luzie to sprawdź i popatrz czy taka logika się sprawdzi ;)
  1. Odejmuj10a:
  2.  If S1 > 10 Then                        'jesli sekundy mają np.12
  3.   S1 = S1 - 10
  4.  
  5.  Else                                   'jesli sekundy mają np.tylko 9
  6.  
  7.   Helpb = 10 - S1                       'zapamietaj  że trzeba odjąć jeszcze 1
  8.  
  9.    If M1 > 0 Then                       'tylko jesli jest jeszcze z czego odejmować
  10.  
  11.     Decr M1                             'zmniejsz minuty
  12.      S1 = 59 - Helpb                    'ustaw sekundy i odejmij zapamietaną resztę
  13.  
  14.    Else
  15.     S1 = 0                              ' jak juz nie ma z czego odejmować to napisz 0
  16.    End If
  17.  
  18.  End If
Szczerze mówiąc łatwiej jest operować na jednej zmiennej typu Word.
Wtedy Minuty wyciągasz przez "Minuty = Zmienna /60" a Sekundy przez Sekundy = Zmienna Mod 60" czyli reszta z dzielenia przez 60 sekund bo to sa sekundy a nie całe minuty :D

Wtedy sobie możesz dodawać i odejmować co chcesz dopóki Zmienna > od tego co chcesz odjąć Else Zmienna = 0 :D

A tak w ogóle to nie wpadłeś na pomysł że mozna automatycznie przyspieszać autoklik ? :D
On może na początku iść wolno i przyspieszać :D
  1. If Sw_licznik < 75 Then Incr Sw_licznik           'przyspiesz autoklik
maxd89pl
Posty: 21
Rejestracja: 20 kwie 2017, 21:44

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: maxd89pl » 28 kwie 2017, 11:37

niveasoft pisze: ↑
26 kwie 2017, 19:47


Szczerze mówiąc łatwiej jest operować na jednej zmiennej typu Word.
Wtedy Minuty wyciągasz przez "Minuty = Zmienna /60" a Sekundy przez Sekundy = Zmienna Mod 60" czyli reszta z dzielenia przez 60 sekund bo to sa sekundy a nie całe minuty :D

Wtedy sobie możesz dodawać i odejmować co chcesz dopóki Zmienna > od tego co chcesz odjąć Else Zmienna = 0 :D

A tak w ogóle to nie wpadłeś na pomysł że mozna automatycznie przyspieszać autoklik ? :D
On może na początku iść wolno i przyspieszać :D
  1. If Sw_licznik < 75 Then Incr Sw_licznik           'przyspiesz autoklik
Heh pewnie masz racje, w sumie na pewno masz, tylko że ja muszę synchronizować atmegę z prockiem w mojej głowie :lol: i takie operacje są dla mnie łatwiejsze do opanowania.

Nie było mnie parę dni, ale godzinami męczyłem ten kod, a nie chciałem tu pisać i męczyć z każdą pierdołą którą napotkam, ale jest, udało się i chodzi wszystko tak jak chce. Jestem bardzo zadowolony, gdyż to pierwszy mój program, który tak fajnie chodzi. Zawsze gdzieś miałem jakieś spowolnienia, albo przy przyciskach było trzeba czekać by zadziałał, czy tam klikać parę razy, a teraz wszystko pięknie, a to za sprawą wywalenia waitms-ów.
niveasoft - bardzo Ci chciałem podziękować za pomoc. Oraz chciałem się dopytać czy jak skończę całą naświetlarkę, czy mogę zamieścić tu gotowy, finalny projekt?
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: niveasoft » 28 kwie 2017, 12:37

Oczywiście że możesz. Jest do tego wydzielony dział "Do It Yourself" - DIY- "Zrób to sam" :D a to w celu odróżnienia gotowych projektów od tych nad którymi się jeszcze pracuje :D
Właściwie możesz się nim chwalić gdziekolwiek :D

Cieszę się że działa lepiej i widzisz plusy takiego rozwiązania.

Tak na marginesie to nie napisałeś czy procedura odejmowania 10 się sprawdziła :D
maxd89pl
Posty: 21
Rejestracja: 20 kwie 2017, 21:44

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: maxd89pl » 28 kwie 2017, 15:53

niveasoft pisze: ↑
28 kwie 2017, 12:37


Tak na marginesie to nie napisałeś czy procedura odejmowania 10 się sprawdziła :D
Tak działa pięknie i właśnie ją mam w programie, bardzo jeszcze raz dziękuje

Hehe teraz czas na wytrawiarke, wyswietlacz lcd 16x2 oled, duźa cyfry z twojego bloga i chyba encoder też z twojego bloga heh. Dawno temu robiłem wytrawiarke, wtedy zaczynałem się uczyć bascoma, po przenosinach z warsztatu gdziesz sie zawieruszyła heh jest film z tego okresu, sam zobacz jak ten program tam działał heh ledwo bo ledwo
[media] [/media]
Awatar użytkownika
niveasoft
Posty: 1313
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Pomoc przy wyświetlaczach 7seg...

Post autor: niveasoft » 28 kwie 2017, 16:33

Jak jesteśmy przy trawieniu i wyrobie płytek domowym sposobem to zerknij jak przerabiam laminator Tracer za 70zł żeby grzał do ~190 stopni.
Powyżej papier już brązowieje i przykleja się do płytek. Poniżej to efekt przeniesienia toneru nie jest gwarantowany a oryginalnie to ten laminator grzeje do 150 max.

Musze znaleźć do niego optymalne wartości dla PID, wtedy kod udostępnię. Może zaimplementuję selflearning.
Film pokazuje że przestrzela nieco te 180 do 200 , ale to kiedyś rozwiążę. Jak będzie mi to potrzebne :D

ODPOWIEDZ