Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - trimarco232

Pages: 1 [2]
16
Bonjour,
pour signaler l'existance d'un mcu à 99% compatible avec l'ATMEGA328P
il a quelques avantages, notamment de fonctionner à 32MHz au lieu de 16MHz, cela peut être très intéressant si vous avez besoin de + de puissance, vitesse sur un nano ou un mini
j'en ai brièvement parlé ici https://forum.arduino.cc/index.php?topic=729831.0
vous y trouverez les liens utiles

17
Bonjour,
pour vous informer qu'après un bref examen du système C/MRI, je me suis rendu compte du fait que mes cartes décrites :
ici https://forum.locoduino.org/index.php?topic=728.0
et ici https://forum.locoduino.org/index.php?board=11.0
présentent une compatibilité certaine C/MRI / JMRI, alors que ce n'était pas prévu au départ

la carte "TCO en mode analogique" a en effet une interface rs485, et 48 sorties sur 74hc595, dont 40 sont dotées de mosfets pour la commande de moteurs peco ; on doit donc pouvoir la faire tourner sous C/MRI avec un minimum d'adaptations, je pense notamment :
- tenir compte du fait que c'est un micro pro (leonardo)
- utiliser la cdu incorporée, ce qui demande d'attendre la recharge de la capa avant la prochaine commande d'aiguille ; sur la carte ça se fait en mesurant la tension aux bornes de la capa par diviseur de tension et une entrée adc de l'arduino

il n'y a pas de registre à décalage pour lire des entrées, mais avec un peu de code on peut par exemple utiliser l'i2c et des modules mcp23018


la carte "8 relais à 74HC595" peut être commandée par un arduino 'par exemple un nano muni d'une interface rs485, qui peut donc commander 6 cartes à 8 relais
on pourait-même raccorder les cartes "8 relais à 74HC595" à une carte "TCO en mode analogique", (comme c'est prévu "chez moi"), mais ce serait moins léger au niveau au niveau de la programmation


18
Shields et Modules / carte 8 relais à 74HC595
« le: mars 03, 2020, 07:37:00 pm »
Bonjour,
abondance de biens ne nuisant pas, je vous propose cette carte destinée à alimenter (ou pas) les zones d'arrêt d'un réseau analogique


les points particuliers sont :
- alim en 5V, y compris les relais pour simplifier
- seul le contact travail est sorti, il peut avoir pour origine au choix le rail de gauche ou de droite, par pont de soudure
- registre 74HC595 pour simplifier le câblage et permettre le chaînage de plusieurs modules
- ULN2803 pour simplifier la vie
- pas de LED ni d'optocoupleur

19
Le logiciel DCC++ / DCC++ avec ESP32 ?
« le: octobre 05, 2019, 08:08:01 pm »
Bonjour,
juste pour vous dire que j'ai écrit un bout de code qui pourrait servir de petit début à une station dcc animée par un esp32

le but est de générer des bits 0 et 1 en dcc, selon un principe proche de celui utilisé pour dcc++

explication :
un bit dcc ressemble à une période pwm, dont la durée est 200µs pour le bit 0 et 116µs pour le bit 1, le rapport cyclique étant dans tous les cas 1/2 ... simple ...
il faut donc après l'émission de chaque bit dcc, générer une interruption au service de laquelle on indiquera au timer la prochaine période à respecter : si la valeur du bit dcc change, on rentre la nouvelle période (200 ou 116µs) ; si la valeur du bit dcc ne change pas, il n'y a rien à faire /// dans tous les cas on dispose de 58µs pour rentrer la nouvelle période, un éternité pour l'esp32

auparavant il faut configurer un canal de timer :
- en pwm
- avec un rapport cyclique de 1/2
- pour qu'une interruption se déclenche à la fin de chaque période

concrètement :
(je suis loin d'être un pro du soft, je me suis débrouillé avec des fonctions dénichées dans le sdk, on peut sûrement faire mieux)

on commence par les déclarations :
// on utilise un module qui s'appelle ledc ... selon la tradition esp32 les modules pwm servent d'abord aux leds ...
#include "driver/ledc.h" // les fonctions spécifiques sont décrites ici

const int dcc_pin = 19;  // choix de la broche dcc out : n'importe laquelle peut être utilisée /// en se servant de la matrice du gpio

// setting PWM properties
#define dcc_sig_1_freq 8621 // le sdk demande la fréquence : celle-ci correspond à ~116µs ... quelque chose arrondira à la valeur exacte
#define dcc_sig_0_freq 5000 // 200µs (ici j'utilise des macros pour définir ces constantes)
const int dcc_pin_channel = 0; // il y a foison de canaux pwm, j'ai choisi le 1er
const int dcc_sig_resolution = 1; // nombre de bits définissant la résolution du pwm ; ici un seul bit (2 valeurs différentes) suffit
/// la résolution, c'est la granulométrie du rapport cyclique : la + grosse (ne) permet (que) de faire du 50%
const int dcc_sig_duty = 1; // pour le rapport cyclique de 1/2 il faut la valeur 1 (si non c'est 0 ... )
// initialisation de la variable au bit dcc 0 ; why not ; noter que la fonction utilisatrice veut le type uint32_t pour la fréquence
uint32_t dcc_sig_freq = dcc_sig_0_freq;

et voici le setup :
void setup() {
  // configuration du canal pwm 0 avec une fréquence et la résolution
  ledcSetup(dcc_pin_channel, dcc_sig_freq, dcc_sig_resolution); // ledc les faire ...
  // relie le canal pwm à la pin choisie pour la sortie pwm /// ... et dcc par conséquent
  ledcAttachPin(dcc_pin, dcc_pin_channel); /// ! pour détacher (si besoin), il faut impérativement passer par la matrice gpio
  // fixe le rapport cyclique du canal à 1/2
  ledcWrite(dcc_pin_channel, dcc_sig_duty);
  // programme l'interruption à la fin de la période
// je n'ai pas trouvé de manière élégante pour le faire avec le timer, alors je me suis rabattu pragmatiquement sur une interruption provoquée ... par le basculement de la pin
  attachInterrupt(dcc_pin, dcc_sig_isr, RISING); // l'interruption "dcc_sig_isr" provoquée à la fin de chaque période (voire au début de la suivante)
}

et l'isr :
pour vérifier le fonctionnement je génère une suite de 0/1/0/1 ad lib
il faudra adapter pour dcc++
void dcc_sig_isr() {
  if (dcc_sig_freq == dcc_sig_0_freq) dcc_sig_freq = dcc_sig_1_freq ; // inverse la valeur du bit dcc précédent
  else dcc_sig_freq = dcc_sig_0_freq ;
// la fonction qui permet d'écrire la nouvelle fréquence demande :
// - le mode : ici high speed, (au pif) qui va bien
// - le timer utilisé : j'ai supposé bêtement que le canal pwm 0 correspond au timer pwm 0 /// je crois qu'il y a 2 canaux par timer
// - la fréquence, of course
  // ledc_set_freq(ledc_mode_tspeed_mode, ledc_timer_ttimer_num, uint32_t freq_hz)
  ledc_set_freq(LEDC_HIGH_SPEED_MODE, LEDC_TIMER_0, dcc_sig_freq); // new -or not - period value
}

pour ceux qui veulent vérifier, un petit main qui fait travailler l'esp32 :
void loop() {
  delay(10); // mettez ici ce que vous voudrez
}


les mesures réalisées donnent des résultats très corrects : il manque parfois 41ns à une période. Peut-être mon modeste matériel, en tous cas, je n'ai pas les moyens d'en trouver la cause, et on est de toute façon largement dans les clous


 

 

20
Shields et Modules / TCO en mode analogique, avec pcb
« le: mars 02, 2019, 08:43:24 pm »

Bonjour,

ce projet fait suite à un besoin particulier, pour la réalisation de 4 (au minimum) postes d'aiguillages en H0, 2 sont équipés de moteurs d'aiguille peco, les 2 autres de moteurs mtb. Le mode est analogique, mais c'est évidemment compatible avec une commande des trains en dcc ou autre

afin de ne pas encombrer avec un sujet qui par sa nature suscite relativement peu d'intérêt, je ne ne donne que quelques éléments ici. Les personnes souhaitant voir + de détails peuvent consulter le blog dédié

je ne suis pas un spécialiste de l'arduino, mais agissant au sein d'un club de mf, ce choix s'est imposé pour que le projet soit accessible au + grand nombre

les tco assurent la prise en compte de boutons poussoirs d'itinéraires, ainsi que l'affichage des voyants leds indiquant les itinéraires formés et les positions des aiguilles. Il n'y a pas de rétrosignalisation de la fin de course, on admet que la commande envoyée a fonctionné, ni de rétrosignalisation de l'occupation des voies. La commande et la sécurité sont de la responsabilité des opérateurs

une carte avec circuit imprimé (pcb) est réalisée pour la partie commande des aiguilles. Les composants sont majoritairement des cms, toutefois très faciles à souder : SO à pas de 1.27mm pour les CI, taille mini 1206 ou SMA pour les 2 pattes
-> mais l'ensemble pourrait très bien être construit avec des modules tout faits du commerce

les synoptiques :
tco pour mtb :



tco pour peco : (la partie purement tco est identique)



les vues 3d des cartes :
(un air de famille avec la Carte 24 entrées 48 sorties pour JMRI)
pcb pour mtb :
voir pj


pcb pour peco :
voir pj


(les méthodes pour insérer des images sont toutes simples : copier l'adresse de l'image après enregistrement, puis modifier, puis coller l'adresse dans la balise img)

prochainement :
photo d'un tco
ultérieurement car j'attends des composants :
photos d'un pcb terminé



* mise en place des images par Dominique  ::)
-> merci, je tacherai la prochaine fois

Pages: 1 [2]