Pages: [1]   Go Down
Author Topic: Commande Reflex + LCD + Clavier => Arduino instable lorsque le .pde change  (Read 1554 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

Premier post, premier projet Arduino : un timer pour Reflex Canon (oui, encore un).

Thread de suivi de ma construction sur le forum de mon club d'astronomie préféré

Mon montage est composé comme suit
- Arduino UNO smd
- LCD HD44780 (rouge/noir - important pour l'astronomie)
- Sparkfun Protoshield
- deux 4N25V pour optocoupler le déclenchement du reflex
- quelques boutons poussoir et résistance pur faire un clavier d'entrée

Un shéma du montage (sans le clavier) :

Et son fichier Fritzing : AstroCom_Proto_0.0127.fzz

Le source complet de la dernière version : AstroCom 0.0501k (7k)

S'en viens enfin à mon problème  smiley-twist

Dès que je veux rendre mon programme plus complexe (ajouter d'autre page de menu ou un mode de déclenchement secondaire par exemple), l'arduino "plante" très vite (mon affichage LCD n'est plus mis à jour et je ne reçois plus rien coté communication série).

- La taille du source compilé est inférieure à 20ko, a prioris ce n'est pas un problème de mémoire, j'ai testé le même Sketch sur un Mega 2560 avec le même résultat
- Mon montage sur le protoshield n'est "a prioris" pas la source du problème, j'arrive à reproduire les même plantages  sur un KeyPadShield de DFRobot

Pa exemple si, dans le source fourni, on décommente #define DEBUGTEST l'arduino "reboot" après avoir affiché le deuxième écran (et donc être rentré dans la boucle principale). Sachant que ce #define se contente d'activer l'envois d'information sur le port série, c'est assez obscur.

J'arrive à déclencher d'autres bug en modifiant le source à des endroit à prioris sans importance (par exmple remplacer une lettre dans une chaine de caractère affichée sur le LCD).

Un sketch plus court ne pose pas de problème, donc il est difficile pour moi de mettre ce problème en évidence dans un source plus court, désolé.

Bref je doit louper quelque chose d'essentiel, mais je ne comprends vraiment pas quoi.

Toutes les idées sont les bienvenues
Logged

Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 417
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

tu n'aurais pas un problème de RAM ? généralement, quand l'arduino redémarre tout seul ou se fige, c'est qu'il y a des débordements de mémoire.
Tu peux utiliser la bibliothèque MemoryFree pour tester la RAM dispo.
Il est initialement prévu pour quel arduino ? 328, Mega ? il a déjà fonctionné tel quel sur un arduino, sans plantage ?

Gromain
Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je fait mes test sur un UNO smd et un Mega 2560

Je suis "arrivé" à faire un sketch qui marche sur MEGA et plante sur UNO.

Sur l'UNO, j'ai 1241o de libre selon MemoryFree, et il plante après une itération de la boucle principale

Code:
AstroCom  0.0501
EEPROM Version : 177
Read_EEPROM
Delai : 5 = 5s
Duree : 60 = 1m0s
Inter : 5 = 5s
Nombre : 0
--------
1241
1241

Sans le code "planteur" (qui contient l'affichage des premières infos), j'obtiens

Code:
1352
1352
1253
1200
1187
1187
1187
et 1187 à l'infini

Sur le Mega :

Code:
AstroCom  0.0501
EEPROM Version : 177
Read_EEPROM
Delai : 2 = 2s
Duree : 5 = 5s
Inter : 3 = 3s
Nombre : 3
--------
6935
6935
6850
6778
6778
6778
et 6778 à l'infini

Sans le code "planteur" (qui contient l'affichage des premières infos), j'obtiens

Code:
7040
7040
6941
6888
6875
6875
6875
et 6875 à l'infini


Je me suis peut-être trompé dans mes tests précédent, vu que là, avec le même code, le MEGA tourne alors que le UNO plante presque tout de suite. Apparemment pas de fuite de mémoire.

Je comptais faire tourner ce code sur UNO, vu qu'il me reste pas mal de stockage (plus de 10ko) pour rendre le programme plus complexe. Mais si ce n'est pas possible, je le passerais sur MEGA.

Je n'utilise l'Arduino que depuis peu, du coup je ne sais pas si 1ko de RAM libre est trop peu, je part du principe que tant q'on est > 0 c'est bon, non ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fouillant un peu, il semblerais bien que ce soit un problème de mémoire. Je vais continuer mes développement sur le MEGA 2560 qui semble à même de gérer mon sketch. Je tâcherais ensuite de l'optimiser pour le UNO (si c'est possible).

Merci pour votre aide en tout cas.
Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
(tiens, un astronome -.^)

Deux questions peut-être stupides...
Pourquoi gérer la MAP, alors qu'en astro' cela ne sert pas à grand chose (sorti de la Lune _et encore_) ?
Pourquoi faire une télécommande complexe alors qu'il existe une solution logiciel intégrable aux APN Canon : CHDK ?

Sinon, en éliminant la partie mémorisation des paramètres (vraiment utile ?), il y a certainement moyen de faire tenir ton code dans un UNO (?).
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

- Je ne gère pas la MAP.
- J'ai un reflex, pas un compact, donc CHDK n'est pas une solution dans mon cas.

Et oui, je veux mémoriser mes paramètres, car après une nuit complète de timelapse, j'aimerais ne pas avoir à me souvenir de mes paramètres. Ce serais carrément une perte d'ergonomie de supprimer cette fonction, qui, de plus, ne consomme vraiment que de l'EEPROM, car si je ne les conserve pas, j'en aurais toujours besoin en RAM lors de la prise de vue.

Je suis désolé, je ne doit pas avoir compris où tu voulais en venir car tes questions me semblent hors sujet. Je débute sur Arduino, merci d'être indulgent smiley-red
Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, pardon, je cherchais une solution en simplifiant vu qu'à priori tu es limité pour une question de RAM.

Pour la MAP, j'avais compris que si vu ton code (?).
Et pourquoi deux voies optocouplées dans ce cas ? Une seule suffit pour déclencher.. En tout cas c'est comme ça que je fais de mon coté.

Pour la mémorisation, ok. Je comprends.
Même si cela ne consomme pas que de l'EEPROM, vu qu'il il y a la bibliothèque qui se charge... A la limite, voir pour un test "sans", pour voir (?).

Sinon pour CHDK, il y a la version pour DSLR : Magic Lantern ^.^
Cela fonctionne très bien sur mon 5D mkII, et cela fonctionne aussi sur 500D, 550D, 50D et 60D. Mais je ne sais pas ce que tu as comme APN (?). A voir..
« Last Edit: March 08, 2011, 11:05:03 am by ekaki » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu as mal interprété mon code. En effet une pression sur le focus ne permet pas seulement de faire la mise au point, elle permet aussi de réveiller un reflex en veille et de prolonger le relevé du miroir et ainsi minimiser le shutter lag au maximum. D'où les voies séparées. D'autre part le programme est et va être étendu à d'autres utilisation que l'Astro. La version tournant sur MEGA permet dors et déjà de faire des prise de vue HDR ainsi que des prises de vues déclenchées en fonction d'un capteur externe (photoresistanse, thermistance, etc).

Même sans la librairie EEPROM (et mes fonctions associées), je me heurte vite à un mur quand j'essaye d'étendre les fonctionnalités (pour ajouter d'autres modes de déclenchement) de mon sketch.

Magic Lantern ne supporte pas le reflex dont je dispose.
Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, alors la liaison du problème à une limitation de RAM ne semble pas tenir. Cela doit venir d'ailleurs...
Logged

Pages: [1]   Go Up
Jump to: