Fizikai soros port használata

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Sziasztok!

Olvasgattam a neten és elég sok mindent találtam a soros portról. Vannak olyan kontrollerek, amiknek több serial portja is van.
Valahogy ehhez kapcsolódik az UART és az USART. De nem igazán tudom mi a különbség.

Amit szeretnék csinálni, az egy olyan eszköz, ami egy modemből soros porton keresztül kiolvassa az adatokat és ebből kiválogatja ami nekem kell néhány érték, majd kiírja egy kijelzőre.
Ott tartok, hogy a kijelzőre ki tudom íratni amit soros porton keresztül küldök a számítógépről.

A számítógépen látom a soros porti adatokat, amiket a modem küld, egy USB FTDI adaptert használva.

Viszont ha a modem RX, TX, GND lábait rákötöm az Arduino Nano D0, D1, GND lábaira, akkor látom, hogy az arduinon villog az RX LED, de nem történik semmi, a program valamiért nem észleli. Van egy olyan sejtésem, hogy az USB-n keresztüli és a D0, D1 fizikai csatlakozók meg vannak különböztetve. De hogyan?
Olyan mintha a Serial.read() parancs csak az USB-n keresztül működne.

Semmit nem találtam sajnos Youtube-on is mindenhol olyan példák vannak, hogy az Arduino IDE konzolról küldik az adatokat a vezérlőnek és vissza.
Hogy lehetne a fizikai RX, TX portot megszólítani?

Kód: Egész kijelölése


#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);

int inByte = 0;
char betu;
int karakter = 0;



void setup() {
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(700);
  display.clearDisplay();
  pinMode (2, INPUT);
  digitalWrite(2, HIGH);
  pinMode (3, INPUT);
  digitalWrite(3, HIGH);
  pinMode (4, INPUT);
  digitalWrite(4, HIGH);
  
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0,0);
  display.println(F(" ELSO SOR "));
  display.setCursor(50,16);
  display.println(F(" -2- "));
  display.println(F("Csokiiiiii"));
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(80,56);
  display.print(F("Ver. 0.1"));
  display.display();
  display.setTextColor(WHITE);
  display.setTextSize(1);
}

void loop() {
  if (Serial.available() > 0) {
  inByte = Serial.read();
  karakter++;
  betu = inByte;
  //Serial.write(betu);
  
    if (karakter == 168) {
      karakter = 0;
    }
    if (karakter == 1) {
      display.clearDisplay();
      display.display();
      display.setCursor(0,0);
    }
  display.print(betu);
  display.display();
  }
}

Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Időközben kipróbáltam az USB-s FTDI adapterrel, rákötöttem az Arduino D0,D1 lábára és azzal is működik a program.

Csak a modemből jövő infókat nem érzi valami miatt, viszont azt észrevettem, hogy ha rá van csatlakoztatva valami a D0,D1 lábakra, akkor nem megy az USB-n keresztül az adatforgalom (de rátölteni rá tudom IDE-ből az adatokat).

Lehet, hogy fordítva van valami ilyesmi baj és prioritást lehet változtatni valami ellenállással vagy kapcsolóval vagy egyszerűen már nem értem miért nem megy át a modemról az adat, mikor mindent mindennel látok csak a 2 eszköz nem látja egymást (illetve az Arduino a modemet).
Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Fizikai soros port használata

Hozzászólás Szerző: Robert »

Milyen modem?
A feszültségszint tényleg az egyik eszközön 3V3 a másikon 5V?
Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

D-LINK DSL-360R T1E.

Most összeraktam egy ilyen kapcsolást:
Kép

De így az Rx LED sem villog már az Arduinon. Nem értem.
Azt vettem észre, hogy akkor világít/villog amikor földelve van az érintkező, tehát úgy tűnik, hogy a 0 a HIGH, a +5V pedig a LOW érték de most megpróbálom egy másik ugyanilyen modemmel is, hátha ez hibás. (van még vagy 5)
Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Még megpróbálom ezt, talán segít, de több ötletem már nincs :(

http://www.civrays.com/myrobot/news/serial
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Fizikai soros port használata

Hozzászólás Szerző: Robert »

Please!
Switch : write only -> read and write!

Milyen modem?
A feszültségszint tényleg az egyik eszközön 3V3 a másikon 5V?
Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Ez utóbbival működik :)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Fizikai soros port használata

Hozzászólás Szerző: Robert »

Feladtam.... :roll:
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Fizikai soros port használata

Hozzászólás Szerző: csegebiga »

Robert írta:Feladtam.... :roll:
pedig válaszolt:
D-LINK DSL-360R T1E.
ez egy ADSL modem.
http://logout.hu/cikk/d-link_360r_adsl_ ... terek.html

mondjuk én ennek a modemnek nem látom a soros portját.

csak azt nem tudom, mit akar egy ilyen eszköztől az arduinoval?

és akkor mi megy már néki???
(c)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Fizikai soros port használata

Hozzászólás Szerző: kapu48 »

Szerintem Robi is a téma megértését adta fel!
Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Van a modemen soros port :
http://logout.hu/tema/re_uj_firmware_d- ... -3272.html

A cél egy mérő műszer építése, mert olyan helyen dolgozom, ahol erre szükség van. Ez a modem tökéletesen megfelel az ADSL2+ vonal mérésére, minden adat kiolvasható belőle. Eddig is ezt használtam, csak kell hozzá egy nagy akku, egy apró kis TP-Link wifi router ami rácsatlakozik a modemre és telefonról wifin keresztül nézem az adatokat. Na ez egy kicsit sok dolog egyszerre.

Ezért nekiálltam csinálni egy kijelzőt, amiről majd le lehet olvasni a paramétereket és bele lesz építve a modembe.
Fizikailag nagyjából már megvagyok vele. Még akku kell meg DC-DC step UP, LiPo töltő elektronika... de nagyjából találtam is mindent ami pici, talán beleférek a dobozba. Ha nem, az sem nagy probléma.

Szoftveresen jelenleg ott tartok, hogy a rendszer képes megkülönböztetni, ha a modem ki van kapcsolva, épp indul vagy üzemben van. Első kettőt ki is írja, utolsó esetben pedig megy a program. Paraméterek kiolvasása, majd kiírása. Akku feszültséget is kijelzi, amint a modem összeszinkronizál a központtal, a kijelzőn meg is jelenik a fel/letöltési sebesség. Ha szétesik a kapcsolat, elvileg le kellene, hogy nullázza a kijelzőt de ott még nem tartok. Amikor van ADSL le/feltöltési értékem és nem vagyok bejelentkezve telneten, akkor addig próbálkozik a bejelentkezéssel, amíg nem sikerül. Amikor sikerült, megjelenik egy T betű a kijelzőn és egészen addig ott is marad, amíg a terminál kapcsolat él. Amint megszakad, újra bejelentkezik (bizonyos idő után inaktivitás miatt a modem kiléptet biztonsági okokból).

Szóval egyelőre itt tartok. Most jön a nehezebb rész, lekérni a biteloszlást és a hibaszámlálók adatait.
Nem nagy ördöngösség, csak egyszerre olyan sok szöveget küld a parancs kimenete az Arduinonak, hogy szerintem nem lesz képes feldolgozni és nem fér a bufferbe. Most ott tartok, hogy van a modemben BusyBox, ismer néhány linux parancsot (sajnos a grep-et nem) és megpróbálom szűrni a parancs kimenetét, hogy ne küldjön nekem olyan szövegeket amikre nem vagyok kíváncsi, mert az Arduinonak azt is fel kell dolgozni.

Például egy adsl info --stats kimenete:

Kód: Egész kijelölése

> adsl info --stats
adsl: ADSL driver and PHY status
Status: ShowtimeRetrain Reason: 8000
Channel: FAST, Upstream rate = 639 Kbps, Downstream rate = 12470 Kbps
Link Power State: L0
Mode:                   ADSL2+
Channel:                Interleave
Trellis:                U:ON /D:ON
Line Status:            No Defect
Training Status:        Showtime
                Down            Up
SNR (dB):       10.3            34.3
Attn(dB):       5.5             3.9
Pwr(dBm):       17.9            11.5
Max(Kbps):      21292           1549
Rate (Kbps):    12470           639
                        G.dmt framing
K:              39(0)           10
R:              16              16
S:              1               16
D:              32              4
                        ADSL2 framing
MSGc:           59              11
B:              38              9
M:              1               16
T:              10              8
R:              16              16
S:              0.0998          7.9101
L:              4408            178
D:              288             4
                        Counters
SF:             87001           88188
SFErr:          0               0
RS:             56551164                712565
RSCorr:         1               0
RSUnCorr:       0               0

HEC:            0               7267
OCD:            0               0
LCD:            0               0
Total Cells:    41499362                135258638
Data Cells:     802             99654931
Drop Cells:     0
Bit Errors:     0               508957

ES:             0               263
SES:            0               84
UAS:            1812            13923
AS:             1412

INP:            4.18            1.43
PER:            16.22           16.80
delay:          7.18            7.91
OR:             32.05           8.09

Bitswap:        2               1

Total time = 1 hours 26 min 39 sec
SF  = 87001
CRC = 0
LOS = 0
LOF = 0
ES  = 0
Latest 1 day time = 1 hours 26 min 39 sec
SF  = 87001
CRC = 0
LOS = 0
LOF = 0
ES  = 0
Latest 15 minutes time = 11 min 39 sec
SF  = 43161
CRC = 0
LOS = 0
LOF = 0
ES  = 0
Previous 15 minutes time = 15 min 0 sec
SF  = 43840
CRC = 0
LOS = 0
LOF = 0
ES  = 0
Previous 1 day time = 0 sec
SF  = 0
CRC = 0
LOS = 0
LOF = 0
ES  = 0
15 minutes interval [-30 min to -15 min] time = 15 min 0 sec
SF  = 0
CRC = 0
LOS = 0
LOF = 0
ES  = 0
15 minutes interval [-45 min to -30 min] time = 15 min 0 sec
SF  = 0
CRC = 0
LOS = 0
LOF = 0
ES  = 0
15 minutes interval [-60 min to -45 min] time = 15 min 0 sec
SF  = 0
CRC = 0
LOS = 0
LOF = 0
ES  = 0
Showtime Drop Reason:   8000
Last Retrain Reason:    8000
Ebből ami nekem kell az ennyi lenne :

Kód: Egész kijelölése

     Down            Up
SNR (dB):       10.3            34.3
Attn(dB):       5.5             3.9
Pwr(dBm):       17.9            11.5
Max(Kbps):      21292           1549
Rate (Kbps):    12470           639

ES:             0               263
SES:            0               84
UAS:            1812            13923

Total time = 1 hours 26 min 39 sec
SF  = 87001
CRC = 0
LOS = 0
LOF = 0
ES  = 0

Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Fizikai soros port használata

Hozzászólás Szerző: csegebiga »

Adamyno
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2015. április 16. csütörtök, 19:29

Re: Fizikai soros port használata

Hozzászólás Szerző: Adamyno »

Ez nem pont az a modem, hanem annak egy újabb változata (nem sok a különbség). Azért nem úgy mérek, mert számítógép kell hozzá :D

Én néha kint a pusztán is szeretnék mérni ahol nincs semmi csak fű meg fa meg ADSL kábelek :D (nem vicc, komolyan)
Válasz küldése