Go Down

Topic: [Résolu] Lire la mémoire EEPROM au démarrage (Read 795 times) previous topic - next topic

rezemika

Nov 02, 2013, 08:11 pm Last Edit: Nov 07, 2013, 11:14 pm by rezemika Reason: 1
Edit : La question d'origine à été très vite résolue, et désormais, le deuxième problème l'est aussi.
Pour régler le problème de réponse de avrdude, j'ai appuyé sur le RESET de l'Arduino, j'ai réinstallé l'IDE et j'ai fait gaffe à brancher le cordon USB sans aller jusqu'au bout de la fiche USB en façade.
En effet, la led "L" près de Rx Tx ne s'allumais pas tout le temps.
J'ai donc pris garde à ne pas enfoncer la prise jusqu'au bout et... ça marche!

Merci à tous de votre aide !


Bonjour !


J'ai dans l'idée de dédier un arduino à un projet permanent.
Son job serait d'écouter en permanence sa liaison USB (il aurait aussi une batterie) et, s'il en reçoit l'ordre par la liaison série, d'allumer ou d'éteindre une sortie numérique et d'envoyer un message à l'ordinateur.

L'ordinateur lui, est sous Linux et envoi et reçoi les messages grâce au BASH (ça je maitrise plus ou moins bien).

Le seul problème est que si l'arduino doit redémarrer (en cas de panne de batterie et si l'ordinateur est éteint par exemple), le programme disparait et il faut alors le recharger.

J'ai donc pensé à deux solutions :

- soit un script BASH ré-envoi son programme à l'arduino à chaque fois qu'il se lance
- soit l'arduino stoque son programme dans une mémoire EEPROM

Pour la deuxième solution, il faudrait qu'il sache qu'i doit aller chercher son programme ici au démarrage.

C'est là que ma question se pose : est-ce possible d'ajouter cette instruction dans son bootloader? Si oui, pourriez-vous me donner des pistes pour le faire?

Sinon, la première option vous parait-elle réaliste?


Merci d'avance de votre aide !

barbudor

Bonjour

Je crois que tu n'as pas compris comment marche un Arduino.

Ce que tu demandes est déjà le cas : chaque fois que tu fait un UPLOAD (Téléverser), ton programme est écrit non pas en RAM mais dans la mémoire Flash. Si tu éteint et rallume l'Arduino, le programme redémarre aussitot.

Pour t'en convaincre, il te suffit de charger le sketch "Blink", puis de débrancher l'Arduino et de le rebrancher : la LED se remet à clignoter.

A+
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

rezemika

Bonjour.

C'est ce qui me semblait au départ, mais j'avais essayé et le programme ne semblait plus fonctionnel.
Je vais retenter, désolé d'avoir abusé de ton temps.

Merci de ta réponse.

barbudor

De rien
Et  n'oublie pas de venir donner le résultat en mettant [Résolu] dans le titre du premier message si tout est ok.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

rezemika

#4
Nov 03, 2013, 04:12 pm Last Edit: Nov 03, 2013, 04:21 pm by rezemika Reason: 1
J'ai essayé de transférer le programme, mais c'est là qu'un nouveau problème (à priori sans rapport) survient :
l'IDE n'arrive pas à se connecter à l'arduino.

J'ai ce message d'erreur :

Code: [Select]
Taille binaire du croquis : 1 568 octets (d'un max de 258 048 octets)
processing.app.SerialException: Erreur d'ouverture du port série « /dev/ttyACM0 ».
at processing.app.Serial.<init>(Serial.java:178)
at processing.app.Serial.<init>(Serial.java:77)
at processing.app.debug.Uploader.flushSerialBuffer(Uploader.java:77)
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:172)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)
at processing.app.Sketch.upload(Sketch.java:1706)
at processing.app.Sketch.exportApplet(Sketch.java:1662)
at processing.app.Sketch.exportApplet(Sketch.java:1634)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2346)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2355)
at java.lang.Thread.run(Thread.java:724)
Caused by: gnu.io.UnsupportedCommOperationException: Invalid Parameter
at gnu.io.RXTXPort.setSerialPortParams(RXTXPort.java:213)
at processing.app.Serial.<init>(Serial.java:163)
... 10 more
processing.app.debug.RunnerException: Erreur d'ouverture du port série « /dev/ttyACM0 ».
at processing.app.debug.Uploader.flushSerialBuffer(Uploader.java:101)
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:172)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:67)
at processing.app.Sketch.upload(Sketch.java:1706)
at processing.app.Sketch.exportApplet(Sketch.java:1662)
at processing.app.Sketch.exportApplet(Sketch.java:1634)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2346)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2355)
at java.lang.Thread.run(Thread.java:724)


Je suis sous Linux, j'ai donc tapé "lsusb" et l'arduino est bien reconnu :

" Bus 001 Device 044: ID 2341:0042 Arduino SA Mega 2560 R3 (CDC ACM) "

Un "dmesg" donne ceci :

Code: [Select]
[ 5276.876051] usb 1-1.1: Manufacturer: Arduino (www.arduino.cc)
[ 5276.876055] usb 1-1.1: SerialNumber: A4139373530351516222
[ 5276.876629] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device
[ 5281.691453] usb 1-1.1: USB disconnect, device number 53
[ 5283.934000] usb 1-1.2: new full-speed USB device number 54 using ehci_hcd
[ 5284.005956] usb 1-1.2: device descriptor read/64, error -32
[ 5284.181381] usb 1-1.2: device descriptor read/64, error -32
[ 5284.356875] usb 1-1.2: new full-speed USB device number 55 using ehci_hcd
[ 5284.428855] usb 1-1.2: device descriptor read/64, error -32
[ 5284.604276] usb 1-1.2: device descriptor read/64, error -32
[ 5284.779812] usb 1-1.2: new full-speed USB device number 56 using ehci_hcd
[ 5285.186626] usb 1-1.2: device not accepting address 56, error -32
[ 5285.258561] usb 1-1.2: new full-speed USB device number 57 using ehci_hcd
[ 5285.665280] usb 1-1.2: device not accepting address 57, error -32
[ 5285.665476] hub 1-1:1.0: unable to enumerate USB device on port 2
[ 5301.380002] usb 1-1.1: new full-speed USB device number 58 using ehci_hcd
[ 5301.475076] usb 1-1.1: New USB device found, idVendor=2341, idProduct=0042
[ 5301.475083] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 5301.475088] usb 1-1.1: Manufacturer: Arduino (www.arduino.cc)
[ 5301.475092] usb 1-1.1: SerialNumber: A4139373530351516222
[ 5301.475576] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device


NB : les mêmes lignes apparaissent plusieurs fois, mais le chiffre suivant le "ACM" varie.

J'ai essayé les deux ports usb en façade (en USB 2.0) et de réinstaller l'IDE arduino, rien n'y fait.

Le problème vient-il des pilotes?

barbudor

#5
Nov 03, 2013, 04:37 pm Last Edit: Nov 03, 2013, 06:14 pm by barbudor Reason: 1
Ca ressemble au port série déjà ouvert par quelqu'un d'autre.
Un programme fantôme qui utiliserait le port série en même temps que l'IDE ?
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

rezemika

C'est possible, je vais essayer d'arrêter un maximum de programmes et de retester.

rezemika

J'ai essayé de fermer un maximum de logiciels et le problème persiste.
Je devrais peut-être transférer ce problème dans un topic dédié (à moins que ce ne soit assimilable à du flood)?

skywodd

Bonjour,

Hummm ça sent les droits d'accès en carafe ....

->
Code: [Select]
sudo adduser tonnomdutilisateur dialout
Code: [Select]
ls -l /dev | grep ACM

Et si tu vois que ça persiste qu'est ce que dit :
Code: [Select]
fuser -m /dev/ttyACM0
?
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

rezemika

Bonjour.

J'ai réinstallé l'IDE au cas où j'aurai fait une bêtise dans la configuration, le problème a persisté.
La commande d'ajout au groupe dialout me dit que je suis déjà dans ce groupe.

Mais depuis la réinstallation, l'IDE me dit à chaque fois le contraire, ce qui fait que le menu pour choisir le port série est grisé.
J'ai donc tenté de lancer l'IDE avec gksudo et le menu est à nouveau accessible.
Cependant, le téléversement ne marche toujours pas.
L'IDE renvoie (avec ACM0 selectionné) :

Code: [Select]
avrdude: stk500_recv(): programmer is not responding


Mais quand je tente de l'envoyer, la led Rx clignote deux fois, donc l'arduino reçoit quelque chose, mais ce n'est pas le programme.

fdufnews

Quote
L'ordinateur lui, est sous Linux et envoi et reçoi les messages grâce au BASH (ça je maitrise plus ou moins bien).

Tu n'aurais pas une application lancée au démarrage (ou par un cron) et qui prendrait le port série pour elle?

rezemika

Je n'ai pas encore écris le script dont j'ai parlé, mais j'ai regardé dans /etc/init.d/ et un ls donne ceci :

Code: [Select]
acpid              hostname                     resolvconf
acpi-support       hwclock                      rfkill-restore
alsa-restore       hwclock-save                 rfkill-store
alsa-store         irqbalance                   rsync
anacron            kerneloops                   rsyslog
apparmor           killprocs                    saned
apport             kmod                         sendsigs
avahi-cups-reload  lightdm                      setvtrgb
avahi-daemon       modemmanager                 single
binfmt-support     networking                   skeleton
bluetooth          networking.dpkg-new          spamassassin
bootlogd           network-interface            speech-dispatcher
brltty             network-interface-container  stop-bootlogd
console-font       network-interface-security   stop-bootlogd-single
console-setup      network-manager              sudo
cron               ondemand                     udev
cryptdisks         plymouth                     udev-fallback-graphics
cryptdisks-early   plymouth-log                 udev-finish
cryptdisks-enable  plymouth-ready               udevmonitor
cryptdisks-udev    plymouth-splash              udevtrigger
cups               plymouth-stop                ufw
cups-browsed       plymouth-upstart-bridge      umountfs
dbus               pppd-dns                     umountnfs.sh
dmesg              procps                       umountroot
dns-clean          pulseaudio                   unattended-upgrades
failsafe-x         rc                           urandom
friendly-recovery  rc.local                     whoopsie
gdm                rcS                          x11-common
grub-common        README
halt               reboot


Un fichier nommé "cron" est présent, et il ouvre un fichier avec du sh nommé "upstart-job".
Serait-ce la cause du problème?

Go Up