biP Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 Salut, La multi ani si un an nou fericit! Am si eu o problema (sau mai multe) si am nevoie de ajutor. Vreau sa trimit date de la un senzor de radiatii (Geiger counter GM45), care are interfata RS232 si sa le afisez pe un LCD, folosind arduino mega 2560. Senzorul: https://www.blackcatsystems.com/GM/interfacing.html. In primul rand, am conectat senzorul la un calculator vechi care are port rs232 si cu ajutorul Hyperterminal, am urmarit cum arata datele transmise de senzor. Aceste arata cam asa: https://ibb.co/Wfj9Ddj Acum incerc sa obtin aceleasi date si pe un LCD, folosind arduino. Conexiunea dintre senzor si arduino, am facut-o cu ajutorul unui modul RS232 catre TTL, si deoarece atat modulul cat si mufa senzorului sunt de tip mama, am folosit un adaptor serial tata-tata, precum in imagine: https://ibb.co/7NPJ5B7. Cod-ul folosit: #include <LiquidCrystal.h> /* Create object named lcd of the class LiquidCrystal */ LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3); /* For 8-bit mode */ //LiquidCrystal lcd(13, 12, 11, 6, 5, 4, 3); /* For 4-bit mode */ int incomingByte = 0; // for incoming serial data void setup() { Serial1.begin(38400);// initializing the Serial communication lcd.begin(16,2); /* Initialize 16x2 LCD */ lcd.setCursor(0,0);// setting the place for the data on LCD lcd.clear(); /* Clear the LCD */ } void loop() { if(Serial1.available()> 0 ) { incomingByte = Serial1.read(); lcd.print (incomingByte); // echo the incoming character to the LCD } } Ca urmare a flash-uirii codului de mai sus, pe LCD apar numai 0-uri, deci transmisia datelor nu are loc (si da, stiu, ca am folosit int si nu am cum sa obtin aceleasi date ca si in hyperterminal, insa voi lucra la asta dupa ce ma asigur ca senzorul transmite ceva date) In concluzie, nu stiu daca problema pentru care senzorul nu trimite date este de tip hardware sau software( ma gandesc ca poate fi un motiv si faptul ca senzorul nu primeste tensiunea si curentul de care are nevoie, datorita modului RS232 -> TTL). Orice sfat este binevenit. Multumesc anticipat! Link spre comentariu
ratza Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 Salut. Vezi să nu ai pinii puși RX la RX și TX la TX. Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 10 minute, ratza a spus: Salut. Vezi să nu ai pinii puși RX la RX și TX la TX. Nope. RXD de la modul e la TX1 si TXD la RX2 Link spre comentariu
merck Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 (editat) 1 oră în urmă, biP a spus: ma gandesc ca poate fi un motiv si faptul ca senzorul nu primeste tensiunea si curentul de care are nevoie, datorita modului RS232 -> TTL Imi amintesc bine ca a mai fost cineva care dorea sa citeasca date de la un senzor si senzorul nu dorea TTL. De aceea poti sa primesti date pe computerul vechi (laptopurile o mai dau in bara cu portul serial tot din cauza asta). The minimum and maximum voltages of RS-232 signals are +/-13V, while TTL signals are 0 to 3.3V/5V. Valid RS-232 signals are either in the range of +3 V to +15 V or the range −3 V to −15 V with respect to the common ground (Figure 1-1). To be more specific, the driver output is Logic 0 when the voltage is between +5 V and +15 V and is Logic 1 when the voltage is between -5 V to -15 V. Editat Decembrie 30, 2022 de merck Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 (editat) Acum 30 minute, antemir a spus: LCD este conectat ok ? Ce afiseaza daca pui asta ? void loop() { lcd.print("test"); delay(1000); lcd.clear(); delay(1000); } Daca este ok, pune asta Ca sa vezi daca receptionezi ceva. Indiferent ce. void loop() { if(Serial1.available()> 0 ) { lcd.print(incomingByte++); delay(100); } } Da, LCD-ul merge. Am facut testul si eu, si imi afiseaza textul, deci conexiunea intre LCD si arduino e buna. Am pus void-ul dat de tine, si acum ar parea ca primesc ceva date. Uite: https://ibb.co/02Y5wns Doar ca senzorul nu scoate nici un sunet( cand era conectat la pc, si se trimiteau date, se auzea un fel de pacanit) Editat Decembrie 30, 2022 de biP clarificare Link spre comentariu
core Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 Citat Writing your own software to take readings from a GM-10 or GM-45 is very easy. The RS-232 versions are self powered off of the DTR and TX Data lines of the serial port. Open the serial port (usually the handshake lines are correctly asserted automatically by the computer) at 57,600 baud, 8 data bits, one stop bit. Link spre comentariu
UDAR Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 Păi în primele rânduri ale documentului despre senzor zice că este autoalimentat din portul RS232. Tu la modulul tău nici nu ai (probabil) pinul DTR iar TX probabil nu are tensiune/curent suficiente pentru a alimenta singur. De aici trebuie să începi, eventual vezi dacă nu poți alimenta provizoriu separat senzorul. Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 2 minute, core a spus: Da, am incercat si asta, cu un max232: https://ibb.co/r7xK6c9. Si in plus fata de circuitul din poza, am adaugat un fir de la pinul 4 al conectorului RS232 (DTR) la pinul 7 al integratului max232 (T2OUT). Insa la varianta asta nici macar acei 0 de care am povestit mai sus nu ii primeam. Si din cauza asta am trecut la varianta cu modul de conversie Rs232 la TTL, pentru ca am crezut ca nu am facut eu circuitul bine P.S: pentru max232 am folosit condensatori ceramici (1uF, 25V) Link spre comentariu
UDAR Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 (editat) Valoarea condensatorilor depinde de varianta de MAX232 - poate să fie OK cu 0.1µ. Scoate cablul către senzor și măsoară tensiunea pe pinul TX al lui MAX232 în conector, ar trebui să ai cam -9V. Editat Decembrie 30, 2022 de UDAR corectie capacitate Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 7 minute, antemir a spus: Senzorul si montajul se pare ca functioneaza. In documentatie scrie ca acest tip de senzor nu trimite altceva pe seriala decat un impuls la fiecare particula care trece prin el. Nu prea are treaba cu protocolul RS232. Este folosit doar pentru alimentare si posibil pentru buffer la receptie. Impulsul primit este tratat de protoculul RS232 ca fiind Start-bit . Cand vine Stop-Bit , si ce valoare are octetul receptionat nici nu conteaza. Important este sa treaca ceva particule prin senzor. De accea te-am pus sa scri codul de mai sus. Este un counter pentru particulele care au trecut prin senzor. Da, in final trebuie doar sa numar cati octeti am primit intr-un minut si sa obtin un CPM. Senzorul tot nu cred ca functioneaza. Ceea ce face void-ul de mai sus, e sa inceapa un counter de la 0 si sa il incrementeze cu 1 pana la infinit, se tot suprapun numerele, de-aia s a ajuns la ce e in poza. Nu are legatura cu numarul de particule sau cu ceva date primite Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 17 minute, antemir a spus: Si pentru ca nu exista pinul DTR la convertorul tau TTL-RS232, ai putea sa trimiti tensiune mai mare punand in loop un Serial1.write(0xA5); (adica un sir de biti 1,0) Oricum ai de scris la program. Trebuie sa calculezi cate impulsuri vin pe secunda sau minut. Si acestea este rezultatul care trebuie afisat. Daca pui acest cod, mai merge ? Se pare ca mai sus am uitat sa citesc caracterul available() void loop() { if(Serial1.available()> 0 ) { Serial1.read(); lcd.print(incomingByte++); delay(100); } } nu mai merge Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 6 minute, antemir a spus: Exact. Valoarea octetului nu are nici o importanta. Iar RS232 este folosit numai pentru alimentare. Senzorul are RX/DTR doar pentru a se alimenta. pune Serial1.write(0xA5); in loop() ca sa alimentezi senzorul. Am pus Acum porneste din nou acel counter, insa tot nu are legatura cu date venite de la senzor Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 37 minute, UDAR a spus: Valoarea condensatorilor depinde de varianta de MAX232 - poate să fie OK cu 0.1µ. Scoate cablul către senzor și măsoară tensiunea pe pinul TX al lui MAX232 în conector, ar trebui să ai cam -9V. Adica pinul 14 al lui max232, nu? T1 out Link spre comentariu
biP Postat Decembrie 30, 2022 Autor Partajează Postat Decembrie 30, 2022 Acum 8 minute, antemir a spus: Gresim undeva Scoate acel delay(100), pentru ca oricum pana vin un bit start si unul stop de la senzor ca se faca de un char available() dureza. Chiar nu stiu cum de nu da eroare protocolu UART cu asa inventie facuta de producatorul senzorului. Si pune lcd.print(incomingByte++, HEX); pentru ca fisare incepe cu 0x00, 0x01 si nu stiu ce afiseaza LCD pentru aceste coduri ascii. Daca ai pe LCD cifre care se incrementeaza, totul este Ok. Doar ca trebuie sa te apuci sa scri softul pentru contorizare. Am facut modificarile, acum la fel ca inainte se incrementeaza cifrele, insa mai rapid... si in sistem hexa....deci tot nu are legatura cu date venite de la senzor O sa scot convertorul rs232->ttl si o sa revin la circuitul max232 si o sa masor acel pin de care a zis @UDAR sa vad daca problema e la alimentarea senzorului. Insa momentat nu am un multimetru la indemana, o sa revin in cateva zile. Multumesc tuturor de raspunsuri Link spre comentariu
UDAR Postat Decembrie 30, 2022 Partajează Postat Decembrie 30, 2022 Acum 5 minute, biP a spus: Adica pinul 14 al lui max232, nu? T1 out Da, dar ar fi preferabil chiar în conector, pe pinul 2. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum