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

Miernik obrotów wentylatora - obrotomierz

21 Lis 2009 15:14 8598 12
  • Poziom 11  
    Witam!
    Na wstępie dodam, że jestem baaardzo początkującym elektronikiem. Z mikroprocesorami nie miałem jak dotąd nic wspólnego, dodatkowo nie znam żadnego języka przydatnego elektronikowi (C, BASCOM, etc.). Dlatego też proszę o wyrozumiałość i nie zasypywanie mnie trudnymi terminami ;)
    Przejdźmy do rzeczy. W końcu nastała potrzeba "skombinowania" odpowiedniego obrotomierza.

    Z tego co się dowiedziałem to potrzeba mi:
    - wyświetlacz LCD zgodny z HD44780
    - ATMEGA8
    - i cała reszta

    Od około tygodnia męczę się z odnalezieniem schematów oraz odpowiedniego kodu. W końcu znalazłem coś takiego:
    Miernik obrotów wentylatora - obrotomierz

    Do tego należy oczywiście dodać układ zasilania procka i 2 potencjometry (kontrast + podświetlenie) - to wiem.

    Impulsy PWM z wentylatorów (wentylatorki komputerowe na 3pin) zamierzałbym podłączyć do nóżki 11. PD5 (T1).

    Tutaj mam kod (w miarę na szczęście zrozumiały) - nie mój, żeby nie było:
    Code:
    http://www.portalnaukowy.republika.pl/pliki_dp/obrotomierz.bas

    Zapewne trzeba zmienić $regfile "attiny2313.dat" na $regfile "atmega8-xxxx" (chyba)

    Informacje, które chcę pozyskać:
    - czy ma jakieś znaczenie to, czy Data Bus Line z LCD podłączę do PB lub PC oraz sterowanie do PD lub PB? Spotkałem się z wieloma schematami i praktycznie na każdym było coś innego....
    - czy układ będzie działał? (jakie błędy zawiera, etc.)
    - dobre rady ;)
  • Poziom 14  
    1) Musisz tylko zmienić odpowiednie porty w programie i możesz podłączać gdzie chcesz. Uważaj bo PD5 to jest wejście dla timera 1 i przy obrotomierzu nie możesz go wykorzystywać.
    2) Zależy od ustawień BASCOMA. Brakuje kilku linijek w programie. Podłączenie wyświetlacza. Dobre, ale nie najlepsze.
    3) RW wyświetlacza podpiąć do masy. Rzadko się wykorzystuje ten pin w amatorskich konstrukcjach.



    Poprawiony kod programu
    Code:
    $regfile = "m8def.dat"                                      'atmega8
    
    $crystal = 1000000                                          ' 1MHz

    Config Portb = Output
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.2
    Config Lcd = 16 * 2                                         'wyświetlacz 2 linie po 16 znaków
    Cursor Off                                                  'wyłączenie kursora

    Dim Wynik As Long                                           'deklaracja zmiennej

    Config Timer1 = Counter , Edge = Rising                     'konfiguracja Timera do zliczania impulsów

    Cls : Lcd "   Obrotomierz" : Wait 1                         'powitanie

    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 * 60                                      '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 ; " obr/min"                           'wyświetlamy wynik i jednostkę
    Loop                                                        'koniec pętli głównej programu

    End                                                         'koniec programu


    //EDIT: Dopiero przeczytałem, że to ma być do wiatraków komputerowych. Jeżeli chcesz to zrobić na barierze świetlnej to Wynik musisz podzielić przez liczbę "łopat" wiatraka.

    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.2

    Ta linia oznacza podłączenie wyświetlacza, czyli DB4 do pinu 4 portu D i tak dalej.

    Poza tym opisz szczegóły swojej konstrukcji. Czyli jak chcesz dawać te impulsy.

    Masz tutaj schemat jak wszystko podłączyć. Impulsy podajesz tak: -----+-----+-----+----+ albo jak ci wygodniej to tak ++++-++++-++++-++++-++++- tylko r1 wtedy do VCC podłączasz, a nie do GND

    Miernik obrotów wentylatora - obrotomierz
  • Poziom 11  
    Cóż, ilość obrotów chcę mierzyć, jakby to powiedzieć, bezpośrednio. To znaczy, że układ wentylatora wyposażony jest w tzw. impulsator.

    Wtyczka 3pin:
    - czerwony kabel (+12V)
    - żółty - signal (generuje impulsy co jeden obrót wentylatora)
    - czarny - GND

    I to właśnie ów żółty kabel chciałbym połączyć bezpośrednio do procesora.

    A instrukcja:
    - zliczanie impulsów przez 1s i później mnożenie x60 (by dać wynik na minutę)


    EDIT:
    Cytat:
    Poza tym opisz szczegóły swojej konstrukcji. Czyli jak chcesz dawać te impulsy.

    Masz tutaj schemat jak wszystko podłączyć. Impulsy podajesz tak: -----+-----+-----+----+ albo jak ci wygodniej to tak ++++-++++-++++-++++-++++- tylko r1 wtedy do VCC podłączasz, a nie do GND


    Niestety nie wiem. Nie mam na to wpływu, a informacji znaleźć nie mogę...
  • Poziom 14  
    To po prostu bez r1. Jeżeli żółty generuje sygnał co obrót to będzie działać. Ale mnie się wydaje, że na żółty podaje się sygnał ;] Układ możesz zrobić jako w stęp do mikrokontrolerów ;]
  • Poziom 11  
    Taki mam zamiar ;)

    Dziękuję za pomoc - w razie problemów coś tu napiszę.

    Pozdrawiam!

    Edit:
    Mam jeszcze pytanie - w jakim programie został wykonany schemat układu?
  • Poziom 11  
    Chciałbym dowiedzieć się jeszcze czy w tym układzie nie byłby konieczny/przydatny rezonator kwarcowy? Z tego co zauważyłem to na większości układach właśnie występuje.

    Jeśli tak to jakom powinienem dobrać częstotliwość?
  • Poziom 14  
    Wewnętrzny rezonator atmegi w zupełności wystarcza.
  • Poziom 11  
    Ile może wynosić różnica podczas pomiaru lun inaczej - jaka jest tolerancja?
  • Poziom 11  
    Trochę czasu minęło, ale zrobiłem ten projekt i... niestety, nie wiedzieć czemu, nie działa. Wyświetlacz pokazuje wszystko jak być powinno, ale układ nie zlicza impulsów. Sprawdzałem na 3 dostępnych mi wentylatorach i zero reakcji. Programowałem kilka procków (całość zrobiona jednak na Attiny2313) i również nie działa. Aczkolwiek kod programu jest raczej dobry...

    Proszę o pomoc!

    PS. Kable sprawdziłem - wszystko styka i impulsy idą do procka.
  • Poziom 36  
    DJ Danielus napisał:
    Trochę czasu minęło, ale zrobiłem ten projekt i... niestety, nie wiedzieć czemu, nie działa.
    A wsad do procesora wziąłeś skąd, może od innego typu procka, może program obsługuje inne wejścia...kilka elementów i nie działa nie wiedzieć czemu. Masz źle skonfigurowany/ napisany program, nie wiesz co zrobić, ktoś napisze program za ciebie? Jak się nie umie pisać programów to można bezmyślnie skopiować idealnie działającego gotowca, nic poza tym....,,kod programu jest raczej dobry''...
  • Poziom 11  
    Kod programu jest wyżej, ale podam jeszcze raz (tak jaki jest u mnie):

    Code:
    $regfile = "attiny2313def.dat"                    'attiny2313
    
    $crystal = 1000000                                          ' 1MHz

    Config Portb = Output
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.0 , Rs = Portb.2
    Config Lcd = 16 * 2                                         'wyświetlacz 2 linie po 16 znaków
    Cursor Off                                                  'wyłączenie kursora

    Dim Wynik As Long                                           'deklaracja zmiennej

    Config Timer1 = Counter , Edge = Rising                     'konfiguracja Timera do zliczania impulsów

    Cls : Lcd "   Obrotomierz" : Wait 1                         'powitanie

    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 * 60                                      '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 ; " obr/min"                           'wyświetlamy wynik i jednostkę
    Loop                                                        'koniec pętli głównej programu

    End                                                         'koniec programu
  • Poziom 30  
    Do pełni szczęścia podaj dokładny schemat twojego urządzenia a coś wymyślimy :)

    Dodano po 5 [minuty]:

    Mogę się mylić bo nie mam przy sobie materiałów ,ale dodaj przed DO
    Code:

    Enable Interrupts
    Enable Timer1

    Jak nie pomoże to sprawdzę dokładnie.