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

[Atmega 32][Bascom avr] Rozbudowa modułu internetowego ENC28J60

04 Lut 2012 21:14 8181 21
  • Poziom 12  
    Witam postanowiłem zrobić sobie sterownik który będzie sterowany przed przeglądarkę internetową cały układ pracuje na Atmega 32 o taktowaniu 16MHz i module internetowym ENC20j60 ale mam pewien problem. Układ zrobiłem cały poprawnie wszystko ładnie działa mogę włączyć i wyłączyć LEDa i tu nasuwa się problem bo tylko jednego leda mogę włączyć i wyłączyć. Gdy chciałem dopisać w programie kod do sterowania kolejnym pinem to nie udawało mi się to gdyż tylko mogłem go włączyć a wyłączyć już nie. Wzorowałem się na tym projekcie Strona projektu Może ktoś już rozbudowywał ten projekt i też miał taki problem. Głowie się już z tym jakiś czas i nie mogę znaleźć żadnego rozwiązania.
  • Relpol
  • Poziom 28  
    Może jakiś czarodziej ci powie co źle robisz, bo nie widzę twojego kodu.

    Ale stawiam, że zrobiłeś błąd w swoich modyfikacjach albo nie skonfigurowałeś portów ;P
  • Poziom 12  
    Proszę oto kod. Chodziło mi o to ze moze podpowiecie mi w którym miejscu i jakie modyfikacje musze dać a w linku który podałem jest opis i cały kod.
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 12  
    Witaj,
    mam taki sam problem z tym samym kodem. Mogę jeszcze dodać, że kiedy zmieniam coś w kodzie html w liniach data to strona sie nie wczytuje wcale. Czy też miałeś taki problem? Czy twoja strona chodzi również na telefonie bo mnie się wczytuje tylko na laptopie. Aha po każdym naciśnięciu LEDON lub LEDOFF muszę odświeżać stronę w przeglądarce, wtedy dioda się zapala lub gaśnie.
  • Relpol
  • Moderator na urlopie...
    1. Problem z nie wczytywaniem większych stron jest spowodowany koniecznością zwiększenia rozmiaru bufora
    2. Co do dopisania kolejnego leda - nie mam teraz czasu na przegląd kodu.
    3. Niestety biblioteki te pod Bascoma są niedopracowane - zawieszają się czasami a także jest problem z urządzeniami mobilnymi, które wysyłają dłuższe naglowki - kiedyś zacząłem przy tym grzebać, ale ale nauczyłem się C zanim rozwiazalem problem i już do Bascoma nie wracałem, bo biblioteki pod C działają świetnie.

    Dodano po 7 [minuty]:

    Ps. Wszędzie powinno być mid( tempstring2, 6, ... - Zamien to tam gdzie masz 7., to chyba to...
  • Poziom 12  
    Ok, właśnie zrobiłem coś takiego, mogę sterować dwoma ledami, analogicznie będzie przy większej ilości.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Strona nadal nie wyświetla się w komórce przez wi-fi
  • Poziom 24  
    piotrva napisał:
    3. Niestety biblioteki te pod Bascoma są niedopracowane - zawieszają się czasami a także jest problem z urządzeniami mobilnymi, które wysyłają dłuższe naglowki - kiedyś zacząłem przy tym grzebać, ale ale nauczyłem się C zanim rozwiazalem problem i już do Bascoma nie wracałem, bo biblioteki pod C działają świetnie.

    Przeglądając pliki z tuxgraphics.org i erratę do ENC28J60, można znaleźć gdzie są błędy:
    - w procedurze Enc28j60_init złe ustawienia adresów bufora rx i tx, w erracie napisane jest bufor odbioru MUSI się zaczynać od adresu $0000, wersja Bascom'owa tak nie robi.
    - hardware odbioru może uszkodzić bufor (źle ustawia wskaźnik na następny segment czy jakoś tak :) ), procedurę Enc28j60_packetreceive() należy poprawić tak aby wyłapać ten moment, a następnie ustawić prawidłowy adres.
    - nie działająca poprawnie procedura Enc28j60_readphyword - błędy w pliku nagłówkowym i zamieniona kolejność odczytu bajtów (młodszy, starszy bajt)
    - procedurę Enc28j60_reset też do poprawki - opisane w erracie, sprawdzanie bitu estat_clkrdy niekoniecznie musi działać, lepiej odczekać 1ms ;)
    - błąd też jest przy resetowaniu "logiki transmisji"

    Tyle udało mi się odnaleźć :). Na początku byłem lekko niezadowolony z tego modułu, wszyscy się jarają enc28j60, a to takie niestabilne "badziewie" :).
    Po poprawkach zaczyna to stabilniej chodzić. Testowałem na swoim nie dokończonym jeszcze kliencie TCP, przez 4 godziny na okrągło odczytywał 3 megabajtowy plik przez HTTP/GET jednocześnie był bombardowany pingami po 1000 bajtów :). Moduł się nie zawiesił.
  • Poziom 24  
    xdcer napisał:
    Czy u Ciebie nie ma problemów przy wyświetlaniu strony w telefonie po wprowadzonych zmianach, czy może szukać przyczyny gdzie indziej?


    Akurat tym przykładem nie bawiłem się, bibliotekę do komunikacji z ENC28J60 wykorzystuję do czegoś innego. Ale wydaję mi się że jest mały błąd, w definicji Const Max_framelen = 590, mi wychodzi że powinno być co najmniej 594 bajty (minimum segment size 536 + wszystkie nagłówki 54 + crc 4). Sprawdź z taką wartością, jeżeli nie będzie działało możesz też spróbować z 1518 (pełna ramka ethernet), jeżeli starczy ramu :). Nie widzę żeby gdzieś w programie były ustawiana wartość MSS (Maximum segment size) w nagłówku TCP. Może ustawienie odpowiedniej wartości umożliwi poprawną komunikacje telefonu z serwerem.
  • Poziom 11  
    Witam towarzystwo.
    Poprawiłem kod według zaleceń kolegi Mundi1970 i nie chce działać.
    Pominąłem procedurę Enc28j60_linkup bo to nic do sprawy nie wnosi.
    Dodałem w pliku inc linijkę:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    ponieważ wywalało błąd przez Txstop_init.
    Wydaje mi się że problemem jest procedura Enc28J60_init ale nie jestem w stanie tego udowodnić;)
    Wersja bez poprawek tj t1_9 stąd: Link działa co znaczy że nie ma żadnego babola przez nieprawidłowe podłączenie.
    Czy ktoś mógłby pomóc?

    Plik w załączniku.
  • Poziom 24  
    Witam,

    Stałą Const Txstop_init = &H5F0 dodałeś do oryginalnego pliku inc, w pliku który modyfikowałem (ENC28J60.inc) adresy buforów są zdefiniowane:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    W procedurze Enc28j60_init, popraw te linie:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 11  
    Aj zamotałem się z tym plikiem .inc
    Dzięki:)
    Zamieniłem plik i usunąłem komentarz z procedury Enc28j60 i nadal nie chce się strona wczytać. Pingi też nie wracają.

    Po powrocie do poprzedniej procedury Enc28j60_packetreceive i oczywiście poprawie zmiennych działa wszystko więc tu leży problem.
    W procedurze Enc28j60_poll brakuje wywołania funkcji Enc28j60_packetreceive(), tyle że nie wiem z jakim parametrem ją wywołać;) Zagubiłem się nieco.
  • Poziom 11  
    Mundi1970 napisał:
    Zmieniłem trochę obsługę tego sławnego "serwera http"

    "Trochę" to trochę mało powiedziane;) Teraz to jest bajka.
  • Poziom 10  
    Witam

    Mam Atmege 32 EvB

    nie chce mi tego skompilowac i wywala tu błąd :

    Wtemp = Rxstat And &H0080 ' maskuj bit Received Ok
    ' bład o tresci : ERROR 31 : Line 791 Invalid datatype 0007

    oraz

    If Wtemp = 0 Then
    ' bład o tresci : ERROR 31 : Line 793 Invalid datatype 0006

    oraz

    ' bład o tresci : ERROR 229 : Line 793 End Sub expected [>11]

    prosze o pomoc autora poprawki

    dziekuje z gory
  • Poziom 24  
    Sprawdź czy w funkcji Function Enc28j60_packetreceive() As Word, masz zdefiniowaną zmienną lokalną:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 31  
    A ma ktoś pomysł na wysyłanie większej ilości pakietów w celu przesyłania strony html o większym rozmiarze? Obecnie wszystko odbywa się za pomocą jednej ramki danych.
  • Moderator na urlopie...
    Witaj,
    Sam sprawą się nie zajmowałem, ale z punktu widzenia samych ramek i specyfikacji sieci jest to możliwe. W teorii wystarczy "tylko" ustawić odpowiednie bity w nagłówku ramki informujące o jej pofragmentowaniu oraz nadać każdej ramce odpowiedni, kolejny numerek, żeby PC sobie poskładał w dobrej kolejności.
  • Poziom 31  
    A jak koledzy u was wygląda sprawa z odbiorem protokołu NTP? U mnie cały czas wywala takie coś:

    Date : 78-01-D4
    Time : H6:G8:G2
  • Poziom 24  
    Ten program nie obsługuje NTP (port 123 RFC 1035) ani SNTP (port 123 RFC 2030), program wysyła pakiet na port 37 Time Protocol (RFC 868). Przy moich testach żaden serwer NTP nie odpowiedział na ten pakiet :).
  • Moderator na urlopie...
    MOżesz odpowiedni serwer NTP postawić na swoim PC (są gotowe programu), a serwer wymieniony w tym tutorialu: http://members.home.nl/bzijlstra/software/examples/enc28j60.htm odpowiada na te pakiety.