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

[ATtiny2313][C] Alternatywa dla przycisku - LPT

CSun 09 Gru 2008 12:19 3621 31
  • #1 5836905
    CSun
    Poziom 11  
    Witam.

    Dużo szukałem i dalej szukam odnośnie wejść w ATtiny2313 i z tego co znalazłem wynika, że są 3 stanowe clear/set/unset.

    Więc w przypadku zwarcia z masą mamy CLEAR, zwarcia z Vcc mamy SET, a jeśli 'wisi w powietrzu' to jest unset.

    Ale chciałbym stworzyć alternatywne sterowanie przy pomocy LPT.

    Pytanie:
    Chciałbym się dowiedzieć, czy połączenie portu LPT np. DATA0 z wejściem uC np. PIND(0) da taki rezultat, że jeśli na DATA0 będzie stan niski to odczytam na PIND(0) clear, a jak wysoki to set?

    Pytam bo oczekuje jeszcze na uC, a projektuje sobie układ więc już teraz zbieram informacje.
    Jak bym miał ten uC to bym sam to zbadał, ale jako że nie mam proszę was o pomoc.

    Pozdrawiam!
  • #2 5836965
    GienekS
    Poziom 32  
    Generalnie musisz rozróżnić stan wejścia alby wyjścia linii danego portu. Do tego służy rejestr kierunku, czyli w przypadku portu D jest to rejestr DDRD
  • Pomocny post
    #3 5837014
    Dave_Masters
    Poziom 14  
    Tak jak wspomniał GienekS musisz zwrócić uwagę czy dany pin jest skonfigurowany jako wejście (DDRX.n = 0) czy wyjście (DDRX.n = 1) gdzie X to literka portu (ATtiny2313 posiada PORTA, PORTB i PORTD) a "n" to numer pinu.
    LPT ma poziomy 0-5V, dlatego takim napięciem musisz sterować uC. Generalnie można pozbyć sie stanów wiszących poprzez podpięcie rezystora podciągającego do masy (pull-down, na wejściu masz 0) lub podciągnięcie do zasilania (pull-up, przy czym tutaj możesz użyć wewnętrznych rezystorów)
    Aby włączyć podciąganie do zasilania portu B musisz:
    
    DDRB = 0x00; //port B jako wejście
    PORTB = 0xFF; // wlaczenie wszystkich rezystorow podciagajacych.
    //odczyt danych z portu:
    uint8_t zmienna = PINB;
    

    I teraz jeśli masz:
    a) odłączony kabelek to zmienna = 0xFF;
    b) podłączony kabelek to zmienna = stan_linii_LPT
    oczywiście tych podłączonych ;)
  • #4 5837412
    CSun
    Poziom 11  
    Dzięki wielkie :) To pomogło mi zrozumieć tą kwestię.

    Czyli to by działało tak jak na rysunku?

    [ATtiny2313][C] Alternatywa dla przycisku - LPT

    Pozdrawiam!
  • #5 5837425
    Dave_Masters
    Poziom 14  
    Tak, przy czym B0 i B1 powinieneś oznaczyć jako oporniki bo tak działają wew. pull-upy, a nie jako włączniki, ale mniej więcej rozumiem co chciałeś pokazać za ich pomocą :)
    Jakby co to pisz, postaram się pomóc.
  • #6 5837439
    CSun
    Poziom 11  
    To znaczy ze powinien być rezystor i przycisk równolegle?

    1* Przełącznik nie przewodzi to wtedy rezystor przewodzi tylko tyle by utrzymać stan 0.
    2* Przełącznik przewodzi i mamy stan 1.

    Tak? :)

    Dodam jeszcze, że LPT ma być używane jako opcja, generalnie ma się odbywać sterowanie przyciskami, a w razie jak by się komuś zachciało to podłączamy pod LPT i komp ma sterować :)

    O, a skoro mówimy o rezystorach to dobry by był np. 1kΩ?
  • Pomocny post
    #7 5837570
    Dr.Vee
    VIP Zasłużony dla elektroda
    Trzeba było tak pisać od razu...

    Zrób tak:
    1) rezystor R1 10k od VCC do portu
    2) przycisk od portu do GND
    3) rezystor R2 470 od portu do pinu LPT.

    Teraz gdy nic nie jest podłączone, port jest w stanie wysokim.
    Zwarcie przycisku powoduje, że port będzie w stanie niskim, przez rezystor R1 płynie prąd 0.5mA.
    Wysterowanie LPT poziomem niskim - płynie prąd < 0.5mA, na porcie jest stan niski (ok. 0,2V).
    Najgorzej jest, gdy sterujesz LPT = 5V i zewrzesz przycisk, wtedy przez R2 płynie prąd 10mA.

    Pozdrawiam,
    Dr.Vee
  • #8 5837706
    CSun
    Poziom 11  
    Czyli tak?

    [ATtiny2313][C] Alternatywa dla przycisku - LPT

    UWAGA: line to jest wynik funkcji bit_is_clear() !
    a dla przycisku 1 to załączony, 0 to rozłącznony

    Swoją drogą... nie po to będzie sterowanie LPT, aby jeszcze tam paluchy pchać do przycisków :P
  • #9 5837935
    Dave_Masters
    Poziom 14  
    CSun napisał:

    Dodam jeszcze, że LPT ma być używane jako opcja, generalnie ma się odbywać sterowanie przyciskami, a w razie jak by się komuś zachciało to podłączamy pod LPT i komp ma sterować :)

    O, a skoro mówimy o rezystorach to dobry by był np. 1kΩ?


    Tak jak mówi Vee.
    Trzeba było tak od razu ;)
    Co do tego rezystora podciągającego...
    Jeżeli włączysz wewnętrzne (DDRB=0x00,PORTB=0xFF) to możesz sobie darować zewnętrzne - dodatkowo odpada Ci problem jaką mają mieć wartość - Atmel gwarantuje, że "w sam raz".
    Czyli wystarczy, że zostawisz włącznik zwierający do masy.
  • #10 5837967
    CSun
    Poziom 11  
    Wybaczcie początkową nieścisłość ;)

    Czyli układ zostaje taki jak narysowany z usunięciem połączenia Vcc - PORT i drugiego opornika :)

    Jeszcze raz dzięki i pozdrawiam! :)
  • #11 5838009
    Dave_Masters
    Poziom 14  
    Tak, dokładnie. Przy czym pamiętaj, że musisz zasilać uC z 5V.
  • #12 5838033
    CSun
    Poziom 11  
    Mam takie pytanie skoro nawinęło się tu o zasilaniu.

    Mam zasilacz od LCD 12V 6A i chciałbym z niego zasilać 300LED (zjedzą prawie całą dostępną moc), ale również uC, a zatem mogę przez rezystor 470 zrobić Vcc (5V) i nie spalić uC?

    Czy w tym wypadku znacznie rozsądniej było by mieć jakiś mały oddzielny zasilacz do uC? (dodam, że wolał bym mieć to na jednym)
  • #13 5838076
    Dave_Masters
    Poziom 14  
    Z katalogu 2313
    • Typical Power Consumption
    – Active Mode
    1 MHz, 1.8V: 230 μA
    32 kHz, 1.8V: 20 μA (including oscillator)
    – Power-down Mode
    < 0.1 μA at 1.8V
    Czyli przy 5V będzie to kilka mA + prąd portów - jeżeli z tego zasilacza zostanie Ci 100-200 mA to zrób odczep od 12V i podłącz do scalonego stabilizatora 5V (popularny 7805 - powinien wystarczyć w obudowie TO92 - <1A, ale jak masz miejsce to daj w TO220 - 1A)
    Ten zasilacz jest już stabilizowany? Raczej tak, to możesz sobie podarować kondensatory filtrujące.
    [ATtiny2313][C] Alternatywa dla przycisku - LPT
    Jeśli nie stabilizowany to powinieneś podłączyć analogicznie jak na obrazku, ale według noty aplikacyjnej 7805 (czyli z kondensatorami).
  • #14 5838078
    Dr.Vee
    VIP Zasłużony dla elektroda
    Nie kombinuj i dołóż stabilizator dla uC. LM78L05 + kilka kondensatorów i masz tzw. święty spokój - a tak usmażysz procka (np. przy włączaniu urządzenia, gdy LEDy nie będą pobierały jeszcze żadnego prądu) i nie będziesz nawet wiedział co się stało :)

    Rezystory podciągające w uC są rzędu 20-50k, więc też będą ok.

    Pozdrawiam,
    Dr.Vee
  • #15 5838256
    CSun
    Poziom 11  
    LM78L05

    Takie coś znalazłem:
    [ATtiny2313][C] Alternatywa dla przycisku - LPT

    podają parametry:

    Output Current 100 mA
    Output Voltage 5 Volt
    Input Min Voltage 6.7, 7 Volt
    Input Max Voltage 35 Volt
    Adjustable Output No

    więc myślę, że powinno się bez problemu nadać :)
  • #16 5838258
    Dave_Masters
    Poziom 14  
    Nie jestem elektronikiem, ale powinno być ok.


    A zasilacz jest stabilizowany?
  • #17 5838839
    CSun
    Poziom 11  
    Skoro jest dedykowany do ekranów LCD to myślę, że musi być...
  • #18 5838900
    Dave_Masters
    Poziom 14  
    Skoro tak to wartości tych kondensatorów nie są krytyczne, mają wygładzać napięcie które już jest wygładzone, więc nie powinno być problemu jak ich nie dasz.
  • #19 5838939
    CSun
    Poziom 11  
    W adnotacji napisali, że pierwszy jest potrzebny jeżeli zasilacz jest dalej niż 3 stopy od układu (u mnie tak) więc dodam ;), w końcu nie zaszkodzi :)

    //-------------------

    Ponadto:

    Chcę jako wyjścia z uC wykorzystać generatory PWM (2kHz), które mają sterować 3 kanałami - po 2A każdy. Wymyśliłem jak zastosować układ ULN2003 do sterowania pojedynczym kanałem (jeden układ na kanał), ale myślę, że to nie jest optymalne rozwiązanie. Zatem chciałem zapytać czy tranzystor IRFZ44 by się tutaj nadał do takiej częstotliwości? (sterowany bezpośrednio z wyjścia PWM z uC). Chyba, że są jakieś które się lepiej nadają do tego?
  • #20 5839254
    Dave_Masters
    Poziom 14  
    Jeżeli parametry prądowe tego tranzystora Ci wystarczają to te 2 kHz to prawie prąd stały ;)
    Żeby tu chodziło o 2 MHz to inna bajka.
    Nie znalazłem w datasheet częstotliwości granicznej tego tranzystora ale jest porównanie parametrów dla 1MHz, więc te 2kHz to dla niego żaden problem.
  • #21 5839452
    CSun
    Poziom 11  
    Dłubie w datasheet'ach i nie mogę przyuważyć wartości napięcia sterowania - napięcie przy jakim tranzystor jest maksymalnie otwarty. Jak to się nazywa?

    Skąd inąd wiem, że IRFZ44 ma napięcie maksymalnego otwarcia coś koło 12V, a mi potrzeba w okolicach 5V :)
  • #22 5839521
    Dr.Vee
    VIP Zasłużony dla elektroda
    Jeśli chcesz sterować ledy to po co Ci 2kHz? Lepiej dmuchać na zimne, daj f = 100Hz i na pewno nie będzie widać żadnego migania.

    Pamiętaj, że z portu uC możesz wziąć tylko 20mA, a to niedużo jak na przeładowywanie bramki MOSFETa. Może się okazać, że samo otwieranie/zamykanie FETa zajmie Ci kilka mikrosekund, a w tym czasie jedyne co MOSFET robi, to się grzeje...

    Pozdrawiam,
    Dr.Vee
  • #23 5839666
    CSun
    Poziom 11  
    No ok. zejdę do 488Hz bo 100 to dla mnie za mało (przy 'machaniu' oczami widać wiele punktów).

    A czy to prawda, że timer1 ustawiony jako PWM + Phase działa o połowę wolniej (ma o połowę mniejszą częstotliwość) od timer0 ustawionego jako FAST PWM Correct?

    Zatem czy takie tranzystory były by lepsze: BD243C lub BDX53C?
  • #24 5839750
    Dave_Masters
    Poziom 14  
    Tak, dzieje się tak ze względu, że w trybie fast PWM liczniki liczy od BOTTOM do TOP i się zeruje (podobnie jak w trybie CTC), a w trybie phase correct PWM liczy od BOTTOM do TOP, a następnie od TOP do BOTTOM. Czyli wykonuje dokładnie 2 razy tyle operacji.

    Co do BD243C jego częstotliwość graniczna to 3MHz.
    W katalogu określają go jako "tranzystor ogólnego przeznaczenia do wzmacniaczy mocy i układów przełączających"
    Do tej aplikacji wystarczy dowolny tranzystor bipolarny który spełnia Twoje wymagania mocowe.
  • #25 5839794
    CSun
    Poziom 11  
    Czy mogę zatem ustawić timer1 w tryb FAST PWM, 8BIT, aby uniknąć zmniejszenia częstotliwości?
  • #26 5839821
    Dr.Vee
    VIP Zasłużony dla elektroda
    Kolego CSun, w datasheetach tych tranzystorów jest wszystko napisane...

    Dla prądu kolektora 3A gwarantowane beta to zaledwie 15, musiałbyś mieć Ib > 150mA. A Uce przy Ic = 2A byłoby > 1V, co daje już 2W strat na tranzystorze = radiator... MOSFET jest tu dużo lepszy, im mniejsza częstotliwość tym lepiej.

    Poczytaj lepiej dział Zasilanie układów elektronicznych, tam znajdziesz ekspertów od sterowania MOSFETami :)

    Pozdrawiam,
    Dr.Vee
  • #27 5839828
    Dave_Masters
    Poziom 14  
    Powiem szczerze, że nie używałem timerów do PWM, ale jeżeli Ty chcesz osiągnąć 488 Hz to nie jest istotne jakiego trybu użyjesz, wystarczy zdecydować się na najprostszy dla Ciebie i policzyć dla niego odpowiednie parametry. Nawet dla wewnętrznego oscylatora 1MHz Twoja częstotliwość nie zbliża się do granicznej...
  • #28 5839865
    CSun
    Poziom 11  
    Racja... nie do końca rozumiem te ds'y, ale chyba po prostu muszę się douczyć o tranzystorach... już nie pytam o to tutaj :)

    Właśnie z 1MHz wyciągnąłem 488Hz dla timer0 i chciałbym mieć tyle samo mieć na timer1 ;)
  • #29 5839915
    Dave_Masters
    Poziom 14  
    Pamiętaj tylko, że Timer1 jest 16bitowy, ale jak dasz taki sam tryb i wartości TOP i BOTTOM to nie ma problemu, żeby osiągnąć tą samą częstotliwość (w drugą stronę już niekoniecznie z 16bit->8bit).
  • #30 5839932
    Dr.Vee
    VIP Zasłużony dla elektroda
    W trybie fast PWM timer1 może działać w 8, 9 lub 10-bitowym trybie. Skoro dla timera0 udało Ci się dobrać preskaler do 488 Hz, to na timerze1 będzie dokładnie tak samo...

    No chyba, że użyłeś trybu phase correct - używasz wtedy phase correct dla PWM timera1 i ustawiasz sobie wartość TOP za pomocą rejestru ICR1 - zostają OCR1A i OCR1B na generowanie PWM.

    Pozdrawiam,
    Dr.Vee
REKLAMA