Gestione numeri negativi con virgola su display lcd

9 Anni 5 Mesi fa #1 da aliasin81
:) Salve sono di nuovo qua per chiedere consiglio come sempre su una funzione:

void data_float(float number){
char buf[40];
sprintf(buf,"(eventuale testo)%+06.2f",number);
read_string(buf);
}

questa funzione insieme alle librerie di xc8 dovrebbe permettermi di poter tramite un ipotetico calcolo
di visualizzare sul display un numero float negativo es.-185.3
tramite la funzione sprintf che fa tutta la conversione in stringa mettendo il contenuto in un buffer o array
che poi io riprendo tramite la funzione read_string e vedere su display ma quando nella main chiamo la funzione es data_float(calcolo);
nel momento che compilo compare una cosa strana :huh: :

:: warning: (1273) Omniscient Code Generation not available in Free mode
(908) exit status = 1
make[2]: *** [dist/default/production/LCD_MTC-20400X.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
:0: error: can't find 0x1A3 words (0x1a3 withtotal) for psect "text5" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x132 words (0x132 withtotal) for psect "text13" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x112 words (0x112 withtotal) for psect "text7" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x107 words (0x107 withtotal) for psect "text20" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0xD1 words (0xd1 withtotal) for psect "text8" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0xC3 words (0xc3 withtotal) for psect "text12" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0xAD words (0xad withtotal) for psect "strings" in class "STRING" (largest unused contiguous range 0x4C)
:0: error: can't find 0x8E words (0x8e withtotal) for psect "text18" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x7F words (0x7f withtotal) for psect "text25" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x7E words (0x7e withtotal) for psect "text1" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x68 words (0x68 withtotal) for psect "text21" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x5E words (0x5e withtotal) for psect "text17" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x5D words (0x5d withtotal) for psect "text11" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x5D words (0x5d withtotal) for psect "text23" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x4D words (0x4d withtotal) for psect "text10" in class "CODE" (largest unused contiguous range 0x4C)
:0: error: can't find 0x43 words (0x43 withtotal) for psect "text2" in class "CODE" (largest unused contiguous range 0x0)
:0: error: can't find 0x2D words (0x2d withtotal) for psect "maintext" in class "CODE" (largest unused contiguous range 0x0)
:0: error: can't find 0x29 words (0x29 withtotal) for psect "text15" in class "CODE" (largest unused contiguous range 0x0)
:0: error: can't find 0x23 words (0x23 withtotal) for psect "text14" in class "CODE" (largest unused contiguous range 0x0)
:0: error: can't find 0x1A words (0x1a withtotal) for psect "text19" in class "CODE" (largest unused contiguous range 0x0)
:0: error: can't find 0x19 words (0x19 withtotal) for psect "text24" in class "CODE" (largest unused contiguous range 0x0)
:0: advisory: (1) too many errors (21)
make[2]: Leaving directory `C:/Users/angelo/Desktop/MPLAB_X/pickit3/MY PROJEC/c++/pic16f628a/LIBRERIE_pic16f628a/LCD_MTC-20400X.X'
make[1]: Leaving directory `C:/Users/angelo/Desktop/MPLAB_X/pickit3/MY PROJEC/c++/pic16f628a/LIBRERIE_pic16f628a/LCD_MTC-20400X.X'

BUILD FAILED (exit value 2, total time: 3s)


Come vedete non mi da il codice dell'errore e sui manuali in pdf di mplabx e xc8 non riporta nulla a cio se clicco sopra in genere va nella riga dove potrebbe esserci l'errore invece niente-

Qualcuno sa cosa significa.......e importante per me visualizzare numeri negativi anche con virgola sul display......grazie a tutti :cheer:

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • aliasin81
  • Junior Member
  • Junior Member
Di più
9 Anni 5 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Gestione numeri negativi con virgola su display lcd
La funzione sprintf, sebbene sia solo una parola e' una funzione particolarmente complessa.
Infatti se provassi a fare quello che vuoi fare, dovresti scrivere molte righe di codice.

sprintf e' piuttosto generica, e oltre a fare quel che vuoi tu fa molto altro, quindi richiede codice.

Non ho controllato la sintassi, ma temp dal tipo di errore, che hai superato la memoria disponibile nel microcontrollore.

Saluti,

Mauro
Ringraziano per il messaggio: aliasin81

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
9 Anni 5 Mesi fa #3 da aliasin81
:lol: Ciao ancora mauro io questa funzione l'ho scoperta proprio in previsione di dover fare quello che ti ho detto cioè visualizzare qualsiasi cifra sul display senza limitazioni è c'era su un forum proprio questa possibilità di usare il sprint per dirottare per cosi dire la stringa dall'out (schermo) di mandarla invece in un buffer cosi che il compilatore faceva tutte le conversioni grande cosa! e poi utilizzarla es display.Io ho fatto la prima prova con mplab ide xc8 e la scheda prova del pickit3 con pic18f45k20 e sinceramente non mi ha dato nessun tipo di errore prima di tutto ho controllato la funzione sul manuale pdf di xc8 di come dovesse essere usata e l'esempio è quello che ho mandato l'unica cosa che quando ho fatto la prova non avevo display cosi che ho mandato il contenuto del buffer incrementando l'array fino al carattere '/0' di fine striga su l'uscita del pic portd dove sono collegati dei led per avere almeno un riscontro visivo e il copilatore non dava problemi anzi se modificavo la stringa anche i bit in uscita cambiavano questo è il breve codice di prova:

//** file prova pic 18f**//
#include<xc.h>
#include <stdio.h>
//--setto bit configurazione pic--//
#pragma config FOSC=INTIO67
#pragma config WDTEN=OFF
#pragma config PWRT=ON
#pragma config MCLRE=OFF
#pragma config BOREN=OFF
#pragma config LVP=OFF
#pragma config CPD=OFF
#define max_value 30
float A;
float result;
unsigned short long c;
char inc;
char i;
char buf[20];
char e;
//***inizio programma****//
void main(void){
OSCCONbits.IRCF2=1;
OSCCONbits.IRCF1=1;
OSCCONbits.IRCF0=1;
LATA=0x00;
TRISA=0xff;
LATB=0x00;
TRISB=0xFF;
LATC=0x00;
TRISC=0xff;
LATD=0xff;
TRISD=0x00;
LATE=0xff;
TRISE=0x00;
// operazioni//
A=31.0;
result=((A/2.0)-50.0);
//CONVERTI RISULTO IN STRINGA E METTILO IN UN BUFFER//
sprintf(buf,"result=%+06.2f",result);
//FUNZIONE PER USCIRE AUTOMATICAMENTE A FINE STRINGA//
while(buf!='\0'){
i++;
e=buf;
LATD=e;
for(c=0;c<1000000;c++){
}
}
LATD=0xff;
while(1){
}
}
Ecco forse ora mi hai fatto venire il dubbio perchè non ho fatto la prova del bit in uscita che carattere fosse ma non mi dava errori.

Ed ora io sto usando un pic16f628a forse hai ragione ho finito la memoria ora controllo poi avendo un compilatore free non è neanche ottimizzato quindi altro spreco di memoria.
Ti spiego cosa sto facendo mi sono impuntato per fare una sorta di plc fatto in casa e sto utilizzando il pic16f628a insieme al display per fare una sorta di tastierino con display che comunicherà al pic18f45k20 tramite usart e volevo avere la posibilità di poter inviare delle stringhe dal pic18 al pic16 per varie ed eventuali e sprint pareva la soluzione buona se funziona invio al registro tx i dati del buf uno per uno verso il display attivando una funzione sul pic16 che accogliesse questi dati e li visualizzasse questo è quanto solamente se non faccio funzionare usart non posso provare ci sto lavorando comunque sempre grazie a l'oracolo mauro :cheer: vi faro sapere appena l'usart funziona saluti...

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • aliasin81
  • Junior Member
  • Junior Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login