albercik506 Lipiec 11, 2011 Udostępnij Lipiec 11, 2011 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
Grzesieq94 Sierpień 10, 2011 Udostępnij Sierpień 10, 2011 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ś?
Jar0 Sierpień 16, 2011 Udostępnij Sierpień 16, 2011 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 ; )
Grzesieq94 Sierpień 16, 2011 Udostępnij Sierpień 16, 2011 Już mi działało, ale i tak przesiadłem się chwilowo na usart
mario246 Listopad 23, 2013 Udostępnij Listopad 23, 2013 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.
MirekCz Listopad 23, 2013 Udostępnij Listopad 23, 2013 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...
mario246 Listopad 23, 2013 Udostępnij Listopad 23, 2013 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?
piotrk Sierpień 24, 2015 Udostępnij Sierpień 24, 2015 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
Pomocna odpowiedź
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ę »