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:
03.03.2015, alle ore 19:44
Jasson hai qualche idea?
sparide74





postato il:
03.03.2015, alle ore 21:54
Ho provato di tutto non va!!!Getto la spugna?

Jasson





postato il:
03.03.2015, alle ore 23:21
Utilizza della variabili integer

poi dopo aver fatto le opportune operazioni matematiche le converti in stringa.

Dopo averle convertite in stringa le stampi su lcd, utilizzando il trucco che ti avevo detto prima.






Jasson:
Si purtroppo scrivere sul lcd, può causare dei problemi, a causa della sovrapposizione delle stringhe.

Io quando ho avuto problemi, ho utilizzato questo trucco:

Se devo visualizzare 6 caratteri ovvero 3 cifre per i millimetri, un punto e 2 per i centesimi, creo le 3 stringhe che mi servono

dim str_mm as string[3]
dim str_cent as string[2]
dim testo as string[6]

a questo punto associo carattere per carattere, quindi:

testo[0]=str_mm[0]
testo[1]=str_mm[1]
testo[2]=str_mm[2]
testo[3]="."
testo[4]=str_cent[0]
testo[5]=str_cent[1]

Ora la mia stringa testo, contiene nei primi 3 caratteri i millimetri, nel quarto carattere il punto e negli ultimi 2 caratteri i centesimi.

Non mi rimane che stampare sul lcd la stringa testo

Lcd_out(1,1,testo)


picmicro675




una ogni 10 livelli


postato il:
04.03.2015, alle ore 06:46
sparide74:
Ho provato di tutto non va!!!Getto la spugna?


Cambiare linguaggio ?
Se vedi come ti assegna la stringa "SPARIDE" ti fa drizzare i capelli.
;Encoder.mbas,69 ::  txt1 = "SPARIDE"
MOVLW      83
MOVWF      _txt1+0
MOVLW      80
MOVWF      _txt1+1
MOVLW      65
MOVWF      _txt1+2
MOVLW      82
MOVWF      _txt1+3
MOVLW      73
MOVWF      _txt1+4
MOVLW      68
MOVWF      _txt1+5
MOVLW      69
MOVWF      _txt1+6
CLRF       _txt1+7

Forse si poteva usare una indicizzazione ed un loop. Poi per inviarlo al LCD, potrebbe passare l' indirizzo della stringa direttamente.



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




una ogni 10 livelli


postato il:
04.03.2015, alle ore 07:15
@ Jasson
Io dubito che vai a pescare la posizione esatta di dove la conversione della stringa ha inizio. Potrebbe anche essere che la conversione lascia degli spazi per l MSD ed allinei a destra il risultato della conversione.
Per esempio una LongWordToStr prende 11 bytes di memoria e viene riempita di di spazi a sinistra mentre il penultimo è uno "0" e l' ultimo è uno NULL (byte 0).

Quello che mi indendo io sarebbe di usare le librerie di concatenazione di stringhe e formare la stringa finale. Visto che la concatenazione con il "+" non è compresa dall' interprete.




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





postato il:
04.03.2015, alle ore 10:52
Ho un attimo sperimentato la cosa, e forse ho trovato il problema.

Quando si utilizza la conversione da variabile a stringa, succede che la stringa deve essere almeno lunga quanto la lunghezza massima della variabile.

Esempio, la variabile word è una 16 bit e può contenere i numeri da 0 fino a 65535.
Questo significa che la sua lunghezza massima è di 5 cifre.

Allora per convertire questa variabile in una stringa, io devo creare una stringa lunga almeno 5 caratteri

Dim stringa as string[5]


A questo punto posso convertire la variabile word in una stringa

wordtostr(variabile,stringa)


Però devo sapere che l'allineamento caratteri va da destra verso sinistra, quindi se la variabile contiene ad esempio il numero 67, nella stringa avrò l'ultimo carattere verso destra 7, il penultimo 6, e i primi 3 caratteri sono degli spazi vuoti.

Una volta capito questo, e sapendo il valore della variabile, posso andare a prendere i singoli caratteri e formarmi una stringa da visualizzare.

Quindi creo le mie 3 variabili word, una che contiene il conteggio dell'encoder, una che contiene i millimetri, e l'altra che contiene i centesimi.


Dim cont as word
Dim mm as word
dim cen as word
 


Poi creo le mie stringhe, 2 per la conversione e la terza per creare il testo da stampare su lcd


Dim str_mm as string[5]
Dim str_cen as string[5]
Dim testo as string[6]
 



Sapendo che il ogni 100 impulsi dell'encoder mi si sposta l'asse di 5 millimetri, posso calcolare che l'encoder si sposta di 1 millimetri ogni 20 impulsi, quindi dividendo il conteggio per 20 ottengo i millimetri di spostamento

 mm=cont/20 


Adesso calcolo il resto della divisone

 cen=cont mod 20 


Sapendo che ogni 100 impulsi dell'encoder mi si sposta l'asse di 5 millimetri, posso anche calcolare che ogni impulso dell'encoder corrisponde ad uno spostamento di 5 centesimi, quindi per ottenere il valore dei centesimi, devo moltiplicare gli impulsi rimasti dalla divisone per 5.

 cen=cen*5 


Adesso ho i valori di millimetri e centesimi, e li devo convertire in stringhe


wordtostr(mm,str_mm)
wordtostr(cen,str_cen)


Ora sapendo che il massimo numero che dovrò visualizzare in millimetri è 500, prendo soli gli ultimi 3 caratteri della stringa mm e li posiziono in testa alla mia stringa testo


testo[0]=str_mm[2]
testo[1]=str_mm[3]
testo[2]=str_mm[4]
 


Metto un punto al quarto carattere

 testo[3]="." 


e poi sapendo che i centesimi massimo possono essere 99, prendo gli ultimi due caratteri della stringa cen e li posiziono in fondo alla mia stringa testo


testo[4]=str_cen[3]
testo[5]=str_cen[4]


Ora posso stampare la mia stringa testo sul lcd nella posizione che desidero

lcd_out(1,1,testo) 
Jasson





postato il:
04.03.2015, alle ore 11:10
Dato che poi quando i centesimi sono inferiori a 10, il primo carattere della stringa cen è uno spazio vuoto, risulta che pure il quarto carattere della stringa testo sia uno spazio vuoto, allora prima di stampare il testo su lcd posso fare la verifica ed eventuale sostituire lo spazio vuoto con uno zero.


 if testo[4]=" " then
 testo[4]="0"
 end if 


La stessa cosa la posso pure fare sui primi 2 caratteri della stringa, se ad esempio invece di visualizzare 4.55 volessi visualizzare 004.55

picmicro675




una ogni 10 livelli


postato il:
04.03.2015, alle ore 15:37
Non so se conosci il linguaggio, che nemmeno io so. Ho visto nel manuale che si può fare
WordToStrWithZeros(word, str) ed il risultato comporta che ci saranno degli zeri iniziali se la word è piccola. Pag 276.
Che invece WordToStr(word,txt) crea un testo di 5 caratteri con spazi a sinistra se è di valore inferiore alle 5 cifre.

Poi a mio parere trovo il MikroBasic e Proton Basic non son ben strutturati e poco ottimizzati.
Se si vede che anche le routines delle librerie sono delle interpretazioni di Basic si fa presto a consumarsi le 2 Kwords della versione free
Poi basta vedere il listato in assembly.



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





postato il:
04.03.2015, alle ore 16:03
Conosco un pochino Mikrobasic, non sono grande esperto, ma lo conosco.
Esistono decine di istruzioni e quindi modi, per lavorare con le stringhe.

Quello che ho scritto sopra, è uno dei tanti modi per ottenere il risultato voluto.

La differenza tra WordToStr e WordToStrWithZeros è appunto che la prima aggiunge degli spazi vuoti, mentre la seconda mette degli zeri al posto degli spazi vuoti.

Comunque il risultato non cambia, perchè io devo sempre prendere gli ultimi caratteri utili, non mi interessano ne gli zeri ne gli spazi vuoti.

Anzi utilizzando WordToStr, e quindi facendo inserire degli spazi vuoti, potrei volendo con l'istruzione ltrim(stringa) eliminare gli spazi vuoti, e quindi accorciare la mia stringa ai soli caratteri utili.

Potrei utilizzare altri metodi, per arrivare al risultato voluto, tieni conto che esistono almeno una decina di istruzioni, per tagliare, spezzare, incollare, confrontare, diverse stringhe tra di loro, e quindi una stringa me la riesco a gestire come voglio.
sparide74





postato il:
04.03.2015, alle ore 18:12
ciao,jasson, ho provato a scrivere l'ultimo pezzetto del tuo codice, ma non mi visualizza niente sul display....mi sta scoppiando la testa
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