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

[AVR MEGA8][BASCOM/C] 1 Projekt - sterownik wentylatora

krzysio16 29 Kwi 2009 18:22 5906 14
  • #1 6471302
    krzysio16
    Poziom 10  
    Cześć!

    To jest mój pierwszy projekt jaki chce wykonać od początku do końca (prawie) sam. Do tej pory składałem lub modyfikowałem gotowe kity i cudze rozwiązania więc moja wiedza jest trochę mizerna ale może niedługo się to zmieni :) Mam opanowane podstawy języka c (lecz nigdy go nie używałem podczas "tuningowania" gotowców). Bascoma też ogarniam, lecz z helpem.

    Do rzeczy:

    Chciałbym zbudować regulator obrotów 3 - 4 wentylatorów. Regulator ma sterować prędkościa obrotów wentylatorów automatycznie lub manualnie (każdy wentylator z osobna). W datasheecie atmegi wyczytałem że ma tylko 3 sprzętowe kanały PWM więc 1 port musiał by być zrobiony programowo. Żeby nie było zbyt prosto prędkość wentylatorów ma być ustalana na podstawie odczytu temperatury z DS18B20. Jeszcze bardziej komplikując niech temperatura będzie wyświetlana na LCD 2x16 oraz prędkości obrotowe wentylatorów.

    Oto schemat ideowy oraz PCB.
    [AVR MEGA8][BASCOM/C] 1 Projekt - sterownik wentylatora

    [AVR MEGA8][BASCOM/C] 1 Projekt - sterownik wentylatora

    Złącze 14 pinowe prowadzi do płytki na której będzie wyświetlacz + 3 przyciski.

    I teraz kilka pytań:

    Jak w C ustawić we/wy? W necie jest cała masa rożnych sposobów, które nie zrozumiem (set_bit(xxx) clear_bit(xxx), sbi cbi #define SET_BIT(r,x) r|=_BV(x) itd...)
    W bascomie jest to bardzo proste ale postanowiłem robić to w C.


    W czy mogę np porty wyświetlacza podpiąć np: db7 - PIND.1 db6 PINC.3 (dowolnie tak aby jeszcze bardziej uprościć ścieżki na płytce PCB?)
  • #2 6471478
    janbernat
    Poziom 38  
    Nie masz gniazda programatora ISP.
    Jeśli będziesz to programował w zewnętrznym programatorze to mogło by tak być.
    Ale procesor wytrzyma tyko jakieś 50 operacji przekładania z podstawki do podstawki-potem urwie mu się jakaś nóżka.
    A zmian w programie będzie więcej.
    Ścieżki masy powinny pokryć całą wolną powierzchnię płytki.
    Zasilanie możliwie szerokimi ścieżkami.
    Co to jest U2?
  • #3 6471544
    krzysio16
    Poziom 10  
    OK dostawię złącze dla programatora. Mam avr-doppera z podstawką testową i chciałem go przekładać. ale masz w 100% racje z tymi urwanymi nózkami :)


    Ten układ to driver ULN2803

    Masę i grubsze ścieżki zasilania też zrobię.
  • #4 6471560
    Menuet
    Poziom 19  
    Witam
    Co do schematu to myślę, że jednak układ nie będzie działał według Twoich założeń, gdyż pomiar prędkości wiatraków musiałbyś zrealizować najlepiej na jakimś liczniku w Atmedze, albo generując jakieś przerwanie, więc podłączenie impulsów z hallotronu z wiatraka pod dowolny pin Atmegi chyba nie jest najlepszym rozwiązaniem. W związku z tym, że tak jak piszesz masz trzy kanały PWM a jeden chciałbyś zrobić programowo to myślę, że prościej by było jakby wszystkie były zrobione programowo, wtedy nie użyjesz dwóch timerów, ale jeden.
    Według mnie piny z wyświetlacza możesz podłączyć w zasadzie jak chcesz, a potem napisać obsługę do tak podłączonego wyświetlacza.

    Aaa i jeszcze takie małe pytanko do autora, chcesz regulować 4 wiatraki a masz jeden czujnik temperatury, to czy wszystkie będą się tak samo kręcić, czy może zamierzasz zastosować 4 czujniki?

    Pozdrawiam, Menuet.
  • #5 6471681
    krzysio16
    Poziom 10  
    Nie napisałem do czego to ma służyć dokładnie. Denerwuje mnie hałas dobywający się z mojego komputera i chcioałem go uciszyć bardzo niskimi nakładami finansowymi. Chce zamontować w obudowie wentylatory 12cm ( z przodu i z tyłu obudowy) I te 2 wiatraki mają działać tak że przedni wentylator kręci się szybciej wdmuchując chłodniejsze powietrze tylni wolniej wydmuchując powietrze (jest bardzo blisko radiatora na procku). Wentylator na radiatorze procesora likwiduje bo jest mały i generuje wielki hałas. Wraz ze wzrostem temperatury wentylator tylni przyspiesza do prędkości wentylatora przedniego a później oba rozpędzają się w jednakowym tempie. I te wentylatory będą regulowane przez wskazania czujnika temperatury.
    2 kolejne wentylatory będą ręcznie ustawiane (po starcie komputera 100% prędkości aby wystartowały, a później do 50% redukcja prędkości) i ręczni ustawiane wg moich upodobań (1 wentylator jest w zasilaczu drugi na karcie graficznej). W późniejszym czasie będę mógł dostawić 2 kolejne dallasy równolegle do tego pierwszego i badać temperaturę na GPU i na radiatorach zasilacza.


    A opcja manualna to taka że wszystkie wiatraki reguluje sam ręcznie.
  • #6 6472214
    janbernat
    Poziom 38  
    "Wentylator na radiatorze procesora likwiduje bo jest mały"
    Oj, uważaj bo komputer Ci się zaraz zawiesi.
    On jest mały-ale procesor się grzeje.
    Fajne zadanie treningowe-ale znajdź coś o przewodności i pojemności termicznej Rth_jc, Rth_ja.
  • #7 6472859
    krzysio16
    Poziom 10  
    Jeżeli nie zadziała to będe miał chociaż satysfakcje że zrobiłem regulator obrotów wentylatora :) (Za mały w w sensie ze słabo dmucha i szybko się kreci. wentylator 12 cm pompuje dużo więcej powietrza przy dożo niższych obrotach.)
  • #8 6473197
    elektryk
    Poziom 42  
    Nie wiem jaką masz koncepcję mechaniczną, ale lepiej wydrukuj sobie układ na papierze i poprzymierzaj elementy. Zamontowanie przełączników na płytce jest conajmniej dziwne.
  • #9 6474046
    Kelas
    Poziom 18  
    Mozesz tez zmostkowac wyjscia U2 i uzyskasz wiekszy maksymalny prad wiatraka.
  • #10 6482512
    krzysio16
    Poziom 10  
    Płytki PCB już robiłem. Z tym nie będzie problemu elementy będą pasować. Będą 2 płytki płytka wyświetlacza i przyciski oraz płytka główna. Ktoś pomoże w sprawie ustawienia portów I/O w C? Lub wytłumaczy to na chłopski rozum?
  • #11 6493239
    krzysio16
    Poziom 10  
    Mam poskładany układ. W bascomie chciałem sprawdzić czy wszystko funkcjonuje poprawnie i tu pojawił się problem.

    Wyswietlacz LCD nie działa nie wyświetla nic;/ Próbowałem potencjometrem ustawić kontrast ale nic to nie daje.

    Więc postanowiłem sprawdzić czy wszyskie wyprowadzenia są poprawnie podłączenia wyświetlacza są poprawnie podłączone wgrałem program
    
    Config Portd = &B11111111
              Portd = &B11111111 
    Do
    Portd = &B11111111
    Waitms 1000
    Waitms 1000
    Toggle Portd
    Waitms 1000
    Waitms 1000
    Loop
    End
    


    I sprawdziłem miernikiem czy zmieniają się stany na odpowiednich portach przy wyświetlaczu. Wszystko jest ok.

    Oto program który miał przetestować wyświetlacz.

    
    $regfile = "m8def.dat"                                      ' specify the used micro
    
    $crystal = 8000000                                          ' used crystal frequency
    
    
    
    
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.2 , E = Portd.0 , Rs = Portd.1
    
    Rem Używając tej instrukcji można zmienić domyślne ustawienia w opcjach kompilatora
    
    Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza
    'inne wartości: 16 * 4 , 20 * 4, 20 * 2 , 16 * 1a
    'Nie umieszczenie tej instrukcji spowoduje że wybrany będzie wyświetlacz 16 * 2
    '16 * 1a to wyświetlacz 2 linie po 8 znaków z liniowym odwzorowaniem pamięci
    
    '$LCD = address uaktywnia tryb komunikacji z wyświetlaczem za pomocą
    
    '       szyny danych dostępnej w systemach z pamięcią zewnętrzną.
    Dim A As Byte
    
    Cls                                                         'kasujemy LCD
    Lcd "Witaj swiecie"                                         'wydrukujemy tekst w górnej linii
    Wait 1
    Lowerline                                                   'wybieramy drugą linię
    Wait 1
    Lcd "  Przesuwamy  "                                        'wydrukujemy to w drugiej linii
    
    Wait 1
    
    For A = 1 To 10
       Shiftlcd Right                                           'przesuniemy tekst w prawo
       Wait 1                                                   'czekamy aż wykona
    Next
    
    For A = 1 To 10
       Shiftlcd Left                                            'przesuniemy tekst w lewo
       Wait 1                                                   'czekamy aż wykona
    Next
    
    Locate 2 , 1                                                'ustawiamy pozycje kursora
    
    Lcd "*"                                                     'wydrukujemy to
    Wait 1                                                      'czekamy aż wykona
    
    
    Shiftcursor Right                                           'przesuniemy kursor w prawo
    Lcd "@"                                                     'drukujemy to
    Wait 1                                                      'czekamy aż wykona
    
    Home Upper                                                  'wybieramy 1 linię i wracamy na początek
    
    Lcd "Zastapiono"                                            'zastępujemy tekst
    Wait 1                                                      'czekamy
    
    Cursor Off Noblink                                          'chowamy kursor
    Wait 1                                                      'czekamy
    Cursor On Blink                                             'pokazujemy kursor
    
    Wait 1                                                      'czekamy
    Display Off                                                 'wyłączamy wyświetlacz
    
    Wait 1                                                      'czekamy
    Display On                                                  'i włączamy z powrotem
    
    
    
    'Teraz zdefiniujemy znak użytkownika
    'pierwszy bajt to kod znaku (0-7)
    'reszta to postać znaku
    'Użyj narzędzia LCD Designer
    
    Deflcdchar 1 , 225 , 227 , 226 , 226 , 226 , 242 , 234 , 228
    Deflcdchar 0 , 240 , 224 , 224 , 255 , 254 , 252 , 248 , 240
    
    Cls                                                         'wybieramy Data RAM
    Rem Jest szczególnie ważne by po zdefiniowaniu znaków wykonać instrukcję
    Rem CLS, ponieważ przełączy to kontroler wyświetlacza na Data RAM
    
    Lcd Chr(0) ; Chr(1)                                         'drukujemy zdefiniowane znaki
    
    '---------- Teraz użyjemy wewnętrznej procedury ------------
    _temp1 = 1                                                  'dana do rejestru ACC
    
    Rcall _write_lcd                                            'wyświetlamy
    
    End
    

    to programik z helpa.

    Podłączenie LCD
    [AVR MEGA8][BASCOM/C] 1 Projekt - sterownik wentylatora
    [AVR MEGA8][BASCOM/C] 1 Projekt - sterownik wentylatora

    Dodano po 4 [godziny] 26 [minuty]:

    OK znalazłem problem. PRka była uszkodzona. Powiedzcie mi co to może być:
    [AVR MEGA8][BASCOM/C] 1 Projekt - sterownik wentylatora


    5 i 7 znak w od prawej strony w obu liniach nie są pełne. To uszkodzony LCD? Jeżeli tak czy to możliwe że ja go uszkodziłem programem którym sprawdzałem podłączenie uK z LCD?
  • #12 6494864
    marekos
    Poziom 16  
    Brak styku na gumce przewodzącej wyświetlacza spróbuj docisnąć tą metalową ramke powinno pomóc.

    Jak pomoże to podłoż kawałek kartki papieru złożonej na dwa lub cztery po stronie bottom pomiędzy zagiętą blszkę ramki a laminat.
  • #13 6495046
    krzysio16
    Poziom 10  
    Nie pomaga ;/
  • #14 6498827
    Mariuszek15
    Poziom 24  
    krzysio16 Wyświetl coś na LCD i zobacz co się stanie wtedy... Jak źle wyświetli znaki na LCD to prawdopodobnie uszkodzony układ scalony odpowiedzialny za sterowanie wyświetlacza ciekłokrystalicznego...
  • #15 6534950
    krzysio16
    Poziom 10  
    Czy wyświetlacz się samoczynnie psuje? Na zdjęciu 5 6 i 7 pole w obydwu wierszach było uszkodzone. Dziś włączyłem układ i doszło kolejne uszkodzenie 8 znaku od prawej. Pole ma 8x5 pixeli (chyba) a w tym 8 znaku świeca się tylko 2 pierwsze kolumny...
REKLAMA