Piattaforma Sviluppo più veloce

Avrei bisogno di una processore che abbia una frequenza di calcolo maggiore magari intorno a 400mhz e che sia facilmente programmabile in un linguaggio simile ad arduino. Questo perchè devo creare un segnale con PWM con frequenza variabile e facendo eseguire i calcoli presenti nell'ultimo post di questo topic: http://arduino.cc/forum/index.php/topic,66595.15.html arduino non riesce a starci dietro quindi sotto i 100us di segnale ho grossi problemi. Avete consigli?? Avevo visto mbed: http://mbed.org/handbook/mbed-Microcontroller ma la frequenza è troppo bassa, devo poter arrivare a segnali di 10us. Grazie !!!

a 400mhz trovi gli arm, però in pratica sono mini pc..

secondo me dovresti cavartela con un circuito analogico a seconda di cosa devi fare.

comunque secondo me usando gli interrupt sul tempo e non il PWM dovresti scendere tranquillamente sotto i 100us, magari fino a 50us, sicuramente NON 10us

Ciao lesto, ll circuito analogico non va bene perchè in pratica devo creare un piccolo generatore di impulsi, quindi programmabile. Non utilizzo infatti il PWM ma un pin e faccio i calcoli tramite una funzione (presente nell'altro post linkato), per gli arm si infatti pensavo proprio a quelli e volevo sapere se qualcuno ne ha gia utilizzati magari facili da programmare come arduino :D

Proverò comunque ad eseguire i conti prima e poi generare il segnale richiamando i registri contenenti i risultati ma non sono sicuro di riuscirci ad arrivare a quelle frequenze

ypkdani: arduino non riesce a starci dietro quindi sotto i 100us di segnale ho grossi problemi.

Hai grossi problemi perché la funzione che hai scritto è un guazzabuglio pazzesco, l'ATmega 328 non ha nessun problema per fare quello che ti serve con un periodo di 10 uS a patto che non chiedi singoli impulsi più brevi di 1 uS e che lo scaling avvenga in step di 62.5 ns. Leggiti attentamente il data sheet del 328 e non usare le funzioni "pappa pronta" di wiring, p.e. la digitalwrite si mangia solo lei 2 us.

Chipkit..... viaggia a 80Mhz http://www.mirifica.it/store/chipkit-arduino/221-digilent-chipkit-max32.html

ma 400Mhz..... sono davvero tanti.... Astrobeed rispondi :) questo quesito è per te....

astrobeed:

ypkdani: arduino non riesce a starci dietro quindi sotto i 100us di segnale ho grossi problemi.

Hai grossi problemi perché la funzione che hai scritto è un guazzabuglio pazzesco, l'ATmega 328 non ha nessun problema per fare quello che ti serve con un periodo di 10 uS a patto che non chiedi singoli impulsi più brevi di 1 uS e che lo scaling avvenga in step di 62.5 ns. Leggiti attentamente il data sheet del 328 e non usare le funzioni "pappa pronta" di wiring, p.e. la digitalwrite si mangia solo lei 2 us.

Grazie astrobeed, 2us la funzione digitalwrite?? Riscrivuto subito utilizzando i registri della porta allora. Si vero è un po incasinata come l'ho postata, è perchè continuavo a provare a modificarla. Comunque io faccio il controllo in polling sul registro di confronto, non penso che utilizzando l'interrupt cambia qualche cosa, vero? Per i conti sono quelli nella funzione quelli che devo eseguire, forse qualche in più in modo da ridurre la durata dell'impulso ogni impulso. Grazie!!

La piattaforma più veloce è... nessuna piattaforma! Vai con l'assembly... Ciao

ratto93: Chipkit..... viaggia a 80Mhz http://www.mirifica.it/store/chipkit-arduino/221-digilent-chipkit-max32.html

ma 400Mhz..... sono davvero tanti.... Astrobeed rispondi :) questo quesito è per te....

Si lo avevo già visto oltre ad mbed ma se ad un prezzo simili riuscivo ad avere un arm più veloce era meglio in modo da poter in futuro ridurre il segnale generato anche sotto 1us, comunque lo tengo in considerazione Grazie!

ypkdani: Per i conti sono quelli nella funzione quelli che devo eseguire, forse qualche in più in modo da ridurre la durata dell'impulso ogni impulso.

All'interno della funzione non devi fare nessun calcolo, solo la generazione degli impulsi, le durate le calcoli prima sotto forma di variabili unsigned int, inutile, oltre che deleterio, usare long int o, peggio, i float. Tutti i valori da caricare nel timer li poni in variabili di servizio dichiarate come global, non usare array o variabili locali che transitano per lo stack rallentando l'esecuzione.

Si pensavo anche io di eseguire i calcoli prima il problema è che si voleva anche poter creare un segnale che venga via via ridotto (esempio: se si parte da un segnale con 100us alto e 100us basso si possa ridurre il successivo di un 25% e quindi ottenere 75us alto e 75us basso e via così ) quindi non so quante variabili utilizzerò essendo il tutto gestito via pc (il segnale quindi viene definito dall'utente e non è fisso). Per poter memorizzare i risultati avrei quindi bisogno di un array di (esempio)150 interi in cui utilizzo solo i primi n_numeri. So che sto cercando di sfruttare arduino al massimo della sua velocità ma altrimenti devo pensare ad utilizzare un'altra cpu più veloce.

Ok eseguendo i conti all'esterno della funzione che mi genera gli impulsi e salvandoli in un array riesco ad arrivare ai 10us senza problemi, gli unici errori sono dovuti agli arrotondamenti nell'inserire il valore nel registro OCR1A. Grazie!!