Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: washburn - Ottobre 14, 2020, 11:56:29 am

Titolo: Problema su lettura/scrittura su COM virtuale (FTDI232, Raspberry Pi4)
Inserito da: washburn - Ottobre 14, 2020, 11:56:29 am
Salve,

sto incontrando un problema un pò strano tentando di "comunicare" con un microcontrollore (una scheda simile ad Arduino che progettai diversi anni fa) interfacciato all'USB tramite un chipettino della FTDI, il 232.
Per ora sulla scheda sta girando un programmino che semplicemente se riceve un carattere (il carattere "i") risponde con un "o".
Se provo con "minicom" impostando la porta su 38400, 8, 1 bit stop, nessuna parità ne controlli di flusso, mi risponde correttamente (premo "i", appare "o" sullo schermo).
Se invece provo da programma Lazarus:
Codice: [Seleziona]
serKey:= TBlockSerial.Create;
serKey.LinuxLock:= false;
serKey.Connect(‘/dev/ttyUSB0’);
serKey.config(38400, 8, ‘N’, SB1, False, False)
Sleep(100);

serKey.SendString('i');
Sleep(100);

while 1>0 do
begin
  str:= serKey.RecvString(5000);
  if Trim(str)<>'' then break;
  Sleep(1);
  Application.ProcessMessages;
end;

ShowMessage(str);

serKey.Free;


il programma non riceve nulla (str='') e ovviamente rimane in loop finchè non lo interrompo.
Non capisco perchè con "minicom" funziona e con il codice qui sopra no.
Il programma sul microcontrollore si aspetta 1 solo carattere (senza CR/LF).
Qualche idea?
Sto usando Lazarus 2.0 su Raspberry Pi4 (2 GB) e librerie Synapse (synaser).
Grazie,


Roberto
Titolo: Re:Problema su lettura/scrittura su COM virtuale (FTDI232, Raspberry Pi4)
Inserito da: xinyiman - Ottobre 14, 2020, 12:50:21 pm
Non ho modo di provare, ma penso che

serKey.SendString('i');

oltre a mandare la i mandi anche i caratteri di fine string. Proprio per via del fatto che una stringa è tale perchè termina con il carattere di fine stringa.
Titolo: Re:Problema su lettura/scrittura su COM virtuale (FTDI232, Raspberry Pi4)
Inserito da: washburn - Ottobre 14, 2020, 12:59:32 pm
Ho provato anche con "serKey.SendByte(105)" (codice ASCII di "i") ma nulla....


Roberto
Titolo: Re:Problema su lettura/scrittura su COM virtuale (FTDI232, Raspberry Pi4)
Inserito da: bonmario - Ottobre 14, 2020, 01:03:02 pm
Puoi provare a fargli scrivere da qualche parte il carattere ricevuto?
Se puoi, riesci a capire se il problema è nell'invio o nella ricezione.

Ciao, Mario
Titolo: Re:Problema su lettura/scrittura su COM virtuale (FTDI232, Raspberry Pi4)
Inserito da: washburn - Ottobre 14, 2020, 01:12:00 pm
Sì...penso che modificherò il programma a bordo del micro in modo da salvare tutti i caratteri che riceve e poi tramite un programmino che ho fatto in C# (sul pc, e funziona) me li faccio trasmettere...
Titolo: Re:Problema su lettura/scrittura su COM virtuale (FTDI232, Raspberry Pi4)
Inserito da: washburn - Ottobre 14, 2020, 09:42:44 pm
Ho modificato il programma ed ho verificato che il micro riceve correttamente il comando...quindi ho pensato che il problema fosse nella risposta.
Infatti modificando "serKey.RecvString(5000)" con "serKey.RecvByte(5000)" ha funzionato.
Andando a cercare su internet "TBlockSerial.RecvString" ho scoperto (...mi fosse venuto in mente prima!) che quel comando si aspetta un "CR/LF" a segnalare la fine della stringa da ricevere, il programma a bordo del micro non inviando alcun "CR/LF" faceva andare in timeout "RecvString".
Non si finisce mai di imparare.... ;D
Saluti,


Roberto