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

[ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?

pawel1730 16 Wrz 2013 19:42 10557 82
  • #1 12743327
    pawel1730
    Poziom 15  
    Zaprojektowałem dwie płytki:
    -pierwsza z wyświetlaczami LED + kilkoma diodami LED, którymi mam zamiar sterować przez 3 piny(MOSI, SCK, SD), złączka w lewym dolnym rogu pierwszego schematu. A działało by to tak, że przesyłam 32 bitową liczbę do szeregowo połączonych SCT2024. Odpowiednio bity od 1 do 16 załączają dany wyświetlacz a bity od 16-32 załączają poszczególne segmenty poprzednio włączonego wyświetlacza.

    Schemat I:
    [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?


    -druga płytka z uC ATxmega128A4U + 2 potencjometry i matryca przycisków(docelowo ma być więcej przycisków niż obecnie na schemacie) oraz na jednym kablu USB urządzenie klasy HID oraz wirtualny port COM do komunikacji z komputerem.
    Zasada działania: Każdy wiersz matrycy przycisków załączany jest tymi samymi bitami co poszczególne wyświetlacze, natomiast wiersze odczytywane są szeregowo przez 74HC589. Jeśli wszystkie bity odczytane z 74*589 są "0" to by znaczyło, że wszystkie przyciski w danym wierszu są wciśnięte.

    Schemat II:
    [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?

    Proszę o sprawdzenie schematów i poprawności podłączenia w szczególności uC oraz czy przy tak podłączonej klawiaturze będę w stanie odczytać, które przyciski są wciśnięte ? W razie jakichkolwiek pytań chętnie odpowiem.
  • Pomocny post
    #2 12743541
    tmf
    VIP Zasłużony dla elektroda
    -te dławiki na AVCC nie są potrzebne - nie korzystasz z ADC (nawet jeśli korzystasz to wymagane są one przy superdokładnych pomiarach),
    - przez rezystor 1 MOm łączysz do masy osłonę gniazda USB, masy USB i układu łączysz bezpośrednio,
    - na USB nie ma 3,3V, jest 5V, które ci upali procka. Jeśli zasilasz układ z USB potrzebny jest LDO na 3,3V,
    - do realizacji master SPI lepiej używać USART w trybie SPI, bo współpracuje z DMA i ma dodatkowe buforowanie. W sumie to nie problem, bo remapowanie pinów można załatwić sprzętowo (rejestr REMAP), ale można też od razu podłączyć jak należy - sprawdź z notą jak są wyprowadzone sygnały SPI na USART,
    - przyciski pewnie będą działać, zdajesz sobie jednak sprawę, że w takiej konfiguracji naciśnięcie kilku przycisków spowoduje problemy. Trzebaby zastosować bufory typu OC, lub diody do przycisków, żeby nie dało się zrobić zwarcia. Z drugiej strony masz aż tyle przycisków, że np. nie wystarczy ci pinów w 100-pinowych XMEGA? Wykorzystanie IO procka jest prostsze niż rejestrów. Jeśli nie wystarczy, to można wykorzystać ADC i zrobić drabinkę R2R i w ten sposób odczytywać przyciski. Jako, że ADC XMEGA ma 16 kanałowy multiplekser, możesz w ten sposób podłączyć setki przycisków. Dodatkowo rejestr porównania ADC umożliwi ci sprzętowe wykrycie naciśnięcia przycisku i obsługę tego w przerwaniu.
  • #3 12743791
    pawel1730
    Poziom 15  
    tmf napisał:
    -te dławiki na AVCC nie są potrzebne - nie korzystasz z ADC (nawet jeśli korzystasz to wymagane są one przy superdokładnych pomiarach),


    Korzystam z ADC, mam 2 potencjometryo nazwach SP i SL, jeśli te dławiki poprawią pomiar to czy jakiś duży wysiłek je zamontować, więc chyba lepiej je dać ?

    tmf napisał:
    - na USB nie ma 3,3V, jest 5V, które ci upali procka. Jeśli zasilasz układ z USB potrzebny jest LDO na 3,3V,


    Zapomniałem napisać, że chcę zastosować lekko zmodyfikowane USB. A mianowicie będę miał jeszcze jedną płytkę PCB do której będzie podpięty zasilacz dający 3,3V oraz kabel USB od komputera. I teraz w ten zmodyfikowany USB puszczę zasilanie to 3,3V, GND oraz przewody D-,D+ prosto z od komputera.

    tmf napisał:
    - do realizacji master SPI lepiej używać USART w trybie SPI

    tmf napisał:
    - sprawdź z notą jak są wyprowadzone sygnały SPI na USART,

    Nie za bardzo wiem gdzie tego szukać.


    Chciałbym użyć uC jakiegoś małego z najmniejszą liczbą pinów tj A4U.
  • #4 12744024
    BlueDraco
    Specjalista - Mikrokontrolery
    pawel1730 napisał:


    Zapomniałem napisać, że chcę zastosować lekko zmodyfikowane USB. A mianowicie będę miał jeszcze jedną płytkę PCB do której będzie podpięty zasilacz dający 3,3V oraz kabel USB od komputera. I teraz w ten zmodyfikowany USB puszczę zasilanie to 3,3V, GND oraz przewody D-,D+ prosto z od komputera.


    Brawo! Jeszcze lepszy byłby "lekko zmodyfikowany" USB z napięciem 230 V AC.

    Naprawdę nie doceniasz użytkowników sprzętu, również zmęczonych fachowców z autorem takiego sprytnego rozwiązania na czele.

    Zwróć też uwagę na spadek napięcia i zakłócenia na przewodach i stykach pomiędzy stabilizatorem 3.3 V i zasilanym w ten sposób urządzeniem.

    Prosisz się o kłopoty.
  • #5 12744150
    pawel1730
    Poziom 15  
    Oczywiście użytkownik będzie miał do podpięcia zwykły kabel USB od komputera do urządzenia oraz zewnętrzny zasilacz jednak z USB nie będzie wykorzystywane zasilanie a z tego zasilacza jednak puszczony jednym kablem. A dlatego tak to chcę to zrobić, ponieważ pomiędzy urządzeniem ze schematu II a tą dodatkową płytką z zasilaczem mogę mieć tylko 4 przewody.
  • #6 12744212
    Konto nie istnieje
    Poziom 1  
  • #7 12744276
    pawel1730
    Poziom 15  
    Urządzenie będzie tylko jedno i ja go tylko będę używał.
    Poza tym jak już pisałem linia zasilania z USB nie będzie wykorzystywana i nie będzie do niczego podłączone jednak dobrze piszesz jak źle podłączy to może być nie ciekawie, ale od czego są instrukcje obsługi. Zresztą jak ze wszystkim, jak źle podłączysz to też coś może się zepsuć nie tylko moje urządzenie.
  • Pomocny post
    #8 12744339
    Konto nie istnieje
    Poziom 1  
  • #9 12744378
    tmf
    VIP Zasłużony dla elektroda
    Poza tym nikt nie czyta instrukcji obsługi kiedy widzi gniazdo USB, a w ręku ma wtyczkę USB...tylko jakiś paranoik podejrzewałby w takiej sytuacji podstęp :)
    Co do opisu wyprowadzeń - w nocie procka jest sekcja o przyporządkowaniu sygnałów do pinów.
  • #10 12745005
    pawel1730
    Poziom 15  
    Dzięki, zatem pomiędzy urządzeniami(schemat I) a płytką z zasilaczem dam inną wtyczkę a tylko pomiędzy tą płytką a komputerem będzie zwykły kabel USB. Ale to zostawiam na koniec listy zadań.

    tmf napisał:
    - do realizacji master SPI lepiej używać USART w trybie SPI

    Czyli normalnie linie danych podpiąć do pinu TXDn a zegar do XCKn ?
  • #12 12745314
    pawel1730
    Poziom 15  
    Ok, zmieniłem SPI przez USART, czy nadal będzie się tym sterowało jako poprzednio przez SPI ?

    Chciałbym mieć opcję z procesorem z mniejszą ilością pinów tj. A4U, jeśli to nie wyjdzie to zastanowię się nad uC A1U. Jednak teraz ważniejsza jest dla mnie matryca przycisków, czy jest poprawna lub sytuacje w której mogą być problemy.

    Stan początkowy, na wszystkich liniach o nazwach "CzescX" jest stan wysoki. Następnie jak sprawdzam wiersz nr 1 to na "Czesc1" daję stan niski i odczytuję stan rejestru z 74*589. Jeśli odczytane są same "1" tzn., że żaden przycisk nie jest wciśnięty?

    [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?
  • #13 12745690
    tmf
    VIP Zasłużony dla elektroda
    Tak, steruje się tym podobnie jak SPI, tyle, że przestawiasz USART w tryb SPI i odwołujesz się do jego rejestrów. Zakładam jednak, że wykorzystasz DMA, żeby sobie nie zaprzątać głowy przerwaniami i ciągłym zapisywaniem nowych wartości.
    Co do klawiatury - te diody tak umieszczone są bez sensu. Przede wszystkim sterownik linii musi mieć wyjście OC, zastanów się co się stanie jeśli jednocześnie naciśniesz dwa przyciski na tej samej kolumnie. Masz zwarcie, prawda? Jeśli dasz sterownik z wyjściem OC problem częściowo zniknie - będą tylko nieprawidłowo w takiej sytuacji czytane klawisze. Aby temu zapobiec diody muszą być szeregowo z każdym przyciskiem.

    Dodano po 58 [sekundy]:

    BTW, na schemacie widzę, że masz pełno niewykorzystanych pinów IO, dlaczego z nich nie sterować klawiaturą? Odpadnie problem rejestru z wyjściem OC.
  • #14 12746371
    pawel1730
    Poziom 15  
    Ok, zmieniłem koncepcję i podepnę klawiaturę bezpośrednio do pinów IO uC oraz dodałem dwa impulsatory stykowe.
    Czy teraz jest już w porządku ?
    [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?
  • #16 12755937
    pawel1730
    Poziom 15  
    W zamian tego tranzystora IRLML9301 na jaki inny mogę go zamienić tak żeby nie zmieniać już schematu ?
    Czy ten IRLML5203TRPBF nada się jako zamiennik ?
  • #18 12765593
    pawel1730
    Poziom 15  
    Jak dużo będzie lepszy ten tranzystor IRLML2246TRPBF od IRLML9301TRPBF ?
  • Pomocny post
    #19 12765769
    dondu
    Moderator na urlopie...
    Ponieważ zasilasz układ z 3,3V warto byś miał parametr progu przełączenia (Gate Threshold Voltage) tranzystora oznaczony przez VGS(th) w miarę możliwości sporo niższy niż 3,3V. Porównaj sobie te parametry we wszystkich tranzystorach, które tutaj wspólnie wymieniliśmy.
  • Pomocny post
    #20 12765989
    tmf
    VIP Zasłużony dla elektroda
    Dla zasilania 3,3V VGSTh musi być w okolicach 1,8-2,5 V inaczej prąd ISD będzie mizerny, a tranzystor będzie się grzał na skutek dużego RDS.
  • Pomocny post
    #21 12766034
    dondu
    Moderator na urlopie...
    tmf napisał:
    Dla zasilania 3,3V VGSTh musi być w okolicach 1,8-2,5 V inaczej prąd ISD będzie mizerny, a tranzystor będzie się grzał na skutek dużego RDS.

    IRLML2246TRPBF ma (przy VGSth=3,3V) RDS na poziomie 110mΩ (dla prądu 2,6A).
    Fig 12. str. 6: http://www.irf.com/product-info/datasheets/data/irlml2246pbf.pdf

    Prąd jaki może dostarczyć przy VGS(th)=3,3V, to aż 10A - (patrz Fig 1).

    Jeśli dobrze widzę wyświetlacz ma 15 segmentów, stąd jeżeli będzie przez niego płynął maksymaln prąd zakładając 100mA na segment (multilpleksowanie):

    I = 100mA*15=1,5A

    moc wydzielona na tranzystorze przy 3,3V, będzie wynosić:

    P = 1,5A² * 110mΩ = 0,247W

    Tutaj należałoby jeszcze ustalić czas przepływu prądu ponieważ wyświetlacz będzie multipleksowany (11 wyświetlaczy), czyli faktyczna moc wydzielona na tranzystorze będzie jeszcze mniejsza (prawdopodobnie 11 razy).

    Tranzystor ten może wytrzymać 1,25W przy 25°C temperatury otoczenia, czyli jest OK.
  • #22 12767849
    pawel1730
    Poziom 15  
    Ok dziękuje, czyli zamówię sobie IRLML2246TRPBF.

    Tylko skąd 100mA na segment wyświetlacza skoro jak dobrze rozumiem dla SCT2024 jest 30mA na wyjściu ?
  • #23 12768012
    tmf
    VIP Zasłużony dla elektroda
    dondu napisał:
    tmf napisał:
    Dla zasilania 3,3V VGSTh musi być w okolicach 1,8-2,5 V inaczej prąd ISD będzie mizerny, a tranzystor będzie się grzał na skutek dużego RDS.

    IRLML2246TRPBF ma (przy VGSth=3,3V) RDS na poziomie 110mΩ (dla prądu 2,6A).
    Fig 12. str. 6: http://www.irf.com/product-info/datasheets/data/irlml2246pbf.pdf


    Masz rację, z małym ale... Podany przez ciebie tranzystor ma VGS(Th) równy -0,4 do -1,1 V, a nie 3,3V jak podałeś :) I dlatego może być użyty. Zobacz tabelę Electric Characteristics @ TJ = 25°C na stronie drugiej. Ten rysunek nr 12 jest orientacyjny i ostrożnie bym go interpretował przy niskich VGS - niewielkie przesunięcie charakterystyki i RDS zmienia się o kilkaset procent.
    Co do 100mA - Dondu przyjął że zwiększasz prąd segmentu w impulsie, oczywiście twój sterownik takiego prądu nie da, tym lepiej dla tranzystora :)
  • #24 12770870
    dondu
    Moderator na urlopie...
    tmf napisał:
    Podany przez ciebie tranzystor ma VGS(Th) równy -0,4 do -1,1 V, a nie 3,3V jak podałeś :)

    Może źle się wyraziłem. Pisząc:

    dondu napisał:
    IRLML2246TRPBF ma (przy VGSth=3,3V) RDS na poziomie 110mΩ (dla prądu 2,6A).

    miałem na myśli, że ten tranzystor pracujący z mikrokontrolerem zasilanym 3,3V dostanie na bramkę właśnie -3,3V, czyli będzie to napięcie VGS.

    Żeby autor tematu zrozumiał w czym rzecz, pokażę ten przypadek od właściwej strony.
    Mamy prąd 1,5A i napięcie VGS=-3,3V (z pinu mikrokontrolera). Patrzymy na wykres:

    [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?

    i robimy tak:
    1. zaznaczamy poziomą czerwoną linią oczekiwany prąd drenu - w naszym wypadku 1,5A.
    2. odnajdujemy wykres dla VGS=-3,3V (niestety dokładnie takiego nie ma, więc przyjąłem dla uproszczenia, że wykorzystamy ten dla -3,0V)
    3. rzutujemy (niebieska linia) punkt przecięcia linii prądu (czerwonej) z wykresem dla -3,0V, na oś VDS i odczytujemy około 0,15V.

    Czyli dla prądu ID=1,5A i napięcia na bramce wynoszącego VGS=-3,3V, spadek napięcia na tranzystorze wynosić będzie VDS=0,15V.

    Teraz liczymy moc która się odłoży na tranzystorze: P = 1,5A * 0,15V = 0,225W
    Przypominam, że tranzystor ten wytrzyma aż 1,25W więc 5 razy więcej niż faktycznie byłby obciążony ciągłym świeceniem całego jednego wyświetlacza.

    Ponieważ mamy jedenaście wyświetlaczy, które będą multipleksowane równomiernie oznacza to, że tranzystor będzie pracował przez 1/11 czasu każdej sekundy. W związku z tym faktycznie wydzieli się na nim odpowiednio mniejsza moc. Innymi słowy tranzystor będzie prawie tak zimny jak otoczenie :)

    Ponieważ Tmf wspomniał o RDS, to policzmy ile w takim przypadku RDS wynosi: RDS = 0,15V / 1,5A = 0,1Ω = 100mΩ
    czyli zgodnie z wykresem Fig 12 o którym pisałem wcześniej.

    Parametr VGS(th), o którym wspomniał Tmf jest już ujęty na tym wykresie, przez co charakterystyki "poszły do góry", w porównaniu do innych tranzystorów o większych VGS(th).


    pawel1730 napisał:
    Tylko skąd 100mA na segment wyświetlacza skoro jak dobrze rozumiem dla SCT2024 jest 30mA na wyjściu ?

    Tak jak wspomniał Tmf uwzględniłem multipleksowanie.

    Masz 11 wyświetlaczy i będziesz je po kolei załączał. W danym momencie świeci tylko jeden z nich (to jest multipleskowanie). Jeżeli więc dany wyświetlacz świeci przez czas odpowiadający 1/11 sekundy, to znaczy, że emituje (uproszczając) 11x mniej światła. Stąd należy ten brak nadrobić zwiększając prąd diod do wartości, które one umożliwiają, a które określa dokumentacja wyświetlacza i Twojego drivera w parametrze prądu impulsowego.
  • #25 12780574
    pawel1730
    Poziom 15  
    Na potrzeby testów uruchomiłem ten układ z I schematu, z drobnymi zmianami czyli podzieliłem to na dwie płytki i dałem nowe tranzystory IRLML2246. Układ uruchomiłem na Atmega8 i zasilanie 5V. Wygląda na to, że działa sterowanie poszczególnymi segmentami natomiast świecą sie wszystkie wyświetlacze zamiast tylko jednego.

    I chciałem włączyć wszystkie segmenty na jednym wyświetlaczu, natomiast wyświetla wszystkie segmenty na wszystkich wyświetlaczach. ;/

    Aktualny schemat z podziałem na 2 płytki:
    [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U? [ATxmega128A4U] Jak sterować wyświetlaczami LED i przyciskami z ATxmega128A4U?

    Kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Acha i czy na pewno ten układ SCT2024 ma zatrzask ? Ponieważ jak wpisuje dane to mrugają wyświetlacze?
  • #26 12783935
    pawel1730
    Poziom 15  
    Jakieś rady? Chyba dobrze mam podpięte tranzystory? A może coś uszkodziłem jak podpiąłem pod 5V lub w trakcie montażu ?

    Dodano po 1 [godziny] 20 [minuty]:

    I takie jeszcze pytanie czy przy sterowaniu tranzystorem przez SCT2024 potrzebny jest rezystor pull-up na bramce ?
  • Pomocny post
    #27 12784880
    Konto nie istnieje
    Poziom 1  
  • #28 12784952
    pawel1730
    Poziom 15  
    Marek_Skalski napisał:
    Wprowadź sobie 16-bitowy rejestr przesuwający w programie (z 1 bitem ustawionym), którego wartość będzie przesyłana jako parametr 'wyswietlacz', a który będzie też indeksował dane 'segment' i będziesz widział czy świecą wszystkie czy tylko wybrany. Wywal to wszystko w przerwanie od licznika co 200..210us i dopiero wtedy to może prawidłowo działać.


    Teraz chcę tylko wyświetlić dowolną cyfrę na jednym wyświetlaczu, gdy to mi się uda to już myślę, że sobie poradzę z napisaniem programu.

    -Czy ten rezystor rozwiąże sprawę i jaką powinien mieć wartość?
    -Przy zasilaniu SCT2024 5V jakie napięcie powinien dawać na wyjściu dla stanu logicznego "0" i "1" ?
  • #29 12803760
    pawel1730
    Poziom 15  
    Marek_Skalski napisał:
    Na początek, 1k między każdą bramką a zasilaniem powinno być ok.

    Co się stanie jeśli dam duży rezystor np 10k czy wtedy czas "wyłączania" tranzystora będzie dłuższy ?
  • #30 12803771
    dondu
    Moderator na urlopie...
    Tak, przez co będzie pracował w części charakterystyki, która oznacza większą rezystancję RDS, a większa rezystancja oznacza odkładanie się na tranzystorze mocy, a to z kolei oznacza wydzielanie się ciepła - należy tego unikać w szczególności, gdy ciągle następują włączenia lub wyłączenia tranzystora.
REKLAMA