1wire a dwa mikroprocesory

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Skrzydlaty
Użytkownik
Posty: 126
Rejestracja: 23 wrz 2007, 21:08
Lokalizacja: Krak

1wire a dwa mikroprocesory

Post autor: Skrzydlaty » 23 wrz 2007, 21:14

Możliwe jest połączenie dwóch mikroprocesorów AVR za pomocą magistrali 1wire? Chodzi mi konkretnie czy mozna tego dokonać za pomocą poleceń Bascomowych? Jeśli tak to jak nadać uP jakiś adres?

ZbeeGin

Post autor: ZbeeGin » 24 wrz 2007, 5:50

Skrzydlaty pisze:Chodzi mi konkretnie czy mozna tego dokonać za pomocą poleceń Bascomowych?
Niestety nie jest to możliwe. Aczkolwiek w przyszłości ktoś może napisze stosowną bibliotekę: 1wire-slave.lib.

Mikroprocesory z poziomu BASCOM-a najłatwiej połączyć przez SPI (3 przewody sterujące + masa) lub przez USI (RS232, 2 przewody sterujące + masa) w trybie asynchronicznym. Możesz także skorzystać z PULSEOUT i PULSEIN, ale nie jest to metoda polecana.

Skrzydlaty
Użytkownik
Posty: 126
Rejestracja: 23 wrz 2007, 21:08
Lokalizacja: Krak

Post autor: Skrzydlaty » 24 wrz 2007, 7:47

Jaką maxymalną długość mogą mieć przewody połaczenia dwóch procesorków w tej magistrali?

Awatar użytkownika
Sagittarius
Użytkownik
Posty: 130
Rejestracja: 29 maja 2007, 9:29
Lokalizacja: Kujawsko-pomorskie
Kontakt:

Post autor: Sagittarius » 24 wrz 2007, 12:00

Dla chcącego i upartego z pewnością nie będzie problemem napisanie obsługi 1Wire dla mikrokontrolera jako dla układu Slave. Myślę jednak, że to trzeba przeprowadzić juz w asemblerze, by osiągnąć dobre wyniki.

Co do połączenia mikrokontrolerów, możliwości jest kilka. Jedna z nich, to napisanie obsługi I2C Slave dla układu. SPI jest dobrym wyborem, ale ma też swoje wady. Używając tego interfejsu należy użyć dodatkowych wyprowadzeń, które będą wybierały adresata transmisji (w przypadku układu nadrzędnego). Jesli to są dwa układy, np uC i przetwornik a/c nie ma większego problemu, jeśli zaś będzie tego trochę, ilość potrzebnych wyprowadzeń może okazać się zbyt duża.

Komunikacja wieloprocesorowa prowadzona jest przy pomocy układów UART. Wiele układów ma zaszyty bloczek sprawdzający adres odbiorcy, co odciąża programistę i mikrokontroler od programowego czuwania nad nasłuchem interfejsu. W przypadku większych odległości między urządzeniami do komunikacji używany jest RS485. Jest to coś podobnego do UARTów, a właściwie to to samo, ale inna jest zasada transmisji od strony sprzętowej. W celu minimalizacji zakłóceń, przesyłana jest informacja w postaci napięcia różnicowego, a nie napięcia względem potencjału masy, jak w zwykłym RS232. Podobnie, jak w przypadku RS232 do konwersji danych na RS485 używany jest odpowiedni układ. Jeśli przesyłane są dane jedną skrętką (czyli parą przewodów), dodatkowo mikrokontroler musi zadbać o to, by poinstruować układ konwertera, czy dane są nadawane, czy odbierane. Do tego celu służą dwa lub jedno wejście sterowania transmisją. Producenci zadbali o to, by jeśli konwerter posiada osobne dwa wejścia dla wyboru nadawania/odbioru, każde z ich miało inny stan aktywny. Ta sztuczka pozwoli na sterowanie takim układem przy pomocy i tak jednego wyprowadzenia :-)

Tu masz przykładowy układ pełniący rolę konwertera.

Skrzydlaty
Użytkownik
Posty: 126
Rejestracja: 23 wrz 2007, 21:08
Lokalizacja: Krak

Post autor: Skrzydlaty » 25 wrz 2007, 17:21

No cóż, jakoś mało wymowny ten schemat ale dzięki, będe próbował.
Aczkolwiek jesli ktoś zna inny sposób połączenia ze sobą mikroprocków to chętnie sie o takowym dowiem;-)

Awatar użytkownika
Thor
Użytkownik
Posty: 208
Rejestracja: 18 gru 2005, 22:25
Lokalizacja: rybnik

Post autor: Thor » 25 wrz 2007, 19:55

Witam


Skrzydlaty Tez mam ten problem , ale rozwiazalem go nie potrzebuje fakt 40 układow , ale 3 musze polaczyc wiec padlo na SPI . Jesli musisz polaczyc tylko dwa uC to mozesz laczyc za pomoca SPI .


Pozdrawiam Bartek
Ostatnio zmieniony 26 wrz 2007, 8:40 przez Thor, łącznie zmieniany 1 raz.

Skrzydlaty
Użytkownik
Posty: 126
Rejestracja: 23 wrz 2007, 21:08
Lokalizacja: Krak

Post autor: Skrzydlaty » 25 wrz 2007, 20:14

I2C - analizowałem ale biblioteka jest płatna, a nie kupie czegoś, co nie da mi 100% gwarancji poprawnego działania w moim przypadku.

SPI - każdy SLAVE musi mieć osobny kabelek do SS - odpada - przy łączeniu kilkudziesięciu układów w budynku nawet wstążka by nie pomogła;|

Wyglada na to że albo sam musze napisać jakiś "protokolik" (o la Boga! to mi zajmie miesiące!) albo poczekać na kogoś, kto napisze 1wire-slave.lib

Może osobny temacik nawołujący ludzi do zainteresowania taką biblioteką? MOże ktoś by napisał... Napewno nie jednemu by pomogła....

ZbeeGin

Post autor: ZbeeGin » 25 wrz 2007, 20:17

Kolega się uparł na 1wire. Bardzo niedobrze. :???:
Skrzydlaty pisze:SPI - każdy SLAVE musi mieć osobny kabelek do SS - odpada - przy łączeniu kilkudziesięciu układów w budynku nawet wstążka by nie pomogła;|
Jeśli system łączności pomiędzy 2 mikroprocesorami miałby mieć taką postać to jedynym ratunkiem jest RS485. I takim warto się zainteresować.

Skrzydlaty
Użytkownik
Posty: 126
Rejestracja: 23 wrz 2007, 21:08
Lokalizacja: Krak

Post autor: Skrzydlaty » 25 wrz 2007, 20:27

1wire jest stosunkowo prosta do obslugi z poziomu Bascoma i wymaga 1 kabelka, w sumie daje to max 3 kabelki. Do "pająka" jaki by wyszedł po okablowaniu budynku można by było też podpinać kolejne układy bez konieczności ciągnięcia kolejnych przewodów jak w przypadku SPI.
Jednak zainteresuje się głębiej RS485, chyba tylko to mi zostaje jak narazie.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 25 wrz 2007, 21:45

Zainteresuj się tym RS485. Zauważ, iż w sieciach przemysłowych nie stosuje się 1-Wire tylko właśnie różnorakiego rodzaju inne interfejsy, a bardzo często RS485. Jako przykład mogę podać sterowniki PLC firmy GE Fanuc. Przy ich łączeniu w sieci wykorzystuje się bardzo często interfejs RS485 ( lub 232 ale na linii i tak umieszcza się konwerter do RS485- i to może być dla Ciebie rozwiązanie).

ODPOWIEDZ