sto lavorando con un MCU a 32 bit dell'Infineon, l' XMC4500.
Nel mio firmware c'è un interrupt in cui ho scritto il seguente codice. Anche se credo sia un dettaglio inutile, questo codice crea un dente di sega all'uscita di un DAC e così per come è scritto funziona.
- Codice: Seleziona tutto
/*Start*********************************************VCO driver********************************************************/
void UserIRQHandler(void)
{
static int32_t DACValLin = -279;
static int32_t DACVal = -279;
DAC_SingleValue_SetValue_s16(&Coarse_Fine_VCO,DACValLin);
DACValLin += 4;
if (DACValLin > 1303)
{
DACValLin = -279;
}
}
/*End***********************************************VCO driver********************************************************/
Ho bisogno però di modificarlo un po' e per farlo ho bisogno di aggiungere delle variabili e fare dei conti. Ho aggiunto le seguenti righe di codice:
- Codice: Seleziona tutto
float32_t BintoV = 0;
BintoV = 0.0005*DACValLin+1.4003;
Qui anche se la variabile BintoV non viene ancora utilizzata da nessuna parte, succede un casino! Lo script che ho postato prima continua a funzionare ma non mi funziona altro nel firmare (ad esempio non funziona più l' ADC). Credo di aver capito che il problema sia che faccio operazioni tra variabili di tipo diverso ed infatti ho corretto il codice nel seguente modo, risolvendo il problema:
- Codice: Seleziona tutto
float32_t BintoV = 0;
BintoV = (float32_t)(0.0005*DACValLin) + (float32_t)1.4003;
Credevo di aver imparato una cosa nuova e di poter continuare così ma poi avrei bisogno di scrivere il seguente codice:
- Codice: Seleziona tutto
float32_t BintoV = 0;
float32_t VtoV = 0;
BintoV = (float32_t)(0.0005*DACValLin) + (float32_t)1.4003;
VtoV = 0.2627*BintoV*BintoV + 0.11*BintoV + 0.7107;
DACVal = 1862.3*VtoV - 2607.7;
Che invece non riesco proprio a far funzionare. Credo che il problema possa essere banale e sia dovuto alla mia ignoranza sulle operazioni che posso fare tra i vari tipi del MCU ma non riesco proprio a sbrogliare la matassa!
Un'altra cosa che mi confonde è che lo script sembra funzionare ma i problemi li ho in altre parti del firmware (es. l'ADC che non c'entra nulla con questo script).
Grazie a chiunque avrà la pazienza e la bontà di leggere quanto ho scritto,
Emanuele

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





