Macchina a controllo numerico CNC - fattibile

Moderatore: jpquattro

Avatar utente
maxlinux2000
Amministratore
Messaggi: 7409
Iscritto il: 22 mar 2011, 11:50

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da maxlinux2000 » 20 feb 2013, 17:53

scusate... ma avevo capito che per comandare una cnc bastava anche un vecchio 486 con una porta seriale... è cosí?

Quindi in teoria basta anche un vecchio portatile con porta usb (per caricare i dati) e porta seriale (per comandare la centralina motori passo passo.

Del resto mi sembra anche la soluzione migliore. i disegni meglio farli a casa con il computer grosso, e poi si portano i dati in officina su un computer "sacrificabile"... .sacrificabile per la polvere di legno/metalli/plastiche e il brutto ambiente in generale che è una officina.
Cogito, ergo NO SUV !!

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 20 feb 2013, 22:18

maxlinux2000, più ci penso e più mi rendo conto che forse sia molto più semplice l'uso di una porta parallela, visto che un motore stepper bifase, avendo 3 fili, quindi una massa e due positivi, comanda un solo asse, mentre a noi ne servono 3 assi.
Quindi ogni motore necessita di massa e due fili di dati in parallelo agli altri 2 motori che vogliono altri 2 fili di dato ciascuno.
Quindi in definitiva servono 1 massa e 6 fili di dato, il tutto in parallelo, quindi la più appropriata è la porta parallela, correggetemi se sbaglio l'ipotesi.

Per pilotare una porta parallela ho trovato questo,

quindi ci vorrebbe un compilatore, ma la sequenza io potrei produrla in excel, quindi forse ritorna lo spettro del visual basic per far uscire la sequenza di dati.

Qui allego un link di una scheda madre del costo di 45€ sped inclusa, dove c'è la porta parallela
SCHEDA MADRE AMD ASUS M5A78L-M LX3 MICRO ATX 2 X DDR3 SOCKET AM3 MB VGA

http://www.ebay.it/itm/SCHEDA-MADRE-AMD ... 20ce0c914f
Allegati
parallela e seriale.jpg
parallela e seriale.jpg (30.88 KiB) Visto 9647 volte

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 20 feb 2013, 22:25

Quindi si tratterebbe di farsi sempre un pc con i pezzi comprati su ebay, o comprare un pc usato di quelli proprio vecchi per caricarci il codice ed avere la porta parallela.
Il seguente costa 39 euro (trasporto di 14 euro già incluso) e se ne può fare l'uso che dici tu maxlinux2000, metterlo sotto la segatura di legno inumidita con l'olio di taglio...
http://www.ebay.it/itm/PC-DESKTOP-USATO ... 3f2162fc96
Allegati
pc usato.jpg
pc usato.jpg (4.21 KiB) Visto 9646 volte

Avatar utente
maxlinux2000
Amministratore
Messaggi: 7409
Iscritto il: 22 mar 2011, 11:50

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da maxlinux2000 » 20 feb 2013, 23:09

esatto... ma non conosco (per ora) queste centraline per le cnc.... quindi prendi con le molle il mio pensiero
Cogito, ergo NO SUV !!

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 20 feb 2013, 23:25

Scusate, sopra dico "ho trovato questo ma non ho messo il link", lo inserisco...
http://www.vincenzov.net/tutorial/spp/indirizzi.htm

Scrivere software per usare la porta parallela
I PC hanno normalmente una sola porta parallela, indicata come LPT1 oppure PRN. Il BIOS permette però di estenderne il numero fino a tre (su alcune macchine, soprattutto vecchie, fino a quattro). Le porte aggiuntive sono indicate come LPT2 e LPT3. Se è indispensabile e a condizione di trovare schede adatte, il numero potrebbe essere ulteriormente elevato.

Ciascuna porta parallela è vista dal processore come una serie di indirizzi nello spazio di I/O (Input/Output), occupando un minimo di quattro indirizzi consecutivi; il primo di questi indirizzi è chiamato indirizzo di base.

In genere LPT1 ha indirizzo di base 0x378 (usando la sintassi C, con 0x378 si intende il numero esadecimale 378, indicato con 378h oppure $378 se si usano altri linguaggi; in decimale l'indirizzo corrispondente è 888), LPT2 ha indirizzo 0x278 ed LPT3 0x3BC.

Gli indirizzi di tali porte non sono però rigorosamente fissi ma dipendono dall'hardware installato e da come il BIOS (o il sistema operativo) effettua la ricerca, causando spesso problemi nell'interpretazione corretta delle informazioni. Per esempio la porta con indirizzo 0x3BC è indicata sulle vecchie macchine come LPT1.

Due sono i modi per conoscere gli indirizzi effettivi:

Durante la fase di boot del PC occorre avere l'occhio sveglio e leggere sulla prima schermata gli indirizzi delle porte parallele che il BIOS individua, almeno nei PC che mostrano questa informazione.
Nei sistemi che utilizzano il BIOS del PC (per esempio i vari DOS e Windows), leggere il contenuto delle locazioni di memoria 0x408 e seguenti ed interpretare secondo la tabella seguente (gli indirizzi di memoria sono in esadecimale, nella sintassi segmento:offset):

Indirizzo di memoria Contenuto (2 byte)
0000:0408 Indirizzo di base di LPT1
0000:040A Indirizzo di base di LPT2
0000:040C Indirizzo di base di LPT3
0000:040E Indirizzo di base di LPT4

Su macchine moderne, in linea di massima successive agli IBM PS2 prima serie, l' indirizzo corrispondente alla LPT4 è usato per altri scopi e quindi ne sconsiglio l'uso e raccomando una particolare attenzione nell'interpretazione dei dati letti.

Di seguito un frammento di codice che legge l'indirizzo di LPT1 in Turbo C in ambiente DOS.

unsigned int far *pAddr; // Puntatore ai vettori di indirizzo
unsigned int IOaddr; // Indirizzo di LPT1
{
pAddr = (unsigned int far *) 0x408;
IOaddr = *pAddr;
printf("LPT1 base address is 0x%X\n", IOaddr);
}

In TurboPascal l'indirizzo di LPT1 si ricava con il seguente codice.

Var addr:word; {Indirizzo di LPT1}
Begin
addr := MemW[$0000:$0408];
writeln("LPT1 base address is", addr);
End

Per le altre porte il codice è lo stesso, cambiando ovviamente l'area di memoria da cui leggere.

Si noti che spesso le porte parallele su bus PCI hanno indirizzi maggiori di 0x400 e non sono riconosciute dal BIOS: per conoscerne l'indirizzo è utile verificare le informazioni fornite dal proprio sistema operativo (se ovviamente riconosce la porta)

Il sistema operativo Linux (c) utilizza convenzioni diverse, assegnando il nome di lpt1, lpt2 ed lpt3 rispettivamente alle porte che individua agli indirizzi 0x378, 0x278 e 0x3BC.
I registri di base

Ciascuna porta parallela configurata come SPP è controllabile attraverso tre registri consecutivi nello spazio di I/O del processore, chiamati data register, status register e control register, ciascuno di 8 bit.

Per scrivere un byte in questi registri è necessario eseguire una istruzione di output verso l'indirizzo interessato. Per leggere un byte è necessario effettuare una istruzione di input. Non è possibile leggere o scrivere un solo bit alla volta, indipendentemente dal linguaggio adottato; inoltre non è in genere possibile utilizzare le istruzioni corrispondenti alle SET dell'assembler. Infine non è possibile leggere un dato da un registro di sola scrittura o scrivere in una porta a sola lettura (l'operazione non genera nessun errore ma il dato letto o scritto è inconsistente).

Una precisazione: quanto detto vale solo in ambiente MS-DOS o derivati.

Usando il BorlandC o il TurboC la sintassi è la seguente (tale sintassi verrà adottata nel seguito del tutorial):

unsigned char dato;
unsigned int addr;
outportb (addr, dato);
dato = inportb (addr);

dove dato è il byte da leggere o da scrivere (una variabile di otto bit, senza segno: normalmente di tipo unsigned char) e addr è l'indirizzo del registro (una variabile o una costante a 16 bit, senza segno).

Altri compilatori C usano una sintassi simile ma non è prevista nell'ANSI C la scrittura diretta su dispositivi hardware: occorre quindi verificare sul manuale del proprio compilatore.

Usando la sintassi TurboPascal le stesse istruzioni diventano:

Port[addr] := dato;
dato := Port[addr];

Dove Port è una matrice predefinita di 65k elementi il cui l'indice corrisponde all'indirizzo della porta da utilizzare.

Usando la sintassi GW-Basic o altri basic per DOS:

OUT addr,dato
dato = INP (addr)

Usando la sintassi assembler:

MOV DX,ADDR
MOV AL,DATO
OUT DX,AL

MOV DX,ADDR
IN AL,DX
MOV DATO,AL

Usando sistemi operativi diversi dal DOS le cose cambiano in quanto ai programmi utente è impedito l'accesso diretto alle risorse hardware. La descrizione approfondita va oltre lo scopo di questo tutorial e mi limiterò quindi ad un breve accenno.
Windows NT / 2000 / XP

Questo sistema operativo implementa due modalità operative: il ring0 ed il ring3. Le istruzioni di I/O sono possibili senza limitazioni solo nel ring 0, quello del kernel del sistema operativo. Nel ring3 (il livello delle normali applicazioni utente) sono in teoria possibili istruzioni di ingresso e uscita solo su particolari indirizzi attraverso la manipolazione della cosiddetta I/O permission table, modificabile solo all'interno del ring0.

Eseguendo una applicazione DOS viene automaticamente generata da WindowsNT una macchina virtuale (la NTVDM: NT virtual dos machine) che emula le periferiche standard ed in particolare la parallela permettendo in qualche caso il corretto funzionamento dei programmi anche se con notevolissimi rallentamenti.

Nei compilatori nativi in ambiente Windows normalmente le istruzioni di IN e OUT non sono neppure implementate: ciò è vero in particolare per VisualBasic, BorlandC e Delphi.

La soluzione a questi problemi è quella di scrivere un device driver che, essendo eseguito nel ring0, permette la gestione diretta dell'hardware; purtroppo l'uso della DDK (driver development kit) di Microsoft è tutt'altro che semplice... Forse potrebbe esservi utile WinDriver disponibile in versione demo su http://www.jungo.com

In alternativa è possibile usare driver generici che mettono a disposizione apposite funzioni attraverso DLL o VBX. Spesso questi prodotti sono disponibili gratuitamente su internet: posso citare DriverLINX, per Win9x e WinNT e PortTalk. Alcune funzioni sono disponibile all'interno del tool VVIO, del quale rendo disponibile sia il codice sorgente sia l'eseguibile.

Analoghe considerazioni valgono anche in Win95/98/Me, anche se questi OS sono molto più laschi nella protezione dell'hardware.
Linux

Anche in ambiente Linux l'I/O diretto a livello di applicazione utente non è possibile. Chi volesse fare esperimenti con questo sistema operativo deve utilizzare la funzione C

ioperm(from, num, on_or_off)

Essa permette di rendere accessibile in lettura/scrittura una serie di registri ad una applicazione qualunque. Per usare un programma che invoca questa funzione occorre però essere l'utente root.

In alternativa occorre scrivere applicazioni in kernel mode; per questo potrebbe essere utile per esempio il pacchetto GPL short.
Il data register

Il data register è un registro di sola scrittura direttamente connesso agli otto pin di dato presenti sul connettore esterno della parallela. L'indirizzo è quello di base della porta.

Per impostare un pin alto o basso basta scrivere nel bit corrispondente di questo registro rispettivamente 1 oppure 0. Il bit meno significativo del registro corrisponde al pin Data0.

Se per esempio si vogliono impostare i pin in modo tale che i pin 2 (bit 0) e 7 (bit 5) siano alti ed i pin 3, 4, 5, 6, 8 e 9 bassi, occorre eseguire la seguente riga di codice (la costante DATA indica l'indirizzo del registro dei dati della porta interessata, per esempio 0x278):

#define DATA 0x278
outportb (DATA, 0x21); // 0x21 = 00100001 in binario

Occorre infine notare che una volta scritto il byte nel registro, i pin di uscita non cambiano più il loro valore fino alla scrittura successiva in quanto il circuito di uscita della porta è formato da otto flip-flop.
Lo status register

Questo registro è di sola lettura ed ha indirizzo BASE + 1.

Quando il processore effettua la lettura di questo registro vengono riportati i valori dei cinque pin in ingresso, secondo la tabella di seguito riportata.
Indirizzo Bit Nome Pin (DB25) Invertito
BASE +1 Status 7 Busy 11 Si
Status 6 Ack 10 No
Status 5 Paper Out 12 No
Status 4 Select In 13 No
Status 3 Error 15 No
Status 2 IRQ -
Status 1 Riservato -
Status 0 Riservato -

L'ultima colonna indica se è presente una porta not all'ingresso della porta parallela: nel caso ci sia un SI, vuol dire che un livello logico alto viene letto come 0 logico. Se invece si trova scritto NO, un livello logico alto viene letto come 1 logico.

Se voglio conoscere il valore dei pin 11 e 12 devo eseguire il seguente codice

#define STATUS (DATA+1)
unsigned char data, busy, po // Tre variabili ad 8 bit, senza segno
data = inportb (STATUS); // Leggo gli 8 bit di stato
data = data ^ 0x80; // Inverto il bit più significativo con uno xor
busy = (data & 0x80) >> 7; // Estraggo il valore di busy (bit 7)
po = (data & 0x20) >> 5; // Estraggo il valore di Paper Out (bit 5)

Il bit IRQ viene resettato dall'hardware in caso di interrupt attivato dalla linea Ack. Vale invece 1 qualora non si sia attivata nessuna interrupt.
Il control register

Questo registro è primariamente un registro di scrittura anche se, in alcuni casi, possibile l'utilizzo in lettura. L'indirizzo è BASE + 2.

Il processore può scrivere in questo registro per impostare il valore di quattro pin di uscita, secondo la seguente tabella. Altri due bit sono per usi interni.
(Non inserisco la tabella che non la visualizza bene, si consulta sul sito di origine)

Nel caso dei tre bit invertiti, la scrittura di un 1 causa sull'uscita una tensione di 0V.

Per esempio per portare tutti i quattro pin della LPT2 ad un livello logico alto devo eseguire la seguente istruzione

#define CONTROL (DATA+2)
outportb (CONTROL, 0x04);
// 0x04 = 00000100, cioè ricordando che 3 bit sono invertiti, 00001111

Ho accennato al fatto che i quattro segnali connessi al registro di controllo possono essere in alcuni casi utilizzati anche per l'input.

Per fare ciò è necessario porre prima tutti i bit di uscita a livello logico alto e quindi leggere il byte:

outportb (CONTROL, 0x04); // tutti i pin alti
data = inportb (CONTROL) & 0x0F;

Questa possibilità è subordinata al fatto che queste uscite siano a collettore aperto (open collector), possibilità prevista nell'originaria porta del PC XT ma non in tutte le porte parallele moderne, soprattutto se configurate come EPP o ECP. Per verificare se la porta funziona secondo questa modalità provate a collegare una resistenza da 1 kohm tra uno dei pin associati al registro di controllo e massa: se viene letto uno 0 le uscite sono open-collector e quindi possono essere usate come ingressi.

Personalmente sconsiglio l'uso di tale modalità anche se funzionante in quanto potrebbe portare alla distruzione della porta nel caso di porte senza uscita a collettore aperto, cioè praticamente per tutte le porte dei PC moderni correttamente configurati.

Il bit 5 del registro di controllo permette di attivare la modalità bidirezionale delle porte che ne sono provviste: ponendo a 1 questo bit è possibile leggere i dati presenti sugli otto pin 2...9, attraverso la lettura del registro dei dati, come di seguito mostrato

outportb (CONTROL, 0x20); // 0x20 = 0010 000 setto in ingresso
data = inportb (DATA);

Se il bit vale 0, è possibile scrivere nel registro dati, come precedentemente descritto.

Non tutte le porte hanno questa possibilità ed alcune funzionano con modalità diverse. Dalla mia esperienza posso dire che le tutte le porte configurate come EPP hanno questo funzionamento. Non l'hanno invece le porte del PC XT originale ed in genere le vecchie macchine. Per effettuare il test che verifica se la propria porta parallela è bidirezionale o meno è possibile usare la seguente procedura:

Collegare una resistenza da 1k tra il pin D0 e la massa.
Scrivere un byte qualunque nel registro dati, possibilmente mischiando alcuni 0 ed alcuni 1 (personalmente uso il byte 0xAA oppure 0x55, formati entrambi dall'alternarsi di 0 e 1).
Configurare la porta in ingresso settando il bit bidirezionale del registro di controllo.
Leggere il contenuto del registro data.

Se viene letto il numero binario 11111110 (0xFE) la porta supporta la modalità bidirezionale. Se viene letto il dato preventivamente scritto, la porta non supporta la modalità bidirezionale, perlomeno secondo lo schema che ho descritto: molte schede parallele hanno infatti capacità bidirezionali di tipo proprietario e quindi incompatibili con la procedura descritta.

Il bit 4 permette di abilitare le interrupt alla ricezione di un fronte sul pin Ack. Se l'interrupt è abilitato e la porta stampante connessa ad una linea del controllore di interrupt (p.e. attraverso l'apposito ponticello presente su molte schede,), una transizione sul pin Ack causa un'interrupt. Il fronte attivo può cambiare da scheda a scheda. L'uso di tale possibilità richiede la conoscenza delle problematiche correlate alla gestione delle interruzioni, argomento che va oltre lo scopo di questo tutorial.

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 20 feb 2013, 23:29

Ho incollato tutto citando la fonte, ma quello che interessa è il codice C

C'è un'alternativa: usare il visual basic scaricando il compilatore gratis dal sito microsoft, ovvero la piattaforma visual studio ed innestarci sopra il file del visual basic o del c++ per poter leggere i dati dal foglio di calcolo di excell, se qualcuno sa come fare un esempio, ben venga, un semplice esempio per cominciare.

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 20 feb 2013, 23:33

Qui sempre dal sito di vincenzov un esempio applicativo semplice, cioè come accendere un led con la porta parallela, ma questo codice non ho ben capito dove si deve scrivere :blushing:
http://www.vincenzov.net/tutorial/spp/applicazioni.htm

Per vedere la pagina bene è meglio collegarsi al suo sito, è impaginato a dovere.

Accensione di un led

Un paio di circuiti veramente semplici per accendere un led permettono di vedere come usare la parallela. È necessario disporre di una resistenza di circa 3,3k ed ovviamente di un led e, limitatamente al secondo circuito, di una batteria o un alimentatore da 5 volt (ma va bene anche una batteria da 4,5V).

Collegare un led

Il primo schema non necessita di particolari spiegazioni: quando il pin 2 viene posto alto, il led si accende, quando viene posto basso, si spegne. Il codice relativo è banale:

outportb (DATA, 0x01); // accendo il led collegato al pin 2 (D0)
... // altre righe di codice non legate all'uso della SPP
outportb (DATA, 0x00); // spengo tutti il led

Ho sottointeso la dichiarazione delle varabili utilizzate, peraltro già riportate nelle righe di codice già presentate. E' bene evidenziare che, una volta acceso il led, esso rimane tale fino allo spegnimento del PC o finché viene esplicitamente spento dal programma, indipendentemente dal fatto che il programma stesso sia o meno in esecuzione: lo stato del led è infatti memorizzato dall'hardware.

La connessione utilizzata in questo primo circuito (il led è acceso dalla corrente uscente dal pin della porta parallela) ha il vantaggio di non richiedere nessuna alimentazione esterna ma il difetto che su alcune porte parallele (in particolare vecchie o di PC portatili) potrebbe non funzionare a causa del fatto che la corrente di source è troppo piccola.

Il secondo circuito utilizza una sorgente di alimentazione esterna e dovrebbe funzionare con tutte le porte parallele. In questo caso è lo zero che accende il led. Per aumentare la luminosità del led è possibile diminuire il valore della resistenza anche a valori molto più piccoli, quale 330 ohm.

Ovviamente i due circuiti possono essere ampliati connettendo altri sette led agli otto pin di dato.

Simile il discorso per i pin connessi al registro di controllo. L'unica nota è riferita al fatto che, nel caso di uscite a collettore aperto potrebbe essere necessario per il primo circuito diminuire il valore della resistenza o addirittura toglierla (quest'ultima è un'operazione rischiosa e che personalmente sconsiglio in quanto non è una configurazione adatta alla generalità delle LPT).
Collegamento a grossi carichi

Il precedente circuito è utile solo se sono richieste correnti molto piccole (pochi mA al massimo) e una tensione di 5V massimo. In altri casi, quale l'accensione di una lampadina da 12V o di un relè, è necessario l'utilizzo di un transistor di adeguata potenza e di un'alimentazione esterna.

Connettere relay e lampadine

Lo schema mostra la connessione di un relè (osservate il diodo di ricircolo, che deve essere di tipo veloce) e di una lampadina. La Vcc è la tensione continua richiesta per il funzionamento della lampadina e della bobina del relè. Eventuali carichi in AC richiedono sempre la presenza di un relè o di un altro interruttore adeguato.

Ovviamente nel dimensionamento del transistor e della resistenza di base occorre tenere conto delle effettive tensioni e correnti in gioco (in particolare, nel caso di grossi teleruttori o lampade ad elevato assorbimento, si rende necessario l'uso di transistor darlington) ma, con le dovute cautele, è possibile gestire lampade a bassa tensione da diverse decine di watt.

Attenzione! Nel caso di rottura del transistor o di errori di connessione è possibile che la tensione di batteria si presenti alle uscite della porta parallela mettendo a rischio non solo la porta parallela ma anche l'intero PC; nel caso di tensioni elevate, vi è rischio anche per l'incolumità delle persone e quindi sconsiglio questi circuiti a persone non adeguatamente qualificate. Un circuito più sicuro.
L'uso di interruttori

Nello schema seguente sono illustrati tre modi per connettere un interruttore alla porta parallela. In tutte e tre i casi l'interruttore chiuso viene letto come tensione di 0 volt, l'interruttore aperto come tensione di circa 5 volt.

Leggere lo stato di un interruttore

Lo schema utilizzato con S1 richiede la presenza di una batteria esterna da 5V. Per conoscere lo stato dell'interruttore è sufficiente leggere lo stato del bit Error nel registro di controllo (oppure di un altro bit dello stesso registro se connesso ad un altro pin). È possibile la connessione con uno qualunque dei bit gestiti attraverso il registro di controllo. In certi casi questo circuito funziona anche senza batteria e senza resistenza ma l'estrema semplicità si paga con errori di lettura occasionali, soprattutto in ambiente rumoroso.

Lo schema usato per S2 è simile al precedente, con la differenza che la tensione non viene prelevata da una batteria ma da uno dei pin della porta dati, posto preventivamente a uno logico. Lo svantaggio è quello di richiedere due pin della porta parallela, oltre la massa.

Attenzione! Lo schema utilizzato per S3 è il più semplice e funziona con i pin associati al registro di controllo; non richiede nessun componente oltre l'interruttore ma funziona esclusivamente a condizione che il pin a cui è connesso l'interruttore sia a collettore aperto e che la resistenza di pull-up sia montata internamente alla scheda. In questo caso, per leggere lo stato dell'interruttore occorre impostare a 1 il pin scrivendo nel registro di controllo e poi leggere il bit nello stesso registro. Qualora la porta non fosse a collettore aperto (come succede in molte parallele moderne) si rischia la distruzione della porta. Pertanto sconsiglio l'uso di questo metodo.
Lettura di otto bit

Il seguente schema permette di leggere otto bit anche da porte non bidirezionali o senza uscite open collector. Viene utilizzato un multiplexer 74157 comandato dall'uscita di strobe, leggendo quattro bit alla volta.

Leggere 8 bit con la SPP

Il difetto di tale metodo deriva dalla relativa lentezza (richiede due letture e due scritture della porta) e dal fatto che è ovviamente richiesta un integrato esterno e relativo circuito di alimentazione (quest'ultimo non disegnato nello schema). Il vantaggio è che funziona con qualunque tipo di porta senza modifiche. Il codice da eseguire è il seguente:

outportb(CONTROL, 0x01); // Seleziono il nibble basso
dataLow = inportb(STATUS) & 0xF0; // Leggo il nibble basso
dataLow = dataLow >> 4; // Allineo i quattro bit
outportb(CONTROL, 0x00); // Seleziono il nibble alto
dataHigh = inportb(STATUS) & 0xF0; // Leggo il nibble alto
data = dataHigh | dataLow; // Unisco i due nibble
data = data ^ 0x88; // Sistemo i due bit invertiti

Ovviamente se la porta è bidirezionale oppure se è possibile usare in ingresso i quattro bit associati al registro di controllo vi sono minori problemi, pagati con una minore compatibilità.

La soluzione più razionale nel caso in cui serva l'input di una quantità significativa di dati è però quella di adottare una porta EPP, sicuramente più standardizzata e veloce.
Collegare una stampante

Questo non è un circuito applicativo ma la schematizzazione dei segnali presenti sulla parallela durante il suo funzionamento più "naturale", cioè collegata ad una stampante secondo l'handshake centronics.

Una premessa: le temporizzazioni mostrate sono solo indicative in quanto non ho trovato standard a cui riferirmi e le varie pubblicazioni riportano dettagli differenti; forse tale standard neppure esiste e quello mostrato è solo una consuetudine più o meno rispettata. Il controllo è completamente effettuato dal software, in genere dalla routine del BIOS o del sistema operativo invocata per la stampa. È ovviamente possibile scrivere da sé il software per la gestione, magari da usare su un microcontrollore.

Le temporizzazioni Centronics

In rosso ho indicato i segnali che vanno dal PC alla stampante, in verde quelli che hanno percorso inverso. Non ho indicato i segnali non coinvolti nella comunicazione.

Per prima cosa il PC deve scrivere i dati nel registro dei dati
Quindi è verificata la linea Busy proveniente dalla stampante: se è bassa la stampante è pronta a ricevere i dati, se è alta tutta l'operazione viene interrotta.
Il PC pone bassa la linea di Strobe, per almeno 1 microsecondo. Durante questo periodo i dati devono essere stabili (alcuni documenti citano tempi di hold e setup di qualche centinaio di nanosecondi)
La stampante risponde ponendo altra la linea di Busy per tutto il tempo che le serve per acquisire il dato.
Il ciclo termina sul fronte di discesa del segnale Busy.

La linea Ack, proveniente dalla stampante in genere è ignorata dal PC (almeno in ambiente DOS e Windows).

Alcuni documenti riportano la linea Ack ritardata rispetto al Busy (il fronte di discesa di Ack coincidente con quello di Busy) ma non mi risulta che ciò sia corretto.
Allegati
interreuttori  switch.gif
interreuttori switch.gif (6.98 KiB) Visto 9640 volte
grossi carichi o lampadine.gif
grossi carichi o lampadine.gif (7.85 KiB) Visto 9640 volte
led1.gif
led1.gif (6.1 KiB) Visto 9640 volte
Ultima modifica di elettrauto il 20 feb 2013, 23:40, modificato 1 volta in totale.

Avatar utente
maxlinux2000
Amministratore
Messaggi: 7409
Iscritto il: 22 mar 2011, 11:50

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da maxlinux2000 » 20 feb 2013, 23:38

altro tutorial con gif anumate :)

http://electrosofts.com/parallel/

Immagine
Immagine
Cogito, ergo NO SUV !!

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 20 feb 2013, 23:43

dimenticavo l'ultima immagine
Allegati
diagrammitemporali stampante.gif
diagrammitemporali stampante.gif (4.73 KiB) Visto 9640 volte

Avatar utente
solarino
Messaggi: 110
Iscritto il: 1 set 2012, 16:48

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da solarino » 21 feb 2013, 10:15

quoto offgrid riguardo la parallela. Che io Sappia non c'e' sistema piu' semplice ... pero' ....
Se utilizzi windows da xp in poi, non e' semplice accedere ai registri della parallela, devi utilizzare dei driver/librerie aggiuntive.
Se rimani sui vecchi sistemi dos o win 95/98 non ci sono problemi e quello che ha postato elettrauto funziona perfettamente.
@elettrauto
Per i dati :
e' sufficiente esportare il foglio di lavoro excel in formato csv(salva come) .
Il formato csv e' un file di testo in cui le celle sono separate da virgole
http://it.wikipedia.org/wiki/Comma-separated_values
Un semplice programma in C prende il valore delle celle .. a partire dal file esportato. Per un esempio in C (ma piu' che sufficiente):
http://www.daniweb.com/software-develop ... -file-in-c

Una cosa molto importante, attenzione alla velocita' di pilotaggio della parallele esempio numero di transizioni alto basso...... ne ho cotte diverse.

Per chi usa linux si puo' accedere alla porta parallela facilmente 8)
Tutte le informazioni le trovate :
http://as6edriver.sourceforge.net/Paral ... howto.html


saluti

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 21 feb 2013, 14:45

Ottimo Solarino!!! Questo mi sembra un buon passo avanti, ho subito fatto una prova!
Inserisco l'immagine del file excel e l'immagine dello stesso file aperto con il blocco note!
Allegati
file excel.jpg
file excel.jpg (9.34 KiB) Visto 9628 volte
2 esempio csv blocco note.jpg
2 esempio csv blocco note.jpg (5.13 KiB) Visto 9628 volte

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 21 feb 2013, 14:48

Da dire che nell'excel2003 che uso ci sono 3 formati di csv:
1-csv (delimitato dal separatore di elenco)
2-csv (DOS)
3-csv (MAC)

Escludendo quello per mac, i primi due danno in uscita lo stesso file quando lo vado ad aprire con il blocco note.

Siccome CSV=comma-separated value (valori separati da virgola) dovrebbe avere la virgola come separatore, dal mio file escono separati da un punto e virgola, cosa ne penserebbe il compilatore?
(Chiaro che il problema si può facilmente risolvere con un trova e sostituisci in word, ma se il compilatore non si arrabbia meglio lasciare il file com'è)

Infine, per quanto riguarda l'uscita dei dati, voi in che linguaggio li fareste uscire dalla porta parallela? (un compilatore facile da scaricare e da installare, gratuito, e semplice nell'utilizzo :: )
CHIEDO TROPPO? :D

Avatar utente
solarino
Messaggi: 110
Iscritto il: 1 set 2012, 16:48

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da solarino » 21 feb 2013, 15:32

Nel primo formato poi decidere il campo separatore ( la virgola dovrebe essere il default). il formato mac ha solo il fine linea diverso ( a capo) . Il dos ha separatore virgola ed e' compatibile con tutti i sistemi win.
Per il linguaggio io utilizzerei il C ( ma io programmo solo in C max in C++ da circa 20 anni).
Di compilatori C gratutiti ne hai a bizzeffe.
Il Turbo C ( per dos e' gratuito). Il gcc, lcc, il watcom etc etc. tutti gratuiti e eccezzionali
Potresti usare anche il basic ( anni 80) tipo basica e gwbasic o quelli nuovi purebasic. In tutti i manuali ci sono esempi di utilizzo della parallela ( li utilizzavo fine anni 80)
MODIFICA il purebasic non e' gratuito. comunque esistono qb64 freebasic etc etc tutti hanno un esempio di utilizzo della parallela .
Saluti

P.S. Non posso vedere le immagini allegate a causa delle policy di sicurezza.

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 21 feb 2013, 15:45

Solarino, se non chiedo troppo, potresti inserire i link per lo scaricamento del compilatore C che usi tu?
E se puoi anche un link di un manuale C dove parla della parallela, io ho letto almeno 5 manuali sul C e sarà per sfortuna, ma l'argomento sulla parallela veniva sempre omesso, in particolare il manuale mcgraw-hill.
Ma fai con calma, non ho nessuna fretta!! :)
Ciao e grazie!

Avatar utente
solarino
Messaggi: 110
Iscritto il: 1 set 2012, 16:48

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da solarino » 21 feb 2013, 16:30

Io uso il gcc su linux o mac. Su win uso il Visual C++ o il mingw(gcc) . Se devi programmare sotto dos devi scaricare il turbo C o lcc( http://www.cs.virginia.edu/~lcc-win32/ funziona anche per win) .
Per i manuali, non mi sono ben spiegato (scusami) intendevo quelli del basic. Se utilizzi win xp o 7 scarica il visual C express (gratuito). per acccedere alla parallela http://www.hytherion.com/beattidp/comput/pport.htm
Saluti


p.S. vado veloce ...... altrimenti riscompaio dal forum e ritorno nei problemi 8)

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 21 feb 2013, 16:44

Grazie Solarino!!
visual C express (gratuito)

Suppongo sia quello del sito microsoft credo sia il pacchetto visual studio (io uso il windows xp), mi ci sono collegato ieri sera e mi stavo mettendo d'accordo con me stesso su quale versione usare, visto che la 2012 è in prova e la precedente è la 2010, le proverò...
Comunque un'ottima sintesi la tua!! Grazie ancora!

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 21 feb 2013, 17:05

Come tentativo, giusto per togliermi ogni scrupolo di coscienza nel non usare autocad con file dxf ed il relativo codice GCODE ed un software CAM finale, ho tracciato un cercio in autocad con raggio 25mm e poi l'ho salvato in formato dxf.
Se ora aprite questo file dxf con il blocco note vi accorgerete che per un semplice cerchio ci sono una miriade di informazioni, il che significa che per una persona normale è illegibile, quindi inutilizzabile.
Ho provato ad inserire nel forum il file dxf ma dice "estensione non permessa", lo stesso dice con il formato txt, allora metto il contrenuto del file dxf come quote (ma metto solo la prima pagina, sono in totale 42 pagine di codice per fare un semplice cerchio da 25mm di diametro, provare per credere con il proprio autocad)
0
SECTION
2
HEADER
9
$ACADVER
1
AC1018
9
$ACADMAINTVER
70
0
9
$DWGCODEPAGE
3
ANSI_1252
9
$INSBASE
10
0.0
20
0.0
30
0.0
9
$EXTMIN
10
-25.0
20
-25.0
30
0.0
9
$EXTMAX
10
25.0
20
25.0
30
0.0
9
$LIMMIN
10
0.0
20
0.0
9
$LIMMAX
10
420.0
20
297.0
9
$ORTHOMODE
70
0
Ultima modifica di elettrauto il 21 feb 2013, 19:38, modificato 2 volte in totale.

Avatar utente
solarino
Messaggi: 110
Iscritto il: 1 set 2012, 16:48

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da solarino » 21 feb 2013, 19:21

@elettrauto
riduci lil file. Per me che navigo con il cell impiego 40sec per scrollare
Il Visual C : ii uso il visual 2008.il Visual 2010 dovrebbe essere uguale

Avatar utente
elettrauto
Messaggi: 502
Iscritto il: 13 lug 2012, 18:49

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da elettrauto » 21 feb 2013, 19:42

Hai ragione solarino, devo dirti che non mi ero reso conto che fossero 42 pagine, altrimenti non lo avrei inserito.
Sono proprio pazzeschi questi con i file dxf, creano cose mostruose che si possono fare con molto, molto meno.
Sai che ti dico, ho il sospetto che i nuovi programmi fatti in 700MB di codice altro non sia che una presa in giro, perché se il codice girasse anche su un 486 nessuno avrebbe bisogno di comprare un nuovo pc. E con il dxf sembra evidente, vista la mostruosità inutile del suo codice; magari per te sono acqua fresca, nel senso che te ne sei accorto da anni, essendo del mestiere. :barf:

Con Visual intendi microsoft visual studio, giusto?
Ultima modifica di elettrauto il 22 feb 2013, 17:14, modificato 1 volta in totale.

Avatar utente
solarino
Messaggi: 110
Iscritto il: 1 set 2012, 16:48

Re: Macchina a controllo numerico CNC - fattibile

Messaggio da solarino » 21 feb 2013, 21:22

Penso siamo andati un bel po off topic..... ma se offgrid non si arrabbia ... Non so se vale la pena iniziare un thread sulla programmazione (okkio che non ho piu' la parallela)
Non entro nel merito del formato dxf. Avranno sicuramente i loro buoni motivi, concordo sulle dimensioni degli applicativi, ma in generale e' dovuto ai nuovi "languages" ad alto livello che si utilizzano e che si portano dietro tante tante librerie..... e poi i programmi fanno talmente tante cose che la maggior parte degli utenti non utilizzano che li fanno lievitare in dimensioni, ma il mercao e' il mercato 8( e poi ...... Io perdo il lavoro :mrgreen:
Con il Visual, intendo il Visual Studio.
Tienimi informato con i tuoi tentativi sono spensieratamente interessato .

Rispondi

Torna a “attrezzatura home made”

Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti