home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


MickroBasic pro,gestione " . " per asse lineare
     
Autore Messaggio opzioni
sparide74





postato il:
28.02.2015, alle ore 18:41
MickroBasic pro,gestione " . " per asse lineare 

Ciao a tutti carissimi, sono nuovo del forum,sto progettando con display LCD e encoder la visualizzazione di una quota Asse.Sono arrivato al punto di leggere gli impulsi up down dell' encoder,solo che mi sono fermato sulla visualizzazione della quota, nel senso come faccio a rappresentare ad es. La quota in mm,decimi e centesimi?prefetto che l' asse ha una corsa di 500 mm
picmicro675




una ogni 10 livelli


postato il:
01.03.2015, alle ore 05:23
Meglio vedere la parte interessata del codice.
Poi se vuoi mostrare anche i decimali, molto probabilmente dovresti usare un float oppure un valore tale che moltiplicato per 100 stia in una long o una word.
Poi la rappresentazione gli metti il punto decimale alla seconda cifra da destra dopo la moltiplicazione per 100.
In quanto all' encoder quale risoluzione ha?
Dov'è montato ?



Anno nuovo, forum nuovo.
Mi sa che lascio.
sparide74





postato il:
01.03.2015, alle ore 10:12
ciao questo e' il mio Prog.Manca la parte che mi interessa
_______________________________________________________________________
program Lcd 'Pic16f628A

' Lcd module connections
dim LCD_RS as sbit at RB0_bit
LCD_EN as sbit at RB1_bit
LCD_D4 as sbit at RB2_bit
LCD_D5 as sbit at RB3_bit
LCD_D6 as sbit at RA0_bit
LCD_D7 as sbit at RA1_bit

LCD_RS_Direction as sbit at TRISB0_bit
LCD_EN_Direction as sbit at TRISB1_bit
LCD_D4_Direction as sbit at TRISB2_bit
LCD_D5_Direction as sbit at TRISB3_bit
LCD_D6_Direction as sbit at TRISA0_bit
LCD_D7_Direction as sbit at TRISA1_bit
' End Lcd module connections


' *************************************************

dim CH_A as bit 'Lettura canale A Encoder
CH_B as bit 'Lettura canale B Encoder
CH_A1 as bit 'Lettura precedente canale A Encoder
CH_B1 as bit 'Lettura precedente canale B Encoder
UpDown as longword

' ****************************************************

dim txt1 as char[10]
txt2 as char[7]
txt3 as char[2]
txt4 as char[2]
txt5 as char[10]

'********************Gestione Interrupt*****************

sub procedure Interrupt

if TestBit(INTCON, RBIF) = 1 then
CH_A=portB.4
CH_B=portB.5

' Confronta il vecchio valore della linea A con il nuovo della linea B
if CH_A1 = CH_B Then
inc(UpDown) 'Se Incremento UP
else


dec(UpDown) 'Se Decremento DOWN
end if

' Copio i valori letti in quelli precedenti
CH_A1 = CH_A
CH_B1 = CH_B
ClearBit(INTCON,RBIF) ' Riabilita interrupt
end if
end sub

'******************************************************************
main:

TRISB.4 = 1 ' Encoder A su Pin R4
TRISB.5 = 1 ' Encoder B su pin R5

SetBit(INTCON,RBIE) ' Abilita Interrupt on-change
ClearBit(INTCON,RBIF)
SetBit(INTCON,GIE) ' Abilita Interrupt
txt1 = "SPARIDE"
txt2 = "Ver.1.0"
txt3 = "X:"
txt4 = "Y:"



'********************Inizializzo il Display LCD ******************

Lcd_Init() ' Initialize Lcd
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off
Delay_ms(500)
Lcd_Out(1,4,txt1) ' "SPARIDE"
Lcd_Out(2,6,txt2) ' "Ver.1.0"
Delay_ms(1000)
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Delay_ms(800)
Lcd_Out(1,1,txt3) ' "X:"



'*****************Salvataggio valori delle porte****************

CH_A1=PORTA.4
CH_B1=PORTA.5

'***********************Programm********************************

While true

LongWordtostr(UpDown,txt5)
Lcd_Out(1,7,Txt5)

Wend

end.
___________________________________________________________________________

L'encoder ha risoluzione 500ppi, va installato in un tornio
Jasson





postato il:
01.03.2015, alle ore 11:17
ppi sono impulsi per pollice, e sapendo che un pollice è 25,4mm, significa che l'encoder ti restituisce 500 impulsi ogni 2,54cm ovvero 1 impulso ogni 0,00508mm, o 508 centomillesimi.

A questo punto non ti rimane che moltiplicare il numero di impulsi per 508 e ottieni la misura espressa in centomillesimi.

Dividi questa misura per 10.000 e ottieni i millimetri,
Ora prendi il resto della divisone, dividi per 100 e ottieni i centesimi.

Esempio:

Hai contato 6530 impulsi.
Moltiplichi per 508 e ottieni 3317240 centomillesimi di millimetro.

Dividi per 10.000 e ottieni la misura di 331 millimetri(in mikrobasic se esegui una divisone ti viene restituito l'intero della divisione)

In mikrobasic esiste l'istruzione mod che permette di ottenere il resto di una divisone

Quindi avrai che:
Impulsi contati 6530
Centomillesimi=6530x508 Centomillesimi=3317240

Millimetri=3317240/10000 millimetri= 331
Resto=3317240 mod 10000 resto=724

Centesimi=724/10 Centesimi=72

Stringa da visualizzare uguale a (Millimetri,".",Centesimi)















picmicro675




una ogni 10 livelli


postato il:
01.03.2015, alle ore 13:49
sparide74:
L'encoder ha risoluzione 500ppi, va installato in un tornio


Per me è incomprensibile. L' encoder è lineare o rotativo è montato sulla guida del tornio o montato sulla vite del movimento ?
Può essere come dice Jasson ma non l' hai specificato.




Anno nuovo, forum nuovo.
Mi sa che lascio.
sparide74





postato il:
01.03.2015, alle ore 15:03
E rotativo, quello lineare costa una botta, quindi dovro' montarlo con opportuna meccanica direttamento sullo spostamento dell'asse, cosi' anche se ho gioco sulla vite (e sui torni senza riga ci sono)avro' il reale spostamento...
Jasson





postato il:
01.03.2015, alle ore 15:27
sparide74:
E rotativo, quello lineare costa una botta, quindi dovro' montarlo con opportuna meccanica direttamento sullo spostamento dell'asse, cosi' anche se ho gioco sulla vite (e sui torni senza riga ci sono)avro' il reale spostamento...



Che io sappia il parametro PPI è relativo agli encoder lineari, infatti PPI stà per pulse per inch, ovvero il numero di impulsi relativo allo spostamento di un pollice.

Se fosse rotativo, allora dovrebbe avere un parametro espresso in PPR ovvero pulse per revolution, che stà ad indicare il numero di impulsi per ogni giro.





sparide74





postato il:
01.03.2015, alle ore 15:51
Mi sono dimenticato dovrei calcolare anche il passo della vite....
quindi con il tuo ragionamento dovrei scrivere nel mio codice:???


sparide74





postato il:
01.03.2015, alle ore 15:59
un'altra cosa quando visualizzo attualmente gli impulsi il conteggio mi parte da sx esempio:000000023
io vorrei che iniziasse con : 23; poi mam mano che si inseriscono le centinaia il numero dovrebbe diventare:230 e cosi via, ho visto un po i comandi dell'lcd ma non sono riuscito a farlo....
comunque grazie x la disponibilità
Jasson





postato il:
01.03.2015, alle ore 16:09
Quello che devi scrivere nel codice te l'ho già detto.
Devi fare una moltiplicazione poi una divisone e ottieni i millimetri.

Poi calcoli l resto, fai un altra divisone e calcoli i centesimi.

Un passo alla volta, intanto fai queste operazioni, e vedi se i risultati tornano, poi dopo eventualmente vediamo anche di trovare la soluzione per formattare a modo il testo.



segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale