Witam wszystkich.
Jestem początkującym programistą i zaczynam powoli zabawę z AVR, studiuję bluebooka i doszedłem do pierwszego poważniejszego problemu.
Zaimplementowany serwer www niestety kompletnie nie reaguje na próbę pingowania.
Korzystam z Atmegi328p (jeżeli to ma jakiś wpływ to dokładniej na płytce arduino uno, lecz z arduino nie ma nic więcej wspólnego, programy piszę w C i kompiluję w Atmel Studio)
Co ciekawe ten sam program wgrany na atmege 8 (po poprawkach deklaracji portów z PORTB na PB itd) działa, że tak powiem od strzała, pinguje, strona w przeglądarce się ładuje i wszystko jest ok. Gdy wgram ten program na atmega328p zero jakiejkolwiek reakcji.
Od kilku dni przeglądam noty katalogowe Atmegi 8 i 328p aby znaleźć jakieś różnice w kodzie, ale inicjalizacja SPI wygląda w obu uC tak samo, z wyjątkiem rejestru PRR w atmedze 328p, aby mieć pewność, że zegar jest podpięty do interfejsu SPI wpisałem w niego na bit PRSPI 0, tak jak mówi datasheet. zero zmian.
Moduł ethernet ENC28j60 działa poprawnie tj. zielona dioda świeci, pomarańczowa mruga, podczas prób pingowania pomarańczowa mruga częściej, czyli tak jak być powinno gdy odbiera pakiety więc wszystko wskazywało by na winę leżącą albo w kodzie albo w płytce arduino, reset na arduino resetuje atmege i enc. Walczę już od kilku dni z tym problemem ale bezskutecznie.
Podłączenia uC -> ENC:
MOSI (PORTB3) -> SI
MISO (PORTB4) -> SO
SCK (PORTB5) -> SCK
SS (PORTB2) -> CS
RST (PORTC6) -> RESET
Zasilanie:
Tutaj próbowałem zasilać poprzez programator USBASP całą płytkę arduino a z pinu 3v3 zasilam enc (A328p 16MHz zewnętrzny kwarc)- brak pingu
Zasilanie zewnętrzne 3v3 USBASP odłączony (A328p wewnętrzny oscylator 8MHz) - brak pingu
Atmega 8 na której działał serwer www była zasilana z zewnętrznego zasilania 3v3 z odłączonym USBASP oraz wewnętrzny oscylator 8MHz
Kwestia zasilania raczej odpada w takim wypadku oraz podłączeń tym bardziej, że oba uC linie SPI mają nawet na tych samych portach i pinach.
Co do inicjalizacji SPI, wygląda u mnie ona tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W oryginalnym kodzie było jeszcze takie coś:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Tego nie za bardzo rozumiem, dlaczego wpisując do rejestru DDRB jedynki ustawia się MOSI i SCK w stan niski skoro te wyjścia nie są zanegowane tak jak SS.
W każdym razie próbowałem to kasować, zmieniać na wpisywanie pod te bity zera ale i tak ping nie odpowiedział.
Ktoś może spotkał się z takim problemem, i wie co może być nie tak?
Dodam, że SPI fizycznie działa ponieważ też uznałem, że którys port mógł ulec uszkodzeniu więc na szybko podpiąłem czytnik kart SD i jakiś przykładowy kod (akurat w arduino ponieważ chciałem tylko sprawdzić czy działa komunikacja) i z kartą SD procesor się komunikował.
Wszystko by wskazywało na jakiś błąd w samym programie do serwera www lecz nie potrafię bez pomocy go znaleźć.
Pozdrawiam serdecznie.