Skocz do zawartości

[Programowanie] SPI - szeregowy interfejs urządzeń peryferyjnych.


Elektryk0

Pomocna odpowiedź

tak sprawdzam przy wypietym programatorze, wtedy sa sygnaly jakies przypadkowe na porcie a jak wypne to nic nie ma

ponizej jest schemat

[ Dodano: 11-07-2011, 12:24 ]

dodam ze zapomnialem na schemacie podczepic ss, normalnie jest podłączone do masy na slave a na master wisi w powietrzu, ustawiam programowo stan wysoki

Link do komentarza
Share on other sites

Ja sprawdzałem dokładnie przekopiowany ten kod (+ zmiana innych portów) i wszystko działa jak powinno. Sprawdź dokładnie wszystkie połączenia. Zamiast do LCD podłącz sobie ledy i sprawdzaj czy bajty dobrze przechodzą. LCD to kolejne miejsce gdzie może być błąd ; )

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Mam pytanie czy lepszym pomysłałem jest zaangażować przerwanie? czy po prostu w while odbierać te dane? Mam problem właśnie z przerwaniem dla atmegii 32 a odnośnie

 PCMSK0|=_BV(PCINT0); //Odblokuj przerwanie PCINT0
PCICR|=_BV(PCIE0);

komplikator pyskuję że funkcję sąnie zadeklarowane, na atmedze 8 działa to natomiast na 32 nie i nie bardzo wiem o co biega.

Link do komentarza
Share on other sites

Udało mi się z tym uporać, wywaliłem to wql ale mam inne pyatnie, odnośnie tej opcji z przerwaniem. Zakładam że master co 0,5 sekundy wysyła dane, i ja sobie w slave zapisuje je do zmniennej a, to jeśli w while mam parę funkcji z if np że jeśli a=1 to zrób to, jeśli a=2 to zrób to itd. więc jeśli on nie zdąży wykonać warunku w czasie 0,5 sek to co będzie? nie potrzeba jakieś instrukcji która zablokuje przerwanie i zezwoli na jego odblokowanie po wykonaniu funcji if?

Link do komentarza
Share on other sites

Poruszyłeś ważną kwestię. Najczęściej w SLAVE deklaruje się tablicę bajtów

unsigned char bufor[10];

a następnie w pętli odbierającej dane z SPI odkładamy kolejne dane do tablicy. Po każdym odebraniu zwiększamy indeks w tablicy, tak by nowa dana wpadała nam na następne pole. Potrzebujemy jeszcze drugi indeks mówiący którą daną aktualnie przetwarzamy. Oczywiście nie możemy zapomnieć o warunku, na wypadek gdy indeks będzie większy od 10, to że ma stać się znowu 0.

Tak po krótce się to robi. Oczywiście jest tu wiele miejsc gdzie mogą wystąpić błędy, ale do podstawowego działania w wolnych systemach wystarczy w zupełności i nie będzie problemu.

__________

Komentarz dodany przez: Treker

Delikatny odkop tematu sprzed 2 lat, ale merytoryczny, więc niech zostanie 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.