Aller au contenu

GO Print

Configuration simplifiée de nos firmwares


Wrmaeleun

Messages recommandés

@Sancho Les bonnes nouvelles d'abord : j'ai relancé l'impression du Groot, sans aller au bout, voici le résultat :

Sans titre.png

Donc plus de blobs !

Par contre, je pense que le rafraîchissement de l'écran toutes les 5mn c'est vraiment trop drastique O.o Limite l'écran ne sert plus à rien. Je pense que ça passerait difficilement auprès des utilisateurs.

Mais le point positif c'est que cela confirme que le temps de rafraichissement de l'écran est trop long pour un traitement correct des moteurs pas à pas (ou alors que le processeur n'est pas assez puissant...). Les pistes seraient donc pour moi :

  • Baisser la fréquence de rafraichissement, mais pas autant : 2 à 3 secondes seraient acceptables
  • Minimiser les infos rafraichies à chaque itération, quitte à ne pas tout rafraichir à chaque fois.

Je vais regarder si possibilité d'accélérer l'I2C ou d'utiliser une autre librairie que U8glib genre Adafruit.

Lien vers le commentaire
Partager sur d’autres sites

@Sancho : quelques pistes d'optimisation qui m'ont permis d'obtenir un meilleur résultat :

  • Dans dogm_lcd_implementation.h, initialiser l'afficheur avec  U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_FAST|U8G_I2C_OPT_NO_ACK) à la place de  U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE). C'est censé initialiser le bus I2C à vitesse élevée (400kHz au lieu de 100kHz, voir par ex. ici : https://forum.arduino.cc/index.php?topic=277381.15). J'ai pas vérifié à l'oscilloscope.
  • Toujours dans dogm_lcd_implementation.h, il y a une large place à l'optimisation du code dans lcd_implementation_status_screen() : tout l'écran est redessiné à chaque rafraîchissement :o, y compris les buses, le ventilo, le cadre de progression et la carte SD... Pas étonnant que ce soit consommateur de CPU ! comme il reste un peu de RAM, il faudrait comparer la nouvelle valeur à afficher par rapport à l'ancienne et ne l'afficher que s'il existe une différence. J'ai fait une rapide optimisation de l'affichage de la buse et du ventilateur : affichage seulement la première fois et plus d'animation du ventilateur.
  • Dans ultralcd.h, modifier LCD_UPDATE_INTERVAL. J'imagine que c'est cette valeur que vous avez modifiée pour la passer à 5mn ; je proposerais de la mettre à 300 (3s)

Avec ces quelques modifs, j'arrive à un résultat à peu près normal. Je pense qu'en poussant l'optimisation dans lcd_implementation_status_screen() et _draw_heater_status() on pourrait obtenir quelque chose d'acceptable. Qu'en penses-tu?

 

Sans titre.png

Lien vers le commentaire
Partager sur d’autres sites

ne serait ce que les affichages des axes x et y qui sont inutiles en phase d'impression. Utile au départ,  en pause éventuellement  (changement filament) et à la fin seulement.

Donc je pense aussi que certaines infos peuvent être rafraîchis que rarement. Reste à définir la valeur dans le temps de rarement...

Lien vers le commentaire
Partager sur d’autres sites

@babouze64 Tout à fait d'accord, X Y ne servent pas à grand chose pendant l'impression tout comme la température si elle ne change pas. Par contre en pahse de chauffe c'est une info cruciale. 

@Sancho Le timeout semble venir de la phase d'init avec l'écran (entre le reset et l’affichage de l'écean de bienvenu) qui dure chez moi qq secondes contrairement à avant. Ce qui est bizarre c'est que l'imprimante a déjà répondu à des commandes à moment là ...

@LeLutin Une autre piste pourrais être l'amélioration de la compilation en passant en -O3 (https://forum.arduino.cc/index.php?topic=343730.0) Par contre cela semble se faire au détriment de la taille, qui je crois est déjà limite.

Modifié (le) par CaliBx
Lien vers le commentaire
Partager sur d’autres sites

@CaliBx : L'optimisation de la compilation pourrait être une piste, mais il faut vraiment faire attention et être sélectif !

Notre Melzi n'ayant pas un OS temps réel, il se trouve que de nombreuses portions de code sont optimisées en termes de temps d'exécution pour se conformer aux timings des composants ; à un endroit, j'ai par exemple vu un système qui ajoute des commandes NOP en fonction de la fréquence du processeur ! Un changement d'option de compilation, et hop, c'est dans les choux. Certains ont ainsi eu des problèmes pour piloter leurs écrans FullReprapGraphic pour des problèmes d'optimisation qui étaient gérées différemment entre les versions de l'IDE Arduino.

De base, seul le fichier ultralcd_st7920_u8glib_rrd.h se compile effectivement avec cette option, qui est intégrée dans le source par un #pragma GCC optimize (3).

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour ma part impossible de droper le .HEX dans dagomdoctor, j'ai le signe interdit.

Et impossible de flasher avec Arduino, le fichier générer par le générateur:

 

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows NT (unknown)), Board: "Melzi 1284p 16mhz"
In file included from /Configuration_adv.h:689,
                 from /Configuration.h:1136,
                 from /Marlin.h:44,
                 from blinkm.cpp:28:
/SanityCheck.h:38:4: error: #error Versions of Arduino IDE prior to 1.6.0 are no longer supported, please update your toolkit.

Lien vers le commentaire
Partager sur d’autres sites

@falcom : j'ai aussi trouvé l'ergonomie de DagomaDoctor déroutante au premier abord : il ne faut pas "Glisser/Déposer" le fichier .hex dans le cadre où l'appli te demande de le faire, mais sur une d'une des deux listes déroulantes au dessus. Pas très intuitif :S, j'espère que Dagoma corrigera dans la version finale.

Sans titre.png

Pour la compilation, tu dois effectivement mettre à jour ton IDE depuis la version 1.1.0-RC5 de Marlin. J'utilise la version 1.6.11. L'inconvénient, c'est que tu ne peux plus téléverser directement le .hex depuis l'IDE... apparemment un problème de timings USB de la Melzi. Il y a peut-être une solution via une mise à jour du BootLoader, mais j'ai préféré faire simple en utilisant DagomaDoctor. Pour retrouver le fichier .hex, c'est ici : 

 

D'ailleurs, si quelqu'un sait comment téléverser dans la Melzi avec un IDE récent, je suis preneur !

Modifié (le) par LeLutin
Lien vers le commentaire
Partager sur d’autres sites

Pour téléverser une Melzi avec un IDE 1.6.x :

  • Installer un Arduino 1.6.+
  • Cloner le github RC6 (!!!) https://github.com/MarlinFirmware/Marlin/tree/1.1.0-RC6
  • Installer dans son répertoire de croquis Arduino (pour les linuxiens, dans : $HOME/Arduino/ ) les fichiers fraîchement clonés suivants :
    • ArduinoAddons/Arduino_1.6.x/hardware
    • ArduinoAddons/Arduino_1.6.x/librairies
  • Installer avec l'IDE Arduino la librairie U8glib
    • ArduinoIDE, Menu Corquis > Include Library > Manage libraries.
    • Chercher U8glib
    • L'installer
  • Vous pouvez à présent, ouvrir les sources qui viennent de Dist
  • Configurer
    • Type de carte : Sanguino
    • Processur : ATMega 1284p 16Mhz

Si problème de timeout au téléversement :

  • Ré-essayer immédiatement (plusieurs fois .. des fois ça passe sans raison)
  • [EDIT] Tester avec un autre câble ... j'ai mis un moment à m'en rendre compte à un époque ...
  • Vérifier le jumper auto-reset
  • Faire un reset à la main juste quand l'upload va commencer (je sais sur une Melzi dans une Disco, c'est tricky ^_^' .. cure dent ?)
  • Tweaker des valeurs dans le fichier $HOME/Arduino/hardware/marlin/avr/boards.txt
    • Les paramètres pour une Melzi sont ceux commençant par sanguino.menu.cpu.atmega1284
    • Je sais qu'il y a une manière d'augmenter le timeout 'after reset' mais je ne me rappelle plus comment il se nomme
  • Attendre Dagom'App début de semaine prochaine ... peut être demain ...

 

Je laisse les connaisseurs aiguiller ceux qui s'y connaissent moins sur le sujet, mais les grandes lignes sont là.

Modifié (le) par Sancho
  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Une petite vérification de l'efficacité du paramètre  U8G_I2C_OPT_FAST|U8G_I2C_OPT_NO_ACK pour l'initialisation du bus I2C (attention les yeux, séquence émotion, j'ai ressorti mon oscillo acheté en 1984 de la naphtaline, c'est increvable :x) :

  • u8g(U8G_I2C_OPT_NONE) => 100kHz (2 ms / carreau)

DSC_4689.png

  • u8g(U8G_I2C_OPT_FAST|U8G_I2C_OPT_NO_ACK ) => 400 kHz(2 ms / carreau)

DSC_4718.png

Donc efficacité validée de mon côté !

Lien vers le commentaire
Partager sur d’autres sites

@LeLutin : je prend note ! Je suis moyen fan du U8G_I2C_OPT_NO_ACK ... J'ai exploré la RC7 en diagonale (entre autre autour des sujets écran) et effectivement la communauté Marlin semble avoir pris le parti d'activer l'option U8G_I2C_OPT_FAST pour les écrans de la gamme OLED (SSD1306 pour les intimes)(1). Je n'abandonne pas pour autant la piste que j'explore de mon coté en ce moment, qui est plus une approche 'métier' que 'technique' car sans ça ... j'ai un peu l'impression que c'est un pansement sur une jambe de bois ... mais les deux approches combinés sera sûrement la bonne combinaison de fluidité.

Merci pour ce retour (avec en prime un pti clin d'oeil nostalgique :D ... Tu nous régales LeLutin ... Tu es royal !! )

 

(1) : Je n'y ai pour le moment pas vu d'amélioration fondamentale outre le changement de FLAGS à l'initialisation de la librairie U8glib pour SSD1306.

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...
Le 04/09/2016 at 21:34, Wrmaeleun a dit :

+1 pour le retour à l'adolescence ;)

À l'époque, on avait le Minitel (non les jeunes, ce n'est pas un mini iPhone)

Et pour les plus chanceux,  un modem 56k et son abonnement hors de prix...

Vive l'ADSL, ça change tout... On peut même téléphoner en surfant sur le net !!!

Moi mon premier était à 1200bauds :)

  • J'aime 1
Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
  • Sur cette page :   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
  • There was an error loading the RSS feed. Please check your settings and try again.
×
×
  • Créer...