Goto page 1, 2, 3 Next
Atlantis
Guest
Mon Jul 07, 2014 4:24 pm
Wprowadzam właśnie niewielkie zmiany do softu w jednym z moich
projektów. Jedno z usprawnień umożliwia zapisywanie konfiguracji (m.in
numer IP) w pamięci EEPROM i przywracanie ustawień fabrycznych z flasha.
Aby dało się to robić wygodnie, potrzebuję sposobu zdalnego resetowania.
Skorzystałem z popularnego sposobu - watchdog ustawiony na najkrótszy
czas i pętla nieskończona.
Niestety, coś nie działa tak, jak powinno.
ATmega najwyraźniej się resetuje, ale ENC28J60 nie chce działać poprawnie.
Najpierw zaraz po resecie dioda połączenia na gniazdku RJ45 (ta, która
powinna świecić cały czas po włożeniu kabla Ethernetowego) zaczęła
szybko migać. Oczywiście urządzenie nie odpowiadało na pakiety UDP.
Dodanie instrukcji opóźnienia na początku programu zlikwidowało miganie,
ale nie przywróciło łączności.
Próbowałem też resetować ENC28J60 w przypadku wykrycia resetu przez
watchdoga. Próbowałem rozwiązania zarówno z resetem przez stan niski na
odpowiednim pinie, jak również przez SPI. Pomogło tyle, że układ
najwyraźniej "jakoś" się zainicjował, gdyż migała zielona dioda w
odpowiedzi na jakieś pakiety z sieci. Niestety ciągle nie przychodziły
odpowiedzi. Co ciekawe ta instrukcja blokowała układ cały czas, bez
względu na to czy był resetowany przez WD, czy przez odłączenie
zasilania, chociaż reset wykonywałem wewnątrz instrukcji sprawdzajacej
stan pinu odpowiadającego za eset watchdog wewnątrz MCUSR.
Ktoś wie co może być powodem takiego dziwnego zachowania?
Nie uśmiecha mi się odpinanie urządzenia od prądu po każdej zmianie
ustawień.
Poza tym można podejrzewać, że tak samo układ zachowania się po
normalnym restarcie przez watchdog. A przecież nie o to chodzi -
watchdog ma chronić przez zawieszeniami, a nie zawieszać układ.
feldmarszaĹek tusk
Guest
Mon Jul 07, 2014 6:48 pm
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami... do tej pory myślałem, że to przypadek choć miałem
świadomość o totalnym sukcesie platformy europejskiej... ale widzę, że
Wy też macie jakieś "numery" wałęsy... teraz myślę, że to jednak problem
wpływów zewnętrznych...
WĹodzimierz Wojtiuk
Guest
Mon Jul 07, 2014 7:44 pm
On 2014-07-07 20:48, feldmarszałek tusk wrote:
Quote:
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami...
To są jeszcze inne trolle, które coś projektują?
Włodek
Marek
Guest
Mon Jul 07, 2014 11:38 pm
On Mon, 07 Jul 2014 18:24:33 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Próbowałem też resetować ENC28J60 w przypadku wykrycia resetu przez
watchdoga. Próbowałem rozwiązania zarówno z resetem przez stan
niski na
Nie rozumiem, to ten soft do encj nie robi mu reset przy starcie i
musiałeś to dodać? Przecież reset przez wdg czy reset po poweron z
pkt widzenia softu to inicjalizacja...
Miałem podobne problemy z encj, okazało się że pin Vdd nie był
przylutowany do pada na płytce, tylko dotykał. Jak się gmerało przy
płytce (np. trąciło kabel eth) to encj świrował., co ciekawe led
linkon (zielona) paliła się tylko minimalnie słabiej niż jak Vdd
stykał "prawidłowo".
--
Marek
Atlantis
Guest
Tue Jul 08, 2014 4:00 am
W dniu 2014-07-08 01:38, Marek pisze:
Quote:
Nie rozumiem, to ten soft do encj nie robi mu reset przy starcie i
musiałeś to dodać? Przecież reset przez wdg czy reset po poweron z pkt
widzenia softu to inicjalizacja...
Właśnie to jest najdziwniejsze. Procedura inicjująca pracę ENC28J60
zawiera fragment odpowiedzialny za soft reset przez SPI. Przecież po
zresetowaniu układu przez watchdoga wsztko leci od nowa i praca układu
jest ponownie inicjowana, wykonuje się też reset.
Nie wiem więc skąd wzięło się to miganie i dlaczego zniknęło po dodaniu
funkcji opóźniającej na początku main(). Nie wiem dlaczego pomimo
wszystkich zabiegów po zdalnym resecie tracę łączność z układem...
Quote:
Miałem podobne problemy z encj, okazało się że pin Vdd nie był
przylutowany do pada na płytce, tylko dotykał. Jak się gmerało przy
płytce (np. trąciło kabel eth) to encj świrował., co ciekawe led linkon
(zielona) paliła się tylko minimalnie słabiej niż jak Vdd stykał
"prawidłowo".
To na pewno nie to. Układ działał całkowicie poprawnie przez miesiąc lub
dwa, zanim zabrałem się za testowanie nowych funkcji programowych.
Zmiany są powtarzalne i zachodzą wraz z wprowadzeniem poprawek w kodzie.
Adam GĂłrski
Guest
Tue Jul 08, 2014 3:27 pm
W dniu 2014-07-08 06:00, Atlantis pisze:
Quote:
W dniu 2014-07-08 01:38, Marek pisze:
Nie rozumiem, to ten soft do encj nie robi mu reset przy starcie i
musiałeś to dodać? Przecież reset przez wdg czy reset po poweron z pkt
widzenia softu to inicjalizacja...
Właśnie to jest najdziwniejsze. Procedura inicjująca pracę ENC28J60
zawiera fragment odpowiedzialny za soft reset przez SPI. Przecież po
zresetowaniu układu przez watchdoga wsztko leci od nowa i praca układu
jest ponownie inicjowana, wykonuje się też reset.
Nie wiem więc skąd wzięło się to miganie i dlaczego zniknęło po dodaniu
funkcji opóźniającej na początku main(). Nie wiem dlaczego pomimo
wszystkich zabiegów po zdalnym resecie tracę łączność z układem...
Jak długo trzymasz reset aktywny ?
Adam
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
AlexY
Guest
Tue Jul 08, 2014 4:50 pm
Użytkownik Włodzimierz Wojtiuk napisał:
Quote:
On 2014-07-07 20:48, feldmarszałek tusk wrote:
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami...
To są jeszcze inne trolle, które coś projektują?
Myślisz że ten troll cokolwiek zaprojektował?
--
AlexY
http://faq.enter.net.pl/simple-polish.html
http://www.pg.gda.pl/~agatek/netq.html
Atlantis
Guest
Tue Jul 08, 2014 5:58 pm
W dniu 2014-07-08 17:27, Adam Górski pisze:
Quote:
Jak długo trzymasz reset aktywny ?
Hmm... Kilkadziesiąt ms?
A jak długo powinienem? Istnieje możliwość, że trzymam za długo?
feldmarszaĹek tusk
Guest
Tue Jul 08, 2014 6:07 pm
jasne, że nic, wszystko ukradł... skąd ty to powcu znasz nie?
Atlantis
Guest
Tue Jul 08, 2014 6:40 pm
BTW czy reset ENC28J60 w procedurze inicjującej pracę układu jest
przeprowadzony prawidłowo?
#define ENC28J60_SOFT_RESET 0xFF
(...)
enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);
_delay_loop_2(0); // 20ms
Atlantis
Guest
Tue Jul 08, 2014 7:21 pm
Hmm... Jedno jest pewne, to nie jest problem sprzętowy.
Spróbowałem odpalić instrukcję programowego resetu przez watchdoga na
drugim egzemplarzu tego samego urządzenia - efekt taki sam. Potem
zrobiłem to samo na płytce prototypowej z ENC28J60 i ATmegą 328. Program
zachowuje się dokładnie tak samo za każdym razem.
Używam biblioteki Tuxgraphics, a moje urządzenia są wzorowane na
schematach płytek z tej strony (MCU taktowany z pinu CLKOUT ENC28J60).
Gdzieś musi być błąd. Tylko jaki błąd może powodować takie zachowanie
urządzenia? Po włączeniu zasilania inicjacja przebiega normalnie, ale po
resecie przez watchdoga już nie...
ACMM-033
Guest
Tue Jul 08, 2014 7:22 pm
Użytkownik "AlexY" <alexy@irc.pl> napisał w wiadomości
news:lph7hj$ks2$1@dont-email.me...
Quote:
Użytkownik Włodzimierz Wojtiuk napisał:
On 2014-07-07 20:48, feldmarszałek tusk wrote:
dziwne rzeczy dzieją się ostatnio z tymi wszystkimi naszymi
projektami...
To są jeszcze inne trolle, które coś projektują?
Myślisz że ten troll cokolwiek zaprojektował?
<Wiech mode>
Pewne stronkie internetowe...
</Wiech>
--
Spamerów i "pytaczy" informuję, iż bardzo narażają się na to, że ich
adresy e-mail będą podawane harwesterom służącym do rozsyłania spamu.
Marek
Guest
Tue Jul 08, 2014 9:21 pm
On Tue, 08 Jul 2014 21:21:13 +0200, Atlantis <marekw1986NOSPAM@wp.pl>
wrote:
Quote:
Używam biblioteki Tuxgraphics, a moje urządzenia są wzorowane na
schematach płytek z tej strony (MCU taktowany z pinu CLKOUT
ENC28J60).
Tak trochę z imnej beczki ale może Cię zainteresuje: do swojej płytki
z encj dołożyłem moduł wifi mrf24wg (współdzieli spi z encj) i jeśli
chodzi o uzyskane transfery to ten moduł wifi jest bez porównania
szybszy niż encj przy połowie prędkości spi (wifi 10Mhz, encj
20Mhz). Pewnie dlatego, że driver do mrf używa przerwań a nie pooling
jak encj...
--
Marek
Adam GĂłrski
Guest
Tue Jul 08, 2014 10:18 pm
W dniu 2014-07-08 20:40, Atlantis pisze:
Quote:
BTW czy reset ENC28J60 w procedurze inicjującej pracę układu jest
przeprowadzony prawidłowo?
#define ENC28J60_SOFT_RESET 0xFF
(...)
enc28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);
_delay_loop_2(0); // 20ms
Poproszę trochę obszerniej z tym źródłem. Ale bez przesady.
Mogę się domyślać że argumenty to opcode,addres,databyte .....
Ale dlaczego enc28j60WriteOp(0xff, 0, 0xff) ? Jakieś maski ?
Databyte nie występuje ....
czyli
1. Cs w dół.
2. byte 0xff
3. Cs w górę
Czekać na startup.
Ale co robi enc28j60..... to ja nie wiem bo to Twoje dzieło.
Pzdr
Adam
---
Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ ochrona avast! Antivirus jest aktywna.
http://www.avast.com
Atlantis
Guest
Wed Jul 09, 2014 3:57 am
W dniu 2014-07-09 00:18, Adam Górski pisze:
Quote:
Poproszę trochę obszerniej z tym źródłem. Ale bez przesady.
Mogę się domyślać że argumenty to opcode,addres,databyte .....
Sama funkcja wygląda następująco:
void enc28j60WriteOp(uint8_t op, uint8_t address, uint8_t data)
{
CSACTIVE;
// issue write command
SPDR = op | (address & ADDR_MASK);
waitspi();
// write data
SPDR = data;
waitspi();
CSPASSIVE;
}
Makrodefinicja ADDR_MASK to 0x1F
Część odpowiadająca za soft reset układu przy inicjalizacji jest
zrobiona prawidłowo? Bo myślałem nawet o przesiadce na uIP, ale tego co
widzę, to sterownik ENC28J60 z tej biblioteki ma bardzo podobhnie
zrealizowaną funkcję resetu.
BTW Jak powinno się resetować układ za pomocą pinu RESET? Bo próbowałem
czegoś takiego:
RSTACTIVE; //makrodefinicja ustawiająca stan niski na odpowiedniej linii
_delay_loop_2(0);
RSTPASSIVE;
_delay_loop_2(0);
W efekcie nawet nie zaświeciła się żadna dioda na gniazdku RJ45...
Goto page 1, 2, 3 Next