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:
05.03.2015, alle ore 22:10
Spiritosi che siete
Jasson





postato il:
05.03.2015, alle ore 22:20
Per i video mi sa che devi appoggiarti su youtube
sparide74





postato il:
05.03.2015, alle ore 22:25
mannaggia....
senti ma se vorrei inserirci sulla sub interrupt un'altro encoder che gestisce un'altro asse?
ho provato ad inserirci sulla sub interrupt l'altro encoder ma mi fa sballare tutto LCD impazzisce
Jasson





postato il:
05.03.2015, alle ore 22:42
Ma cosa utilizzi per scatenare l'interrupt?
picmicro675




una ogni 10 livelli


postato il:
06.03.2015, alle ore 02:07
L' IOC sul nibble alto della porta B
Si dovrebbe usare lo shadowing della porta e poi leggere il dato.
Ovvero
Dim Shadow as byte
Shadow = PORTB
If Shadow.4 then 
    do something
end if



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




una ogni 10 livelli


postato il:
06.03.2015, alle ore 06:42
Visto che ho trovato un po di tempo libero ho sviluppato la routine di conversione.

'******************************************************************
' routine di conversione da LongInt a decimale
' con la posizione della virgola parametrizzato
sub procedure SDwordToStr(dim SDWord as longint, dim pos as byte, dim byref output as string[12])
    dim count as byte
    prefix as char
    rest as byte

    prefix = " "
    for count = 0 to 12
        output[count] = 32
    next count
    if SDword < 0  then
       prefix = "-"
       SDword = labs(SDword)
    end if
    if SDword = 0 then
       output = "0.00"
       goto leave
    end if
    output[0] = prefix
    count = 11
    output[12] = 0
    while sdword > 0
        rest = SDword mod 10
        SDword = SDword / 10
        output[count] = rest + 48
        dec(count)
        dec(pos)
        if pos = 0 then
           output[count] = "."
           dec(count)
        end if
    wend
    output[count] = prefix
    ltrim(output)
leave:
end sub
 '******************************************************************

Poi nella main abbiamo
While true
      if Refresh then
            SDwordToStr(UpDown, 2, txt1)
            Lcd_Out(1,7,txt1)
            Refresh = 0
      end if
Wend

Ovviamente il secondo parametro (il "2") è dove mettere il punto decimale.
Per i numeri negativi si usa "labs" per avere la parte intera.
Qui ho messo un flag "Refresh" nella routine di interrupt e nel loop della main si interroga se c'è stata una variazione di dato quindi procedere al rinfresco del display.
Almeno si stressa meno il display. E si potrebbe anche magari spegnerlo. Ma questo aumenta il programma e si sfora la versione free.

Non ho provato la visualizzazione col display, non avendo gli strumenti adatti per farlo. Oppure non sono in grado di attuare tale simulazione.



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




una ogni 10 livelli


postato il:
06.03.2015, alle ore 06:46
Dimenticavo col 2 qui si rappresenta 2 decimali.
Visto che con 500 impulsi su 5 mm si ha un impulso ogni 10 micron e non serve ulteriore calcolo o conversione.



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





postato il:
06.03.2015, alle ore 07:32
buongiorno, la parte di programma di visualizzazione quota con segno l'ho sistemata..ora devo gestire un altro encoder, jasson mi chiedeva come avevo gestito il 1° encoder:


 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 


come dicevo in precedenza se scrivo il secondo canale dell'encoder 2 lcd impazzisce
Jasson





postato il:
06.03.2015, alle ore 09:47
Sinceramente non mi sono mai posto il problema di gestire 2 encoder, ma temo che sia difficile gestirli tutti e due con lo stesso interrupt, perchè quando viene scatenato l'interrupt, come fai a sapere da quale dei due encoder è stato scatenato?

Quale dei 2 encoder vai a leggere?

Forse si dovrebbe utilizzare 2 interrupt separati uno per ogni encoder?



picmicro675




una ogni 10 livelli


postato il:
06.03.2015, alle ore 16:19
sparide74:
buongiorno, la parte di programma di visualizzazione quota con segno l'ho sistemata


Io no, ma trovo scomodo se lo si vuole mettere il segno a sinistra e visualizzare le cifre a lunghezza variabile.
Sarei del parere di mettere il segno dopo le cifre e mantenere allineato a destra.
Rimango del parere che la routine che ho abbozzato è alquanto flessibile ed ammette anche misure più ampie. (21`474`836,48 mm, 21 Km !!) oppure anche risoluzioni più fini spostando la virgola.

Poi in fondo se va bene quello che hai in uso, rimane solo una mia fisima.

Per leggere due encoders con IOC credo che sia difficile.

Farò qualche prova.



Anno nuovo, forum nuovo.
Mi sa che lascio.
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