Show Posts
Pages: 1 ... 429 430 [431] 432 433 ... 663
6451  International / Generale / Re: Possibile Bug: Compilazione sketch più grandi di 64K on: February 12, 2012, 01:20:44 pm
Appena ho un attimo di tempo libero provo a creare uno sketch maggiore di 64k utilizzando grossi array statici posti in flash, così posso ricreare il problema e fornire una analisi più dettagliata della cosa, forse riesco a tirare fuori una patch per windows.
Se poi il tuo amico mi passa, in privato ovviamente, direttamente il suo sketch ancora meglio così mi fa risparmiare tempo.


6452  International / Generale / Re: Possibile Bug: Compilazione sketch più grandi di 64K on: February 12, 2012, 01:01:59 pm
Sono curioso di sapere quale sia il motivo tecnico per il quale gcc ha quel problema.
E questa e' la mia curiosita'.

Risposta facile, quella versione del compilatore prevede solo il modello di memoria standard, ovvero il 64k tipico di tutti i compilatori C.
La toolchain di Atmel, che usa sempre il gcc come engine, ma con librerie di cross compiling diverse da avr-gcc, prevede tutti i possibili modelli di memoria, quindi sia quelli maggiori di 64k che quelli minori per ottimizzare al meglio sulle piccole mcu.
L'utilizzo del modello di memoria a 64k pone implicitamente un limite alle dimensioni dei puntatori, solo 16 bit, quindi anche se un programma viene apparentemente compilato generando un eseguibile di oltre 64k poi una volta messo in esecuzione non funziona e/o possono esserci problemi di caricamento tramite bootloader perché gli address del file hex per la parte in eccesso a 64k, cioè oltre i 16bit previsti, sicuramente risultano errati il che può creare non pochi problemi a avrdude.
6453  International / Generale / Re: Spezzare sorgenti Arduino on: February 12, 2012, 12:50:37 pm
Ho immediatamente provato spezzando in 2 il progettino e tutto funziona
Siccome l'appetito vien mangiando ho provato a spezzarlo in 3 ma a questo punto non funziona

La cosa è semplicissima, nell'IDE di Arduino hai un tasto a forma di freccia sul lato sinistro, si trova nella barra sotto i tasti per compilare, premendolo ti si apre una finestra di dialogo dove ti viene chiesto se vuoi aprire un nuovo TAB (sketch) o modificare/cancellare uno già esistente.
Confermato che vuoi un nuovo TAB ti viene chiesto il nome da dargli, che poi sarà il nome del file .pde, o .ino con la 1.0, il nuovo TAB altro non è che una pagina di editing identica alla principale dove puoi inserire i vari pezzi dello sketch che vuoi separare.
In teoria puoi avere un TAB per ogni funzione che scrivi, usanza tipica di chi lavora in gruppo in modo da semplificare il lavoro di aggiornamento e debug, ma puoi benissimo raggruppare per tipologia di funzioni mettendone più di una per ogni TAB.
Esempio pratico hai uno sketch, denominato "quellochetipare", molto complesso che gestisce un protocollo seriale, dei sensori e dei servo, nel primo TAB, quello di default, metti solo la setup() e la loop(), volendo puoi metterci anche altre cose, poi apri tre nuovi TAB denominati, "seriale", "sensori", "servo", al cui interno inserisci tutte le funzioni relative alle singoli voci.
Quando salvi lo sketch nella relativa directory avrai complessivamente quattro file, quello principale, che da il nome anche alla directory in cuoi viene posto il progetto, si chiama "quellochetipare.pde", poi avrai "seriale.pde", "sensori.pde" e "servo.pde", ciascuno di questi file contiene semplicemente quello vi hai posto mentre ci lavoravi sull'IDE.
Quando apri il progetto l'IDE carica automaticamente tutti e quattro i file, ognuno nel suo TAB, mente quando compili il tutto viene considerato come un unico oggetto, quindi le dimensioni dello sketch sono identiche a quello realizzato con un solo file.
Per dividere uno sketch già esistente in più file basta che crei i TAB necessari e al loro interno fai copia e incolla di quello che vuoi separare facendo attenzione a prendere funzioni intere e non solo parti di queste altrimenti poi ottieni errori in compilazione.
Se non mi ricordo male setup() e loop() devono necessariamente trovarsi nel TAB principale, però questa affermazione è da verificare perché non sono sicuro al 100%
6454  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: February 12, 2012, 11:26:39 am
Sai indicarmi qualche riferimento alle prove? Sono curioso! Grazie.

Ho preso pure io gli Emax GT, l'avevo pure detto un paio di mesi fa quando ho presentato il progetto del nuovo quadri da 60 cm, ti confermo che vanno benissimo.
In particolare io ho preso i GT 2215-12
6455  International / Generale / Re: [OT] Mele morse - Windows - Linux on: February 12, 2012, 11:01:38 am
Per rimanere su Windows, c'è gente che non sa neanche riformattare il suo computer e rimettere il sistema da capo. C'è gente che si faceva pagare centinaia di euro per fare questa operazione.

Se è per questo paga molto meglio Linux  smiley-mr-green
Non hai idea di quanta gente c'è che non è nemmeno capace di aggiornare un pacchetto, o installarlo, perché non sanno usare il terminale, e per chi fornisce assistenza stai pur certo che guadagna molto di più con gli interventi su Linux che con quelli su Windows.
Di Windows puoi pure dire peste e corna, però per l'uso generico Linux non potrà mai scavalcarlo perché l'utente non deve impazzire per far funzionare una periferica o per installare un certo pacchetto.
Tanto per rimanere in argomento Arduino con Windows non hai particolari problemi perché lo zippone contiene tutto, avrg gcc compreso, e funziona subito senza dover installare nulla e senza avere problemi misteriosi dopo aver fatto un aggiornamento  smiley-mr-green

p.s.
Molti disprezzano Windows solo per partito preso, peccato che molte delle critiche che gli fanno, senza conoscerlo, sono perfettamente ribaltabili su Linux, a cominciare dalla semplicità d'uso e installazione.
Con questo non voglio dire che Windows è migliore di Linux, voglio dire che a seconda della situazione tocca scegliere il sistema operativo più adatto, non ti sei mai chiesto perché nel settore embedded, parlo di applicazioni industriali non di router, telefoni e similari, il S.O. principe è Windows CE, o XP embedded, sebbene tocca pagare la licenza ?

6456  International / Generale / Re: [OT] Mele morse - Windows - Linux on: February 12, 2012, 09:36:09 am
Perché la gente non deve sapersi levare un po' dalle beghe? Il computer non è per tutti, è un dato di fatto:

Giusto per tua informazione, anche Windows ha l'equivalente del terminale di Linux, anzi ha diversi tool a riga di comando, per correggere problemi e fare operazioni impossibili dall'interfaccia grafica, solo che l'utente normale non sa nemmeno che esistono e tanto meno sa usarli.
Un esempio banale, ma molto significativo, con Windows 7 puoi preparare una key usb per installare da questa il sistema operativo, però è impossibile farlo da interfaccia grafica.
La procedura la fai  tramite cmd (il terminale) con comandi simili a quelli che usi in Linux per fare la stessa cosa, crei la partizione, la attivi, la formatti come ti pare, ci metti sopra il bootstrap e alla fine ci copi i file.

6457  International / Generale / Possibile Bug: Compilazione sketch più grandi di 64K on: February 12, 2012, 09:29:06 am
Se non erro la toolchain di Atmel (per lo meno la versione ad 8 bit per Linux che ho scaricato) ha il compilatore avr-gcc in versione 4.3.5

Quella che ho io, e dovrebbe essere l'ultima, usa avr-gcc 4.5.1, posso confermare che funziona molto bene.
6458  International / Generale / Arduino, Android e Processing. on: February 12, 2012, 09:00:15 am
Per chi ancora non lo sa l'ultima release di Processing permette di creare programmi per Android in modo semplice e rapido, in pratica è lo strumento ideale per realizzare software per Android da abbinare ad Arduino, p.e. per realizzare una GUI.
Purtroppo l'attuale versione di Processing non implementa un supporto completo alle API di Android, è limitata al livello 8, cioè Froyo, però questo non toglie che sia comunque possibile scrivere software che gira su versioni superiori di Android.
Altro problema da affrontare è che la versione stabile, la 1.5.1, di Processing non è compatibile con l'ultima release del SDK di Android, è ferma alla versione 12 e attualmente siamo alla 16, questo crea non pochi problemi quando andate a compilare, in particolare un fastidioso errore relativo ad un file xml che risulta non compatibile con le release del SDK superiori alla 12.
Per risolvere è necessario scaricare la release 2.0a4 di Processing che è compatibile con l'SDK 14 e superiori, è necessario che nel SDK di Android siano installate le API livello 8, Android 2.2, e tutte le relative dipendenze.
Per il momento non riesco a far funzionare l'emulazione Android offerta dal SDK, che funziona benissimo utilizzando Eclipse come ambiente di lavoro, però Processing prevede anche di provare, e debuggare, l'applicazione direttamente sullo smartphone/tablet se questo è connesso al pc tramite USB e con la modalità ADB attiva.
Il breve video allegato vi fa vedere i pochi passi per mandare in esecuzione un programma direttamente sullo smartphone, il video è fatto al volo con uno smartphone e ripreso tenendo l'apparecchio in verticale quindi in fase di riproduzione risulta ribaltato di 90°.
Vi consiglio di vedere il video alla massima risoluzione possibile, 720p.
Il programma utilizzato nel test è rocket.pde disponibile tra gli esempi open GL per Android di Processing, ho solo aggiunto un paio di righe di codice per far visualizzare una riga di testo nella parte alta del display giusto per fare le prime prove.

Prossimamente nuove informazioni su come realizzare software utile per Arduino da far girare su Android tramite Processing.

6459  International / Generale / Possibile Bug: Compilazione sketch più grandi di 64K on: February 12, 2012, 08:28:17 am
mi mandi delle info su come riprodurre il bug? Abbiamo un'applicazione della mega che usa tutti i 128k  di un'atmega1280 e non abbiamo avuto problemi.

Il problema è la versione del compilatore abbinato a Windows (attualmente è la vecchia 4.3.2, mi risulta che anche con l'IDE 1.0 è sempre questa) che è limitato a solo 64k, se lavori con MAC o Linux e hai aggiornato il compilatore il limite si sposta a 128k, per quanto ne so attualmente l'avrgcc, ultima release, al massimo compila fino a 128k, 256k sono possibili solo tramite la toolchain di Atmel.
Ne approfitto per segnalarti anche questo bug minore (la spiegazione e la soluzione è in fondo) che è ancora presente nella 1.0
6460  International / Generale / Re: Comunicazione con arduino su distanze estreme on: February 12, 2012, 06:05:35 am
La tua barchetta esploratrice basata sull'Arduino arriverà giusto al primo miglio nautico dalla riva e poi sparirà nei flutti  smiley-twist

Infatti il costo della connessione satellitare è irrilevante rispetto a tutti gli altri costi.
Per non parlare della complessità del progetto che è paragonabile a quella dell'auto robot di Google, altro che Arduino, qui ci vogliono dei super pc con software molto sofisticato la cui realizzazione impegnerebbe un plotone di specialisti del settore per molti mesi.
6461  International / Generale / Re: REALIZZAZIONE DI UN PROGETTO ENTUSIASMANTE on: February 12, 2012, 05:41:08 am
Collegare il Nunchuk ad Arduino è una cosa semplicissima, devi aprire il cavo isolare i fili di alimentazione e della I2C, con google trovi facilmente molte guide con dovizia di foto che illustrano come fare, dopo di che comincia con il caricare lo sketch che ti allego, permette di comandare fino a 8 servo tramite il Nunchuk e Arduino.
Lo sketch è diviso in due file pde, devi copiarli nella stessa directory usando i nomi che ho indicato in grassetto.

Nun_Servo.pde
Code:
/*
Servo Controller basato sul Nunchuk
 (c) 2011 By MdA Project
 
 v1.0.0, build 30.07.2011
 
 */

/*
 Collegamenti Nunchuk
 _________
 | 1 2 3 |
 |       |
 | 6 5 4 |
 |_-----_|
 
 •pin 1: verde - data (Arduino analog pin 4)
 •pin 2: (not connected)
 •pin 3: rosso - 3.3V
 •pin 4: giallo - clock (Arduino analog pin 5)
 •pin 5: (not connected)
 •pin 6: bianco - GND
 
 Il nunchuk originale Nintendo incorpora delle resistenze di pullup I2C da circa 1.8k.
 Se utilizzate un Nunchuk non Nintendo verificate la presenza dei 3.3V su SDA e SCL
 ed eventualmente aggiungere due resistenze di pull up, collegate al 3.3V,
 con un valore compreso tra 1.5k e 3.3k
 */

/*
 NOTE GENERALI
 
 a) Non è garantito il corretto funzionamento con Nunchuk non originali.
 
 b) In questa versione non è presente una routine per la calibrazione del Joystick
 e dell'accelerometro.
 Tutti i calcoli sono eseguiti sulla base dei valori medi forniti dai
 sensori pertanto sia il punto centrale che i punti estremi possono differire
 sensibilmente da quanto atteso e in modo diverso con diversi Nunchuk.
 La calibrazione verrà aggiunta nelle future release.
 
 c) Nella funzione "nun_read()" sono contenute delle serial.print() commentate, vanno
 utlizzate, decommetandole, solo a scopo diagnostico per verificare il corretto
 funzionamento del Nunchuk, visualizzano tutti i valori letti sul monitor seriale.
 
 d) Nella prossima release verrà aggiunto il controllo tramite seriale con protocollo
 dedicato e una GUI per pc (in futuro anche per Android) che permetterà di muovere
 i servi tramite cursori e/o joystik collegato al pc.
 
 */

#include <Wire.h>      // include per I2C
#include <Servo.h>     // include per i Servo

// creazione degli oggetti servo
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
Servo servo7;
Servo servo8;

int pos = 1500;              // posizione servo
char Led_stat = 0;
//uint8_t nun_buf[6]; 
unsigned char nun_buf[6];    // buffer dati in arrivo dal nunchuck, 

unsigned char z_but = 0;
unsigned char c_but = 0;
unsigned char joy_x_axis;
unsigned char joy_y_axis;
int accel_x_axis;
int accel_y_axis;
int accel_z_axis;

void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(115200);      // per uso futuro della seriale
  nunchuck_init();           // inizializza il nunchuck

  // attaches servo ai pin 3-10
  servo1.attach(3);   
  servo2.attach(4);
  servo3.attach(5);
  servo4.attach(6);
  servo5.attach(7);
  servo6.attach(8);
  servo7.attach(9);
  servo8.attach(10);
}

void loop()
{
  Led_stat ^=1;                  // inverte il valore di Led_stat
  digitalWrite(13, Led_stat);    // lampeggio led
  nun_get();
  nun_read();

  if (z_but & c_but)
  {
    pos = 800 + joy_x_axis * 6;
    servo1.writeMicroseconds(pos);
    pos = 800 + joy_y_axis * 6;
    servo2.writeMicroseconds(pos);
  }

  if (z_but & !c_but)
  {
    pos = 800 + joy_x_axis * 6;
    servo3.writeMicroseconds(pos);
    pos = 800 + joy_y_axis * 6;
    servo4.writeMicroseconds(pos);
  }

  if (!z_but & c_but)
  {
    pos = 800 + joy_x_axis * 6;
    servo5.writeMicroseconds(pos);
    pos = 800 + joy_y_axis * 8;
    servo6.writeMicroseconds(pos);
  }

  if (!z_but & !c_but)
  {
    pos = 500 + accel_x_axis * 2 ;
    servo1.writeMicroseconds(pos);
    pos = 500 + accel_y_axis * 2;
    servo2.writeMicroseconds(pos);
  }

  pos = 500 + accel_x_axis * 2 ;
  servo7.writeMicroseconds(pos);
  pos = 500 + accel_y_axis * 2 ;
  servo8.writeMicroseconds(pos);
  delay(50);
}

Nun_Func.pde
Code:
void nunchuck_init()
{
  Wire.begin();                   
  Wire.beginTransmission(0x52);
  Wire.send(0x40);
  Wire.send(0x00);
  Wire.endTransmission();
}

void nunchuck_send_request()
{
  Wire.beginTransmission(0x52);
  Wire.send(0x00);
  Wire.endTransmission();
}

int nun_get()
{
  int cnt=0;
  Wire.requestFrom (0x52, 6);   
  while (Wire.available ())
  {
    nun_buf[cnt] = nun_decode(Wire.receive());
    cnt++;
  }
  nunchuck_send_request(); 

  if (cnt >= 5) {
    return 1;  //restituisce 1 se fallisce
  }
  return 0; //restituisce 0 se i dati sono stati ricevuti in maniera corretta
}

// decodifica valori nunchuck
char nun_decode (char x)
{
  x = (x ^ 0x17) + 0x17;
  return x;
}

void nun_read()
{
  joy_x_axis   = nun_buf[0];
  joy_y_axis   = nun_buf[1];
  accel_x_axis = nun_buf[2] << 2;
  accel_y_axis = nun_buf[3] << 2;
  accel_z_axis = nun_buf[4] << 2;
  z_but = 0;
  c_but = 0;

  if ((nun_buf[5] >> 0) & 1) z_but = 1;
  if ((nun_buf[5] >> 1) & 1) c_but = 1;

  if ((nun_buf[5] >> 2) & 1) accel_x_axis += 1;
  if ((nun_buf[5] >> 3) & 1) accel_x_axis += 2;

  if ((nun_buf[5] >> 4) & 1) accel_y_axis += 1;
  if ((nun_buf[5] >> 5) & 1) accel_y_axis += 2;

  if ((nun_buf[5] >> 6) & 1) accel_z_axis += 1;
  if ((nun_buf[5] >> 7) & 1) accel_z_axis += 2;

  // da decommentare solo per verifica corretto funzionamento Nunchuk
/*
  Serial.print(accel_x_axis, DEC);
  Serial.print(",");
  Serial.print(accel_y_axis, DEC);
  Serial.print(",");
  Serial.print(accel_z_axis, DEC);
  Serial.print(",");
  Serial.print(joy_x_axis,DEC);
  Serial.print(",");
  Serial.print(joy_y_axis, DEC);
  Serial.print(",");
  Serial.print(z_but, DEC);
  Serial.print(",");
  Serial.println(c_but, DEC);
*/
}
6462  International / Generale / Re: quale prodotto per sigillare on: February 12, 2012, 03:35:46 am
Bisognerebbe capire se esiste la necessità di doverci mettere mano successivamente, p.es. per assistenza; in questo caso mi sposterei sul silicone,

La colla a caldo la tiri via facilmente riscaldandola nuovamente.
6463  International / Megatopic / Re: Giocando con l'Attiny85 on: February 12, 2012, 03:34:39 am
e secondo te ti sembra normale che una persona compra un computer e la casa produttrice gli blocca accesso a file e cartelle.

iPhone e iPad non sono dei computer, sono degli oggetti finalizzati per una ben precisa applicazione, sono bloccati per evitare che l'utente faccia qualche casino, possiamo dire la stessa cosa di Android dove non hai i permessi di root e se li applichi con un qualche exploit invalidi la garanzia.
Che poi sugli iCosi apple abbia blindato troppo, p.e. l'impossibilità di utilizzare il bluetooth come ci pare, è vero, ma chi compra Apple lo sa in anticipo e non mi pare che Apple sia in crisi di vendite visto che la gente fa file di ore per acquistare i vari i Cosi.
Non vi piace la filosofia di Apple ? Benissimo non comprate gli iCosi, non appena le vendite calano drasticamente saranno loro i primi a cambiare strategie di mercato e filosofia dei loro device.
6464  International / Generale / Re: quale prodotto per sigillare on: February 12, 2012, 03:11:47 am
devo sigillare 12 schedine come in foto, per poter lavorare all'esterno, quale mi consigliate fra i due:

Comunissima colla a caldo oppure il silicone.
6465  International / Generale / Re: Comunicazione con arduino su distanze estreme on: February 11, 2012, 03:02:34 pm
ho pero' un problema, come e' possibile comunicare con arduino in mare aperto? Eviterei un cellulare satellitare, opterei piuttosto per una ricetrasmittente radio, ma non so da che parte iniziare, suggerimenti?

Purtroppo l'unica soluzione possibile è un collegamento internet satellitare.
Anche ammesso di utilizzare un sistema a onde lunghe oltre a dover impiegare potenze di trasmissione enormi, parliamo di centinaia di Watt, e antenne di grosse di dimensioni, molti metri, saresti sempre legato alle bizzarrie della propagazione ionosferica.
Pages: 1 ... 429 430 [431] 432 433 ... 663