Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega8][bascom] Licznik i symulacja programowa.

Przemekpepe6 01 Lip 2008 11:39 3712 8
  • #1 01 Lip 2008 11:39
    Przemekpepe6
    Poziom 9  

    Witam!
    Zwracam się do was o pomc w napisaniu programu do Atmeg8 w bascomie, który miałby pełnić funkcję licznika. Korzystałem z kilku programów, ale ilekroć chciałem sprawdzić działanie na symulatorze Bascom AVR tylekroć żadna cyferka nie posuwała mi się do przodu na wyświetlaczu. :(. Nie wiem czy jest to wina programów, z których korzystałem czy poprostu symulatora, w którym jest problem z generacją impulsów. Licznik ten ma byś wykorzystany do prędkościomierza, i jest to nie wątpliwie ważna część programu :). Dlatego zwracam się do was o pomoc. Będę wam bardzo wdzięczny.Prosiłbym nawet o jakieś programy w których wykorzystywana jest funkcja licznika impulsów, oczywiście napisanego w Bascomie. Raz jeszcze z góry bardzo dziękuję
    Pozdrawiam :)[/youtube]


    Poprawiłem tytuł:
    https://www.elektroda.pl/rtvforum/topic1015361.html
    [c_p]

    0 8
  • #3 01 Lip 2008 14:19
    Przemekpepe6
    Poziom 9  

    To jest fragment kodu, którego używałem , żęby zrobić obsługę licznik, ale nie działa w symulacji

    Code:

    $sim
    $regfile = "m8def.dat"                                     'Informacja dla kompilatora.

    $crystal = 8000000                                          'Też dla kompilatora,zastosujemy kwarc zewnętrzny 10MHz.



    Config Lcd = 16 * 2

    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

                                            'Informacja na jakich Pinach będzie Lcd.

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

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

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

       Set Portd.5                                              'Dołącz rezystor podciągający.

     Config Pinb.1 = Output                                     'Konfigurujemy Portb.1 jako wyjście frekwencji.

       Portb.1 = 1                                              'Ustaw 1 w Portb.1.



     On Timer0 Odmierz_1s                                       'Podprogramdla Timera0 o nazwie Odmierz_1s.

     On Timer1 Zlicz_przep_tim1                                 'Podprogram dla Timera1.



     Dim Liczba_przerwan_tim0 As Word                           ' Tu załadujemy liczbę przerwań Timera0.

     Dim Lczba_przep_tim1 As Word                               ' Tu załadujemy liczbę przerwań Timera1.





     Dim Wynik_pomiaru As Long                                  ' Tu znajdzie się wynik pomiaru.



     Enable Interrupts                                          'Zezwalaj na wszystkie przerwania.

     Enable Timer0                                              'Odblokowujemy przerwanie Timera0.

     Enable Timer1                                              'Odblokowujemy przerwanie Timera1.



     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.



     Timer1 = 0                                                 'Zerujemy Timer1

     Start Timer0                                               '

     Cls                                                        'Czyść Lcd.

     Stop Timer1                                                'Zatrzymujemy Timer1.



     Do                                                         'Start pętli głównej.

     Home                                                       'Utrzymujemy stabilność wyświetlania na Lcd.

      If Pind.2 = 0 Then                                        'jeśli jest początek impulsu.

      Start Timer1                                              '

      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 zawartości Timera1 i ten wynik wpisz do Wynik_pomiaru.

      Else                                                      'W przeciwnym razie...

      Stop Timer1                                               '

      Lcd Wynik_pomiaru                                         'Pokaż wynik.

      End If                                                    'Koniec warunku.

     Loop                                                       'Powtórz pętlę.

     End                                                        'Koniec pętli.



     Odmierz_1s:                                                'Podprogram dla Timera0.

      Timer0 = 6                                                'Do Timera0 dodaj sześć (zliczy 250).

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

      Toggle Portb.1                                            'Zmień stan poziomu Portb.1.

     Return                                                     'Wróć do programu.



     Zlicz_przep_tim1:                                          'Podprogram Timer1.

      Incr Lczba_przep_tim1                                     'Zwiększaj zmienną o 1.

      If Lczba_przep_tim1 = 1 Then                              'Jeśli zawartość Timer1 będzie 65536, to...

      Lczba_przep_tim1 = 0                                      'Zeruj zmienną.

      End If                                                    'Koniec warunku.

     Return                                                     'W

    0
  • #4 01 Lip 2008 17:40
    JmL(TM)
    Poziom 24  

    Kod wstaw w znaczniki CODE! a nie zmieniaj kolor :D

    Ta linijke zmieniales czy juz tak byla?

    Code:
    $crystal = 8000000 'Też dla kompilatora,zastosujemy kwarc zewnętrzny 10MHz. 

    0
  • #5 01 Lip 2008 21:36
    Przemekpepe6
    Poziom 9  

    Ta linijka kodu :
    $crystal 8000000
    już tak była, tego nie zmieniałem

    0
  • #7 02 Lip 2008 17:11
    Przemekpepe6
    Poziom 9  

    Tak, tyle mam. Gdybym mniał mniejszy, to bym mniejszą wartość wpisał :)

    0
  • #8 02 Lip 2008 17:35
    JmL(TM)
    Poziom 24  

    Przemekpepe6 napisał:
    Tak, tyle mam. Gdybym mniał mniejszy, to bym mniejszą wartość wpisał :)


    No tak ale lepiej upewnic sie 2x bo czasem jednak mozna cos przeoczyc...

    0
  • #9 02 Lip 2008 19:40
    ZbeeGin
    Poziom 38  

    Nauczcie się wreszcie, że od sterowania licznikiem w trybie COUNTER podczas symulacji jest opcja PULSE. Czytanie instrukcji/helpa przecież chyba nie boli:

    Cytat:
    The pulse generator can be used to supply pulses to the timer when it is used in counter mode.
    First select the desired pin from the pull down box. Depending on the chip one or more pins are available. Most chips have 2 counters so there will usually be 2 input pins.
    Next, select the number of pulses and the desired delay time between the pulses, then press the Pulse-button to generate the pulses.

    0
  Szukaj w 5mln produktów