Bascom

Diodowa linijka pomiarowa.

'LinijkaPomiarowaDiodowa.bas

'Pomiar napięcia wejściowego (do 10V).

'Wynik na Linijce diodowej.

'Patrz info pod programem.

'Atmega8 z kwarcem 16MHz.

'Fusebit ustawiony na kwarc zewnętrzny 1111.

'Patrz sch. LinijkaPomiarowaDiodowa.png.

'Opracował Henryk Wydmuch.

'Pamięć zajęta w 25%.

 

$regfile = "m8def.dat"                                      'Info dla kompilatora.

$crystal = 16000000                                         'Informujemy kompilator o kwarcu 16MHz.

 

 Config Timer0 = Timer , Prescale = 1                       'Timer0 jako Timer z podziałem przez 1.

 Config Timer1 = Counter , Edge = Rising                    'Timer1 jako licznik działający od zbocza narastającego.

 

 Config Pind.5 = Input                                      'Konfiguruj Portd.5 jako wejście.

 Config Pind.4 = Output                                     'Porty wyjściowe dla linijki diodowej.

 Config Pind.3 = Output                                     '

 Config Pind.2 = Output                                     '

 Config Pind.1 = Output                                     '

 Config Pind.0 = Output                                     '

 Config Pinc.5 = Output                                     '

 Config Pinc.4 = Output                                     '

 Config Pinc.3 = Output                                     '

 Config Pinc.2 = Output                                     '

 Config Pinc.1 = Output                                     '

 Config Pinc.0 = Output                                     '

 Config Pinb.5 = Output                                     '

 Config Pinb.4 = Output                                     '

 Config Pinb.3 = Output                                     '

 Config Pinb.2 = Output                                     '

 Config Pinb.1 = Output                                     '

 Config Pinb.0 = Output                                     '

 Config Pind.7 = Output                                     '

 Config Pind.6 = Output                                     '

 Set Portd.4                                                '

 Set Portd.3                                                '

 Set Portd.2                                                '

 Set Portd.1                                                '

 Set Portd.0                                                '

 Set Portc.5                                                '

 Set Portc.4                                                '

 Set Portc.3                                                '

 Set Portc.2                                                '

 Set Portc.1                                                '

 Set Portc.0                                                '

 Set Portb.5                                                '

 Set Portb.4                                                '

 Set Portb.3                                                '

 Set Portb.2                                                '

 Set Portb.1                                                '

 Set Portb.0                                                '

 Set Portd.7                                                '

 Set Portd.6                                                '

 

 On Timer0 Odmierz_1s                                       'Podprogramdla Timera0 o nazwie Odmierz_1s.

 On Timer1 Zlicz_przep_tim1                                 'Podprogram dla Timera1.

 

 Dim Liczba_przerwan_tim0 As Word                           'Rezerwujemy dwa bajty w pamięci dla zmiennej Liczba_przerwan_tim0.

 Dim Lczba_przep_tim1 As Byte                               'Rezewujemy jeden bajt dla zmiennej Liczba_przep_tim1.

 Dim Wynik_pomiaru As Single                                'Rezerwujemy cztery bajty dla zmiennej Wynik_pomiaru.

 Dim Z As String * 7                                        'Z jako zmienna słowna z siedmioma miejscami.

 

 Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

 Enable Timer0                                              'Odblokowujemy przerwanie Timera0.

 Enable Timer1                                              'Odblokowujemy przerwanie Timera1.

 

 Stop Timer0                                                'Zatrzymujemy Timer0.

 Stop Timer1                                                'Zatrzymujemy Timer1.

 

 Timer1 = 0                                                 'Zerujemy Timer1.

 Wynik_pomiaru = 0                                          'Zerujemy zmienną Wynik_pomiaru.

 Liczba_przerwan_tim0 = 0                                   'Zerujemy zmienną zawierającą liczbę przerwań Timera0.

 Lczba_przep_tim1 = 0                                       'Zerujemy zmienną zawierającą liczbę przerwań Timera1.

 

 Start Timer1                                               '

 Start Timer0                                               '

 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Do                                                          'Start pętli głównej.

 'Ustawianie poziomów napięć wejściowych.

 If Wynik_pomiaru < 400 Then                                'Jeśli napięcie wejściowe jest mniejsze od 0,4V, to...

 Set Portd.4                                                '

 Set Portd.3                                                '

 Set Portd.2                                                '

 Set Portd.1                                                '

 Set Portd.0                                                '

 Set Portc.5                                                '

 Set Portc.4                                                '

 Set Portc.3                                                '

 Set Portc.2                                                '

 Set Portc.1                                                '

 Set Portc.0                                                '

 Set Portb.5                                                '

 Set Portb.4                                                '

 Set Portb.3                                                '

 Set Portb.2                                                '

 Set Portb.1                                                '

 Set Portb.0                                                '

 Set Portd.7                                                '

 Set Portd.6                                                '

   End If                                                   'Koniec warunku.

 

   If Wynik_pomiaru => 400 Then                             'Jeśli wynik pomiaru będzie równy lub większy od 0,4V, to...

   Reset Portd.4                                            'Podaj niski poziom na Portd.4 (zaświeć Led linijki).

   Set Portd.7                                              'Pozostałe Porty poziom wysoki (Ledy wyłączone).

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   Set Portc.4                                              '

   Set Portd.0                                              '

   Set Portd.1                                              '

   Set Portd.2                                              '

   Set Portd.3                                              '

   End If                                                   'Koniec warunku.

 

   If Wynik_pomiaru => 600 Then                             '

   Reset Portd.3                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   Set Portc.4                                              '

   Set Portd.0                                              '

   Set Portd.1                                              '

   Set Portd.2                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 800 Then                             '

   Reset Portd.2                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   Set Portc.4                                              '

   Set Portd.0                                              '

   Set Portd.1                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 1000 Then                            '

   Reset Portd.1                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   Set Portc.4                                              '

   Set Portd.0                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 1600 Then                            '

   Reset Portd.0                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   Set Portc.4                                              '

   Set Portc.5                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 2200 Then                            '

   Reset Portc.5                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   Set Portc.4                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 2800 Then                            '

   Reset Portc.4                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   Set Portc.3                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 3400 Then                            '

   Reset Portc.3                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   Set Portc.2                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 4000 Then                            '

   Reset Portc.2                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   Set Portc.1                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 4600 Then                            '

   Reset Portc.1                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   Set Portc.0                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 5200 Then                            '

   Reset Portc.0                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   Set Portb.5                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 5800 Then                            '

   Reset Portb.5                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   Set Portb.4                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 6400 Then                            '

   Reset Portb.4                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   Set Portb.3                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 7000 Then                            '

   Reset Portb.3                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   Set Portb.2                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 7600 Then                            '

   Reset Portb.2                                            '

   Set Portd.7                                              '

   Set Portd.6                                              '

   Set Portb.0                                              '

   Set Portb.1                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 8200 Then                            '

   Reset Portb.1                                            '

   Set Portd.6                                              '

   Set Portd.7                                              '

   Set Portb.0                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 8800 Then                            '

   Reset Portb.0                                            '

   Set Portd.6                                              '

   Set Portd.7                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 9400 Then                            '

   Reset Portd.7                                            '

   Set Portd.6                                              '

   End If                                                   '

 

   If Wynik_pomiaru => 10000 Then                           '

   Reset Portd.6                                            '

   End If                                                   '

 

 Loop                                                       'Powtórz pętlę.

 End                                                        'Koniec pętli.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Odmierz_1s:                                                'Podprogram dla Timera0 (wyznaczanie 1sek).

  Timer0 = 6                                                'Do Timera0 dodaj sześć i zapamiętaj jako Timer0 (zliczy 250).

  Incr Liczba_przerwan_tim0                                 'Liczbę przerwań Timera0 powiększ o jeden.

  If Liczba_przerwan_tim0 = 51388 Then                      'Jeśli liczba przerwań Timera0 jest równa 51388, to...

  'Liczbą 51388 ustalamy dokładny pomiar.

  Liczba_przerwan_tim0 = 0                                  'Wyzeruj zmienną.

  Wynik_pomiaru = 65536 * Lczba_przep_tim1                  'Zmienną Liczba_przep_tim1 pomnóż przez 65536,

                                                            'a wynik wstaw do zmiennej Wynik_pomiaru.

  Wynik_pomiaru = Wynik_pomiaru + Timer1                    'Wynik powyższego działania dodaj do aktualnej zawartości Timera1

                                                            'i ten wynik wpisz do zmiennej Wynik_pomiaru.

  Lczba_przep_tim1 = 0                                      'Zeruj flagę przepełnień Timera1.

  Timer1 = 0                                                'Zeruj Timer1.

   End If                                                   'Koniec uwarunkowania.

 Return                                                     'Wróć do programu.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Zlicz_przep_tim1:

  Enable Interrupts                                         'Podprogram Timera1 .

 Return                                                     'Wróć do programu.

 'Koniec.

 '--------------------------------------------------------------------------------------------------------------------

 

 'Objaśnienie.

 'Jeśli chcemy, aby miernik pokazywał inne poziomy napięć wejściowych, wpisujemy te poziomy do programu.

 'Wpisu dokonuje się w pętli Do, w tych miejscach: If Wynik_pomiaru => 400 Then. Sens tego wpisu jest taki:

 'Jeśli Wynik_pomiaru jest równy lub większy od 400mV, to...

 'Przykładowo: jeśli chcemy, aby pierwsza dioda zaświeciła przy napięciu wejściowym 2mV, wpisujemy tam liczbę 2.