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



Teraz jest 23 gru 2024, o 05:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 1 paź 2015, o 11:53 
Offline
Nowy

Dołączył(a): 16 maja 2015
Posty: 3
Pomógł: 0

Witam

Jako że inne fora wymiękły to zwracam się do was koledzy specjaliści.


Chciałbym prosić kolegów o pomoc, mianowicie:
Testuję układ PCF8574 podłączony do Arduino Mega (klon) czyli komunikacja po I2c

Układ PCF pracuje jako wejścia
Używam biblioteki PCF8574.h
wersja:
https://github.com/skywodd/pcf8574_arduino_library


Zrobiłem test - chwilowe zerwanie komunikacji przez odłączenie linii SDA lub SCL i ponowne podłączenie.
Po takim teście komunikacja nie powraca.


Jak napisać kod aby komunikacja powróciła,
aby odłączanie podłączanie nie robiło problemu.

Kod:

#include <Wire.h>
#include <PCF8574.h>

PCF8574 expander1;
PCF8574 expander2;

// the setup routine runs once when you press reset:
void setup()
{
  // initialize the digital pin as an output.
 
  expander1.begin(0x38);
  expander2.begin(0x39);
 
  for (int x=0; x <= 7; x++)
    {
      int b = 30+x;
     
      expander1.pinMode(x, INPUT);
      expander1.digitalWrite(x, HIGH);
     
      expander2.pinMode(x, INPUT);
      expander2.digitalWrite(x, HIGH);
     
      pinMode(b, OUTPUT);
    }
}

// the loop routine runs over and over again forever:
void loop()
{
  for (int i=0; i <= 7; i++)
  {
      int P1 = expander1.digitalRead(i);
      int P2 = expander2.digitalRead(i);
      int a = 30+i;
     
      if (P1 == 0 || P2 == 0)
      {
        digitalWrite(a, HIGH);
      }
 
      if (P1 == 1 && P2 == 1)
      {
        digitalWrite(a, LOW);
      }
   }
 
}



<PROSZĘ POPRAWIĆ LISTING ---> topic7402.html --> Inaczej odeślę temat w niebyt --SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 12:20 
Offline
Moderator
Avatar użytkownika

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

jakubsan napisał(a):
Używam biblioteki PCF8574.h

Napisać własną bibliotekę ew poprawić tę którą używasz. Najczęściej tak się robi, żeby procek się zatrzymał gdy się zerwie I2C ... co w tym dziwnego ? Po co działać gdy nie ma komunikacji ?

I2C to nie jest magistrala która się zrywa co chwilę - jest to magistrala w obrębie tego samego PCB więc po co w ogóle takie testy z rozłączaniem i podłączaniem. Coś czuję, że ty nie wiesz do końca do czego jest I2C i pewnie próbujesz ją wykorzystać jak np magistralę RS232 do np łączenia sobie różnych urządzeń.

_________________
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  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 14:29 
Offline
Nowy

Dołączył(a): 16 maja 2015
Posty: 3
Pomógł: 0

Mirku masz trochę racji
Używając takich płytek z układami PCF8574:
http://www.horter.de/shop/index.html
próbuję rozbudować sobie arduino mega do obsługi inteligentnego domu- zabrakło mi wejść.

Te płytki zabudowuję na szynie zaraz obok arduino.
Nie jest to ta sama płytka ale przewody łączące to max 0,5m.
Mam nadzieję że ma to szansę działać.?
Bo właściwie to działa tylko muszę jakoś obsłużyć takie ewentualne zerwanie komunikacji bo w tej chwili arduino się wiesza przy takiej sytuacji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 14:38 
Offline
Moderator
Avatar użytkownika

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

jakubsan napisał(a):
Mam nadzieję że ma to szansę działać.?

50cm ? ... ja bm od razu myślał albo o RS485 albo RS232 albo jeszcze czymś innym a nie I2C

jakubsan napisał(a):
Mam nadzieję że ma to szansę działać.?

Ma szansę tak właśnie jak to widzisz i nawet jak rozwiążesz to przerobieniem biblioteki z Timeoutami czyli zwłokami czasowymi - to powiem ci, że ja osobiście wstydziłbym nawet sobie zbudować takie urządzenie, które co chwilę (tzn co bliżej nieokreślony czas - ma takie czkawki) .... Podczas gdy elektronika i dotychczasowe rozwiązania dają możliwości zrobienia tego tak jak się należy i nie będzie żadnych zaciachów .... wspominam wyżej np RS485

Takim podstawowym i MEGA problemem tych co to tworzą często projekty na arduino ale tfuu nie tylko na arduino - na innych zestawach uruchomieniowych także - jest to, że (wybacz, że to mówię ale chyba przyznasz że taka jest prawda) .... że zamiast traktować arduino jako narzędzie do tworzenia prototypu to .... na końcu próbują wrzucać to do skrzynki do której napakują kupę dodatków, kupę kabli i zamkną - nazywając to gotowym skończonym projektem. Który owszem czasem zadziała np do filmiku na Youtube żeby pokazać jak działa prototyp ... ale później sami - wcześniej czy później i tak idą po rozum do głowy, że nie tędy droga. Że trzeba się jednak wziąć za zaprojektowanie własnej płytki PCB i zrobić wszystko jak się należy - a nie rozbudowywać w nieskończoność pająki.

_________________
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  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8589
Pomógł: 337

Wszystko trzeba robić z głową , w tym używanie arduino bez "rozbudowywania pająków" od tego są shieldy i możliwość wykonania własnych
choćby na kawałku płytki uniwersalnej (takiej dziurkowanej) używanie modułów wykonawczych -- na UART , RS232 ,WIFI , BT, RS485
możliwości jest wiele ....

Oczywiście PCF jest OK ale nie na długim dystansie ...
Łatwiej wykonać moduł sterujący i np Kilka układów wykonawczych z medium transmisyjnym (w/w)
to wiele załatwia , i chroni włosy na głowie :)

Podział układu na moduły ... też nie jest niczym złym jak się to robi dobrze , bo nie wszystko co na jednej płytce się
mieści jest dobre..

Warunek jest 1 .... Nie kilogramy kabli, a dedykowane złącza :)
i wtedy wszystko będzie działać :)

na dystansie 0,5m zamiast kombinowac z Timeoutami wystarczy zmniejszyć prędkość transmisji
ale ... to nie do końca jest dobre rozwiązanie ...

_________________
Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2015, o 20:30 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

mirekk36 napisał(a):
I2C to nie jest magistrala która się zrywa co chwilę - jest to magistrala w obrębie tego samego PCB więc po co w ogóle takie testy z rozłączaniem i podłączaniem. Coś czuję, że ty nie wiesz do końca do czego jest I2C i pewnie próbujesz ją wykorzystać jak np magistralę RS232 do np łączenia sobie różnych urządzeń.

https://en.wikipedia.org/wiki/System_Management_Bus

Oczywiście wymaga to sensownej implementacji timeoutów.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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