Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

AVR 8 bit: unsigned integer e FPU SW emulation

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utentegvee » 30 nov 2021, 15:51

Dunque, il DDS in questione è un AD9851 per cui sto disegnando un circuito per avere da 0 a 50 MHz.

Potrei usare una shedina con un STM32L4 ma con il pinout vengono troppe vias per i miei gusti, mentre con l'ATmega che è nel cassetto a fare la muffa da qualche anno ho più libertà con il pinout, ecco perché lo uso..

Dunque La formula del primo messaggio è quella della sezione THEORY OF OPERATION AND APPLICATION risolta per la frequency tuning word (FTW) a pag. 12:

\Delta_\phi = \frac {f_\text{out} \times 2^{32}} {f_\text{clk}}

con f_\text{clk} = 180 MHz si ha il famoso valore di \approx 23.86.

Il datasheet dice che f_\text{out} è in MHz, ma facendo due calcoli con l'esempio di pag. 14 i conti non tornano. Secondo questo esempio, la FTW è:

FTW = 0x0e38e38e = 238609294 da cui f_\text{out} = 10e6 (Hz) e non 10 (MHz), quindi nella formula f_\text{out} è unsigned int.

Avete ragione sul fatto di fare uno shift a sinistra, ieri la mia zucca vuota non ci aveva pensato... #-o :?

Farò comunque le prove a virgola mobile, cosi per investigare un po'.. È sempre interessate vedere cosa capita..

Intanto ringrazio tutti per la partecipazione e consigli !
Avatar utente
Foto Utentegvee
960 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 339
Iscritto il: 11 feb 2018, 20:34

0
voti

[12] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utenteboiler » 30 nov 2021, 16:57

fairyvilje ha scritto:
boiler ha scritto:Non ho dimestichezza con l'architettura AVR8, ma probabilmente non fa differenza dividere per 100 o per una potenza di 2.

Credo di si. La potenza di 2 si riduce ad uno shift register, mentre la divisione arbitraria va implementata via software dal momento che l'ATmega328P non ha FPU, supporto per le divisioni, e nemmeno un supporto nativo per la codifica BCD. Almeno a quanto ricordo.

Hai ragione, speravo nella presenza della divisione intera come istruzione singola (dopo tutto ce l'ha anche il vetustissimo 8051), ma non è così.

Allora sì, conviene usare 64 al denominatore.

Boiler
Avatar utente
Foto Utenteboiler
20,7k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 4055
Iscritto il: 9 nov 2011, 12:27

0
voti

[13] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto UtenteEcoTan » 30 nov 2021, 17:56

23,86 in binario viene 10111,110111.........
Prima di fare la moltiplicazione possiamo spostare questa virgola binaria e tralasciare i digit che rimangono alla sua destra.
Per decidere di quanto spostarla, secondo me bisogna prendere il massimo valore prevedibile di fout quindi spostarla il più possibile verso destra prima che il risultato della moltiplicazione sia tale da andare in overflow.
Questo risultato andrà poi shiftato a destra tanto quanto avevamo spostato la virgola. Ci ho preso?

EDIT Il problema di questo procedimento è che la moltiplicazione andrebbe fatta su 64 bit altrimenti vi è perdita di precisione.
Avatar utente
Foto UtenteEcoTan
6.553 4 11 13
Expert EY
Expert EY
 
Messaggi: 4475
Iscritto il: 29 gen 2014, 8:54

1
voti

[14] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utenteboiler » 30 nov 2021, 18:03

Non ho capito se sei serio o se è una battuta...
Googola IEEE 754

Boiler
Avatar utente
Foto Utenteboiler
20,7k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 4055
Iscritto il: 9 nov 2011, 12:27

0
voti

[15] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto UtenteEcoTan » 30 nov 2021, 18:15

23,86 in binario viene 10111,110111.........
fin qui ci siamo?
Avatar utente
Foto UtenteEcoTan
6.553 4 11 13
Expert EY
Expert EY
 
Messaggi: 4475
Iscritto il: 29 gen 2014, 8:54

0
voti

[16] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utentegvee » 30 nov 2021, 18:32

Avatar utente
Foto Utentegvee
960 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 339
Iscritto il: 11 feb 2018, 20:34

0
voti

[17] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto UtenteEcoTan » 30 nov 2021, 18:47

La questione in [1] mi era parsa del tutto diversa, invece è fuori del mio ambito.
Avatar utente
Foto UtenteEcoTan
6.553 4 11 13
Expert EY
Expert EY
 
Messaggi: 4475
Iscritto il: 29 gen 2014, 8:54

1
voti

[18] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utentexyz » 30 nov 2021, 19:50

gvee ha scritto:Ciao a tutti,

Avrei bisogno di implementare una operazione con floating point in un ATmega328P, concretamente una moltiplicazione tra uint32_t e float:

\Delta_\phi = f_\text{out} \times 23.86

Io ho utilizzato diverse volte gli AVR a 8 bit e con il GCC per AVR ha la simulazione software dei floating-point a 32 bit e quel calcolo non ha nessun problema ad essere eseguito in C e C++. Se lo vuoi calcolare velocemente puoi usare il fixed-point.
Avatar utente
Foto Utentexyz
6.819 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1757
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[19] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utenteedgar » 30 nov 2021, 19:54

gvee ha scritto:Potrei usare una shedina con un STM32L4 ma con il pinout vengono troppe vias per i miei gusti,

Non è chiaro se vuoi usare l'interfaccia parallela o seriale del DDS, se non hai problemi di velocità di comando potresti usare l'interfaccia seriale, te la cavi con 4 fili
Avatar utente
Foto Utenteedgar
8.825 3 5 8
Master
Master
 
Messaggi: 4493
Iscritto il: 15 set 2012, 22:59

0
voti

[20] Re: AVR 8 bit: unsigned integer e FPU SW emulation

Messaggioda Foto Utentegvee » 30 nov 2021, 20:51

Seriale, ma ho predisposto un LCD ed una tastiera matriciale, più 2 canali ADC per monitorizzare offset ed ampiezza dello stadio di amplificazione.

Comunque sono 3 linee.

Grazie Foto Utentexyz per la conferma.
Avatar utente
Foto Utentegvee
960 2 6
Stabilizzato
Stabilizzato
 
Messaggi: 339
Iscritto il: 11 feb 2018, 20:34

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti