Show Posts
Pages: 1 2 [3] 4 5 ... 189
31  International / Software / Re: Arduino Multitasking on: April 19, 2014, 01:14:24 am
qui https://github.com/chrismoos/avr-os dice che per compilare la versione 2560
devi  eseguire il build con: 
Code:
make DEVICE=arduino_mega2560

Forse è per questo che con la mega non ti funziona.

Non conoscevo avr-os, ora gli ho dato uno sguardo veloce ed è interessante.
Per chi volesse saperne di più di RTOS gli consiglio di partire dal visionare il file context.h, le
macro SAVE_CONTEXT e RESTORE_CONTEXT rappresentano il cuore del OS.

Comunque, una applicazione sul pc anche complessa richiede raramente uno o più thread supplementari,
stessa cosa vale per le applicazioni embedded, anzi ci si deve chiedere sempre; questa cosa la possa fare
senza creare un altro task?
La risposta deve essere quasi sempre si,  altrimenti si finisce per avere 10 task che si mangiano le risorse
e il programma fa ben poco e lentamente.

Tuttavia è possibile che tu abbia proprio necessità di un RTOS, ma al momento mi sembra che tu non abbia
le competenze per usarlo nel modo corretto; Il rischio è quello di cacciarsi nei guai senza sapere come ci si è finiti e tanto meno si sa come uscirne.

Un RTOS ben dotato fornisce anche funzioni per accedere all'hardware come timer, i2c, eeprom ecc
svincolando il programmatore dalla conoscenza intima dell'hardware. Senza RTOS ti tocca invece studiare
il datasheet e scrivere codice accessorio non strettamente legato alla applicazione.

Con arduino style è pratica comune usare millis() o micros(), non sarà bello ma funziona, comunque è possibile
renderlo accettabile creando delle funzioni che operano su millis() e raramente ciò risulta insufficiente e in tal
caso si può cominciare a pensare ad un RTOS.

Ciao.
32  International / Generale / Re: esercizi per arduino on: April 15, 2014, 05:07:53 pm
Non mi stupisco del fatto che dopo mezzo libro non sia riuscito a scrivere un programma.
Hai provato a riprodurre gli esercizi a partire dal blink senza guardare il libro?

Il blink può essere scritto in molti modi diversi, tu trova il tuo modo.
Dovresti provare a modificare gli esercizi per aggiungere o rimuovere funzionalità.
Potresti provare a scrivere un programma che è un mix di blink senza delay e Button.
Il programma parte con il led spento e legge continuamente lo stato del pulsante,
se il pulsante è premuto il led lampeggia e continua a farlo anche se rilasci il pulsante.
Se premi nuovamente il pulsante il led si spegne e resta spento anche rilasciando il
pulsante. Il comportamento del programma è ciclico.

Scrivere pseudo codice ti può aiutare descrivere cosa deve fare il programma senza obbligarti
a ricordare le parole chiave del linguaggio, tuttavia alcune parole chiave di C sono comodo da usare
anche con lo psedo codice, come if, else, for, while ecc .
Esempio:

at power on run setup (All'accensione esegue il setup)

setup {
    imposto il pin 5 come ingresso
    Ritardo 2000ms   (evito di impegnare la seriale all'avvio)
    Inizializzo la seriale a 9600 BAUD
   
    Da qui in poi Arduino passa ad eseguire continuamente la funzione loop()
}

loop {
   
}

Come vedi anche con lo pseudo codice uso le graffe per delimitare un blocco, ma non è legge ma il
C le usa per lo stesso motivo perché cambiare carattere.

Ciao.




33  International / Generale / Re: Criterio di divisibilità per un numero in Arduino on: April 14, 2014, 11:33:02 am
Si ricordi bene
7%7 = 0
6%7 = 6
5%7 = 5
...ecc
0%7 = 0 ops

Ciao.


34  International / Software / Re: Probabile BUG del compilatore ... on: April 14, 2014, 10:22:03 am
Vedo il mal di testa non ti spaventa a me si invece.
La trama si infittisce, entrambe i compilatori incarnano di default le specifiche C++98 e questo è già
sufficiente a creare il mal di testa, se poi ci aggiungi quello evidenziato è un comportamento documentato nei libri C++ ed è tipico di C++98.... a quali conclusioni si arriva; gcc-4.8.1 non si comporta come C++98 o forse si, perché ci sono delle ammended del 2003 che dovrebbero essere...uff uff, leggi qua:

Quote
The original ISO C++ standard was published as the ISO standard (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2003 (ISO/IEC 14882:2003). These standards are referred to as C++98 and C++03, respectively. GCC implements the majority of C++98 (export is a notable exception) and most of the changes in C++03. To select this standard in GCC, use one of the options -ansi, -std=c++98, or -std=c++03; to obtain all the diagnostics required by the standard, you should also specify -pedantic (or -pedantic-errors if you want them to be errors rather than warnings).

()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()

Ciao.
35  International / Hardware / Re: SMPS on: April 14, 2014, 10:13:27 am
gogolander non ti offendere ok.

Secondo me, dovresti continuare a studiare e mettere da parte momentaneamente il progetto, perché al momento
non hai sufficienti competenze per realizzarlo. Indi per cui, studia e acquisisci le competenze per realizzare il progetto, cioè vedilo come un progetto a lungo termine.

Cerca con google qualcosa di pronto, qualche progetto a cui potersi ispirare.  
Il tuo professore, mmm... tartassalo, scassagli le balle ma mi raccomando con classe, fatti dare l'email
personale così gli mandi link a qualcosa di simile a quello che ti serve e chiedi lumi.
Se però vedi che non ottieni risultati non insistere oltre misura potrebbe anche essere che è impegnato
in altri progetti o è più teorico che pratico.

@icio
Si lo ha scritto all'inizio vuole potere regolare la corrente e pure la tensione e già qui c'è un bel problema.
ops come non detto.

Ciao.
36  International / Software / Re: Problema conversione variabile di tipo FLOAT in STRING (utilizzo dtostrf() ) on: April 14, 2014, 08:50:10 am
Code:
/**
 *  Il programma permette di inviare via seriale
 *  byte dopo byte il contenuto di un oggetto di
 *  tipo DataBlock.
 *  Si può fare di più, ad esempio si può inviare qualunque oggetto di qualunque tipo via seriale
 *  byte dopo byte.
 */

/**
 *  Per ricevere i dati da un microcontroller o computer
 *  e sufficiente creare lo stesso sketch ma al posto di:
 *  Serial.write(*ptrTo);
 *  ci mettiamo:
 *  if (Serial.available() > 0) {
 *    *ptrTo = Serial.read();
 *  }
 *  L'obbiettivo è di leggere i dati e salvarli nell'oggetto dataBlock
 *  PS: non testata la lettura
 */
/*
  tipo di struttura per collezionare dati
  per poi spedirli via seriale byte per byte
*/
typedef struct
{
  float    arg0;
  float    arg1;
  float    arg2;
  byte     arg3;
  byte     arg4;
  byte     arg5;
  uint32_t arg6;
} DataBlock;

// global variable

bool alredySend;    // false per inviare i dati

DataBlock dataBlock; // oggetto dataBlock da spedire

void setup()
{

  alredySend = false;

  delay(2000);
  Serial.begin(115200);

  // carica dati a caso nell'oggetto dataBlock
  dataBlock.arg0 = 152.24;
  dataBlock.arg1 = 489.569;
  dataBlock.arg2 = 100.029;

  dataBlock.arg3 = 49;        // un byte 1
  dataBlock.arg4 = 50;        // un byte 2
  dataBlock.arg5 = 51;        // un byte 3
  dataBlock.arg6 = 456898;     // 32 bit

}

void loop()
{

  if (alredySend == false) {

    uint8_t *ptrTo = (uint8_t *)&dataBlock;

    for (uint8_t i = 0; i < sizeof(dataBlock); i++) {

      Serial.write(*ptrTo);  // spedisce il dato puntato da ptrTo
      ptrTo++;                     // punto al prossimo byte


    }

    alredySend = true;  // i dati sono stati spediti
  }


}


Anziché convertire da float ad intero e spedire i dati come stringhe, si spedisce
byte per byte il contenuto di una porzione di memoria RAM in cui ci abbiamo messo
la nostra collezione di dati come appunto è dataBlock.

Spero possa tornarti utile, ciao.
37  International / Hardware / Re: SMPS on: April 14, 2014, 07:15:00 am
Quindi: 500kW 230V AC->12V o 5V DC. Fisso inizialmente i 12V per comodità, che fa 40A di corrente. L'ideale per me sarebbe ottenerli senza trasformatore...
Ecco ...mi pareva ...a quanto pare hai un istinto autolesionista e vuoi ammazzarti ,  appena tocchi la vasca ti folgori
Infatti, una delle due fasi è comune con l'uscita quindi online.

Gli alimentatori per PC sono a mezzo ponte e per questo è difficile superare 500W, per cui poi passa a mosfet in configurazione ponte intero, cioè 4 mosfet che pilotano un trasformatore switching, in questo modo il duty cycle
è variabile in un più ampio range rispetto al flyback o mezzo ponte.

1MHZ dici, no non condivido, massimo 100-200KHZ, poi quando il circuito a 100KHz lavora si passa a testarlo a frequenze maggiori. Se sei bene attrezzato come strumentazioni e hai delle basi solide di elettronica con studio e sperimentazione arrivi a centrare il risultato, diversamente....hai la scala troppo corta.

Tu parli di Buck, quindi online, cioè non isolato dalla 220, così a spanne eviterei di pensare a Buck.
Se ti può essere utile c'è Power Integration che realizza dei chip per switching online di piccola potenza, in particolare ho dato una lettura ai chip per driver led 220V 35V xxxmA, c'è anche documentazione che una volta letta e compresa di permette di verificare se un Buck da 10A sia realizzabile o meno.

Solitamente per gli esperimenti si usa un trasformatore con manopola di regolazione a cui si connette una altro
trasformatore isolatore a cui segue un ponte diodo raddrizzatore, oppure si usano gli SCR con correnti continue, o i TRIAC con correnti AC a cui segue raddrizzatore a ponte diodo.

Ciao.

38  International / Software / Re: Probabile BUG del compilatore ... on: April 14, 2014, 06:49:15 am
E vai col mal di testa.  smiley-roll-blue

Se volete scoprire come stanno le cose nel dettaglio il mal di testa non può che aumentare. smiley-wink
GCC ha un nome e molte facce, diciamo incarnazioni. Se passo -std=gnu99 il compilatore incarna
la specifica gnu99 che è diversa da c99. A complicare la cosa GCC ha un altro compilatore separato con il suo
preprocessore e linker per il C++ e questo può incarnare le specifiche C++98, C++03, C++11, si ottiene ciò attraverso le flags.

Ora dovete trovare quale standard C++ usa Arduino 1.05 (oltre che la verisone) e quale standard C++ usa Arduino 1.5.xx, studiarvi entrambe gli standard e alla fine trarre le conclusioni. Io ho interesse a studiare lo standard Embeddec C, ma il costo del documento è alto per le mie tasche, per cui mi accontento dei Draft gratuiti, che però sono una anteprima dello standard Embedded C o almeno è così che li si deve considerare. Acquistando il documento definitivo che definisce le specifiche per quello standard si potrebbe anche scoprire che il/i draft erano sufficienti a documentarsi oppure no, ma appunto prima lo devi acquistare.

Anche AVR-GCC C++ 4.7.2 dovrebbe essere C++03 e C++11, dovrebbe perché non c'è alcun motivo per non esserlo, 
e quindi non ho certezza. Sicuramente per ciò che concerne il C di AVR-GCC c'è l'intensione di seguire lo standard Embedded C di cui ho letto solo i draft, per cui non so quanto presente nelle specifiche sia già implementato, ma ho certezza che sono al passo con i draft.

Per AVR-GCC C++ non c'è uno standard Embedded C++ da seguire, per cui lo standard è quello generico C++03 ecc che non sono specifici per embedded.

Ciao.
39  International / Hardware / Re: SMPS on: April 13, 2014, 11:40:48 pm
Come ti hanno fatto già notare sei stato avaro di informazioni.
12 * 150 = 1800W considerando una eff 100% a cui devi aggiungere la potenza persa per conversione, facciamo
conto pari 2000W con eff 90% (da mago dello switching)

Con o senza trasformatore ??
offline o online ?

Così a spanne il candidato è un circuito a ponte intero alimentato dalla 220Vac,
il mezzo ponte ....mmmm siamo oltre il limite dei 450W non saprei neanche pensarlo.

15 fasi da 10A ciascuno cosa vuol dire? Dici 15 alimentatori in parallelo, no dai.

Considera che le saldatrici elettroniche ad elettrodi forniscono massimo 80A a 24V e il circuito è molto complesso,
ci sono molti trasformatori da calcolare e realizzare.

Io un poco di curiosità c'è l'ho, per cui mi chiedo; a che gli serve?

Ciao.
40  International / Software / Re: Probabile BUG del compilatore ... on: April 13, 2014, 05:47:08 pm
C++ è ISO standard ed è normale aspettarsi una evoluzione del C++.
https://isocpp.org/std/status

GCC ISO compliant, per cui c'è da vedere come e quando sarà fedele allo standard C++11, C++14 ecc, non è per niente un gioco da ragazzi.
Il comportamento evidenziato da gpb01 è tipico di C++98, c'è da vedere quale incarnazione di GCC usa Arduino, poi
non dimentichiamo che AVR-GCC segue un'altro standard detto Embedded C (almeno ci prova e quanto aderente sia non l'ho mai sondato) il quale non mi pare faccia riferimento a C++ quindi AVR-GCC si trova su due fronti diversi a seguire cosa?  smiley-wink

Comunque mi sembra un problema risolvibile e la proposta di inserire un'altra funzione... io direi che due sono già superflue in ambito embedded.   smiley-razz

Ciao.


41  International / Generale / Re: idee per velocizzare ricerca dati in array? on: April 12, 2014, 12:50:41 pm
 smiley-eek smiley-eek
Ci avessi capito qualcosa.
Ha grandi linee i buchi di coppia so cosa sono, cioè il grafico della coppia in relazione al numero
di giri non è "lineare" e ci sono punti in cui la coppia anziché aumentare si riduce, superato quel
punto la coppia riprende ad aumentare. Es Honda NS 125 primo modello in basso era vuota, 4000 a salire coppia
omogenea fino a xx non lo ricordo. C'è un numero di giri nei dintorni del quale era inguidabile.

Al di la della comprensione di tecnica motoristica io ho fatto delle deduzioni ma chissà se sono corrette.
Quote
per facilitare il lavoro, ho deciso di usare solo array come byte,  e ricorrere a fattori di conversione per risalire alle misure ingegneristiche di tale parametro, così ho semplificato sia la gestione delle array in RAM, che in EEPROM visto che poi, le dovrò memorizzare li per poi caricarle in RAM all'avvio del sistema, potrei farlo in flash, ma credo che in EEPROM vada bene, su questo, poi si vedrà.

Invece come le dovresti scrivere le informazioni in eeprom, cioè quale problema hai incontrato che ti
ha portato ad usare array di byte e da questi ricavare/calcolare alla misura ingegneristica?
Ci sono buone possibilità che le difficoltà incontrate in questo frangente siano superabili facilmente.

Quote
Ho una bella formula che mi fa l'interpolazione dei 4 punti entro cui il motore sta funzionando in quel momento, da come l'ho testato funziona, ma utilizza dei valori float che costano un botto in tempi di eseczione come voi ben mi avete insegnato, ho tentato di evitare l'uso di float a favore di valori int/unsigned int ma siccome ad un certo punto del calcolo, poi avrei bisogno di dividere svariate volte per riportare i valori calcolati a valori "reali" tutto quello che ho risparmiato passando da float ad int lo perdo eseguendo le divisioni.  Adesso mi è venuta l'idea di vedere se posso gestire i valori int così come escono fuori per poi dividerli solo all'ultimo, con un'unica divisione.

I calcoli in generale sono lenti e si mangiano la flash, se avessi un processore con FPU il problema scomparirebbe, es un ARM M4. La divisione e moltiplicazione di interi per 2, 4, 8, 16, ecc sono eseguite con rapidità, perché il compilatore usa lo shift. La tecnica di moltiplicare per 128 e fare i calcoli e poi dividere per 128 e castare a double e pratica comune. Penso che usi la MEGA che ti permette di aggiungere memoria RAM esterna che fa sempre comodo, per la eeprom esterna conviene sempre su bus ISP.

Ciao.


42  International / Generale / Re: idee per velocizzare ricerca dati in array? on: April 12, 2014, 10:52:35 am
Quote
ovviamente, il fatto di avere 16 elementi e non 10 ha mandato a monte il sistema, non ho verificato se usando /16 invece di /10 funziona.

No non funziona in questo caso, avevo intuito che i dati realmente usati non erano quelli mostrati.

Le tavole di corrispondenza sono un altro modo molto più rapido della ricerca, ma occupano memoria
e sono complicate e non è facile metterle su e il mal di testa è assicurato.

Mentre la ricerca suggerita da gpb01 è fattibile, sia con gli indici che con i puntatori e la ricorsione, metterla su in modo efficiente non è banale per me, ma lo considero fattibile in un paio di ore. Io penso che qualcosa in rete si trovi già, prova a fare una ricerca.

Di quanti elementi e composto l'array reale su cui effettuare la ricerca?

Ciao.
43  International / Generale / Re: idee per velocizzare ricerca dati in array? on: April 12, 2014, 08:27:52 am
Se i dati di MyArray sono quelli allora si può evitare la ricerca.

MyArray[10]={5,10,20,30,40,50,60,70,80,90};
MyArray[0] = 5
MyArray[1] = 10
MyArray[2] = 20
MyArray[3] = 30
MyArray[4] = 40
MyArray[5] = 50
MyArray[6] = 60
MyArray[7] = 70
MyArray[8] = 80
MyArray[9] = 90

aNumber = 38

min = aNumber/10 = 3          
max = aNumber/10 + 1 = 4
MyArray[min]
MyArray[max]

# Sembra funzionare
# Provo con 7
aNumber = 7
min = aNumber/10 = 0          
max = aNumber/10 + 1 = 1
# Sembra funzionare
# Provo con 2
aNumber = 2
min = aNumber/10 = 0          
max = aNumber/10 + 1 = 1
# Funziona come per aNumber = 7

mmm.. se fossero così pochi i dati potresti anche fare uno switch case
che è molto rapido in esecuzione.

Sicuramente i dati nell'array non sono quelli reali per cui vai di ricerca dicotomica.

Se fai come dice gpb01 e usi i puntatori e una funzione ricorsiva dovresti ottenere il massimo della velocità
possibile, almeno io un altro modo più rapido non lo conosco.

Ciao.
    
44  Community / Bar Sport / Re: [OT] PIC, 8051, MCU e CPU varie on: April 11, 2014, 09:14:14 am
A me capita giornalmente di avere a che fare con gente assurda che mi vuole coinvolgere in discussioni altrettanto assurde, e qui nel forum evito volentieri, e per questo non rispondo a l'ultimo post di &lock.

Per questo motivo non rispondo alla tesi secondo cui il kernel NT sia un gioiellino, che senso ha? hai il codice?
Si, bene sei l'unico ad averlo e in base a quale tesi io posso dissentire, ma anche se fosse il fine qual'è? cosa ne ricavo? Per cui non interesse all'argomento e passo.

Per questo motivo non rispondo alla tesi secondo cui il kernel linux embedded non sia aggiornato o perfetto
o cattivo ecc. Sembra quasi che il codice di linux migliori per inerzia, o che ci sia obbligo per quella entità astratta
di aggiornare il codice o introdurre funzionalità di modo che lock o altri come lui possano usufruirne. Lo sviluppo
è fermo li e procede a rilento, se hai interesse a fornire supporto verso linux embedded devi fare in modo che una parte dei guadagni siano investiti nello sviluppo, se questo non è possibile allora non usare linux del tutto.

Vengo interpellato per riparare un banco gelato *trifase* sul quale altri sono intervenuti in vano. Scopro che alla presa fase e neutro sono invertiti per cui c'è anomalia sull'impianto del locale. Spiego la cosa al cliente ed è
evidente l'incomprensione, riformulo i concetti ma ho ancora l'impressione che il mio dire non è entrato nel suo capire, ritorno sull'argomento e mi rendo conto di non potere andare oltre, e vengo comunque invitato a risolvere il problema intervenendo nell'impianto al cui rispondo che non è competenza mia, deve contattare il suo impiantista di fiducia e metterlo al corrente del problema che una volta risolto mi permette di riparare il banco.

Il cliente insiste motivando la premura, ed effettua la richiesta: Non può risolverlo momentaneamente?
Si rispondo, posso girare fase e neutro sulla spina, questo mi da l'occasione per ritornare sull'argomento scarsamente
compreso e faccio presente; se domani acquistate un macchinario (banco gelato, frigorifero o altro)  nuovo e lo connettete a questa presa, il macchinario si guasterà a causa della anomalia presente nell'impianto.

A riparazione terminata mi viene richiesto di allungare il cavo *trifase* il quale passa vicino a due tavoli posti in uno spazio angusto, e mi viene anche suggerito come fare; taglia aggiungi e nastra, al che rispondo che non faccio questi lavori e consiglio di acquistare un prolungo trifase, ma il cliente commenta; si ma sono 20 € di prolunga. Resto basito ma non mi perdo d'animo e propongo la soluzione di sostituire tutto il cavo per evitare
giunzioni e si resta così per giovedì.

Era lunedì, martedì mattina scoppia la lite, il cliente ha chiamato l'impiantista di fiducia che ha effettuato
una prolunga nastrata (*trifase* a 15cm dai tavoli della clientela). Risultato: Banco guasto a cui era stato
effettuata la sostituzione del controllore eliwel e ammodernamento dell'impianto interno. I coltelli erano lì
a portata di mano e per un soffio non li abbiamo usati, il cliente si è ridimensionato e ha chiamato
l'impiantista che ha provveduto a risolvere l'anomalia all'impianto,  e ha acconsentito a sostenere le spese dell'altra riparazione perché la 380 è andata dove ci doveva essere la 220 (stessa cosa accaduta la prima volta).

Dopo di questo pensate davvero che io abbia voglia di essere coinvolto in discussioni assurde, nooooo apro
il forum per aiutare qualcuno, per estraniarmi dai problemi reali, per rilassarmi ecc.

PS: mi astengo dalla votazione, per me può benissimo rientrare con un altro nick e poi se capita nuovamente
lo si banna, ma la mia non vuole essere una proposta risolutiva.

Saluti a tutti, anche a &lock.
45  International / Generale / Re: Perchè una ragazza non dovrebbe interessarsi all'elettronica ? on: April 11, 2014, 06:33:50 am
Quote
Sia nei forum, che (soprattutto) nella vita reale, dove gli uomini ti guardano così  smiley-eek-blue quando ti presenti ad un corso di elettronica e nessuno ti rivolge la parola credendo che tu sia un alieno.  smiley-lol

Non vedo il problema, disintegralo.  smiley-mr-green

PS: Io penso che ti guardino "così" anche per altri motivi.

In Italia non c'è distinzione tra sesso e lavoro, stessa cosa su un forum tecnico, l'unico modo
è considerare un utente asessuato.

Considerare gli utenti asessuati ha una sua logica che si forma a partire da una domanda:
Ai fini di questo forum ha rilevanza stabilire il sesso di un utente?

Ciao e benvenuto nuovo utente. smiley-razz
Pages: 1 2 [3] 4 5 ... 189