Sari la conținut
ELFORUM - Forumul electronistilor

Comunicatie RS232 - arduino mega 2560


biP

Postări Recomandate

1 oră în urmă, biP 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)

Teoretic ai putea sa incerci sa legi un pin de I/O de la arduino, la intrarea libera care duce la t2out, pe care ulterior sa o legi la pinul de DTR de pe mufa, ai putea sa sa-l poti alimenta astfel fara sa folosesti comunicatie TX in bucla.

Link spre comentariu
  • Răspunsuri 20
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • biP

    13

  • UDAR

    3

  • core

    2

  • ratza

    1

Top autori în acest subiect

La 30.12.2022 la 18:25, UDAR a spus:

Da, dar ar fi preferabil chiar în conector, pe pinul 2. 

Salut, am masurat pinul DTR din conector si am 9V.....deci nu de la asta e problema

Nu stiu sincer ce poate sa fie

Link spre comentariu

Avand in vedere ce se spune in linkul cu senzorul, ca de fiecare dată când este detectată o particulă, un impuls este trimis pe linia serială, care este interpretat de portul serial al computerului ca octet, trebuie ca in program sa verificati periodic cati octeti se afla in bufer.
Serial.available() returneaza numărul de octeți (caractere) disponibili pentru citire din portul serial.

Acest bufer are 64 de octeți.
Puteti verifica la fiecare secunda cati octeti sunt in buferul de receptie, eventual sa goliti acel buffer imediat dupa ce ati facut citirea.

if (Serial.available() > 0) {
                              int NrOctetiDinBuffer=Serial.available();
}

Golirea buferului se poate face in acest caz doar cu:

Serial.end ( ) ;
Serial.begin (38400) ;

 

Link spre comentariu
Acum 11 ore, antemir a spus:

"Golirea" bufferului, adica setarea pointerilor tail si head pentru buferul RX, se face cu read().
Nu are nici un rost ca intr-un program sa apelam Serial.end().
Poate doar daca vrem sa eliberam pinii folositi si sa-i utilizam in alt scop.
Iar Serial.begin() se apeleaza o singura data, la pornire.
Pentru "golire" este suficient:
 

while(Serial.available()) 
	Serial.read();

 

Deci fata de codul meu initial ar trebui doar sa inlocuiesc if-ul cu while?

Link spre comentariu
  • 2 săptămâni mai târziu...
La 08.01.2023 la 11:25, antemir a spus:

Incearca asa:
(am pus si Serial1.write() in loop pentru a alimenta senzorul din tx-ul de la rs232)
 

 #include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3);


unsigned long prev_time;
int pulses;


void setup()
{
  Serial1.begin(38400);
  lcd.begin(16,2);
  lcd.print("waiting ...");

  prev_time=millis();
  pulses=0;
}

 

void loop()
{
  Serial1.write(0xA5);
   
  int cate=Serial1.available();

  if(cate>0)
  {   
    pulses+=cate;
    while(cate-- > 0) Serial1.read();    // golesc rx buffer
  }

  if(millis() - prev_time >= 60000)    // afisez la fiecare minut
  {
    lcd.clear();
    lcd.print(pulses);
    lcd.print(" CPM");

    pulses=0;
    prev_time=millis();
  }
 
} 

 

 

Nu vrea nici asa....

In caz ca e ceva problema hardware si nu trimite senzorul impulsurile, as putea sa simulez cumva eu niste impulsuri care se trimit pe Rx?

Ideea e ca trebuie sa dezvolt cat de mult codu de mai sus, si fara sa functioneze imi e destul de greu sa vad daca e bine ceea ce fac.

Are cineva idee cum pot simula impusurile astea?

 

Link spre comentariu
Acum 29 minute, antemir a spus:

Ce anume "nu vrea" ? Ce se afiseaza pe LCD ?
Afiseaza doar 0. Si nu ar trebui, senzorul conectat la PC, da undeva la 10-15 CPM

 

Atingi la GND pinul RX de la procesor.
Sau pe partea de senzor (RS232) legi RX la TX.

Mulțumesc, o sa incerc.

 

Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări