Show Posts
Pages: 1 ... 22 23 [24] 25 26 ... 46
346  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 11, 2012, 08:46:56 am
Non ci avevo fatto caso neppure io allo xor... Cavolo, è geniale... =) Non ci pensavo...
347  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 05:08:42 pm
Si si, nel secondo caso è indubbio che non può essere calcolato a tempo di compilazione, ma nel primo caso sarebbe da controllare.
Non ho studiato gcc, ho fatto elettronica, non informatica, ma ho avuto un esame praticamente quasi sull'atmega, oltre che un po' di pld. Io ho il ricordo che il prof. ci avesse detto che 1 << 5 il precompilatore lo sostituisse in 0b00010000 però effettivamente mi hai fatto venire il dubbio. Magari mi ricordo male.
348  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 04:46:02 pm
Mmmmmm, ero sicuro che l'operatore << fosse solo un'istruzione per il precompilatore...
Sarebbe da controllare il compilato cosa fa perché ci sta che il precompilatore, riconoscendo che 1 << 5 è un'operazione eseguibile a tempo di compilazione la esegua lui. Per tagliare la testa al toro lo sostituirò con 0b00010000...  smiley-wink
349  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 04:21:14 pm
Secondo quello che c'hanno spiegato all'università quella non è un'operazione perché è un numero... E' un'operazione che esegue il precompilatore.
350  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 07:47:08 am
Comunque usa direttamente PINE anziche assegnarlo a i

Effettivamente non è male come idea... =)
351  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 07:39:02 am
"1 << PE5" non occupa nessun ciclo del processore, è un calcolo che esegue una volta il precompilatore. Attenzione, non prendo una variabile, metto un 1 all'inizio e faccio e ROR (rotate on right) ma è una costante con un 1 nella posizione indicata da PE5. PE5 è una costante che è definita non so dove di preciso ma a partire dal file avr/io.h
352  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 06:53:51 am
postare tutto il codice non posso, sia per segreto aziendale sia perché sono circa 1500 righe...  smiley

L'encoder penso sia la cosa che più ho ottimizzato...

Code:
#define encInterrA 0
#define encInterrB 1
#define encA 2
#define encB 3

volatile unsigned long contEnc = 0; //Valore del conteggio dell'encoder

void setup() {
  digitalWrite(encA, HIGH);                           //Attivo i pullup degli ingressi dell'encoder
  digitalWrite(encB, HIGH);                           //Attivo i pullup degli ingressi dell'encoder
  attachInterrupt(encInterrA, encoderA, CHANGE);      //Attivo il gestore di interrupt per gli ingressi dell'encoder
  attachInterrupt(encInterrB, encoderB, CHANGE);      //Attivo il gestore di interrupt per gli ingressi dell'encoder
};

void encoderA() {
  unsigned char i = PINE;                   //Leggo il valore di PINE
  unsigned char a = i & (1 << PE4);         //Maschero gli altri bit per isolare quello corrisp. alla fase A
  unsigned char b = i & (1 << PE5);         //Maschero gli altri bit per isolare quello corrisp. alla fase B
  if (a == (1 << PE4)) {                    //Se A è alto
    if (b == 0) contEnc++;                  //e B è basso incrementa
    else contEnc--;                         //altrimenti decrementa
  }
  else {                                    //Se A è basso
    if (b == (1 << PE5)) contEnc++;         //e B è alto incrementa
    else contEnc--;                         //Altrimenti decrementa
  }
};

void encoderB() {
  unsigned char i = PINE;                   //Leggo il valore di PINE
  unsigned char a = i & (1 << PE4);         //Maschero gli altri bit per isolare quello corrisp. alla fase A
  unsigned char b = i & (1 << PE5);         //Maschero gli altri bit per isolare quello corrisp. alla fase B
  if (b == (1 << PE5)) {                    //Se B è alto
    if (a == (1 << PE4)) contEnc++;         //e A è alto incrementa
    else contEnc--;                         //altrimenti decrementa
  }
  else {                                    //Se B è basso
    if (a == 0) contEnc++;                  //e A è basso incrementa
    else contEnc--;                         //Altrimenti decrementa
  }
};
353  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 10, 2012, 04:45:00 am
Quindi, ricapitolando, va bene anche se si usa attachInterrupt, no? Io ho usato gli ingressi collegati agli INT...
354  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 09, 2012, 05:07:03 pm
ehm... ehm ehm....  smiley-roll-sweat smiley-roll-sweat smiley-roll-sweat smiley-roll-sweat
Si perde tanto in prestazioni usando attachInterrupt invece che utilizzare direttamente le ISR? Io pensavo che attachInterrupt non facesse altro che indirizzare un jump alla funzione richiesta...
355  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 09, 2012, 02:31:43 pm
Cavolo, l'Xmega potrebbe essere un'ottima soluzione... Ci sono già le librerie a bordo per il modbus?
356  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 09, 2012, 01:46:02 pm
La mia necessità è di leggere un encoder incrementale che viaggi sui 10KHz su 4 fronti (quindi 40000 chiamate ad interrupt al secondo), gestire una comunicazione modbus su RS485, e gestire 4 lame di perforazione con un errore massimo (di tempo) di 120us (devo commettere un errore sull'attivazione delle uscite di non più di mezzo millimetro ad una velocità di 250mt/min). Tutto questo già lo fa l'ATmega2560 ma sono all'incirca sull'ordine dei 260us di tempo ciclo, da qui nasce l'esigenza di hardware più potente ed è per questo che avevo pensato al SAM3U. Dite che con un RTOS riesco a gestire queste velocità?
357  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 09, 2012, 11:25:02 am
Da profano sono dell'idea di lesto... Se devo prendere un processore veloce solo per appesantirlo con un kernel allora continuo ad usare gli atmega... =)
Dico parlo da profano perché per mettere un kernel su un micro non saprei da che parte iniziare...  smiley-mr-green

@ratto
quelle schede sono veramente interessanti. Per iniziare questa potrebbe essere niente male, monta un micro basato su Cortex M3...
358  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 09, 2012, 08:37:01 am
Cioè mi stai consigliando che sarebbe meglio installare un kernel linux anche sulla SAM3U, che è un microcontrollore?
359  International / Generale / Re: Dove iniziare per programmare SAM3U on: May 09, 2012, 03:59:18 am
@astrobeed

http://www.amazon.it/The-Definitive-Guide-Cortex-M3-Newnes/dp/185617963X/ref=sr_1_1?ie=UTF8&qid=1336553881&sr=8-1
 smiley-sweat
360  International / Generale / Re: encoder rotativo recuperato da mouse on: May 09, 2012, 03:57:32 am
Esattamente, devi lavorare senza la digitalRead, è troppo lenta per un gestore di interrupt... Devi andare a vedere quei pin su quale porte del micro solo collegati e lavorare con quelle.

Leggiti sul datasheet cosa fanno i registri PORTx, PINx e DDRx. x sta per la porta in questione: i pin sono raggruppati in gruppi da 8 chiamati porte e ogniuna di queste porte hanno 3 registri per essere pilotati. Ad esempio per il primo gruppo avrai i registri PORTA, PINA e DDRA.
Pages: 1 ... 22 23 [24] 25 26 ... 46