Go Down

Topic: Ardutester - Arduino Component Tester (INCOMPLETO) (Read 230754 times) previous topic - next topic

cece99

Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono<br />  sufficienti i data sheet dei microprocessori.

pighixxx


PaoloP

#47
May 01, 2013, 06:35 pm Last Edit: May 01, 2013, 06:39 pm by PaoloP Reason: 1
Affianco al nome potresti mettere i link al profilo del forum. Il mio è: http://arduino.cc/forum/index.php?action=profile;u=58300
E ricorda che sulla Leonardo non compila per via del nome del registro.

EDIT: Ops, non mi ero accorto che avessi inserito la modifica.  :smiley-sweat:

pighixxx


pighixxx

Eccomi qua. Per oggi basta  :D
Posto l'ultima versione dove ho ottimizzato un po' tutto. Manca solo la parte LCD e dopo è terminato.
Ringrazio ancora PaoloP per il suo apporto.

cece99

Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono<br />  sufficienti i data sheet dei microprocessori.

PaoloP

#51
May 02, 2013, 10:42 am Last Edit: May 02, 2013, 10:49 am by PaoloP Reason: 1
Ho trovato una cosa brutta sparsa nel codice  :smiley-eek:
Code: [Select]
digitalWrite(14,LOW);                           ////Set ADC port low
digitalWrite(15,LOW);
digitalWrite(16,LOW);


Conviene usare
Code: [Select]
digitalWrite(A0,LOW);                           ////Set ADC port low
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);

perché altrimenti il codice non è portabile tra diversi tipi di Arduino.

Poi, all'inizio definisci
Code: [Select]
#define ADC_DDR          DDRC                    //ADC port data direction register
e poi nel codice usi direttamente DDRC.
Perchè?  :~

pighixxx

#52
May 02, 2013, 10:46 am Last Edit: May 02, 2013, 11:00 am by pighixxx Reason: 1

Ho trovato una cosa brutta sparsa nel codice  :smiley-eek:
Code: [Select]
digitalWrite(14,LOW);                           ////Set ADC port low
digitalWrite(15,LOW);
digitalWrite(16,LOW);


Conviene usare
Code: [Select]
digitalWrite(A0,LOW);                           ////Set ADC port low
digitalWrite(A1,LOW);
digitalWrite(A2,LOW);

perché altrimenti il codice non è portabile tra diversi tipi di Arduino.


Lo so che è brutta, adesso cambio.


Poi, all'inizio definisci
Code: [Select]
#define ADC_DDR          DDRC                    //ADC port data direction register
e poi nel codice usi direttamente DDRC.
Perchè?  :~


Rimasugli del porting, c'era fino ad un paio di versioni fa. Mi sono dimenticato di cancellare la definizione
Scusa, ho sbagliato. Alla fine darò una ripulita generale.

Adesso ho un problema che non so dove sbattere la testa.
L'I2C. Dopo che ho fatto la lettura e voglio visualizzare sull'LCD, resetto l'ADC, tento la scrittura sull'LCD ma si impianta tutto anche se reinizializzo LCD.  :smiley-roll-blue:

pighixxx

Risolto anche il problema dell'LCD. Entro breve posto la versione spero definitiva  :D

PaoloP

Qui però bisogna scegliere: se lavori con i registri il codice è veloce ma non portabilissimo.
Se lavori con le funzioni definite da Arduino ad un livello più alto, il codice è più portabile ma un pò più lento.

Poi sinceramente non ho capito perché incapsuli le funzioni wait_20ms o wait_5ms.
Non fai prima a scrivere nel codice il delay e la chiamata alla funzione di lettura senza rimandare ad una funzione che ne chiama un'altra.
Sono d'accordo anche io per la modularizzazzione, ma quando è troppo....
Poi, comunque, il compilatore ottimizza, ma il codice diventa illeggibile.

pighixxx

Versione 0.6h
Ci stiamo avvicinando alla versione finale.  :D

Alcune considerazioni:

- #define LCD_PRINT        //Permette l'Output su LCD
- #define DEBUG_PRINT    //Permette l'Output su console Seriale

- l'Output su seriale sembra funzionare bene.
- l'Output su LCD funziona ma fino a quando non implemento il pulsante non visualizza tutte le informazioni sul componente.
- Ho cercato di fare più pulizia possibile al codice. (E altra ce ne vorrà)


Qui però bisogna scegliere: se lavori con i registri il codice è veloce ma non portabilissimo.
Se lavori con le funzioni definite da Arduino ad un livello più alto, il codice è più portabile ma un pò più lento.


Bisogna trovare una via di mezzo. Come dici te però la portabilità sarà un bel problema.


Poi sinceramente non ho capito perché incapsuli le funzioni wait_20ms o wait_5ms.
Non fai prima a scrivere nel codice il delay e la chiamata alla funzione di lettura senza rimandare ad una funzione che ne chiama un'altra.
Sono d'accordo anche io per la modularizzazzione, ma quando è troppo....
Poi, comunque, il compilatore ottimizza, ma il codice diventa illeggibile.


Release dopo release ottimizzo e pulisco. Se ti ricordi all'inizio avevo fatto una serie di funzioni waitXXXXus(), adesso c'è ne solo una  :D

Considerazioni finali:
Lo sto testando, posso affermare con serenità che è uno strumentino interessante, superiore al DCA (Non penso di dire boiate).
Buon lavoro,

PighiXXX

PaoloP


Lo sto testando, posso affermare con serenità che è uno strumentino interessante, superiore al DCA


Questo ce lo potrebbe dire Michele, che, se non ho capito male, ha anche il DCA.
Appena sarà terminato il lavoro potrebbe fare una recensione comparativa.  ;) (Se ne ha voglia, s'intende)

pighixxx


Questo ce lo potrebbe dire Michele, che, se non ho capito male, ha anche il DCA.
Appena sarà terminato il lavoro potrebbe fare una recensione comparativa.  ;) (Se ne ha voglia, s'intende)


Infatti, la mia voleva essere una provocazione  :D
Però questo fa più del DCA...

pighixxx

Nuova versione (0.6i)
Il pulsante funziona  :smiley-mr-green:

- Premerlo per iniziare il probing.
- Quando viene visualizzata una bandierina sull'lcd vuol dire che sono disponibili ulteriori informazioni per il componente (Premere il pulsante per visualizzarle)

Se non si vuole usare il pulsante rimuovere la seguente riga: #define BUTTON_INST




Nota:
Il pulsante è collegato tra il pin2 e la massa.

cece99

Appena testato e funziona tutto
Ciao
C
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono<br />  sufficienti i data sheet dei microprocessori.

Go Up