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



Teraz jest 29 mar 2024, o 03:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Ten wątek jest zablokowany. Nie możesz w nim pisać ani edytować postów.  [ Posty: 12 ] 
Autor Wiadomość
 Tytuł: Komunikacja SPI
PostNapisane: 14 kwi 2013, o 19:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Witam. Zabrałem się za komunikację SPI i mam mały problem.
Mam 2 układy które podłączone są ze sobą:
MISO > MISO
MOSI > MOSI
SCK > SCK
SS > SS + rezystor do Vcc.

I każdy z nich ma gniazdo ISP do programowania. Nie rozłączam procesorów i próbuję wgrać program.
I do jednego bez problemu się wgrywa a do drugiego nie i pojawia się błąd.
W załączniku schemat i błąd :
Obrazek

Wygląda na błąd połączeniowy, Ale szukam i coś nie mogę znaleźne.
Gdy rozłączę procesory to do 2 procesora można wgrać program. jak są połączone to nie :(

Dodatkowo powiem że jak wgrałem program testowy i wgrałem na oba procesory to komunikacja działa. :

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



Góra
 Zobacz profil  
 
PostNapisane: 14 kwi 2013, o 21:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2011
Posty: 263
Lokalizacja: Szczecin
Pomógł: 9

Najprostszym rozwiązaniem było by zrobienie 4 zworek na liniach (MISO,MISO, MOSI , SCK)
które były by zdejmowane na czas programowania. Wówczas programator zawsze by widział, jedno urządzenie.

_________________
www.iuvo.it - Automatyka Budynkowa



Góra
 Zobacz profil  
 
PostNapisane: 14 kwi 2013, o 22:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

No najprościej ale czytałem że jest taka możliwość tylko trzeba zastosować rezystor R20 - 10k tak jak zrobiłem na schemacie ale to nie działa mi :(
Jak nikt nie będzie miał pomysłu, co mógłbym zrobić, to będę musiał takie zworki dorobić :(

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

Znalazłem takie oto rozwiązanie problemu:
Obrazek

W tej chwili mam połączone 2 uP i rezystory 4k7. Można programować i jeden i drugi układ. Jutro postaram się jeszcze trzeci podłączyć i zobaczymy czy będzie można wszystkie 3 niezależnie programować :)



Góra
 Zobacz profil  
 
PostNapisane: 15 kwi 2013, o 16:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Witam.
Doszedłem do momentu że mam podłączone 3 uP i połączone ze sobą interfejsem SPI.
I gdy mam jeden uP jako master który wysyła do dwóch pozostałych (slave) informację i mają one odczytywać to samo to wiem jak zrobić dzięki niebieskiej książce.
A jak zrobić jak dwa slavey wysyłają 2 różne informacje do master?
W tym przypadku chyba nie mogę zastosować takiej funkcji :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ktoś podpowie ?



Góra
 Zobacz profil  
 
PostNapisane: 17 kwi 2013, o 08:04 
Offline
Użytkownik

Dołączył(a): 19 lip 2012
Posty: 86
Lokalizacja: Lublin
Pomógł: 3

Jeżyk-1 napisał(a):
W tym przypadku chyba nie mogę zastosować takiej funkcji :
Składnia: [ Pobierz ] [ Ukryj ]
język c
uint8_t PickSpi(void) {
        while( !(SPSR & (1<<SPIF)) );
        return SPDR;
}
GeSHi


No nie :-)

Musisz dopisać sobie obsługę - sterowanie przy pomocy SS resztą procków.
Rozumiem że masz jednego Mastera i dwa Slave.
W takim razie musisz te dwa Slave, a dokładnie ich piny SS podpiąć do różnych pinów Mastera. Nie będziesz wtedy sterował jednym pinem SS z Mastera lecz dwoma. I odpowiednie ustawienie 0 powoduje zmianę (aktywację) między Slave'ami.

Nie jestem pewien czy w takiej sytuacji nie trzeba będzie obsługiwać SPI programowo a nie sprzętowo.

Niech się wypowiedzą bardziej doświadczeni.



Góra
 Zobacz profil  
 
PostNapisane: 13 cze 2013, o 12:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Po długiej przerwie zabrałem się za ten problem który pozostawiłem i coś nie mogę sobie poradzić.
Mam taki kod wgrany w układzie slave 1 który ma wysłać wartość ze zmiennej cnt do układu master
kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I problem już pojawia się w momencie : //SendSpi( 0 ); Gdy nie jest za komentowany to kolejna część kodu (wyświetlenie napisu master) nie zostanie zrealizowana. To samo działo się w głównej pętli, gdy wywołuje funkcję SendSpi( cnt ); dalsza część programu nie działa. idąc dalej doszedłem że jak usunę linię while( !(SPSR & (1<<SPIF)) ); to licznik działa.
doczytałem w PDF mojego atmegi16 żeby flaga przerwania działała muszę mieć ustawiony bit SPIE w SPCR i globalne przerwanie. Lecz to nic mi nie dało. Teraz to już nie bardzo wiem gdzie robię błąd :(



Góra
 Zobacz profil  
 
PostNapisane: 13 cze 2013, o 21:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Doczytałem jeszcze informacje by odebrać dane ze slave, master musi coś wysłać. Więc przerobiłem trochę kod do tej informacji i wygląda on tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I teraz Slave odczytuje dane z master ale master odczytuje jakieś dziwne wartości. Jak mam licznik który liczy co 2, to na wyświetlaczu w układzie master cyfry pojawiają się losowo.



Góra
 Zobacz profil  
 
PostNapisane: 12 lip 2013, o 06:16 
Offline
Użytkownik

Dołączył(a): 19 lip 2012
Posty: 86
Lokalizacja: Lublin
Pomógł: 3

W pętli while(1) {} Mastera i Slave masz to samo! Po co?

Jak dobrze rozumiem to chcesz Masterem odczytać wartości wysyłane przez Slave'y?

Tak jak pisałem wcześniej aby aktywować Slave używasz linii SS (Select Slave). Czyli podpinasz nogi SS Slave'ów do dwóch pinów w Masterze. I ustawienie 0 (lub 1 - trzeba doczytać w nocie) na wyjściu aktywuje konkretnego Slave'a! Wtedy możesz odczytywać. Trzeba pamiętać że jak chcesz odczytać coś ze Slave'a to jednocześnie musisz coś do niego wysłać!



Góra
 Zobacz profil  
 
PostNapisane: 13 lip 2013, o 07:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Tak jak piszesz. Temat został już opanowany dziękuję za pomoc.



Góra
 Zobacz profil  
 
PostNapisane: 6 maja 2018, o 17:50 
Offline
Nowy

Dołączył(a): 06 maja 2018
Posty: 1
Pomógł: 0

Pilnie poszukuję doświadczonej osoby do nawiązania komunikacji po SPI między moim komputerem a urządzeniem nadającym (mam inne urządzenie poprawnie odczytujące komunikaty). Należy po stronie Linuxa za pomocą programu w c/c++ odczytać liczby nadawane przez urządzenie. Udało mi się nawiązać komunikację ale nie umiem odczytać pożądanych wartości. Nagroda za skuteczną pomoc: 4 tysiące złotych.

W przypadku zainteresowania proszę o kontakt

clone147@hotmail.com



Góra
 Zobacz profil  
 
PostNapisane: 6 maja 2018, o 18:28 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 544
Pomógł: 27

Kolega to powinien złotą łopatę dostać, a co do komunikacji to nie można wziąć np atmegę 8 z komputerem komunikować się po uarcie przez przejściówkę usb rs232 a urządzenie z atmegą 8 po spi ? czy kolega nie wie jak to zrobić a czas goni ?



Góra
 Zobacz profil  
 
PostNapisane: 6 maja 2018, o 20:35 
Offline
Moderator
Avatar użytkownika

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

tonygryps napisał(a):
Kolega to powinien złotą łopatę dostać

No kolega przesadził ;) złotą ? .... fuuuuj

raczej platynową i to wysadzaną diamentami i szafirami ;)

i dlatego wątek blokuję ;)

_________________
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  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Ten wątek jest zablokowany. Nie możesz w nim pisać ani edytować postów.  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO