Witam,
Mam problem odnośnie modułu W5100. Mianowicie, po fizycznym resecie modułu (przycisk), moduł zachowuje się w 3 bliżej określonych stanach:
1. działa stabilnie - nie mam nic do zarzucenia
2. działa, ale odbiera tylko niektóre ramki
3. nie działa
Opis:
Z komputera, za pomocą skryptu, wysyłam ramki w odstępie 100ms do płytki z W5100 i mikrokontrolerem ATXmega128A1U. Wykorzystuje protokół UDP. Na samym początku programu w xmega inicjalizuję SPI, W5100, oraz przerwanie od W5100 na odpowiednim pinie. Po zainicjalizowaniu modułów mam pętlę while jedynie z opóźnieniem i miganiem diody(aby wykryć zawieszenie programu). W procedurze obsługi przerwania od W5100 zmieniam wyjście pinu na przeciwny (odpowiadający za inną diodę) i zeruję rejestr przerwań odpowiedniego socketu w W5100. Prosty program. Po wejściu w pętle while program nie korzysta już z SPI bo nie musi - rejestruję tylko przerwanie INT z W5100 i na podstawie zmiany szybkości diody wiem czy dane dobrze odbiera czy nie.
Problem:
Przy niektórych resetach program działa wręcz idealnie - miganie diody odpowiada dokładnie wysyłanym ramkom, następnie dochodzi do końca bufora RX i jest błąd(co jest normalne).
W niektórych przypadkach dioda miga bardzo rzadko (ok raz na 5-20 ramek) i bardzo nieregularnie.
Po niektórych restartach dioda nie miga - program działa normalnie, lecz nie ma przerwań od W5100 - nawet zmierzyłem poziom napięcia na pinie /INT od W5100 - wynosi ok 3,2V
W tych trzech wypadkach używam tego samego programu na AVR tego samego skryptu na PC i tylko za pośrednictwem przycisku wymuszam reset który jest resetem jednocześnie dla xmegi i w5100.
Oczywiście używam także programowego resetu na początku inicjalizacji w5100 w programie zapisując 7 bit rejestru MR '1'.
Borykam się z tym problemem już dość długo ...zdecydowanie za długo
. Ktoś ma jakieś doświadczenia z podobnym zachowaniem W5100?
Z góry dziękuję za odpowiedź.
Pozdrawiam.
Mam problem odnośnie modułu W5100. Mianowicie, po fizycznym resecie modułu (przycisk), moduł zachowuje się w 3 bliżej określonych stanach:
1. działa stabilnie - nie mam nic do zarzucenia
2. działa, ale odbiera tylko niektóre ramki
3. nie działa
Opis:
Z komputera, za pomocą skryptu, wysyłam ramki w odstępie 100ms do płytki z W5100 i mikrokontrolerem ATXmega128A1U. Wykorzystuje protokół UDP. Na samym początku programu w xmega inicjalizuję SPI, W5100, oraz przerwanie od W5100 na odpowiednim pinie. Po zainicjalizowaniu modułów mam pętlę while jedynie z opóźnieniem i miganiem diody(aby wykryć zawieszenie programu). W procedurze obsługi przerwania od W5100 zmieniam wyjście pinu na przeciwny (odpowiadający za inną diodę) i zeruję rejestr przerwań odpowiedniego socketu w W5100. Prosty program. Po wejściu w pętle while program nie korzysta już z SPI bo nie musi - rejestruję tylko przerwanie INT z W5100 i na podstawie zmiany szybkości diody wiem czy dane dobrze odbiera czy nie.
Problem:
Przy niektórych resetach program działa wręcz idealnie - miganie diody odpowiada dokładnie wysyłanym ramkom, następnie dochodzi do końca bufora RX i jest błąd(co jest normalne).
W niektórych przypadkach dioda miga bardzo rzadko (ok raz na 5-20 ramek) i bardzo nieregularnie.
Po niektórych restartach dioda nie miga - program działa normalnie, lecz nie ma przerwań od W5100 - nawet zmierzyłem poziom napięcia na pinie /INT od W5100 - wynosi ok 3,2V
W tych trzech wypadkach używam tego samego programu na AVR tego samego skryptu na PC i tylko za pośrednictwem przycisku wymuszam reset który jest resetem jednocześnie dla xmegi i w5100.
Oczywiście używam także programowego resetu na początku inicjalizacji w5100 w programie zapisując 7 bit rejestru MR '1'.
Borykam się z tym problemem już dość długo ...zdecydowanie za długo
Z góry dziękuję za odpowiedź.
Pozdrawiam.
