|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Linguaggio C e RS232
Vorrei costruirmi un piccolo oscilloscopio digitale, e vorrei passare degli stream di dati campionati da un dac e messi in una fifo in via RS232 (UART del PIC + tranciver). Qualcuno saprebbe dirmi come si possano leggere e scrivere dati sulla RS232? Altrimenti potrei utilizzare un interfaccia USB integrata in alcuni Pic16, ma penso che gestire la USB sia dannatamente più complicato.
Grazie e Ciao.
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
questo è un inizio usando una API per la sua apertura
Codice:
HANDLE hCom = CreateFile("COM1",
GENERIC_READ,
0,
NULL,
OPEN_EXISTING*/
0,
NULL
);
è meglio che lo scrivo offline che mi viene meglio Ciao |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Grazie,
se per caso sai qualche link con un esempio, me lo potresti postare? Ciao
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Trovato il link. Ho fatto molta fatica ma ci sono riuscito
[/url]http://www.beyondlogic.org/serial/serial.htm[url] Ciao e grazie
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quello che hai trovato funzioan solo se hai un compilatore per DOS e potrebbe non funzionare in Windows 2000/XP...
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Grazie, e allora cosa potrei fare sotto Win2k?
ho cercato un po', ma non ho capito a che api si riferisce il primo post. Ciao e grazie per avermi evitato di perdere tempo inutilmente... PS: Alla peggio farò un dischetto DOS di boot con sopra l'eseguibile che mi serve.
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Ti passo questo codice di trasmissione dati attraverso la RS232.
Prendilo come esempio da adattare al tuo caso in specifico. Fa largamente uso delle API di Windows. L'ho sviluppato circa 3 anni fa e lo utilizzo tutt'ora senza alcun problema. Se hai qualche dubbio chiedi pure. Pardon se non è digeribile all'istante ma se osservi bene non è poi così complesso: è un pò lungo per via della gestione degli errori. Attenzione ai file (#include "blablabla") che io per pigrizia non ho aggiunto. Ciao Codice:
BOOL fSuccess; // gestione degli errori
//parametri per la funzione WriteFile
int lpBuffer;
DWORD NumeroDiBytesDaScrivere = 1;
DWORD NumeroDiBytesScritti = NULL;
BOOL bResult;
//apro la porta COM
HANDLE hCom = CreateFile("COM1", // ad esempio
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
// verifico l'effettiva disponibilità (potrebbe non esistere)
if(!hCom) {
printf(msg,"Problemi alla porta di comunicazione e relativo errore!!!\nEI=%d",GetLastError());
return; }
// e verifico lo stato della stessa
DCB dcb;
BOOL fSuccess = GetCommState(hCom,&dcb);
if (!fSuccess) {
printf(msg,"La porta selezionata è già in uso!!!: EI=%d",GetLastError());
return; }
// Inizializzo la DCB con i parametri desiderati (non a piacere: vi sono delle regole) di ricezione/trasmissione
dcb.BaudRate = 9800; // velocità dei dati (bit) al secondo
dcb.ByteSize = 7; // numero di bit
dcb.Parity = 0; // parità
dcb.StopBits = 2; // numero di bits di stop
// e setto la porta COM con i valori sopra (9800/7/0/2)
// leggere con attenzione sul Win32 SDK gli ulteriori parametri di questa struttura
fSuccess = SetCommState(hCom, &dcb);
// verifica dell'effettivo settaggio
if(!fSuccess) {
printf(msg,"settaggio non riuscito!!!: EI=%d",portacom,GetLastError());
CloseHandle(hCom);
return; }
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//apro il file da trasferire
FILE *fp;
fp = fopen("miofile.txt","r");
if(!fp) {
printf(msg,"problemi nel file!!\nEI=%d",GetLastError());
CloseHandle(hCom);
return; }
printf("trasmissione in corso\n");
//invio i dati alla porta COM
while( ( lpBuffer = fgetc(fp)) != EOF)
{
bResult = WriteFile(hCom, &lpBuffer, NumeroDiBytesDaScrivere, &NumeroDiBytesScritti, NULL) ;
if(!bResult) {
printf("errore in trasmissione dati"); // da studiare col valore di ritorno della GetLasError();
fclose(fp);
CloseHandle(hCom);
return; }
} //end while( ( lpBuffer = fgetc(fp)) != EOF)
// chiudo il file trasmesso
fclose(fp);
//chiudo la porta COM
bResult = CloseHandle(hCom);
if(!bResult) printf("errore sulla chiusura della porta COM\n");
printf("FILE TRANSFER END\n");
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Grazie, settimana prossima lo provo...
Ciao
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Si ma io non devo solo inviare dati, devo soprattutto riceverne.
non sono poi riuscito a capire quale sia la libreria da importare per la seriale (uso Gcc o il borland in linea di comando). Ciao e grazie per l'esempio.
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Per riceverne c'è la ReadFile che è praticamente identica alla WriteFile...
La libreria è Windows.h |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Si, ma non devo trasferire file da disco, ma stringhe di caratteri o singoli caratteri creati dinamicamente in maniera pseudo-intelligiente.
Grazie per l'interessamento; domani mattina vado a leggermi il Windows.h per capirne qualcosa di più... Ciao
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Usando la CreateFile come ti hanno fatto vedere sopra con la ReadFile leggi la seriale...con WriteFile ci scrivi...
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
se ti è ostico il C, puoi usare questa banalità in QBasic
apertura della RS232 con relativi parametri di ricezione OPEN "COM1:4800,E,7,2,CD0,CS0,DS0,OP0,RS,TB2048,RB4096" FOR INPUT AS #1 file di destinazione OPEN "miofile.txt" FOR OUTPUT AS #2 rem leggo tutti i byte letti sino ad EOF rem anzichè EOF, puoi usare un carattere di controllo es: (%) WHILE (a$ <> EOF) INPUT #1, a$ PRINT a$ WRITE #2, a$ WEND CLOSE #1, #2 |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Oct 2002
Messaggi: 1446
|
Non mi è ostico il C, anzi ho programmato tanto in C, quella che mi è ostica è la RS232...
Lunedì o martedì ci lavoro, adesso non riesco a trovare tempo, devo studiare... Ciao e grazie
__________________
Perché non creare un club Matrox RT&RT.X nella sezione video del forum? spero di non essere l'unico a volerlo ... per chi ci sta sentiamoci °Seti Warrior° PIV 2533@3165 + GA 8pe667u2 + 1GB pc2700 + 19160 + fujitzu MAM3 18GB + ... ; athlon xp2100+ + NF7-s + 512MB pc3200 + raid 1 Maxtor 9 + maxtor 740 80 GB + Seagate barracuda ATA IV + Fortissimo III +RT.X100 ...; Athlon 1333 + GA7DXR + 512 MB PC2100 + Raid 1 Maxtor 9 + ...; |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
occhio ad impostare il timeout quando attendi i dati
altrimenti, non arrivando alcun carattere il programma attende all'infinito |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:54.



















