Suivre ce blog
Administration Créer mon blog
21 juin 2015 7 21 /06 /juin /2015 22:03
Cadeau de fête des pères

Cadeau de fête des pères:

Poscope Mega 1 Bundle: oscilloscope 2x20MHz analyseur logique 16 voies :-)

Partager cet article

Published by breizhmakers
commenter cet article
21 mai 2015 4 21 /05 /mai /2015 10:49

Pour des raisons d'économie (d'argent mais aussi et surtout de place) je voulais utiliser un ATMega328P sans quartz externe, en utilisant simplement son oscillateur interne à 8MHz.

 

J'ai cherché un peu comment faire mais je n'ai trouvé aucune doc vraiment claire.

Voici comment faire en détail:

 

Tout d'abord, la majorité des ATMega328P sont pré-configurés pour utiliser un quartz externe, et beaucoup son pré-chargés avec un bootloader compatible Arduino. Certains sont livrés bruts et semble-t-il préconfigurés pour utiliser l'oscillateur interne.

 

Nous allons utiliser l'IDE Arduino et un programmateur ISP ou bien le sketch ArduinoISP (c'est ce que j'ai utilisé).

Il n'existe pas de définition de "board" pour un Uno avec oscillateur interne, nous allons donc la créer. Pour ce faire, il faut commencer par ouvrir avec un éditeur de texte le fichier boards.txt qui se trouve dans le dossier <Arduino_home>\hardware\arduino\avr et y dupliquer l'entrée concernant le Uno pour y apporter les modifications suivantes:

##############################################################


uno_internal_osc.name=Arduino Uno (internal 8 MHz oscillator, prescaler: 8)


uno_internal_osc.vid.0=0x2341
uno_internal_osc.pid.0=0x0043
uno_internal_osc.vid.1=0x2341
uno_internal_osc.pid.1=0x0001
uno_internal_osc.vid.2=0x2A03
uno_internal_osc.pid.2=0x0043


uno_internal_osc.vid.0x2A03.warning=Uncertified


uno_internal_osc.upload.tool=avrdude
uno_internal_osc.upload.protocol=arduino
uno_internal_osc.upload.maximum_size=32256
uno_internal_osc.upload.maximum_data_size=2048
uno_internal_osc.upload.speed=115200


uno_internal_osc.bootloader.tool=avrdude
uno_internal_osc.bootloader.low_fuses=0x62
uno_internal_osc.bootloader.high_fuses=0xDE
uno_internal_osc.bootloader.extended_fuses=0x07
uno_internal_osc.bootloader.unlock_bits=0x3F
uno_internal_osc.bootloader.lock_bits=0x0F
uno_internal_osc.bootloader.file=optiboot/optiboot_atmega328.hex


uno_internal_osc.build.mcu=atmega328p
uno_internal_osc.build.f_cpu=1000000L
uno_internal_osc.build.board=AVR_UNO
uno_internal_osc.build.core=arduino
uno_internal_osc.build.variant=standard

 

Remarquez les points suivants:

  • Le préfixe des entrées de configuration: uno_internal. Il doit être unique pour chaque carte définie.
  • Le nom de l'entrée: Arduino Uno (internal 8 MHz oscillator, prescaler: 8)
  • Les fusibles et en particulier le low_fuses= 0x62 qui indique d'utiliser l'oscillateur interne à 8 MHz avec le prescaler à 8, ce qui fait une horloge CPU à 1 MHz (vous pouvez désactiver le prescaler en utilisant la valeur 0xE2 si vous souhaitez un CPU à 8MHz)
  • La fréquence CPU f_cpu positionnée à 1000000L (à mettre à 8000000L si vous désactivez le prescaler). Cette entrée est importante pour assurer une durée d'exécution correcte des fonctions telles que delay() par exemple.

Changement des fusibles de l'ATMega328P

Le changement des fusibles de l'ATMega328P s'effectue via AVRDude:

Ouvrir une ligne de commande et se placer dans le dossier <Arduino_Home>\\hardware\tools\avr\bin

Afficher les valeurs actuelles des fusibles avec une commande de ce genre (adapter le port COM utilisé):

avrdude -v  -C ..\etc\avrdude.conf -p atmega328 -c STK500v1 -P\\.\COM8\ -b 19200 -n -F

 

AVRDude doit vous répondre entre autres quelque chose comme ceci:

avrdude: safemode: lfuse reads as 62
avrdude: safemode: hfuse reads as DE
avrdude: safemode: efuse reads as 7
avrdude: safemode: Fuses OK (H:07, E:DE, L:62)

 

Il ne reste plus qu'à programmer les fusibles avec les valeurs souhaitées, en l'occurence ceci pour un ATMega328P programmé via ArduinoISP, avec une horloge interne à 8MHz et un prescaler à 8:

avrdude  -C ..\etc\avrdude.conf -p atmega328 -c STK500v1 -P\\.\COM8\ -b 19200  -F -U lfuse:w:0x62:m -U hfuse:w:0xDE:m -U efuse:w:0x07:m

 

Tout ceci peut parraître abscons mais fort heureusement il existe de nombreux outils pour aider à calculer les valeurs des bits des différents fusibles. J'utilise souvent ce site.

 

Téléverser un Sketch dans l'ATMega328P modifié

  • Relancer si nécessaire l'IDE Arduino, charger votre sketch (Blink par exemple, il vous permettra de vérifier facilement que votre ATMega continue de fonctionner sans quartz) et changer le type de carte à "Arduino Uno (internal 8 MHz oscillator, prescaler: 8)"
  • Utiliser votre programmeur favori pour uploader le sketch (j'utilise un autre Arduino comme ISP tel que décrit ici) via le menu "Téléverser avec un programmateur"
  • Débrancher l'alimentation électrique enlever le quartz et rebrancher l'alimentation électrique, votre sketch doit continuer de s'exécuter normalement.
  • Relancer si nécessaire l'IDE Arduino, charger votre sketch (Blink par exemple, il vous permettra de vérifier facilement que votre ATMega continue de fonctionner sans quartz) et changer le type de carte à "Arduino Uno (internal 8 MHz oscillator, prescaler: 8)"
  • Utiliser votre programmeur favori pour uploader le sketch (j'utilise un autre Arduino comme ISP tel que décrit ici) via le menu "Téléverser avec un programmateur"
  • Débrancher l'alimentation électrique enlever le quartz et rebrancher l'alimentation électrique, votre sketch doit continuer de s'exécuter normalement.

Partager cet article

Published by breizhmakers
commenter cet article
28 avril 2015 2 28 /04 /avril /2015 21:28

Votre Arduino Nano V3 Chinois cloné n'est pas reconnu? La solution est ici: https://www.youtube.com/watch?v=SPdSKT6KdF8

Ca m'a sauvé la soirée!

Mon Nano V3 commandé chez dx.com est maintenant parfaitement reconnu sous Windows 7.

Partager cet article

Published by breizhmakers
commenter cet article
24 avril 2015 5 24 /04 /avril /2015 12:30

On m'a récemment confié une horloge de gare de marque Bodet dans le but de la ranimer. Ce type d'horloge dispose d'une sorte de moteur pas à pas qui s'alimente avec des impulsions, au rythme d'une impulsion toute les 30s, chaque impulsion étant de polarité inversée par rapport à la précédente, et d'une durée d'environ 500 ms.

Une recherche avec la référence inscrite sur le moteur de l'horloge m'a permis de trouver que ces impulsions doivent être de 0.9V/65mA aux bornes du moteur. L'impédance du moteur étant de 15 Ohms.

Après avoir fait le tour des solutions disponibles sur le marché, je me suis dit qu'ont peut faire bien moins cher, probablement mieux, et surtout bien plus fun!

Les objectifs fixés sont:

  • Faible coût
  • Alimentation 9V (requis pour piloter l'horloge)
  • Application automatique des changements d'heure.
  • Très bonne stabilité de l'horloge (2 ppm soit environ 1 minute/an)
  • Interrupteur Marche/Arrêt
  • Interrupteur de mise en mode avance rapide pour mise à l'heure.

Le micro-contrôleur:

J'avais initialement pensé à un ATTiny 85 pour contrôler le tout, mais malheureusement il me manque une broche.

J'ai voulu essayer l'ATTiny 2313 mais il est difficilement trouvable chez mes fournisseurs habituels, alors j'ai finalement opté pour le bon vieil ATMega328P, en mode horloge interne à 1 MHz, c'est déjà très largement surdimensionné pour la tâche, mais à 3 Euros à peine le circuit ça ne vaut pas la peine de s'en priver.

Le pilotage du moteur:

Le moteur de l'horloge est piloté par un pont en H de type SN 754410.

L'horloge RTC:

Et pour avoir une grande stabilité j'utilise une horloge RTC thermo-compensée de type DS3231.

Je n'ai pas besoin de lire l'heure car tout ce que je peux envoyer au moteur de l'horloge sont une série d'impulsions pour faire avancer les aiguilles, mais je vais quand même me servir de l'heure dans l'horloge RTC pour savoir quand changer d'heure.

Le choix du DS3231 s'explique aussi par le fait qu'il a un générateur d'impulsions programmable.

Je vais le programmer pour générer des impulsions à la fréquence de 1Hz, qui vont me servir à réveiller l'ATMega qui entre chaque impulsion sera dans un état de sommeil profond pour peu consommer (sleep-mode POWER_OFF).

Changement d'heure:

Quant au changement d'heure, eh bien j'ai déjà une fonction qui me calcule l'offset en minutes à appliquer à l'heure UTC pour obtenir l'heure locale. Je vais utiliser les variations de cet offset pour savoir quand changer d'heure.

Et pour appliquer le changement d'heure à une horloge qui ne peut aller que dans un seul sens par pas de 30s je vais simplement mettre l'horloge en marche "rapide" pour avancer d'une heure, et la mettre en pause pendant 1h pour retarder d'1h. Simple non ;)

Je vais aussi y ajouter un port ICSP pour pouvoir la reprogrammer facilement si nécessaire.

Schéma (sans le port ICSP):

Schéma

Schéma

Vue Breadboard de Fritzing du premier PoC

Vue Breadboard de Fritzing du premier PoC

Le PoC (Proof of Concept) est fonctionnel.

.

Et comme je suis sympa le code et le schéma sont disponibles sous Licence GPL sur GitHub.

PoC du circuit de commande de l'horloge Bodet

PoC du circuit de commande de l'horloge Bodet

Partager cet article

Published by breizhmakers - dans HorlogeBodet
commenter cet article
1 septembre 2014 1 01 /09 /septembre /2014 11:43

L'horloge Chinoise V2 est maintenant chez sa nouvelle propriétaire: au restaurant le Tanghulu, 21 rue de Redon à Rennes. Un authentique restaurant Chinois que je vous recommande vivement!

horloge_livree.jpg

Encore merci à toi Jean-Marie pour l'aide que tu m'as apportée dans la réalisation du circuit imprimé!

Partager cet article

Published by breizhmakers - dans horloge v2
commenter cet article
16 juillet 2014 3 16 /07 /juillet /2014 22:18

J'ai enfin un peu de temps à consacrer à l'horloge!

Ce soir c'était verification du circuit imprimé et soudure des différents connecteurs.

Y'a plus qu'à essayer tout ça très bientôt:

 

cibiao2 20140716 220911

 

Le cicuit sur la breadboard est le circuit d'alimentation et de détection de niveau bas d'un système d'arrosage automatique de plantes de bureau :)

Partager cet article

Published by breizhmakers - dans horloge v2
commenter cet article
16 juin 2014 1 16 /06 /juin /2014 20:13

Cette année encore pour la fête des pères, c'est moi qui ait choisi mon cadeau .

Ca faisait longtemps que j'avais envie d'un Dremmel, c'est chose faite depuis ce week-end:

dremmel

Entre temps vendredi midi je suis passé au labfab de Rennes pour utiliser leur perceuse à colonne pour percer le circuit de l'horloge.

J'en vois enfin le bout! Pas facile de jongler entre tous mes projets de bricolage, et les travaux de la maison.

Voilà ma future pièce à musique/bricolage électronique, y'a un peu de boulot pour aménager ça cet été (je ne fais que l'électricité et les finitions):

pieceAZic.jpg

 

Partager cet article

Published by breizhmakers - dans horloge v2
commenter cet article
7 juin 2014 6 07 /06 /juin /2014 10:49

Ceux qui souhaiteraient avoir mon horloge Chinoise en fond d'écran animé sur Android peuvent désormais l'avoir gratuitement ici: https://play.google.com/store/apps/details?id=cibiao.cibiao

 

J'en aurait bien fait une version pour iOS mais je suis réticent à l'idée de devoir acheter un Mac et payer 100$/an de licence développeur...mais si quelqu'un m'offre un Mac je promets de faie un effort .

Partager cet article

Published by breizhmakers - dans horloge v2
commenter cet article
10 mai 2014 6 10 /05 /mai /2014 22:29

Ca y est, après plus de 2 mois et au moins une dizaine de tentatives j'ai enfin réussi à peindre un cadran correctement!

Cette fois j'ai d'abord imprimé en jet d'encre et aplat noir sur un transpartent pour impression jet d'encre et laser, puis j'ai colorié au posca la face pour impression laser.

C'est ce qui donne le meilleur résultat, mais la face imprimée en jet d'encre reste toujours un peu collante et attrappe la poussière et les trace de doigts. Et elle est même restée collée sur un calque de protection...ruinant 4h de peinture...

Je crois que je vais devoir peindre les alvéoles en noir, ça bave un peu trop entre les cellules à travers le carton de boîte à chaussure.

Sinon tout fonctionne après une après-midi de mise au point pour adapter le code à l'utilisation de l'horloge DS3234 et quelques erreurs de câblage diverses.

Reste à câbler le détecteur de présence, les boutons et améliorer le système de contrôle de la luminosité.

Après va falloir intégrer tout dans le boitier et percer et souder le circuit imprimé.

Y'a encore un peu de boulot!

ciBiao2

Partager cet article

Published by breizhmakers - dans horloge v2
commenter cet article
28 février 2014 5 28 /02 /février /2014 14:21

Il m'a fallu quelques heures pour coller les cellules de la matrice de LED ainsi que le feutre qui évitera des fuites de lumière:

matrice avant

 

Le câblage de la matrice a en revanche été plus rapide. Mais ces LED sont bizarrement faites: la partie massive est reliée à l'anode! Le méplat est bien du côté cathode, lui. Heureusement que j'ai vérifié dès la première LED posée.

Les branchements sont testés, c'est bien en cathodes communes :) J'ai vérifié plusieurs fois tellement le brochage de ces LED m'a surpris.

matrice arrière

 

Je dois recommencer la peinture du cadran suite à un problème d'accrochage de la peinture sur le transparent.

C'est vraiment l'étape la plus longue et la plus pénible.

Partager cet article

Published by breizhmakers - dans horloge v2
commenter cet article