Sterowanie przez LAN – 24 kanały [Atmega32][ENC28J60][Bascom]

Sterowanie przez LAN – 24 kanały [Atmega32][ENC28J60][Bascom]

Witam,

Chciałem nieco odświeżyć stary, nie do końca sensowny jak na te czasy temat,
jakim jest mikroserwer oparty o równie archaiczny mikrokontroler Atmega32 i układ ENC28J60. W moim projekcie układ ma pracować jako prosta automatyka domu, więc tak też dostosowałem kod programu [Bascom].

Najpierw zabrałem się za uporządkowanie kodu, by zyskać jak najwięcej pamięci RAM dla swobodnej pracy programu. Pozbyłem się NTP, bo zegar i data do niczego mi potrzebny nie jest, i naniosłem poprawki opisywane przez jednego z kolegów na forum elektrody (źródła poniżej). Dodałem też zmienną ułatwiającą zmianę portu HTTP, bez zbędnego przeszukiwania całego kodu – to spore ułatwienie.

Cała konfiguracja zaczyna się od linijki 295, i można w niej ustawić adres IP, MAC, i port HTTP.

Opublikuj swój projekt i odbierz 50% rabatu do wykorzystania w sklepie Nettigo.pl

Sterowanie przez LAN - 24 kanały [Atmega32][ENC28J60][Bascom] 

Program działa bardzo stabilnie. Od kilku dni podłączony jest do zasilania, i testowany różnymi poleceniami. W stabilności pomaga taktowanie uC, wzięte bezpośrednio z sygnału zegarowego ukłau ENC28J60. Jest to aż 25MHz, czyli więcej niż maksymalne dozwolone taktowanie Atmegi, ale znosi to ona bez problemu. Można taktować ją osobnym kwarcem, ale prędzej czy później komunikacja między ENC się rozjedzie, i serwer nie będzie działał.

Sterowanie przez LAN - 24 kanały [Atmega32][ENC28J60][Bascom] 

No i na koniec, co udało mi się osiągnąć…
Możliwość sterowania przez polecenia GET, wszystkimi pinami portów A, C, i D, co daje aż 24 wyjścia, do których już można podłączyć choćby przekaźniki.
Niestety mimo wyświetlania na stronie mikroserwera stanu poszczególnych pinów w portach, nie potrafię podjąć tych danych przez zewnętrzną stronę, co uniemożliwia mi uzyskanie sprzężenia zwrotnego. To duża wada, ale może kiedyś uda mi się ją rozwiązać, albo i wam jeśli ktoś będzie zainteresowany projektem.

Sterowanie przez LAN - 24 kanały [Atmega32][ENC28J60][Bascom] 

Jak steruje się portami?

Sama strona serwera, jest bardzo minimalistyczna, choć jest jeszcze miejsce w RAMie na jej rozbudowanie. Pełni ona rolę bardziej diagnostyczną, no i taką żeby serwerek jakoś tam widniał w sieci. Moim zdaniem w zupełności wystarcza. Sterowanie portami odbywa się poprzez polecenia wpisywane w pasku adresu strony.

Przykładowo:
http://192.168.1.125/A0=1 – Ustawia stan wysoki na PORTA.0
http://192.168.1.125/A0=0 – Ustawia stan niski na PORTA.0
http://192.168.1.125/C3=1 – Ustawia stan wysoki na PORTC.3
http://192.168.1.125/C3=0 – Ustawia stan niski na PORTC.3
http://192.168.1.125/A=1 – Ustawia stan wysoki na wszystkich pinach portu A
http://192.168.1.125/A=0 – Ustawia stan niski na wszystkich pinach portu A

Wszystkie komendy dużymi literami!

No tak… ale wpisywanie nie jest zbyt wygodne, żeby zaświecić czy zgasić sobie choćby światło w pokoju. Przyszło mi na myśl proste rozwiązanie, polegające na stworzeniu strony internetowej w równie archaicznym jak cały projekt programie Microsoft Front Page ;)
Są tam dość ładne gotowe przyciski do wyboru, które mogą służyć jako hiperłącza z komendami, które będą „otwierać” się w małej na 1 piksel ramce wbudowanej – tak wiem…. rozwiązanie na poziomie informatyki w czwartej klasie podstawowej ale działa! I wygląda nie najgorzej :D.

Sterowanie przez LAN - 24 kanały [Atmega32][ENC28J60][Bascom] 

Można wrzucić taką stronę na telefon z Androidem, choć nie próbowałem, albo można skompilować ją do aplikacji APK za pomocą programu „Website 2 APK Builder” https://websitetoapk.com/

Chyba wyczerpałem już ten stary temat. Myślę że mimo braku zabezpieczeń i informacji zwrotnej o stanie pinów na zewnętrznej stronie, ten prosty mikroserwerek można z powodzeniem wykorzystać, jako chociaż namiastkę „inteligentnego domu” i sterować zdalnie oświetleniem, czy innymi sprzętami. Koszt wykonania jest śmiesznie niski. 24 wyjścia za 30zł (nie licząc przekaźników), więc nawet dla zabawy można pochylić się nad tematem ;)

Na jakiś czas, do póki nie podłącze serwerka do instalacji elektrycznej,
udostępniam go do zabawy, i sprawdzenia jak działa ;)

>> http://185.53.154.189:99/ <<

Pozdrawiam i zachęcam do zabawy,
Łukasz Górecki

Źródła:
http://members.home.nl/bzijlstra/software/examples/enc28j60.htm
https://www.elektroda.pl/rtvforum/topic2210741.html

Pliki załączone do artykułu:

Ocena: 4/5 (głosów: 1)
Nettigo - patron działu Elektronika

Podobne posty

14 komentarzy do “Sterowanie przez LAN – 24 kanały [Atmega32][ENC28J60][Bascom]

  • Sam projekt bardzo fajny, przydałyby się jakieś fotki albo schemat.
    Stronkę można by odchudzić bo widzę, że zaciąga dużo niepotrzebnych plików.
    Co masz na myśli pisząc: „Nie potrafię podjąć tych danych przez zewnętrzną stronę”?

    Odpowiedz
  • Bardzo fajny projekt.
    Może z tym sprzężeniem zwrotnym nie jest tak źle. Wykorzystałem szanse przetestowania, jaką dałeś i wywołałem kilka poleceń zapalenia / zgaszenia kilku bitów – strona serwerka odświeża się wyświetlając poprawnie zapalone / zgaszone bity. W mojej ocenie taka informacja jest wystarczająca. Gratulacje. Może uda mi się skorzystać z Twojego projektu, chociaż osobiście bawię się wyłącznie środowiskiem Arduino.

    Odpowiedz
  • Krzysztof:
    Stronę, która łączy się z mikroserwerem jak najbardziej można odchudzić, tyle że nie bardzo jest sens, bo aplikacja która tworzy z niej APK na Androida, i tak działa po swojemu.
    Wygodnie dodaje się nowe przyciski, i ich nazwy we FrontPage’u bezpośrednio. To on robi taki bałagan. Jeśli chodzi o podejmowanie danych, nie wiem jak odczytać powiedzmy aktualny stan portu np PORTD.3, tak by znalazł się on na tej dodatkowej stronie. Wszystko to musi być w samym HTMLu, bo nie uda się przerobić strony w APK.

    Zbycho_GL:
    Dzięki,
    Jak zauważyłeś stany portów na stronce serwera wyświetlają się poprawnie. Mi chodzi o efekt, w którym na tej dodatkowej stronie z przyciskami, będzie wyświetlał się aktualny stan konkretnego pinu w danym porcie. Nie wiem jak za pomocą HTMLa podjąć te dane ze strony serwerka. Co do wykorzystania projektu, mogę Ci go skompilować do postaci HEX, i sobie wrzucisz na Atmege32.

    Odpowiedz
  • Łukasz, dzięki za propozycję HEX-a. Taki wariant niestety uniemożliwi eksperymentowanie, więc raczej będę próbował przerobić kod na Arduino.
    A co do html-a: najprościej byłoby bezpośrednio na serwerze wygenerować stronę z przyciskami, wtedy problem odczytu rozwiąże się sam. Innym rozwiązaniem będzie napisanie skryptu i umieszczenie go w kodzie strony. Skrypt mógłby odczytywać kolejno każdy port, a z niego poszczególne piny. Nie wiem tylko, jak taka strona ze skryptem będzie interpretowana przez „Website 2 APK Builder”.

    Odpowiedz
  • Generalnie obrazki i całą stronę możesz mieć na zewnętrznym serwerze. Układ powinien jedynie zwracać stan najlepiej w formacie json oraz umożliwiać ustawianie statu tak jak dotychczas parametrami A0..7=X itd. Żeby strona mogła się komunikować np: przez jQuery z tym serwisem odpowiedzi tego serwera muszą mieć odpowiednie nagłówki:
    ‚Access-Control-Allow-Origin’: ‚*’,
    ‚Access-Control-Allow-Headers’: ‚Origin, X-Requested-With, Content-Type, Accept’
    Zamiast gwiazdki można dać nazwę domenową.
    Podobnie można się łączyć z androida po http z tym serwerem.
    Oczywiście należałoby też dodać jakieś uwierzytelnianie żeby pierwszy lepszy nie mógł Ci gasić światła.

    Odpowiedz
  • „Jest to aż 25MHz, czyli więcej niż maksymalne dozwolone taktowanie Atmegi, ale znosi to ona bez problemu. Można taktować ją osobnym kwarcem, ale prędzej czy później komunikacja między ENC się rozjedzie, i serwer nie będzie działał.”
    Różne taktowanie nie powinno przeszkadzać w komunikacji, chyba, że program nie bierze tego pod uwagę.

    Odpowiedz
  • „Hehe program nie bierze tego pod uwagę… Dobre ;)”
    A co, źle mówię?
    Program powinien być przygotowany pod konkretne taktowanie mikrokontrolera i odpowiednio wysyłać/odbierać dane.
    Nic się nie powinno „rozjechać”, chyba, że programista jest amatorem.

    „poczytaj trochę o ISP”
    Co ma metoda wrzucania nowego programu na AVR do „rozjechania” komunikacji AVRENC28J60?

    „zapoznaj się z kodem źródłowym”
    Przejrzałem. Jeden wielki plik z kodem Bascom. Nic interesującego.

    Sam linkujesz stronę http://members.home.nl/bzijlstra/software/examples/enc28j60.htm,
    gdzie autor wspomina konieczność ustawienia dzielnika do działania komunikacji ENC28J60 i ATMega:
    „‚clock from default divide/4 (6.25 Mhz) to divide/2 (12.5 Mhz)
    Call Enc28j60writecontrolregbyte(ecocon , &B00000010)”

    Odpowiedz
  • Tak… Ale po co skoro może być wspólny zegar? Każda komunikacja z czasem się rozjeździe gdy ma inne taktowania. Jeśli zaczną całkiem się mijać i korekta programowa nie pomoże. Nie wiele można zrobić z komunikacją encyklopedia, bo od strony układu jest ustawiona na sztywno. Co innego gdyby to był własny protokół komunikacji.

    Odpowiedz
    • „Ale po co skoro może być wspólny zegar?”
      No nie wiem, może po to, żeby nie używać taktowania prawie dwukrotnie wyższego niż pozwala dokumentacja?
      Zanim napiszesz, że przecież działa: a sprawdzałeś działanie w różnych temperaturach? Efekt starzenia się mikrokontrolera? Nie mówię, że wszystko należy robić idealne (sam często „idę na skróty”), ale niepotrzebnie tak tego bronisz.

      „Każda komunikacja z czasem się rozjeździe gdy ma inne taktowania. Jeśli zaczną całkiem się mijać i korekta programowa nie pomoże.”
      Czemu niby? SPI to nie jest protokół, gdzie urządzenia nadają niezależnie od siebie.

      1. SPI działa na zasadzie: pytanie-odpowiedź:
      https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
      „The master device originates the frame for reading and writing.”
      Różnica taktowania nie powinna więc powodować pogarszania się komunikacji, bo nie rośnie z czasem. Każda komunikacja po SPI powinna być niezależna.

      2. SPI nadaje własne taktowanie (ten sam artykuł wiki):
      „SCLK: Serial Clock (output from master)”

      Poza tym wiem, że mnóstwo ludzi nie wymyśla bzdur, tylko używa ENC28j60 z normalnie taktowaną ATMegą.
      I wiesz co? To działa.

      Odpowiedz

Odpowiedz

anuluj

Sterowanie przez LAN - 24 kanały [Atmega32][ENC28J60][Bascom]

Nie przegap nowych projektów!

Zapisując się na nasz Newsletter będziesz miał pewność, że nie przegapisz żadnego nowego projektu opublikowanego w Majsterkowie!

Od teraz nie przegapisz żadnego projektu!

Masz uwagi?