''--------------------STEROWNIK PWM--------------------
'wejscie PC0 - ADC - potencjometr regulacji predkosci podnoszenia/opuszczania PWM
'wejscie PC1 - ADC - potencjometr zadajacy polozenie
'wejscie PC2 - ADC - potencjometr zwrotny z silownika
'wyjscie PB1, PB2 - wyjscia PWM do sterowania polmostkiem
'wyjscie PD0 - podnoszenie przycisk , PD1 - opuszczanie przycisk
'wyjscie PD2 - LED podnoszenie, PD3 - LED opuszczanie


$regfile = "m8def.dat"                                      '1 wyjscie, 0 wejscie
$crystal = 4000000
Config Portc = &B1110000
Portc = &B0001111
Config Portb = &B11111111
Portb = &B0000000
Config Portd = &B10001100                                   ' PD0- podnoszenie, PD1- opuszczanie
Portd = &B01110011                                          'PD2- LED podnoszenie, PD3 - LED opuszczanie

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Config Portb = &B11111111                                   ' konfiguracja musi byc tu zeby dzialalo wylaczenie pwm
Portb = &B0000000                                           ' PB1 PB2 sterowanie silnikiem

Dim P1 As Integer
Dim P2 As Integer
Dim P3 As Word
Dim P4 As Integer
Dim S1 As Bit


Start Adc
S1 = 0


'----------------GWNY PROGRAM-------------------
Do
   Gosub Ehr
   Gosub Reg_blotnik
   Gosub Odblokuj
Loop
End

'----------------podstawowe dzialanie EHR---------------------
Ehr:
If S1 = 0 Then                                              ' badanie czy nie nacisnieto przycisku
   P1 = Getadc(1)                                           ' odczytanie polozenia potencjometru zadajacego
   P2 = Getadc(2)                                           ' odczytanie polozenia potencjometru z silownika
   P3 = Getadc(0)                                           ' odczyt predkosci silownika
   P2 = P2 + 12                                             ' dodanie histerezy
   If P1 > P2 Then
      Portd.2 = 0                                           'przypisanie tej wartosci do obu wyjsc PWM,PB1 i PB2 do sterowania polmostka
      Pwm1a = P3                                            ' uruchom silnik z ustawiona predkoscia w jedna strone
      Waitms 1                                              'zeby nie spalic sterownika silniczka
      Portd.3 = 1
      Pwm1b = 1023                                          'wylacz druga polowe polmostka
   Else
      P2 = P2 - 24                                          ' odejmujemy 24 bo wczesniej dodalismy 12 a teraz musimy zmniejszyc o 12 wartosc poczatkowa
      If P1 < P2 Then
         Portd.3 = 0
         Pwm1a = 1023
         Waitms 1                                           'zeby nie spalic sterownika silniczka
         Portd.2 = 1
         Pwm1b = P3
      Else
         Portd.2 = 0
         Portd.3 = 0
         Pwm1a = 1023                                       '1023 bo jest 10 bit
         Pwm1b = 1023                                       ' wylaczeniecalego mostka
      End If
   End If
End If
Return

'--------------zewnetrzna regulacja podnosnika na blotnikach-----------------

Reg_blotnik:
If Pind.0 = 0 Then
   Waitms 25
   If Pind.0 = 0 Then                                       ' przycisniecie przycisku podnoszenia
      Portd.7 = 1                                           ' zapalenie diody blokady
      S1 = 1                                                ' ustawiamy bit pomocniczy
      Pwm1a = 0                                             ' wlacza silownik
   Else                                                     ' pelna predkosc silownika
      Pwm1a = 1023                                              ' wylacza silownik po puszczeniu przycisku
   End If
End If
If Pind.1 = 0 Then
   Waitms 25
   If Pind.1 = 0 Then
      Portd.7 = 1
      S1 = 1                                                ' przycisniecie przycisku opuszczania na
      Pwm1b = 0                                             ' wlacza silownik
   Else
      Pwm1b = 1023                                          ' wylacza silownik po puszczeniu przycisku
   End If
End If
Return

'------------------inne podprogramy-----------------

Odblokuj:                                                   ' odblokowanie konsoli
If Pind.4 = 0 Then
   Waitms 25
   If Pind.4 = 0 Then
      Waitms 100                                            ' niezbedne do poprawnego dzialania                                      ' mozna dodac diode sygnalizujaca blokade panela
      S1 = 0
      Portd.7 = 0                                           'zgas diode blokady
   Else
      S1 = 1
   End If
End If
Return

