Skocz do zawartości

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


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

  • 5 tygodnie później...

Testowałeś w ogóle ten kod? Jak ja wrzucam kod dla Slave'a to od razu mi pojawia się na LCD pustka lub ciąg losowych znaków... A Master na nic nie reaguje :/ Działa ten kod komuś?

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 ; )

  • 2 lat(a) później...

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.

1. Przerwanie

2. A kod błędu jest...? Nie pamiętam dokładnie, ale czy przypadkiem atmega32 nie ma więcej rejestrów / trochę inaczej nazwanych? Nie przeniesiesz tego kodu bez drobnych zmian...

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?

  • 1 rok później...

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 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...