Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 gru 2025, o 18:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 18 gru 2016, o 03:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 lis 2016
Posty: 29
Pomógł: 0

Witam
Mam problem z obsługą układu Wiznet W5500.
Używam do tego celu modułu WIZ550io produkcji samego Wiznet oraz pakietu prototypowego ATNEL ATB 1.05
procesor AT_Mega 1284P, kwarc 18,432 MHz, podłączony LCD 4x40
Programuję procka używając Bootloadera ATNEL poprzez kabel USB.

Sam moduł łączy się za pomocą SPI czterema przewodami.
Napisałem na podstawie źródeł producenta podstawowe funkcje zapisu i odczytu.
I chociaż na oscyloskopie widzę że wysyłam to co chcę (pełną ramkę bit po bicie) to odczytuje zupełnie coś innego. Na oscyloskopie obserwuję jak przychodzą impulsy takie jak wyświetlam na LCD, lecz informacja jest kompletnie inna. Próbowałem różne prędkości SPI, ale nic to nie daje.
Kierunki pinów SPI mam prawidłowe, pull-ups także. Sam moduł zasilam +3,3V z ATB A procek i reszta z +5V.
Zgodnie z dokumentację jest to prawidłowe, bo wszystkie piny modułu i samego W5500 są 5V "tolerant"
Brakuje mi sił już, miało to nie być takie trudne, a stoję w miejscu.

Tak skonfigurowałem SPI:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tak napisałem procedurę zapisu jednego bajta danych
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tak wygląda funkcja wysyłania bajtu poprzez SPI
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tak wygląda odczyt bajtu z SPI
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I wreszcie tak wygląda odczyt bajtu z W5500
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Może ktoś ma pomysł co robię nie tak. Może coś jeszcze załączyć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2016, o 09:02 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Kilku moich luźnych uwag do prezentowanych fragmentów kodu, i od razu zaznaczam, że nie będą one miały nic wspólnego z tym dlaczego akurat koledze nie działa coś tam ... chociaż ? .... dotyczyć będą dobrego stylu programowania w C na procki i zawsze takie uwagi piszę, gdy ktoś pierwszy raz swój kod wstawia na forum ...

Cytuj:
SPCR=(0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
SPSR=(0<<SPI2X);


zapisy oznaczone na czerwono kompletnie nie mają sensu a jeśli ktoś twierdzi, że są tylko tak dla porządku, to jest wręcz odwrotnie, wprowadzają TOTALNE zamieszanie i tragicznie trudno analizować kod. Na dodatek NAJCZĘŚCIEJ wpływają też na to że sami strzelamy później totalne babole i dłużej szukamy błędu bo dopiero na końcu gdzieś zauważymy, że nie zmieniliśmy durnego zera na jedynkę albo odwrotnie ... tak się nie robi (ale zakładam oczywiście, że kolega wie, że taki zapis (0<<x) bitowo nic nie robi tzn przede wszystkim NIE ZERUJE bitu - podpowiadam gdyby kolega nie wiedział)

Spikee napisał(a):
unsigned char SPI_MasterReceive(void)

gdy korzystamy z AVR GCC a kolega korzysta tu z AVR GCC to stosujemy typy przewidziane dla tej odmiany języka ... czyli jeśli chodzi o liczby to najmniejszy typ to uint8_t a nie żadne tam "unsigned char". Po pierwsze domyślnie kompilator jest ustawiony, że kompiluje char jako unsigned char, po drugie typ char rezerujemy sobie do miejsc gdzie korzystamy ze znaków alfanumerycznych. W ogóle stosowanie unsigned char - zamiast samego char nawet w przypadku gdy będziemy korzystali ze zmiennych a szczególnie funkcji wbudowanych w avr gcc przyniesie później tylko zdziwienie i kłopoty - dlaczego ? ano właśnie dla tego o czym mówiłem wcześniej - bo będą warningi o niezgodności typów ponieważ avr gcc w wielu takich sytuacjach będzie się spodziewał uint8_t albo przynajmniej char - a nie żadnego unsigned char który wywoła warning. Podsumowując - widać w tym miejscu wciąż duże przyzwyczajenie kolegi do C/C++ na PC.

to samo się tyczy

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


nie żadne unsigned int tylko : ....

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czyli

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No a tutaj:
Spikee napisał(a):
unsigned char SPI_Read_VDM(unsigned int Address, unsigned char BSB)

to unsigned char to już w ogóle gryzie po oczach, że aż łzy lecą jak przy krojeniu cebuli ;) Nie piszę tego broń Boże żeby się wyśmiewać czy dogryzać tylko żeby podpowiedzieć z uśmiechem o standardzie avr gcc i specyfice pisania kodu na procki i wcale nie tylko 8-bitowe

proszę spojrzeć jak to może przyjemnie wyglądać:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dobra tyle tytułem wstępu - na temat szczegółów wizneta się nie wypowiem bo nigdy nie miałem do czynienia z tym modułem - ale tak na zasadzie domyślania się to ... hmmm co to za transmisja SPI jakaś jednokierunkowa? w tych funkcjach


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


toż transmisja SPI jest DWUKIERUNKOWA czyli gdy nadajemy to jednocześnie ODBIERAMY - oczywiście zależy to też od specyfiki układu docelowego ale może właśnie tutaj jeśli już chodzi o sprawy merytorycznych błędów kolega robi babole ? (ale jak mówię tylko domyślam się jeśli chodzi o pogaduszki akurat z wiznetem) Tak więc te funkcje może są babolem - powinna być jedna która ma i rezultat i argument ;) np

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2016, o 13:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 lis 2016
Posty: 29
Pomógł: 0

Dziękuję za cenne uwagi. Wezmę je sobie do serca. Pozwolę sobie jednak się do nich odnieść.
Rzeczywiście nie powinienem umieszczać tych zer w konfiguracji, i rzeczywiście miałem je usunąć.
Teraz po prostu kombinowałem z różnymi prędkościami i trybem pracy SPI i łatwiej mi było to zmieniać.

Używam kompilatora CodeVision a nie gcc, i tam od zawsze było "unsigned char" czy "unsigned int",
mimo że ostatnio pojawiło się tam makro które akceptuje "uint8_t" to jednak przez tyle lat przyzwyczaiłem się
do mało ładnych "unsigned char", które rzeczywiście mogę ustawić w kompilatorze żeby zawsze char był unsigned.
Tutaj fragment ich oficjalnego exampla
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście przesiadam się na gcc i eclipsa ale troszkę mi to zajmie czasu. Proszę o cierpliwość

Co do uwagi na temat kierunkowości portu SPI, to oczywiście mam świadomość jego dwukierunkowości. Może tutaj popełniłem jakiegoś babola.
Ale w dokumentacji do układu ramka "Transmit" zawiera tylko wysyłanie danych natomiast ramka "Receive" zawiera wysłanie trzech bajtów i odbieranie całej reszty. Natomiast w dokumentacji do samej ATMegi znalazłem dwie procedury: do wysyłania i do odbierania osobno.
Taki też scenariusz działał mi do tej pory np w układzie MAX 7456, ale może tu jest pies pogrzebany.
Jeszcze to sprawdzę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2016, o 14:05 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Spikee napisał(a):
Oczywiście przesiadam się na gcc i eclipsa ale troszkę mi to zajmie czasu. Proszę o cierpliwość

Ale ja cierpliwość mam ogromną ;) i chyba każdy kto mnie zna to o tym wie - za to jak mówiłem zawsze staram się na forum o tym przypominać ponieważ ... tutaj zdecydowana większość jak nie wszyscy posługują się AVR GCC i takie pisanie kodu jest przede wszystkim o wiele bardziej czytelne dla tych, do których się zwracamy z pytaniem .... to również jakby pewien standard na tym forum

Co nie oznacza, żeby dyskryminować CodeVision - tyle że wtedy warto zaznaczyć, że np "Uwaga kod pisany w CodeVision" gdzie nie stosuje się takich typów tylko standardowe podejście z ANSI C w tym zakresie - i takie uwagi już nieraz były na forum" ... wtedy ja z kolei się nie włączam ze swoimi uwagami ... Teraz chyba kolega rozumie w czym rzecz - bo ja chcę pokazać tu raczej że mogło to być powodem nawyków z programowania na PC i że warto się przestawić w tej sytuacji.

Spikee napisał(a):
Co do uwagi na temat kierunkowości portu SPI, to oczywiście mam świadomość jego dwukierunkowości. Może tutaj popełniłem jakiegoś babola.

Dlatego ja nie mówiłem, że na pewno tylko że być może ... i żeby zwrócić właśnie uwagę na dokumentację ...

np w komunikacji z modułami RFM37 bodajże o ile dobrze pamiętam absolutnie już od pierwszego wysyłanego bajtu - jednocześnie zaczynamy odbierać dane

czasem trzeba zwrócić uwagę w dokumentacji na sekwencję właśnie .... bo być może tak jest że wysyłasz komendę a odbierasz bajt śmieć, a następnie dopiero moduł wysyła kolejne bajty danych

ja tego nie wiem jak to jest z wiznetem i dlatego tylko zwróciłem uwagę - a może być że jest to ok ... to już kwestia zabawy z modułem i sprawdzenia

Chyba że trafi się ktoś na forum kto się bawił z tym modułem przez SPI i coś podpowie

------------------------ [ Dodano po: 2 minutach ]

Spikee napisał(a):
Rzeczywiście nie powinienem umieszczać tych zer w konfiguracji, i rzeczywiście miałem je usunąć.
Teraz po prostu kombinowałem z różnymi prędkościami i trybem pracy SPI i łatwiej mi było to zmieniać.


Jak znam życie to zwykle więcej przez takie podejście problemów - i nie chodzi tylko o zadanie pytania na forum ale nawet jak się samemu programuje i testuje coś często - ponieważ DUŻO gorzej zauważyć błąd że gdzieś tam w końcu daliśmy albo nie daliśmy jedynki albo zera. Natomiast linia w której widać KONKRETNIE ustawione bity - to od razu daje po oczach i wiadomo co się robi - trudniej samemu o pomyłkę.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2016, o 18:02 
Offline
Użytkownik

Dołączył(a): 22 mar 2014
Posty: 38
Lokalizacja: Bydgoszcz
Pomógł: 4

Znasz tę stronkę?
http://www.ermicro.com/blog/?p=1773
Najlepszy tutorial jaki znalazłem jeśli chodzi o kość Wiznet.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2016, o 20:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 lis 2016
Posty: 29
Pomógł: 0


Dziękuję, chociaż tam opisany jest 5100 a jego się całkiem inaczej obsługuje.
Tutaj bardziej chodzi mi o to czemu:
1. Pinguje moduł 192.168.1.2 i działa
2. Zapisuje do niego 192.168.1.200
3. Odczytuje z niego 248.0.0.11
Adresy sprawdzałem po trzykroć (zapisuję pod adres 0x000F i trzy następne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO