logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Optymalizacja programu miernika częstotliwości dla AT90S2313 w Bascom AVR

marcin-k 03 Lut 2006 19:17 10529 13
REKLAMA
  • #1 2254659
    marcin-k
    Poziom 15  
    Posty: 255
    Ocena: 38
    KOLEDZY czy ktoś może mi pomóc w przerobieniu programu tego miernika mam plik 3003.bas który ma się zmieścić w procesorze 90S2313 ale niestety po kompilacji wychodzi mi ok. 2.150 kb mam wersje 1.11.7.4 próbowałem kompilacji w wcześniejszych wersjach niestety podobny wynik co mogę usunąć najmniej znaczącego aby się zmieścił w tym procesorze zaznaczam że nie chcę zmieniać procesora na większy proszę o pomoc z tym programem dołączam plik źródłowy oraz artykuł oryginalny w pdefie.
    Załączniki:
    • miernik_cz.zip (302.15 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 2254926
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    A może by tak?

    $regfile = "2313def.DAT"
    $crystal = 11059200
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7
    Cursor Off
    Config Portd.6 = 1
    Config Portd.0 = 0
    Portd.0 = 1
    Portd.6 = 1
    Dim Czestotliwosc As Long
    
    Const Licznik = 22336
    Config Timer1 = Timer , Prescale = 256
    Config Timer0 = Counter , Edge = Falling
    
    Deflcdchar 1 , 2 , 4 , 14 , 16 , 16 , 17 , 14 , 32          ' replace ? with number (0-7)
    Deflcdchar 0 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32
    Deflcdchar 2 , 32 , 32 , 14 , 17 , 31 , 16 , 14 , 4         ' replace ? with number (0-7)
    
    On Timer1 Czas
    On Timer0 Zlicz
    Kasuj Alias Portd.6
    Mnoznik Alias Pind.0
    Cls
    Lcd "    MIERNIK"
    Lowerline
    Lcd " CZESTOTLIWOSCI"
    Wait 1
    Cls
    Enable Interrupts
    Enable Timer1
    Enable Timer0                                               'Pomiar czasu
    Counter1 = Licznik
    
    Do
    Set Kasuj
    Loop
    End
    
    Czas:
       Stop Timer0
       Stop Timer1
       Czestotliwosc = Czestotliwosc * 256
       Czestotliwosc = Czestotliwosc + Counter0
       If Mnoznik = 0 Then
       Czestotliwosc = Czestotliwosc * 4
       Else
       Czestotliwosc = Czestotliwosc * 40
       End If
       Locate 1 , 2 : Lcd "Cz" ; Chr(2) ; "stotliwo" ; Chr(0) ; Chr(1)
       If Czestotliwosc < 1000 Then Gosub Wyswietl_hz
       If Czestotliwosc >= 1000 And Czestotliwosc < 1000000 Then Gosub Wyswietl_khz
       If Czestotliwosc >= 1000000 Then Gosub Wyswietl_mhz
       Reset Kasuj : Waitms 2 : Set Kasuj                       'Kasuj przerzutniki
          Czestotliwosc = 0
          Counter0 = 0
          Counter1 = Licznik
       Start Timer0
       Start Timer1
    
    Return
    
    Zlicz:
    Incr Czestotliwosc
    Return
    
    Wyswietl_hz:
    
    Locate 2 , 2
    Lcd "    " ; Czestotliwosc ; "     "
    Locate 2 , 9 : Lcd " Hz     "
    Return
    
    Wyswietl_khz:
    
    Locate 2 , 3
    Lcd " " ; Czestotliwosc ; "       "
    Czestotliwosc = Czestotliwosc \ 1000
    Locate 2 , 2
    Lcd " " ; Czestotliwosc ; "."
    Locate 2 , 11 : Lcd " kHz   "
    Return
    
    Wyswietl_mhz:
    
    Locate 2 , 3
    Lcd Czestotliwosc ; "       "
    Czestotliwosc = Czestotliwosc \ 1000000
    Locate 2 , 2
    Lcd Czestotliwosc ; "."
    Locate 2 , 11 : Lcd " MHz  "
    Return


    Miernik ma kasowalny preskaler i 2 przełączane wejścia 1:1 i 1:10
    Timer 1 mierzy czas 1s w jednym przebiegu.
    Timer 0 zlicza impulsy
    Preskaler zintegrowany z procesorem - podział/4
    Preskaler dołączany - podział /10
    Automatyczna zmiana jednostek Hz, kHz, MHz
    Kwarc ponadwymiarowy.
    Polskie litery.

    Całość powinna mierzyć do ok 120-150MHz.
  • REKLAMA
  • #4 2254992
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Pdf-a nawet nie otwarłem. Program podaję jako wzór. Wyswietlacz wiadomo jak podłączyć, impulsy na T0, kasowanie wewnętrznego preskalera ujemnym impulsem z D.6 (można potraktować jako opcja), Przełączanie zakresów (dodatkowy prescaler) na D.0 (można potraktować jako opcja).
    Jak znajdę czas to pooglądam pdf'a. Ze względu na preskaler wewnętrzny wynik jest mnożony przez 4 lub 40 przy preskalerze wewnętrznym.
    Jak Ci się podoba to przeanalizuj i dostosuj. To nic trudnego. Najważniejsze jest uzyskanie czasu pomiaru = 1s.
  • #5 2256654
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Konstrukcja jest zdecydowanie inna. Proponowałbym ograniczenie programu do pomiaru częstotliwości i zrezygnowania z pomiaru czasu, lub zaprojektowanie płytki pod ATMEGA8 z zachowaniem połączenia wszystkich końcówek jak w projekcie. Do kompilacji będzie potrzebna najnowsza wersja Bascom'a z ograniczeniem do 4kB. I jeszcze jedno. W takim przypadku trzeba będzie przestawić Fuse Bit na użycie zewnętrznego generatora kwarcowego o dużej częstotliwości.
  • #6 2256837
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    Options/compiler/output i zaznacz optimalize code
    i już z 104 % robi sie tylko 97% i wszystko smiga.. a jak nie to masz skompilowany w załączniku

    Pozdrawiam
    Załączniki:
    • miernik_cz.rar (9.08 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #8 2402561
    omen247
    Poziom 11  
    Posty: 20
    Witam - czy moglby mi ktos objasnic w jaki sposob mozna by ten miernik zmodyfikowac aby mierzyl do okolo 200Mhz? - bardzo mi n tym zalezy

    za pomoc z gory dzieki
  • #9 2403452
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    uC mierzą na swoim wejściu cząstotliwość mniejszą niż połowa taktowania. Jeżeli chcesz mierzyć więcej trzeba częstotliwość podzielić preskslerem przed uC.
  • REKLAMA
  • #10 2403535
    omen247
    Poziom 11  
    Posty: 20
    M. S. napisał:
    uC mierzą na swoim wejściu cząstotliwość mniejszą niż połowa taktowania. Jeżeli chcesz mierzyć więcej trzeba częstotliwość podzielić preskslerem przed uC.


    Aha - dzieki za pomoc - a czy moglbs podac link do jakiegos schematu takiego preskalera tzn - bo patrze tego jest duzo i nie wiem ktory dobrac zeby nic nie zepsuc
  • #11 2404879
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Najrozsądniej będzie kupić preskaler / 100 do samodzielnego montażu - są dostępne (w mojej okolicy trudno kupić sam układ scalony preskalera). Przy budowie miernika należy minimalizować przewody doprowadzające wysoką częstotliwość do preskalera.
  • #12 2405221
    omen247
    Poziom 11  
    Posty: 20
    M. S. napisał:
    Najrozsądniej będzie kupić preskaler / 100 do samodzielnego montażu - są dostępne (w mojej okolicy trudno kupić sam układ scalony preskalera). Przy budowie miernika należy minimalizować przewody doprowadzające wysoką częstotliwość do preskalera.


    Ok dzieki - kupie kit do samodz.montazu
  • #13 3914442
    LashloE
    Poziom 13  
    Posty: 121
    Ocena: 3
    Ten program mierzy mi jakąś częstotliwość nie wiadomo skąd. Jak tylko włacze atmegę to po chwili mam wynik ok. '560 Hz'. Z kodu wywaliłem linijkę:
    'Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.6 , Rs = Portb.7'
    bo mam inaczej LCD podłączony.
    Czy ten program pobiera impulsy z Portd.6 Portd.0 ?
    Gdzie podłączyć "+" a gdzie "-" prądu który ma być zmierzony ?
  • #14 11579411
    IMEX
    Poziom 20  
    Posty: 566
    Pomógł: 6
    Ocena: 93
    W kodzie w/w nie taki parametr pomiaru - sprostowanie

    Rzeczywiście podany wcześniej listing do Bascoma jako miernik częstotliwości działa bo sprawdziłem przetestowałem na Atmedze 16 ale jest pewien błąd podawany wynik jest w impulsach na 1 min, a nie na 1 sek - wiec ten miernik rewelacyjnie nadaje się do mierzenia prędkości obrotowej wentylatorów komputerowych lub podobne sprawy

    Dopisałem to jako sprostowanie
    Pozdrawiam
    Grzesiek

Podsumowanie tematu

✨ Dyskusja dotyczy optymalizacji programu miernika częstotliwości napisanego w Bascom AVR dla mikrokontrolera AT90S2313, którego pamięć jest niewystarczająca (ok. 2,15 kB po kompilacji). Proponowane rozwiązania obejmują uproszczenie programu poprzez rezygnację z pomiaru czasu na rzecz samego pomiaru częstotliwości, zastosowanie opcji optymalizacji kodu w kompilatorze Bascom oraz dostosowanie konfiguracji i podłączenia wyświetlacza LCD. Wskazano, że konieczne może być użycie najnowszej wersji Bascom z ograniczeniem do 4 kB oraz ustawienie fuse bitów na zewnętrzny generator kwarcowy o wysokiej częstotliwości. W dyskusji pojawiły się także sugestie dotyczące pomiaru częstotliwości do około 200 MHz, gdzie zalecane jest zastosowanie preskalera dzielącego sygnał przed wejściem mikrokontrolera. Omówiono również kwestie podłączenia impulsów do portów mikrokontrolera (np. Portd.0, Portd.6) oraz problem błędnych wyników pomiaru, które mogą wynikać z błędnej konfiguracji lub interpretacji czasu pomiaru (wynik w impulsach na minutę zamiast na sekundę). Dołączono przykładowy kod źródłowy oraz wskazówki dotyczące adaptacji programu do oryginalnego schematu urządzenia.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA