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

Obrotomierz na AVR krzaczki na wyświetlaczu przy wysokich ob

08 Mar 2010 13:09 3633 20
  • Poziom 31  
    Witam,
    robię obrotomierz na atmega8. Przy niskich obrotach układ działa raczej dobrze, ale kiedy dodaję gazu to na wyświetlaczu pojawiają się krzaczki. Kiedy obroty znowu spadają układ działa poprawnie.
    Mam kondensator 100n i 2200uf przy procku. Kabel owinięty wokół przewodu WN idzie do timer1 procesora, podłączony bezpośrednio.
    Czego mi brakuje w układzie?
    Co zrobić, żeby wyświetlacz się nie krzaczył?

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    Config Lcd = 16 * 1a
    Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portc.0 , Db6 = Portb.0 , Db7 = Portd.7 , E = Portb.2 , Rs = Portb.1

    Dim Wynik As Long                                           'deklaracja zmiennej

    Config Timer1 = Counter , Edge = Rising                     'konfiguracja Timera do zliczania impulsów
    Do                                                          'program główny - pętla
       Timer1 = 0                                               'zeruj licznik
       Start Timer1                                             'zacznij liczyć
       Wait 1                                                   'zliczaj impulsy przez 1 sekundę
       Stop Timer1                                              'przestań liczyć

       Wynik = Timer1                                           'wynik zliczania w czasie 1s mnożymy przez 60 dla otrzymania wyniku w: obr/min

       Cls                                                      'czyścimy LCD
       Lcd "Obrotomierz"                                        'w pierwszej linii wy?wietlamy napis obrotomierz
       Lowerline                                                'przejście do drugiej linii

       Lcd "P: " ; Wynik                                        'wyświetlamy wynik i jednostkę
    Loop                                                        'koniec pętli głównej programu

    End


    Link
  • Pomocny post
    Poziom 27  
    Mi to wygląda, że wyświetlacz się krzaczy. Niestety ten typ jest podatny na zakłócenia. Pokombinuj z dławikami + kondensatorami ceramicznymi (jakieś 10uH+100n) wstawione na zasilanie i linie danych. Impulsy na wejście licznika też nie powinny być puszczone wprost.
  • Poziom 31  
    Wyświetlacz podłożyłem 2*16 niby jest lepiej ale nadal krzaczy ;/
    Jak powinno wyglądać podłączenie do timera? Jakie elementy dodatkowo zastosować?
  • Poziom 27  
    Optoizolacja jest dobrym wyjściem, ale przydałby się jeszcze jakiś układ kondycjonujący sygnał i wzmacniacz. Zacznij może od tego co narysowałem poniżej. Możesz pokombinować z wartością elementów, zwłaszcza C1.

    Obrotomierz na AVR krzaczki na wyświetlaczu przy wysokich ob

    Zakłócenia mogą wchodzić nie tylko przez timer, dlatego przydałoby się inne wejścia również odfiltrować.
  • Poziom 31  
    Czy do optozolacji nada się PC817? Jakiś schemat?

    Podłączyłem tak jak pokazał Lukasz i działa lepiej, jedynie musiałem kondensator 100n wywalić bo nic nie wskazywał.
  • Poziom 27  
    Zamiast tego 100n możesz spróbować dać 10 lub 1 n. Zrobiłem jeszcze drugi schemat z optoizolacją, który też możesz wypróbować.

    Obrotomierz na AVR krzaczki na wyświetlaczu przy wysokich ob

    Można dać inny wzmacniacz operacyjny.
  • Poziom 19  
    Jak powinien wyglądać kod żeby procesor szybciej liczył impulsy? Bo w tej chwili czeka sekunde, i na podstawie tego wylicza obroty. Chciałbym uzyskać to samo ale żeby działało szybciej.
    Dzieki
  • Poziom 32  
    Po pierwsze zwolnij transmisje do wyświetlacza i daj kondensatorki na linie LCD
    Aby zmierzyc obroty trzeba mierzyć czas miedzy impulsami.
    Zbieranie impulsów z kabla WN jest takim sobie rozwiązaniem. Lepiej znalesc inne dojscie.
  • Poziom 19  
    Chcę spróbować mierzyć impulsy z impulsatora. Do tego optoizolacja i do procesora. Na podstawie tego dopiero mierzyć obroty.
  • Poziom 32  
    Wymiana kabli WN lub dodanie opornika na świecy też by pomogło
    U mie wymiana kabli zdecydowanie pomogła oraz dodatkowo ekranowanie.
  • Poziom 35  
    Tanie chińskie wyświetlacze niestety są czułe na timing.
    Jako że została wykorzystana 4bitowa magistrala, newralgiczne timingi to:
    1) od deaktywacji E do aktywacji E między kolejnymi nibblami tego samego bajtu
    2) czas trwania aktywnego E

    Krzaki na wyświetlaczu mogą wynikać z zakłócenia defaultowych timingów bascoma przez często występujące przerwania.

    asembler napisał:
    Aby zmierzyc obroty trzeba mierzyć czas miedzy impulsami.

    Do czasu. Zauważmy, że z wzrostem f mierzonej rośnie nam również błąd pomiaru. Do pewnej granicy pomiar czasu między impulsami daje bardzo dokładne wyniki, ale powyżej granicy lepszy pomiar da zliczanie impulsów w jednostce czasu. Dla sporych f jednostka czasu może być mała, np. 50ms.
  • Poziom 32  
    nsvinc napisał:

    asembler napisał:
    Aby zmierzyc obroty trzeba mierzyć czas miedzy impulsami.

    Do czasu. Zauważmy, że z wzrostem f mierzonej rośnie nam również błąd pomiaru. Do pewnej granicy pomiar czasu między impulsami daje bardzo dokładne wyniki, ale powyżej granicy lepszy pomiar da zliczanie impulsów w jednostce czasu. Dla sporych f jednostka czasu może być mała, np. 50ms.

    A co stoi na przeszkodzie przy wiekszych obrotach mierzyc czas kilku impulsów ?
    I znowu bedziemy mieli dokładnie.
  • Poziom 19  
    Tak na prawdę to zależy mi na dokładnym mierzeniu impulsów w zakresie 8-10tys obrotów na minute. Poniżej nieistotne.
  • Poziom 32  
    Dokładnym? czyli plus minus ile?
  • Poziom 19  
    Chcę zmierzyć impulsy w zakresie 8-10tys obr/min z dokładnością do 0,5tys ewentualnie do 1tys.
  • Poziom 32  
    No to nie przesadzaj w tym zakresie to ja na słuch ci powiem dokładniej.
    Ale do rzeczy normalnie to dokładnośc 50 ...100 obrotów na minute z odpowiednimprogramen wystarczy i metoda pomiaru okresu trwania impulsu jest wystarczająca nawet za bardzo
  • Poziom 19  
    Czyli zmiany w kodzie to tylko pomiar czasu od impulsu do impulsu za pomocą timerów?
  • Poziom 32  
    Jeszcze trzeba przewidziec brak impulsu czyli jak nie ma obrotów, to przydałoby sie taką sytuacje wykrywać i wynik zerować "ręcznie" po zadanym czasie. To samo mozna zrobic żeby procek zapamietał chwilowe maksymalne obroty, bo z tego co słysze nieźle zaczną zaraz przgazowywać motocykliści.
  • Poziom 19  
    A żeby uprościć sprawę, można użyć polecenia PULSEIN? Ma rozdzielczość 10us co wystarczy no i mierzy okres od razu.
    Lub czy żeby przyspieszyć wyświetlanie wyniku nie mogę po prostu odczekać krótszy czas?
    np.
    Timer0 =1
    Start Timer0
    waitms 100
    Stop Timer0

    Wynik = Timer0*600
  • Poziom 19  
    Mam jeszcze pytanie czy jak bym chciał pobrać sinusa z impulsator i liczyć z tego obroty to mógłbym zastosować transoptor z bramką schmitta w środku? Czy to da mi prostokąt żeby procek mógł spokojnie liczyć sobie obroty?