Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Lettura porta parallela

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] Lettura porta parallela

Messaggioda Foto Utentecip » 18 set 2007, 15:48

Salve,
ho realizzato una scheda di conversione adc per porta parallela, con un adc0808.
Tutto funziona regolarmente se faccio letture singole della porta.
Se invece leggo di continuo, cioè seleziono uno dei canali dell'adc 0808 (che funziona in free running), il programma si blocca.
Utilizzo il compilatore Borland C++ Builder 6.0 con librerie Ntport per l'accesso alla porta parallela.

La stessa scheda ed il relaztivo programma di gestione invece funzionano regolarmente anche in free running in ambiente dos con compilatore Turbo C++ 3.1 della Borland.

Quale può essere il problema ?

Grazie e Ciao.
Avatar utente
Foto Utentecip
0 3
 
Messaggi: 40
Iscritto il: 16 ott 2006, 16:33

0
voti

[2] Re: Lettura porta parallela

Messaggioda Foto UtentePaolino » 18 set 2007, 16:09

Dato che sotto DOS la scheda lavora, mi sbilancerei nell'affermare che probabilmente le librerie di accesso alla parallela hanno vincoli. C'è un readme.txt o qualcosa di analogo? Hai provato a ridurre il periodo di campionamento?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Lettura porta parallela

Messaggioda Foto Utentecip » 18 set 2007, 16:27

Nel programma dos, appena ho selezionato un canale, entro in un ciclo while durante il quale leggo in continuazione la porta parallela.
Per uscire dal ciclo while, ad esempio quando voglio cambiare canale o uscire dal programma, interrogo (dentro al ciclo) il buffer della tastiera (kbhit) per vedere se è stato premuto un tasto.
Nel caso vado poi a vedere che tasto è stato premuto (è una sottospecie di interrupt diciamo).

Nel programma win32 invece io seleziono un canale con un radio button e poi entro in un ciclo while uguale a quello precedente. Il problema è che a questo punto il programma non riesce più ad accorgersi se io premo un altro radio button o voglio chiudere il programma o qualsiasi altra cosa.
In effetti potrei selezionare un canale col radio button e campionare la parallela ogni tot millisecondi, in questo modo è probabile che il programma abbia il tempo di "sentire" un evento fra una lettura e l'altra.

Provo a fare qualche esperimento con i tuoi consigli.

Grazie e Ciao.
Avatar utente
Foto Utentecip
0 3
 
Messaggi: 40
Iscritto il: 16 ott 2006, 16:33

0
voti

[4] Re: Lettura porta parallela

Messaggioda Foto UtentePaolino » 18 set 2007, 16:40

Sono curioso: poi fammi sapere come è andata. In bocca al lupo, :D
Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: Lettura porta parallela

Messaggioda Foto Utenteposta10100 » 28 set 2007, 21:35

E' dovuto a come viene gestita l'interfaccia grafica.
Generalmente tutte le operazioni di ridisegno della grafica e di ascolto degli input vengono fatte nei momenti di idle del processore.
Un ciclo while però non consente al processore di andare in idle e quindi di interagire con l'utente.

Sempre se ho ragione potresti fare un fork quando avvii la lettura. Il programma principale resta in attesa degli input mentre il figlio lavora con la parallela.
Quando l'utente interviene allora fermi e distruggi il programma figlio e ne crei uno nuovo.

Questa soluzione non è delle più semplici ma è la prima che mi è venuta in mente.... oppure potresti provare a inserire ogni n cicli while uno sleep da qualche millisecondo...

Intanto prova a verificare se il tuo processo impegna al 100% il processore quando parte il campionamento. Se è così molto probabilmente la causa è quella che ti dicevo prima.
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[6] Re: Lettura porta parallela

Messaggioda Foto Utentecip » 1 ott 2007, 15:40

Ottimi consigli, grazie.
Credo che proverò con la soluzione di inserire uno sleep ogni "qualche" ciclo while.
Ciao.
Avatar utente
Foto Utentecip
0 3
 
Messaggi: 40
Iscritto il: 16 ott 2006, 16:33

0
voti

[7] Re: Lettura porta parallela

Messaggioda Foto Utentecip » 3 ott 2007, 11:56

Grazie ai vostri consigli ho risolto il problema.

Praticamente ho utilizzato il componente Timer del compilatore. (Ho provato con Sleep ma non funzionava facendo lo stesso problema di prima).
Quando entro in lettura (attraverso un pulstante) sull'evento onclick del pulsante leggo la parallela la prima volta e stampo il risultato della lettura, poi attivo il Timer mettendo Enabled in true (il Timer è settato per 100 ms).

Sull'evento OnTimer del Timer (cioè quando sono trascorsi i 100 ms) rileggo la parallela e riattivo il Timer.

Grazie e ciao.
Avatar utente
Foto Utentecip
0 3
 
Messaggi: 40
Iscritto il: 16 ott 2006, 16:33


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti