Skocz do zawartości

I2c wzmocnienie sygnału


Pomocna odpowiedź

Witam zaproggramowalem Arduino Uno i aduino mega 2560 które przesyłają między sobą dane wszystko działa super ale gdy oddalę je na 10 M to po włączeniu Arduino zawiesza się z tego co wyczytałem okazało się że to działa tylko na bliskich odległościach czego nie przemyślałem czy mogę użyć takiego expandera aby to  działało  https://botland.com.pl/czujniki/18234-extenderactive-terminator-ltc4311-wzmacniacz-sygnalu-i2c-adafruit-4756.html?gclid=Cj0KCQiAhf2MBhDNARIsAKXU5GSsBpvzg7UXvICmcGIUK7I9ywIHKt38qk-zseRlW7uxkGwVRnrn02EaAv93EALw_wcB

Edytowano przez Pitraszek1
Link to post
Share on other sites

Osobiście wolałbym przerobić to na RS422 (aka RS485 tylko w obie strony 😄), ale jak jesteś uparty na I2C to powinno zadziałać (tylko ja bym sobie nie ufał). Zależy to głównie od częstotliwości, jak używasz 10kbit/s to powinno starczyć, jak koło 100kbit/s to raczej bym unikał tego, bo wtedy i2c to max ok. 1m...

Edytowano przez H1M4W4R1
  • Lubię! 1
Link to post
Share on other sites

Dokładnie tak jak pisze @H1M4W4R110m to stanowczo zbyt duża odległość, są lepsze połączenia. Na teraz możesz zrobić 2 rzeczy: obniżyć prędkość transferu, zastosować rezystory podciągające sda, scl o mniejszej rezystancji 

  • Lubię! 1
Link to post
Share on other sites

też myślałem nad RS485 ale boje się że będę musiał dużo przerabiać kod i ja mam tak że z arduino uno  przesyłam dane do arduino mega 2560 oraz z arduino mega 2560 przesyłam dane do uno a z RS485 chyba można z jednego przesyłać do drugiego a w drogą stronę już nie chyba że się mylę

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

10 minut temu, Pitraszek1 napisał:

a z RS485 chyba można z jednego przesyłać do drugiego a w drogą stronę już nie chyba że się mylę

RS422 działa w obie strony (po prostu dwie linie RS485, po jednej w każdą ze stron)

  • Lubię! 1
Link to post
Share on other sites

Generalnie ciężko będzie to wzmocnić. Piny I2C są OD więc ładowanie pojemności przewodu z 0->1 odbywa się przez sporą rezystancję. Plus  oba sygnały muszą iść synchronicznie wobec siebie. Możesz spróbować zmniejszyć prędkość transmisji do np: 1kHz i może będzie git. A jak nie to RS485 jak polecali koledzy wyżej.

Edytowano przez Harnas
  • Lubię! 1
Link to post
Share on other sites

Moduły oparte na tych układach można kupić za 20zł:

image.thumb.png.f7be401c76e34a33d82229fe5b42ff5b.png

więc tu nie ma się nad czym zastanawiać.

Link to post
Share on other sites
2 godziny temu, Pitraszek1 napisał:

A jak z programem są jakieś poradnik i po polsku

Z punktu widzenia Arduino to jest zwykły UART:

Link to post
Share on other sites

kupiłem taki konwenter https://abc-rc.pl/product-pol-9572-Konwerter-RS422-TTL-na-MAX490-Modul-do-komunikacji-na-dalekie-odleglosci-1km-Arduino.html

tylko nie wiem czy dobrze go podłączyłem złącza TXD i RXD podłączyłem do pinów w arduino tylko nie wiem jak podłączyć wyjścia ARK bo ja podłączyłem :

A do Y

B do Z

Z do B

Y do A

a kod w arduino jest taki

zmienne które zczytuje i wysyła

 if (zapis.available()) {

   Serial.println(ar);
   Serial.println(h);
 Serial.println (den_gora);
   Serial.println(den_dol);
  Serial.println(przekladnia_gora);
   Serial.println(przekladnia_dol);
   Serial.println(klapa_gora);
   Serial.println(klapa_dol);
   Serial.println(koncowa_przekladnia);
  Serial.println(koncowa_den);
  Serial.println(silownik3);
zapis.restart();
  }

i drugi które je odbiera

 

  if (odczyt.available()) {
   
 if (Serial.available() > 0) { 
    // slave may send less than requested
    ar = Serial.read();
    h = Serial.read();
    den_gora = Serial.read();
    den_dol = Serial.read();
    przekladnia_gora = Serial.read();
    przekladnia_dol =Serial.read();
    klapa_gora =Serial.read();
    klapa_dol = Serial.read();
    koncowa_przekladnia =Serial.read();
    koncowa_den = Serial.read();


 }
    odczyt.restart();

czy to jest dobrze zrobione bo nie odczytuje mi jak wchodzę w port szeregowy to dane sie nie zgadzają

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.