Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Skrzyżowanie cykliczne sterowane AVRem - projekt

arkosmc 04 Mar 2008 17:07 4088 31
Optex
  • #1
    arkosmc
    Level 10  
    Witam,
    mam do zrobienia taki śmieszny projekt, tylko nie wiem jak zrealizować kilka spraw technicznych... Skrzyżowanie jest typu X, czyli wchodzą do niego 4 drogi, każda ma po 3 pasy (2 wjazdowe na skrzyżowanie i 1 wyjazdowy). Do tego dochodzą jeszcze 4 przejścia dla pieszych. W sumie wyszło mi, że sterować muszę 32-ma diodami i 12 czujnikami ruchu (wydaje mi się, że miniaturkę najlepiej zrobić z czujnikami na zwykłych przyciskach, które będą imitowały czujniki nacisku, bo indukcyjnie chyba nie da rady na małej makiecie). Nie wiem tylko jak i na jakich układach da się to w miarę sensownie zrealizować, a wątpię, żebym znalazł procesor z taką ilością portów :P ... Same czujniki da się zakodować na 4 bitach, więc myślałem o jakimś tego typu układzie, tylko, że nie znam oznaczeń i charakterystyk takich scalaczków typu koder/MUX/D-MUX... Czy ktoś kto się w tych sprawach orientuje byłby w stanie nakreslić mi mniej więcej jak to zmajstrować?
    pozdrawiam
  • Optex
  • #2
    User removed account
    User removed account  
  • #3
    arkosmc
    Level 10  
    No nie do końca, bo skrzyżowanie ma działać cyklicznie, czyli zmiana świateł następuje niejako inteligentnie i jest zależna od natężenia ruchu na skrzyżowaniu (ale za to jest już odpowiedzialny AVRek) i algorytm, który sobie tam będzie śmigał... Poza tym Jak na jezdni jest czerwone, to jeszcze mogą jechać samochody wyjeżdżające ze skrzyżowania, więc niejako dla pieszych powinno być wtedy czerwone...
  • #4
    User removed account
    User removed account  
  • #6
    Paweł Es.
    VIP Meritorious for electroda.pl
    Sterowanie diodami możesz załatwić szeregowo, takimi układami:

    A6276 firmy Allegro

    http://www.elfa.se/pdf/73/733/07333743.pdf

    http://www.elfa.se/pl/index1.html (są tanie)

    Układ ma 16 wyjść, ze źródłami prądowymi, dzięki czemu wszystkie diody pracują przy jednym prądzie (programowanym rezystorem).

    Układ można łączyć w większe gałęzie po N*16 wyjść. Dane do układów przesyłasz szeregowo i po przesłaniu przepisujesz jednocześnie do rejestrów wyjściowych z rejestru szeregowego.

    Odczyt wejść mozna zrobić również przy pomocy rejestrów szeregowych z wejściem równoległym 74ls165 (lub 74HC165) łączonych w gałęzi N*8 bitów.

    http://www.mhl.tuc.gr/data_books/ttl/sn74ls165rev5.pdf

    układ zapisuje równolegle stan 8 wejść na sygnał PL=0 a przy PL=1 możesz cyklicznie wysuwać stan rejestru na wyjście szeregowe.

    Procesor taktuje cały przesył do rejestrów A6276 i z 74165.
  • #7
    arkosmc
    Level 10  
    karol_85:
    No jeszcze nie wiem jak, prawdopodobnie dla każdego pasa przypiszę jakiś rejestr i na podstawie wartości w nim będę sprawdzał gdzie czeka najwięcej samochodów i które światła zapalić na zielono. Natężenie będzie mierzone najnormalniej na świecie ilością wciśnięć przycisku, co będzie powodowało inkrementację wartości rejestru.

    djsway:
    To wszystko fajnie brzmi, ale z tego wszystkiego to ja na chwilkę obecną jestem w stanie mniej więcej wymyślić algorytm sterowania (co i tak będzie robione na końcu). Tak więc multipleksowanie spoko, tylko że ja nie wiem na jakich układach to zrealizować... A że jest to projekt, to będę musiał w niedługim czasie wygenerować jakiś schemat blokowy projektu z całą analizą zadania... Więc najlepiej jakbym znał mniej więcej jakie układy i ewentualnie jak to pozabezpieczać jakimiś kondensatorkami, bo w życiu czegoś takiego nie robiłem...

    Paweł Es:
    Rozumiem, że te układziki da się jakoś zaprogramować :) czy po prostu wysyłam mu 16-bitowy wektor z informacją, które diody ma zapalić? Chyba, że 32-bitowy na 2 połączone szeregowo układy... Tylko to wtedy normalnie na jeden port podpinam? aaa no i jaki typ AVRa do tego? Bo w ogóle się nie orientuję w tym jakiego będę potrzebował... Wiem jedynie, że ma mieć sporo pamięci, bo ten program sterujący będzie sporo zajmował... A jeszcze samo-testowanie trzeba dodać...
  • #8
    djsway
    Level 18  
    Multipleksowanie takie naj prostsze robi sie na tranzystorkach pnp i rezystorach, nie trzeba zadnych ukłądów poza prockiem. z diod robi sie matryce 6x6 (przy 32 led bedzie nie pełny ostatani wiersz) kolumy przez tranzystorki pnp do plusa zasilania, a wiersze przez rezystiorki do portów procka. a cała reszta to tylko sterowanie przez procek. Najłatwiej to robimy sobie tablice o 32 polach i w przerwaniu od timera wyswietlamy zawartość tablicy. A w miedzy czasie algorytm odczytuje dane z czujników, wylicza które swaitełko zasiwcic i wpisuje do tablicy.
  • Optex
  • #9
    arkosmc
    Level 10  
    Wiesz co, może i fajnie, ale ja w życiu niczego takiego nie robiłem. Tobie chodzi o to, że mam sobie takie coś sam zlutować, czy mogę normalnie kupić jakiś tego typu scalaczek? Bo jak mam lutować, to jak? Baza do portu przez rezystor, kolektor na zasilanie, a emiter na diodę? Wybacz, że zadaję tak lamerskie pytania, ale nie bardzo sam mam pojęcie jak to ma wszystko wyglądać :) i jak to działa...
  • #10
    Paweł Es.
    VIP Meritorious for electroda.pl
    Do tych układów (Axxxx) podajesz dane szeregowo, po wysłaniu 16 lub wielokrotności 16 bitów, podajesz impuls wejście przepisania równoległego z rejestru przesuwnego do rejestru wyjściowego i wszystkie wyjścia są aktualizowane jednocześnie. Zamuje to 3 linie procesora.

    Podobnie wejścia tylko operacja jest odwrotna, najpierw robisz zapis równoległy (np. stanu przycisków) a potem wysuwasz 8 lub wielokrotność bitów do mpsora i to też zajmuje 3 porty procesora.

    Odczyt przycisków trzeba robić np. 10 sekundę, diody aktualizujesz tylko przy zmianie stanu.

    A tak z ciekawości zapytam, jak się mierzy natężenie ruchu, w jakich okresach czasu się uśrednia ilość przejeżdżających samochodów ?

    I drugie pytanie, na podstawie danych o ruch, modyfikuje się jak rozumiem czas trwania światła zielonego (w jakimś zakresie). Czy na kierunkach prostopadłych te czasy są powiązane (jak na jednym skracam to na drugim wydłużam) czy też każdy kierunek ma oddzielne, niezależne od drugiego kierunku ustawianie czasu światła zielonego i tylko czas oczekiwania na zielone nie powinien przekroczyć 120 s dla danego kierunku ?
  • #11
    arkosmc
    Level 10  
    Natężenie chciałem mierzyć programowo. Na podstawie danych o ruchu wybiera się które światła zapalić. Czas świecenia również będzie od tego zależał. Każdy kierunek ma statystyki oddzielne. Czas oczekiwania może przekroczyć 120s ale tylko wtedy gdy nie odnotowano żadnego ruchu na danym pasie...
    W każdym razie to są głównie kwestie softu. Ja mam problem, bo na poniedziałek powinienem mieć wstępny schemat układu, a na poniedziałek za tydzień już kompletny i ukończony schemat oraz zrobioną analizę... No a że scalaki nie są moją mocną stroną, to pytam kogoś, kto jest w stanie mnie naprowadzić na dobrą drogę :P
  • #12
    Paweł Es.
    VIP Meritorious for electroda.pl
    W każdym razie masz podane rozwiązanie, nie wymagające multipleksowania, wystarcza do tego jeden port 8 bitowy i jeszcze zostają 2 bity wolne

    Układy kaskadujesz łącząc równolegle linie zegara i ładowania równoległego a linie danych (wy lub we) podłączasz do pierwszego w szeregu układu a kolejne wejścia (wyjścia) szeregowe łączysz z wyjściem (wejściem) szeregowym poprzedniego układu.


    A są jakieś normy na czas uśredniania ruchu ? W jakim to się interwale czasowym zlicza te samochody?
  • #13
    arkosmc
    Level 10  
    No wiem, że nie wymaga multipleksowania... Zastanawia mnie tylko jak mam mierzyć częstość naciśnięcia przycisku, skoro jego stan sczytywać będę co kilka sekund...

    A czy chciałoby Ci się to jakoś narysować? Bo jakoś tak nie do końca mi to świta... Jeżeli chodzi o interwał, to nie wiem, myślałem żeby to jakoś na bieżąco robić, ale nie wiem czy ma to sens... Myślę, że starczy sczytywać stany knefli co 2-3s.
  • #14
    Paweł Es.
    VIP Meritorious for electroda.pl
    Ja bym te przyciski odczytywał tak z 10 razy na sekundę lub częściej, by nie zgubić naciśnięcia (przyciski nie mają pamięci wciśnięcia, która by czekała aż mikroprocesor ją odpyta) a jak to będziesz interpretował w programie to już inna sprawa.

    Przecież nikt nie będzie naciskał tego przycisku przez 2-3 sekundy tylko naciśnie (co trwa przeważnie poniżej 1 sekundy) i będzie myślał, że układ to zauważył a tu kicha, bo się wstrzelił akurat w okienko pomiędzy zapytaniami procesora.

    Schemat dla 16 przycisków wygląda jak w załączniku przyciski.pdf, dla większej ilości przycisków dołączasz następne układy do wejścia DS (nóżka 10) układu U1 i linii CLK_INP i LD_INP

    Sterownik diod działa na podobnej zasadzie (przesył szeregowy) tylko dane idą w drugą stronę.
    Attachments:
  • #15
    arkosmc
    Level 10  
    A w jaki program polecasz do robienia schematów? Tylko, żeby nie był zbyt skomplikowany :)

    No i jeszcze pytanie, jaki procek do sterowania wziąć?
  • #16
    Paweł Es.
    VIP Meritorious for electroda.pl
    Ten schemat co podałem rysowałem pod Kicadem (bezpłatny) ale można i pod Circuit Makerem. Każdy z nich ma swoje wady i zalety oraz wymaga pewnego czasu do opanowania. Trzeba się też nauczyć definiować nowe elementy, bo części na pewno nie będzie.

    Procesor musisz dobrać taki, by się program w nim zmieścił (pisany w np. Bascomie lub C (WinAVR))
    Może być Atmega16 lub 32.
  • #17
    arkosmc
    Level 10  
    Dobra, to ja sobie ściągam tego KiCad-a. Teraz tylko mam prośbę: mógłbyś mi wysłać definicję tego 74165 (do sterowania wejściem), chyba, że jest już zdefiniowany... Niestety mam wypasione łącze i ściągam tego kica z ftp-a elektrody z prędkością 100k/s...

    Teraz tak: ile może zająć mniej więcej taki program sterujący w C? Ewentualnie mogę jeszcze w asemblerze to pisać, ale nie wiem, czy warto jest się tak narobić...

    A możesz mi coś doradzić jeszcze w sprawie programatora?
  • #18
    Paweł Es.
    VIP Meritorious for electroda.pl
    Akurat 74165 jest w bibliotekach Kicada, tego A6276 może tam nie być.

    Tu ściągniesz do niego kartę katalogową i inne opisy

    http://www.allegromicro.com/en/Products/Part_Numbers/6276/

    Kicada ciągnąłem kiedyś stąd (było dużo szybciej) a także są jakieś biblioteki:

    http://www.lis.inpg.fr/realise_au_lis/kicad/

    a konkretnie stąd:

    http://iut-tice.ujf-grenoble.fr/cao/

    Objętość programu trudno ocenić nie wiedząc jak skomplikowane funkcje ma wykonać (złożoność algorytmu).

    Co do programowania:

    Do celów uruchomieniowych polecał bym BASCOM-a jest dużo mniej upierdliwy w konfiguracji niż te ogólnie dostępne C (które chyba piszą masochiści lubiący nieczytelnością "ułatwiać" sobie życie i "przyspieszać" wszelkie czynności). Współpracuje on z programatorem ZL2PRG (widzi go jako STK200), obsługuje w sposób prosty Fusebity (bity konfiguracyjne AVR), obsługuje proces programowania, symulację programu, ma możliwość robienia wstawek w assemblerze. Wersja DEMO obłsuguje chyba do 4k kodu wynikowego (jak się postarasz to może się zmieścisz)

    http://www.mcselec.com/
    http://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54


    http://avr.elektroda.eu/?q=node/20

    http://freefm.pluton.one.pl/mike/avr/programowanie.html

    Co do programatora to proponuję zainwestować w gotowy
    ZL2PRG (dostajesz gotowy działąjący programator z kablem i oprogramowaniem)

    Opis jest tu:

    http://www.kamami.pl/?id_prod=10485

    Chyba,że chcesz go robić na piechotę:
  • #19
    arkosmc
    Level 10  
    No kumpel znalazł takie dwa w miarę sensowne:
    http://www.seguro.pl/sklep/?zobacz=4710&producent=
    http://www.seguro.pl/sklep/?zobacz=4595&producent=
    ale to też tak w ciemno wybierane...

    No a co do podłączenia tych układów A6276... Nie umiem ich na razie zmontować w tym kiCAD-ie, ale spróbuję napisać jak bym to podłączył...
    - (nr nóżki) nazwa : gdzie

    - ( 1 ) ground : do masy
    - ( 2 ) serial data in : do portu procka, przez który wysyłam 32-bit wektor
    - ( 3 ) CLK : na clocka z mikroprocka
    - ( 4 ) Latch Enable : na port wy procka, którym potwierdzam wysłanie danych na diody
    - ( 21 ) /OE : to bym do masy podłączył (ale nie jestem pewien)
    - ( 22 ) serial data out : z układu pierwszego na wejście nr 2 układu drugiego (serial data in)
    - ( 23 ) Rext : przez opornik 250 om do masy
    - ( 24 ) Vdd : zasilanie 5V

    przy czym nóżki 1, 3, 4, 21, 23, 24 obu układów łączę tak samo.

    no i nie bardzo wiem jak te diody podpiąć skoro są sterowane wspólnym prądem...
  • #20
    Paweł Es.
    VIP Meritorious for electroda.pl
    Prawie dobrze ale ten rezystor ustalający prąd to trzeba dać 2kΩ (prąd diod 10 mA a nie 200 mA ;))

    Patrz wykres na stronie 10 karty katalogowej

    http://www.elfa.se/pdf/73/733/07333743.pdf

    Diody świecące podłączasz:

    - katoda do danego wyjścia układu Axxxx

    - anoda do napięcia Vled

    Napięcie Vled obliczamy z wzoru

    Vled=0.7V+Uledśr=0.7+2.2V=2.9V

    0.7V wynika z zaleconego maksymalnego napięcia na danym wyjściu układu

    Te 2.1 V wytracasz na 3 diodach 1N4001 połączonych szeregowo.

    Skrzyżowanie cykliczne sterowane AVRem - projekt

    Zegar taktowania rejestru przesuwającego i sygnał strobowania są wspólne dla wszystkich A6276
  • #21
    arkosmc
    Level 10  
    A tak się teraz zastanawiam jak mam zrealizować zasilanie :) bo chyba najrozsądniej będzie z baterii przez jakiś stabilizator, prawda?
  • #23
    arkosmc
    Level 10  
    ale znowu z kablem się trzeba męczyć... Zresztą dowiem się jak pogadam z prowadzącym... czyli za jakieś niecałe 5 godzin...

    ale temperaturowy zakres działania 0-40 chyba nie zostanie łyknięty...
  • #24
    arkosmc
    Level 10  
    Paweł Es. :
    a powiedz mi, czy przy takim rozwiązaniu zasilania trzeba jeszcze coś dodatkowego montować na płytce? I w ogóle na jakiej płytce to robić? Na uniwersalnej, czy dać normalnie jakimś profesjonalistom to polutowania całe to ustrojstwo?
    dodatkowo podobno ma być w układzie jakiś układ samotestujący, watchdog i możliwość wgrania oprogramowania procka po kablu (to jakiś skrót był do tego, ale mi wyleciało...).. No i jeszcze pytanie jak zrealizować jakieś zabezpieczenia typu kondensatorki i inne na tej płytce, bo prowadzący też jakieś takie rzeczy wytykał... Ja już się normalnie gubię z całym tym projektem :P
  • Helpful post
    #25
    Paweł Es.
    VIP Meritorious for electroda.pl
    Tak się zastanawiam, w jakiej to szkole dają takie zadania, że masz robić układ złożony nie mając pojęcia o podstawach ? To takie budowanie od dachu ?

    Zasilacz stabilizowany daje 5V bez dodatkowych elementów, na płytce trzeba dać dodatkowy filtr, np 220 uF/10V i 220 n (np. typ MKT) równolegle, dodatkowo przy każdym układzie cyfrowym powinien być kondensator blokujący zasilanie 100n (możliwie blisko końcówek zasilających).

    Układ samotestujący co ma testować i jak ? Być może to będzie po prostu fragment programu pozwalający selektywnie zapalać poszczególne diody i sprawdzać przyciski.
    Watchdog jest realizowany w ATmedze, po prostu w głównej pętli programu musisz odpowiednim poleceniem zerować jego licznik, by się nie przepełnił. Jak się przepełni (np. program poszedł w maliny) to powoduje reset procesora (tak jak po włączeniu zasilania).
  • #26
    arkosmc
    Level 10  
    Dobra, to teraz Cię zaskoczę :D
    nie w szkole, a na uczelni :) i to nie byle jakiej... Politechnika Śląska, informatyka, rok 3... Podstaw nie ma, bo nikt nas tego nie uczył... Tzn podobno były przedmioty typu Teoria automatów, czy układy cyfrowe, tylko z tego nie szło się nic dowiedzieć... a na mikro (ćwiczeniach) mieliśmy teorie i pisanie programików do obsługi gotowych, zmontowanych układów... no a w LO też nie było podstaw układów scalonych...

    no to samotestowanie ma wyglądać tak, że układ zgłasza w jakiś szczególny sposób jakieś błędy (w zależności od tego, co podczas uruchamiania mu się nie zgadza) nie wiem jeszcze jak to zrobić, ale pewno da się to rozwiązać programowo, więc pełen luz :)
    ____

    A powiedz mi jeszcze na jakiej płytce to robić? Bo nie wydaje mi się, żebym był w stanie zlutować cokolwiek wymagającego większej precyzji :)
  • #27
    Paweł Es.
    VIP Meritorious for electroda.pl
    Proponuję płytki uniwersalne produkcji Cyfroniki

    http://www.cyfronika.com.pl/uniwersalne.htm

    Wybierz sobie np. typ Eurokarta i na tym pewnie uda się coś zrobić.

    Jeżeli dekodery i kodery przycisków porozrzucasz po planszy to możesz je zrobić na jakichś mniejszych płytkach. Tylko wybieraj już te powiercone i najlepiej z metalizacją otworów, bo nie będą ci tak odłazić przy lutowaniu szczególnie jak nie masz w tym wprawy.

    Do łączenia najlepszy byłby drut w izolacji teflonowej typu "kynar" - można go w kilku kolorach kupić na metry w Cyfronice. Dobrze się lutuje choć trochę kłopotliwie izolacja schodzi, bo drut jest 0.25 mm i łatwo go urwać przy zarabianiu.

    http://www.cyfronika.com.pl/kab_kynar.htm


    Nie wiem jak duża ma być ta makieta i jakie odległości (długości kabli), bo być może trzeba będzie jakieś dać rozwiązania dot. długich przewodów (zakłócenia, pojemności)
  • #28
    arkosmc
    Level 10  
    No to wydaje mi się, że starczy mi Eurokarta 3U/220 (10x22cm). Tylko nie wiem jeszcze w jakich obudowach mam brać te układy i czym one się tak prawdę mówiąc różnią... Wydaje mi się, że najsensowniej będzie DIP, ale wolałbym się upewnić, bo widziałem jeszcze takie oznaczenia jak MLF, czy TQFP... Albo układ 74LS165 mam w wersjach: SO16, DIL16, LCC20...

    No i jeszcze jedno pytanko: Czy ktoś może zna stronę z bibliotekami do Eagle`a ? Bo te z ich stronki są dość stare i niewiele rzeczy tam znalazłem...

    No to zrobiłem ten schemat (dość po mojemu i pewnie całkowicie źle :P) ale jakby ktoś mógł na to fachowym okiem rzucić, to byłbym wdzięczny :)
  • #29
    arkosmc
    Level 10  
    A teraz tak sobie myślę, czy wygenerowanie 2A prądu na zasilenie tych wszystkich diodek nie będzie problemem? Bo w data-sheet'ie nie widzę nic na temat impulsowego zaświecania tych diod. W dodatku zaproponowałeś zasilacz, który daje 0,5 ampera... Ja coś bredzę, czy rzeczywiście jest coś nie tak?
  • #30
    Paweł Es.
    VIP Meritorious for electroda.pl
    32 diody zasilane prądem 10 mA każda, dają w sumie 320 mA prądu co jest mniejsze od 500 mA (max. wydajność zasilacza)
    Układ 6276 daje statyczne sterowanie diod, nie trzeba ich multipleksować.