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

[Atmega32],[C],[UART], komunikacja z enthernetem

08 Maj 2011 14:58 2828 22
  • Poziom 16  
    Witam szanownych kolegów.

    Chciałbym się poradzić w pewnej kwestii, a mianowicie :

    Realizuje sterowanie nawadnianiem ogrodu i chciałbym mieć możliwość zobaczenia co się dzieje ze sterownikiem oraz np załączania i wyłączania elementów wykonawczych systemu.

    Miało by to wyglądać tak mniej-więcej jak stronka konfiguracyjna routera, tzn loguje się z przeglądarki internetowej i mam stronę gdzie widzę stan urządzenia i jakiś tam konfig oraz sterowanie ręczne urządzeniem ze strony www.

    Najchętniej skłaniałbym się w stronę jakiegoś gotowego modułu takiego co bym nie musiał zagłębiać się w stos tcp/ip oraz jego obsługę .
    Dodam ze milo by było jakby komunikował się z atmegą np poprzez uart .

    Dodam iż przeglądając forum znalazłem tylko porady typu zastosować jakiś routerek typu linksys wrl i podobne.
  • PCBway
  • Poziom 38  
    Słabo szukałeś w necie jest mnóstwo przykładów jak i DIY
  • Moderator Mikrokontrolery Projektowanie
    Lepiej to rozdzielić na dwa układy. Sterownik nawadniania musi być stosunkowo blisko elektrozaworów, którymi steruje. I teraz robiąc tam ethernet musiałbyś od niego ciągnąć skrętkę do najbliższego switcha/kompa. IMHO niewygodne. Lepiej zaszyć w takim sterowniku moduł WiFi i robić to radiowo. Ponieważ jednak takie moduły są drogie i wcale nie jest łątwiej je oprogramować ja robię to na RFM22 (tani), albo RFM70 (ultratani) i dodatkowo wtyczkę na USB do kompa z takim modułem. Dzięki temu będę miał transmisję z kompa do sterownika i w razie czego www też łatwo dodać. Natomiast jeśli chcesz koniecznie ethernet to po SPI masz enc28j60. Do tego łątwo ściągnąć darmowy soft.
  • PCBway
  • Moderator na urlopie...
  • Poziom 16  
    Witam ponownie i dziękuje za zainteresowanie.

    Już wcześniej znalazłem informacje na temat tych układzików. Wydaja mi sie one ok , ale zapytam się przed kupnem ich jeszcze o parę spraw ...

    Konkretnie chce obsługiwać
    odczyt temperatury na stronie internetowej z 3 ds18b20,
    odczyt sth11,
    wł/wył 12 sekcji podlewania ,
    zmieniać ustawienia czasów nawadniania oraz je odczytywać ,
    modyfikować pozostałe ustawienia zawarte w eepromie atmegi.


    Mysle o TYM module do tego tylko pytanie czy on umozliwi mi realizacje moich założeń
  • Poziom 38  
    Na łamach EP był projekt ethernetowego modułu przekaźnikowego i kilka innych.
  • Poziom 42  
    domelfm napisał:
    Mysle o TYM module do tego tylko pytanie czy on umozliwi mi realizacje moich założeń


    Proponuję ci przed zakupem takiego modułu, jednak najpierw sprawdzenie tego wszystkiego na jakimś własnym zestawie uruchomieniowym czy kupnym. Warto na początek zobaczyć jak się to programuje itp ... bo później jak coś nie wyjdzie to modulik pójdzie do kosza. A jak zobaczysz o co chodzi to się okaże jeszcze że albo sam sobie taki zmajstrujesz albo kupisz jeszcze inny - bo już będziesz sam wiedział o co chodzi.
  • Moderator Mikrokontrolery Projektowanie
    Kupując takie moduły musisz mieć na względzie, że one nadają się wyłącznie do sieci wewnętrznych. Zwykle dostępne do nich stosy TCP nie są zbyt bezpieczne, nawet nie chodzi o możliwość włamania, tylko nieprawidłowe pakiety TCP będą ci zwieszać moduł.
    Poza tym potrzebujesz całego modułu wykonawczego, czyli robienie płytki i tak cię nie ominie, w tym momencie zamiast kupować moduł lepiej od podstaw zrobić całość.
    BTW, co ten SHT11 będzie robił? Chyba nie zamierzasz nim mierzyć wilgotności gleby?:)
  • Poziom 32  
    tmf napisał:
    Kupując takie moduły musisz mieć na względzie, że one nadają się wyłącznie do sieci wewnętrznych. Zwykle dostępne do nich stosy TCP nie są zbyt bezpieczne, nawet nie chodzi o możliwość włamania, tylko nieprawidłowe pakiety TCP będą ci zwieszać moduł.

    To chyba do kosza z tym modułem skroro mialby sie wieszac, choć z drugiej strony to wieszanie raczej nie bedzie winą samego modułu. Właśnie zakupiłem od kolegi Mirka karte z tym układem i zmartwilaby mnie wiadomośc że sie moduł wiesza, choć uważam że zwis modułu jako takiego jest niemożliwy.
  • Moderator Mikrokontrolery Projektowanie
    Źle mnie zrozumiałeś. To nie sam sprzęt się wiesza, lecz oprogramowanie. Aby było możliwie krótkie nie bada się dokładnie każdej ramki TCP, w efekcie łatwo podstawić spreparowane ramki. Z drugiej strony maksymalna ramka TCP może mieć 1,5kB, wiele procesorów nie ma tle pamięci.
  • Poziom 32  
    A czy konieczne jest sciagać całą ramkę do procesora nawet w przypadku gdy ramka bedzie maksymalna 1.5kB?
  • Moderator Mikrokontrolery Projektowanie
    No i tu już właśnie wchodzimy w szczegóły implementacji - wszystko zależy jak oszczędny był autor danego rozwiązania. Jeśli założył, że niepoprawne albo za długie ramki się nie zdarzają to w tym momencie kwiczysz. Jeśli porobił różne sprawdzenia to z kolei program się wydłuża. Jak się nie obrócisz to d... z tyłu. Dlatego IMHO takie moduły z AVR to tylko zabawki. Czemu nie wykorzystać jakiegoś ARMa lub AVR32 z normalnym stosem TCP i ethernetem wbudowanym w procesor? I tak wyjdzie to taniej i zapewne prościej.
  • Poziom 26  
    Nie wiem jakie jest doświadczenie autora w programowaniu uC itd, ale jeżeli to pierwszy projekt "ethernetowy" to proponuję pójść trochę inną drogą.

    Mianowicie lepiej i łatwiej wykonać sobie moduł sterujący z protokołem (jakimkolwiek binarnym, czy tekstowym) i interfejsem UART. Dalej taki moduł podpinamy do routera z OpenWRT (taki okrojony linux) na pokładzie. Można to zrobić np na dlink DIR-300 W routerze realizujemy całą oprawę, czyli WWW, interfejs shedulery, wysyłanie komend do urządzenia sterującego oraz odczyt stanu czujników etc.

    Rozwiązanie jest prostsze, lepsze i bezpieczniejsze. Można spokojnie zrobić sobie nawet SSL via HTTP i w miarę normalną stronę postawić. Nie ma problemów niedoskonałości stosów i innych.

    Koszty całości też nie za wysokie bo taki router można tanio dostać. Jak by policzyć ceny komponentów, pcb to router chyba by wyszedł taniej. Czasu to już nawet nie liczę...
  • Poziom 16  
    Witam.

    Tak potwierdzę od razu iż to mój pierwszy projekt z internetem.

    Jak widzę to chyba rozwiazanie z routerkiem chyba bedzie najlepsze i odrazu wifi jest :)

    sth 11 do pomiaru wilgotnosci powietrza oczywiście :)
  • Poziom 26  
    No to zrób tak jak Tobie napisałem. Najpierw zrób sterownik z wyjściem UART 3.3V (wyprowadzone TXD ,RXD i GDN). Oprogramuj wszystkie czujniki i peryferia itd, a później go podłączysz do routera z OpenWRT.

    Strona na routerze to w wygląda tak jak pisanie programu na linuxa, możesz korzystać z wszystkich jego dobroci. Jest tutaj tylko jeden szkopuł - ograniczenie miejsca na dane. Ale jakaś prosta strona bez grafiki będzie śmigać. Grafika też może być ewentualnie w innym miejscu. Można też czasami rozszerzyć miejsce montując kartę SD, lub jak router ma usb jakiegoś pendrive.
  • Moderator Mikrokontrolery Projektowanie
    Jeszcze inaczej... routery zazwyczaj mają parę wolnych portów IO, a w każdym razie można taki znaleźć. Podpiąć pod nie potrzebne czujniki i żadnej elektroniki zewnętrznej nie trzeba. Takie projekty można znaleźć w necie. Z ograniczoną ilością miejsca łatwo sobie poradzić podpinając pod dostępne USB pamięć - obsługa jest w kernelu linuxopodobnych routerków, podmontować jako fs i sprawa załatwiona.
  • Poziom 26  
    Ja w swoim d-linku dołożyłem kartę SD na portach GPIO. Wolne bo wolne, ale działa.

    Wykorzystanie tych portów jest możliwe ale ja bym tak nie robił. I tak jakaś dodatkowa PCB musi być, a ciągnięcie tylu przewodów to trochę głupie jest. No i ciężko będzie znaleźć ich aż tyle (12 sekcji podlewania, czujniki itd:))
  • Poziom 16  
    ok...
    Kupiłem tp linka 3420 ... Wgrałem openwrt uruchomiłem port rs232 (uart) .
    Teraz kwestia jego obsługi.
    Polecenie echo daje rade ale pytanie jak to realizować poprzez strone internetową.

    Narazie widze to tak w avr mam tablice z konfigiem i informacjami o stanie sekcji .
    Odczytuje ją na podstawie tych info tworze stronkę i zmieniam sobie na niej coś i wysyłam tablice ze zmianami do mikro-kontrolera .

    Myślę o stronce w php.

    Podstawowe pytanie:

    Jak realizować w php obsługę rs232 ?
    i jak tworzyć stronę na podstawie danych z mikro kontrolera ?
  • Pomocny post
    Poziom 26  
    Witam.

    W zasadzie to obsługa portu szeregowego pod linuxem zgodnie z ich zasadą "everything is a file" to po prostu zapis i odczyt z pliku. W php otwieramy plik /dev/ttyS0 i zapisujemy do niego i/lub odczytujemy. Dodatkowym poleceniem konfigurujemy parametry.

    Z tym że komunikacja php z urządzeniem, to nie jest idealny model. Znaczy w sumie zależy od tego jak bardzo zaawansowane twoje urządzenie będzie. Model best pratice IMO to taki gdzie masz "virtualne" urządzenie na odwzorowane za pomocą napisanego przez Ciebie demona (programu działającego w tle). Demon ten generuje wszystko co jest potrzebne do generowania strony internetowej, oraz przyjmuje komendy z php (np przez zewnętrzną aplikację). To demon komunikuje się z Twoim urządzeniem i jest interfejsem między nim, a resztą świata.

    Model z PHP ma sporą wadę, taką że urządzenie odczytuje dane z portu szeregowego tylko po wywołaniu strony. Czyli nie jesteś w stanie wykrywać monitów z urządzenia. Druga wada takiego modelu, to że port szeregowy może być otwarty tylko przez jedno urządzenie. Więc jak wykonasz dwa zapytania, to jedno zgłosi błąd.

    Oczywiście przy prostych urządzeniach ten model nie musi być aż tak rozbudowany. W zasadzie, jak napisałem wcześniej, zależy jak sterowanie będzie zrealizowane. W najprostszym modelu można pokusić się o jeden długi ciąg danych z wszystkimi "nastawami". Ten ciąg przesyłamy wtedy do urządzenia np co 0,5s.
  • Moderator na urlopie...
    poorchava napisał:
    A może udp? Jest znacznie prostsze w implementacji niż TCP.

    Jak to się ma do założeń autora tematu:
    domelfm napisał:

    Miało by to wyglądać tak mniej-więcej jak stronka konfiguracyjna routera, tzn loguje się z przeglądarki internetowej i mam stronę gdzie widzę stan urządzenia i jakiś tam konfig oraz sterowanie ręczne urządzeniem ze strony www
  • Poziom 16  
    Witam.

    Mama tutaj pytanie do użytkownika hotdog oraz innych którzy znają się w temacie.

    Może na początek powiem jak układ będzie wyglądał ,
    będą 2 up atmega 128 do obsługi menu wyświetlacza czujników komunikacji ze światem , oraz atmega 32 działająca jako trochę inteligentniejszy de-multiplekser :) (sterowanie elektrozaworami poprzez tyrystory oraz pomiar prądu płynącego przez cewki elektrozaworów i wykrywanie uszkodzeń elektrozaworów).

    Komunikacja miedzy up inicjowana będzie z atmegi 128 oraz , atmega 128 będzie załączał atmege 32 która normalnie będzie wyłączona (sleep).
    Atmega 32 będzie wysyłać wyniki pomiarów prądów oraz kody awarii .

    Atmega 128 będzie miała zapisane dane konfiguracyjne w ee-promie oraz średnie z pomiarów będzie zapisywać w ee-promie , na podstawie tych danych będzie sterować sekcjami .
    Dane te mają być możliwe do odczytania oraz edytowania na stronie www.

    Teraz można przejść do zasadniczej części pytania :)
    Znam programowanie w c ale niestety raczej w windows .
    Myślę ze z wasza pomocą napisze demona (program działający w tle realizujący komunikacje z up) i dla linuxsa .
    Teraz jak to by miało wyglądać konkretnie tzn komunikacja demona z www ?
    Jak zrealizować dynamiczna stronę , niestety nie znam zbytnio php i dodam ze nie lubię javy.

    Pozdrawiam
  • Moderator na urlopie...
    Co do php to poszukaj w sieci jakichś kursów, bo jeśli znasz C to nauka PHP zajmie z grubsza 1 dzień (podstawy takie same, różne tylko "szczególiki" <<a diabeł tkwi w szczegółach>>, które trzeba poznać i funkcje charakterystyczne): http://www.google.pl/search?q=kurs+php
    Jakbyś miał pytania stricte dot. tego języka to pisz śmiało na forum lub PW, bo tworzę w tym języku oprogramowania do stron internetowych.
    Co do samego OPENWrt to niestety pomóc nie będę mógł, bo sam dopiero zamierzam zacząć z nim zabawę.