Go Down

Topic: Frontend per avrdude; cerco consigli (Read 5096 times) previous topic - next topic

leo72

Ho provato con Arduino UNO R1. Funziona:
Code: [Select]

Run: avrdude -q -u -p m328p -c arduino -P /dev/ttyACM0 -b 115200 -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h

avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e950f
avrdude: reading lfuse memory:
avrdude: writing output file "<stdout>"
0x0
avrdude: reading hfuse memory:
avrdude: writing output file "<stdout>"
0x0
avrdude: reading efuse memory:
avrdude: writing output file "<stdout>"
0x0

avrdude done.  Thank you.

The process avrdude exit with Exit code: 0 Exit status: 0

L'errore di lettura è dato dal fatto che non ho materialmente collegato un Atmega328 ma c'era un Attiny85.
Anzi, un suggerimento: come prima operazione dovresti confrontare la firma digitale del chip con quella che ti aspetteresti e continuare solo se corrispondono. Nell'esempio, infatti, il tuo programma ha chiesto ad avrdude di leggere i dati a prescindere.

Funziona anche l'USBtinyISP. Ho letto l'Atmega328 del mio Arduino UNO:
Code: [Select]

Run: avrdude -q -u -p m328p -c usbtiny -P usb:004:003 -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h

avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1e950f
avrdude: reading lfuse memory:
avrdude: writing output file "<stdout>"
0xff
avrdude: reading hfuse memory:
avrdude: writing output file "<stdout>"
0xde
avrdude: reading efuse memory:
avrdude: writing output file "<stdout>"
0x5

avrdude done.  Thank you.

The process avrdude exit with Exit code: 0 Exit status: 0


Test negativo invece con la Leonardo. Confermo quanto detto in precedenza. La scheda è selezionabile finché il bootloader non avvia lo sketch ArduinoISP, non appena lo fa appare "Device not found".


Sembra la descrizione di Grillo  :)

Scusa non volevo provocarti, tento solo di capire qualcosa da non programmatore.
Le poche cose che ti ho detto sulla gestione com in windows vengono da esperienza diretta in java, processing, davvero con un comando ho avuto la lista delle com.
Di più non so, non capisco nemmeno il 2% di quello che dici, per mia ignoranza.
Sto portando su android il mio programmino e ci capisco ancora meno perche Eclipse non centra nulla con processing.

Mi scuso se ho dato brutta impressione ma veramente non volevo.


Ok, allora sono stato io malpensate, mi scuso. Il fatto è che io di cose semplici non ne ho mai incontrato nella mia vita.

Java e in genere tutti i linguaggio che si basano su un macchina virtuale si possono permettere delle cose precluse ai linguaggio compilati. Java può sfruttare la virtual machine per fare quello a cui tutti i programmatori ambiscono, cioè  per uno stesso device scrivo lo stesso codice, non importa su quale piattaforma sta girando la mia applicazione, per assurdo essa girerà anche su ATmega328, 644, ovunque ci sia una macchina virtuale java che supporta quella architettura, non solo offre supporto universale anche per la piattaforma, cioè windows, unix, linux, windows mobile, mac e chi più ne ha ne metta.

Lo strato software offerto da java io con il C++ non c'è l'ho, me lo devo costruire. Se Solid avesse rilevato anche gli eventi di quei device privi di modulo kernel che gestisce il device stesso avrei già risolto. Risolto a patto di dover installare il pacchetto kdelibs su qualunque piattaforma, per il linux il problema sarebbe minimo ma per le altre il problema è grande, perchè kdelibs si porta appresso una 30ina (minimo) di altri pacchetti software, questa è la conseguenza della modularità che ad un profano può sembrare un difetto anziché un pregio.

Per java, sbircia dentro il programma arduino IDE, io tempo addietro l'ho fatto e anche se non saprei mettere insieme un programma java per scrivere "hello java" ciò che leggevo l'ho capito, e tutto fortemente object oriented. Per processing invece io non ho proprio idea di cosa sia, come sia stato realizzato ecc. A me processing mi sembra una estensione o specializzazione di java, quindi puoi usare java nudo e crudo, ma in più hai delle funzionalità offerte da processing, c'è da capire cosa prendere da processing e cosa invece manca e prenderlo da java.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Quote
L'errore di lettura è dato dal fatto che non ho materialmente collegato un Atmega328 ma c'era un Attiny85.
Anzi, un suggerimento: come prima operazione dovresti confrontare la firma digitale del chip con quella che ti aspetteresti e continuare solo se corrispondono. Nell'esempio, infatti, il tuo programma ha chiesto ad avrdude di leggere i dati a prescindere.


Ok, si quella funzionalità sicuramente e da integrare, il problema è definire il come.
Io non voglio che il programma faccia una lettura all'insaputa dell'utente, odio i programmi che non obbediscono e che prendono iniziative. Per cui dovrà essere l'untente a piggiare il pulsante "read" e il programma si limita controllare che ci sia corrispondenza tra la signature del micro selezionato dall'utente e quella del micro presente nella target board. Se non c'è corrispondenza, nel monitor evidenzio il problema con un colore ben in vista (rosso), magari spiego anche l'anomalia, ma non so se è il caso di rifiutare totalmente il comando in lettura, perchè in lettura è innoquo, ma sicuramente lo blocco in scrittura.

Domanda?
Ma non dovrebbe essere avrdude a segnalare la cosa anomala e rifiutarsi di lavorare?

Sono confuso.....

Se ci fai caso il pulsante "Read" è abilitato anche se non scegli di operare con alcuno spazio di memoria, cioè con tutte le ckbox non marcate, il comando Read funziona mostrando solo la signature.

Per sicurezza la signature la scrivo come proprietà nel file di ogni microcontroller, ATmega328.ui ATmega644.ui ecc., ma sarà una modifica disponibile nel ramo "devel".

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Ma il problema della Leonardo? Tu dici che a te funziona, a me invece non funziona.


Ma il problema della Leonardo? Tu dici che a te funziona, a me invece non funziona.


A si ho dimenticato il problema della Leonardo. No io la Leonardo non c'è l'ho, quindi non posso provare.
Il problema è conosciuto, sapevo che veniva fuori un problema simile, ma non ho idea di come risolverelo.

Ho esperienza con altri device che cambiano dovo essere stati enumerati, e altri ancora che richiedono una sollecitazione
particolare, cioè la normale enumerazione non è sufficiente.

Questo problema l'ho avuto con la chiavetta internet, che una volta connessa viene riconosciuta con un vid/pid, poi bisogna mandargli dei comandi e come risposta il device mette in mostra al kernel altri sotto device e altri vid/pid.

Prova  con il comando "udevadm monitor --property", inserisci la leonardo e aspetta che il bootloader avvi il programma ISP, vediamo cosa succede.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Ok. In allegato l'output richiesto.

Code: [Select]

7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
p7zip Version 4.65 (locale=it_IT.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Error: /home/mauro/Scaricati/output_leonardo.zip: is not supported archive

Errors: 1


Ma che errore è?
Riprova saremo più fortunati.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Senza zipparlo.... sprechiamo questi 17 kB di dati va'....  ;)

Non ho idea di quale device usare con avrdude, la scelta è tra:
1 {
DEVNAME=/dev/ttyACM0
ID_USB_DRIVER=cdc_acm
ID_MODEL_ID=8036
ID_VENDOR_ID=2341
}

2 {
DEVNAME=/dev/input/mouse1
ID_USB_DRIVER=usbhid
ID_MODEL_ID=8036
ID_VENDOR_ID=2341
}

Ma su leonardo la periferica è Host?

Tu quale device name passi ad avrdude, cioè dopo -P che ci scrivi?

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Premetto che non l'ho mai programmata in maniera diretta, per ora l'ho sempre fatto da IDE ed ho scelto sempre la forma /dev/ttyACMx.
Anche con l'IDE, comunque, ho spesso di questi problemi usando la comunicazione seriale, che cioè la scheda non riesca ad usarla perché "salta" punto di montaggio dopo il bootloader, entrando in un circolo vizioso in cui ad ogni apertura del monitor seriale la scheda venga rimontata sul successivo punto libero (es. ACM1 quando il monitor seriale l'ho aperto su ACM0), rendendo di fatto impossibile collegarmi ad essa.

Per adesso con la Leonardo passo.

Se vai nel ramo devel, c'è la nuova verisione.

La finestra ora si ridimensiona, non cambia dimensione anche cambiando MCU.
Ci sono i lockbit, ma sono in lettura, in scrittura non l'ho ancora inserito perchè involontariamente durante i test potrei incasinare il micro cavia.
C'è l'editor binario http://qhexedit2.googlecode.com/svn.
L'editor ha un menu contestuale click destro.

Anche i fuse manual hanno un menu contestuale, reset fuse e enter fuse

C'è il WhatsThis, cioè il ? in alto nella toolbar, clicchi il cursore cambia e poi clicchi su un widget e appare una spiegazione.

La oraganizzazione del progetto è stata rivista, ora il build avviene nella directory corrente nascondendo i file intermedi generati in directory nascoste es .moc .uic ecc.
La nuova organizzazione permette l'introduzione di sotto progetto come libreria shared o static, difatti anche hexedit ora è una libreria shared.

La nuova organizzazione porta solo un problema apparente, aggirabile con:
userleo@localhost git-avrdudequi-devel]$ LD_LIBRARY_PATH=avrdudequi/lib; avrdudequi/app/avrdudequi

Questo imposta path di ricerca di una libreria shared e avvia il programma che ora si trova sotto app, mente il
codice si trova sotto src/app src/lib.

Per il repo devi:
git checkout devel
git pull

Oppure cloni nuovamente.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72

Non compila. Mi da un errore su QHexEditor:

Code: [Select]
eepromeditor.o: nella funzione "EEpromEditor::loadFile(QString const&)":
eepromeditor.cpp:(.text+0x30e): riferimento non definito a "QHexEdit::setData(QByteArray const&)"
eepromeditor.o: nella funzione "EEpromEditor::resetEEprom(unsigned char)":
eepromeditor.cpp:(.text+0x976): riferimento non definito a "QHexEdit::setData(QByteArray const&)"
eepromeditor.o: nella funzione "EEpromEditor::setEEpromSize(unsigned int)":
eepromeditor.cpp:(.text+0xbd3): riferimento non definito a "QHexEdit::setData(QByteArray const&)"
eepromeditor.o: nella funzione "EEpromEditor::saveFile(QString const&)":
eepromeditor.cpp:(.text+0xdd6): riferimento non definito a "QHexEdit::data()"
eepromeditor.o: nella funzione "EEpromEditor::EEpromEditor(QWidget*)":
eepromeditor.cpp:(.text+0x107a): riferimento non definito a "QHexEdit::QHexEdit(QWidget*)"
eepromeditor.o: nella funzione "EEpromEditor::setEditorData(QByteArray&)":
eepromeditor.cpp:(.text+0x39): riferimento non definito a "QHexEdit::setData(QByteArray const&)"
collect2: error: ld returned 1 exit status
make[2]: *** [avrdudequi] Errore 1
make[2]: Leaving directory `/home/leo/Desktop/Arduino/avrdudequi/src/app'
make[1]: *** [sub-app-make_default-ordered] Errore 2
make[1]: Leaving directory `/home/leo/Desktop/Arduino/avrdudequi/src'
make: *** [sub-src-make_default-ordered] Errore 2

Più tardi vedo qual'è il problema, clono in locale e avvio il build e vediamo che esce fuori.
Comunque l'errore deriva dal fatto che non trova il file di libreria che si trova in avrdudequi/lib/libhexedit.so.xx.x o simili.

Ciao.
AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

leo72


Più tardi vedo qual'è il problema, clono in locale e avvio il build e vediamo che esce fuori.
Comunque l'errore deriva dal fatto che non trova il file di libreria che si trova in avrdudequi/lib/libhexedit.so.xx.x o simili.

Ciao.

Non so, io ho rifatto un checkout ed un pul, poi ho ricompilato.

Si ho risolto, però ora il tuo ramo si è sporcato.

Se il repo che hai clonato non ti serve, cioè se non hai fatto modifiche ti consiglio di rimuovere la directory e clonare nuovamente il repo. Diversamente devi ripulire il tree o con make clean e vedere se funziona oppure è necessario ripulirlo a mano.

Per non riclonare:
$make clean
se non funziona devi ripulirlo a mano, cioè rimuovi tutti i file  *.o   ui_*.h  moc_*  qrc_*  da avrdudequi/src/app
$ git branch
Controlla che il branch devel è marcato con *
$ git pull
$ qmake-qt4 -r CONFIG+=debug
cambiando CONFIG+=release non ci sono più messagi di debug
$ make

Poi avvii sempre con LD_LIBRARY. ecc.

Ciao.





AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Go Up