Buongiorno, è doverosa la premessa che dovete sempre tener presente leggendo il titolo del Topic
Quindi io accetto e rispetto ogni suggerimento e davvero ringrazio di cuore chiunque mi dia una mano, poi ho due priorità: "comprendere" il suggerimento in quanto lo dovrò poi spiegare, ed "impossessarmi" di esso in quanto certamente devo manipolarlo; inoltre i tempi sono stretti quindi magari capita che prendo una soluzione tecnicamente meno favorevole di un'altra, ma se la capisco e funziona per me è un grande balzo avanti come state comprendendo; ancora, ovvio che se oltre a spiegarmi mi postate un code copia/incolla mi ci butto a pesce, salvo poi a chiedere spiegazioni. Ieri con grande fatica sono riuscito ad arrivare al punto che ho scritto nell'ultimo post, ora mi sembra giusto, prima di andare al lavoro (ma spero di sbrigarmi presto) postare la soluzione adottata, che mi sembra semplice e chiara, e che ora non so nemmeno più di chi è figlia, avendola perlatro "snaturata" tutta con interventi da newbie, che ora vi faranno imprecare, ma che funzionano, e per me, almeno per ora, tanto basta. Il prossimo passaggio consiste secondo me nel creare un 4° array con 6 righe e tre colonne nel quale memorizzo i sei valori del 4° byte dell'array "fuses" ed i corrispondenti valori di EFUSE si/no e programming mode HVSP/HVPP/HVP13; oppure con un semplice select case, da aggiungere alla base del code che vi sto postando, ottengo lo stesso risultato, ditemi Voi; una volta in possesso dei dati per la programmazione devo passare all'ultimo stadio, che è quello della scrittura dei fuses e poi ho finito; resta da immplementare l'erase, ma mi verrà semplice una volta ristrutturato il software, come sto facendo, man mano che procedo.
#define TOT 4
char atmel [TOT] [20] = { {"ATtiny13"},
{"ATtiny25"},
{"ATtiny45"}
{"NON IN TABELLA"}
};
byte signature [TOT] [3] = { {0x1E,0x90,0x07},
{""},
{""}
};
byte fuses [TOT] [4] = { {0x6A,0xFF,0xFF,0x00},
{0x62,0xD9,0xFF,0x04},
{0x62,0xDF,0xFF,0x05}
};
IN LOOP:
// arrivati a questo punto sono in possesso della sola signature del micro
unsigned char indice;
unsigned char LFUSE;
unsigned char HFUSE;
unsigned char EFUSE;
unsigned char FLAGS;
char modello[TOT],i;
delay(500);
indice = cfr_signature(read_signature2,read_signature3);
if (indice < TOT)
{
for(i=0;i<20;i++) modello[i] = atmel[indice] [i];
LFUSE = fuses[indice] [0];
HFUSE = fuses[indice] [1];
EFUSE = fuses[indice] [2];
FLAGS = fuses[indice] [3];
}
else for(i=0;i<20;i++) modello[TOT] = atmel[indice] [i];
NELLA SEZIONE FUNCTIONS & VOIDS
unsigned char cfr_signature(unsigned char byte2, unsigned char byte3)
{
char i;
unsigned int temp1, temp2;
temp1 = (unsigned int)(byte2 << 8) + byte3;
for (i=0;i<TOT;i++)
{
temp2 = (unsigned int) (signature[i] [1] <<8) + signature[i] [2];
if (temp1 == temp2) return i; // esce dalla funzione con il valore dell'indice
}
i = TOT-1; // corrispondenza non trovata, i assume l'ultimo valore dell'array "NON IN TABELLA"
return i;
}
@ ratto93: per quanto mi riguarda non so di che parli :~