Problèmes d'encodeur EC11

LamiRene:
Je viens de réussir une première communication I2C entre Arduino Mega et Nano en mode « Master Reader » pour la lecture de l'état d'un bouton pression. C'est d'une grande simplicité !

Est-ce que nous pouvons communiquer par un autre format que par « char » de l'exemple de base, car j'ai eu de la difficulté avec ce format au lieu de binaire et j'ai horreur de triturer les données pour les faire passer par un trou de souris ?

Merci de m'avoir mis sur la piste de l'I2C !

Bonjour
Attention à une chose avec ta demarche : I²C ou pas , si tu confie toujour le decodage des A/B à ton MCU (etats des contacts)
tu ne fait que complexifier le/ton probleme, tu reste tributaire de ton temps de boucle (et meme tu l'amplifie par la gestion I²C de simple lecture des contacts)

La solution I²C n'est In fine viable que si tu recupere de la maniere la plus concise les valeurs de compteurs ayant changés.

Bonjour Artouste,

Merci pour l'avertissement !

J'avais pensé à demander à chaque boucle de la « loop () » un compteur (format : byte) par encodeur, depuis la dernière demande du Mega, donc peu importe le temps d'une « loop () ».

Le compteur serait le nombre de pas de l'encodeur. Ce chiffre pouvant être 0 et pouvant aller jusqu'à 255.

Et l'ordre du compteur correspondrait au numéro de l'encodeur.

Alors si j'ai 9 encodeurs sur la carte Nano, il me retournera 9 * un octet « byte », et il remettra ses compteurs à 0.

Est-ce correct ?

Merci encore !

L'ami René

LamiRene:
Merci pour l'avertissement !

J'avais pensé à demander à chaque boucle de la « loop () » un compteur (format : byte) par encodeur, depuis la dernière demande du Mega, donc peu importe le temps d'une « loop () ».

Le compteur serait le nombre de pas de l'encodeur. Ce chiffre pouvant être 0 et pouvant aller jusqu'à 255.

Et l'ordre du compteur correspondrait au numéro de l'encodeur.

Alors si j'ai 9 encodeurs sur la carte Nano, il me retournera 9 * un octet « byte », et il remettra ses compteurs à 0.

perso et rapide reflexion , si je devais faire , je passerais par de la ram I²C (cas du DS1307) evoqué plus haut pour la simplification de programmation.

le MCU dedié encodeur ne faisant qu'ecrire dans une adresse memoire dédiée à son rang (si un byte te suffit c'est encore mieux , mais tu peux etendre la portée) ET generer un flag de mise à jour
avec un octet dédié aux drapeaux et des simples operations bitwise tu peux gerer/verifier 8 encodeurs
si ton octet de flag = 0 il n' a pas eu de MAJ , je passe à autre chose
si ton octet de flag = 1 , le compteur 1 a été mis a jour = à lire la valeur compteur 2 et remettre le bit 1 de l'octet à zero
" " = 2 le compteur 2 " " 2 " "
si ton octet de flag = 5 les compteurs 1 et 3 ont étés mis à jour = agir en consequence bit à bit.
si ton octet de flag = 255 tous les compteurs ont été mis à jour = IDEM

Rebonjour Artouste,

Je note l'exemple et merci !

Les meilleurs résultats que j'ai eus avec les encodeurs étaient en phase de test sans broche d'interruption et prétraitement des signaux. J'ai eu l'impression dans ce cas, que 100 % des changements des valeurs sur mes afficheurs correspondaient aux manipulations que je faisais sur l'encodeur.

Alors, comme le Nano devrait que traiter le signal des encodeurs, il va aussi en faire le prétraitement et ne me retourner que la somme des pas de chaque encodeur, pas la somme des signaux des encodeurs.

J'ai gardé le code source de cette phase de test et je vais le déporter sur le Nano.

Et comme je ne manipule qu'un encodeur à la fois, il ne devrait (le Nano) jamais être débordé de travail.

Donc pour l'avantage du prétraitement du signal, je privilégierais une solution qui permet cette déportation du code source, ce qui n'est pas possible avec le DS1307. Est-ce que je me trompe ?

Merci...

L'ami René

LamiRene:
...
Donc pour l'avantage du prétraitement du signal, je privilégierais une solution qui permet cette déportation du code source, ce qui n'est pas possible avec le DS1307. Est-ce que je me trompe ?

non
l'option RAM DS1307 est/etait dans mon esprit un simple confort de mise ne oeuvre.

si ton/tes "MCU encodeurs" gere lui meme la mise à disposition I²C de la valeurs des compteurs , c'est inutile

Bonjour,

Je viens de recevoir les Tiny (références) :

4 x ATTINY84A-PU

4 x ATTINY85-20PU

4 x ATTINY861A-PU

J'ai téléchargé et installé les bibliothèques suivantes :

Arduino Tiny for 1.0
Arduino Tiny for 1.5

TinyWireM.zip
TinyWireS.zip

Et j'ai réussi à faire faire mon premier Blink par un Tiny (ATTINY85-20PU).

J'utilise sous Linux Kubuntu 14.04 64 bits le paquet des dépôts standards « Arduino 1.0.5+dfsg2-2 », avec ces nouvelles bibliothèques.

Pour passer mon code « Mega_I2C_TinyE_MasterReader », et bien, ça ne passe pas et j'ai besoin de vos lumières.

C'est le même code que « Mega_I2C_NanoE_MasterReader » qui fonctionne bien avec un Nano au lieu d'un Tiny.

Mais les bibliothèques Wire et TinyWireS n'ont pas toutes les mêmes fonctions. Évidemment, « write », je remplace par « send », mais à première vue, pas de « TinyWireS.onRequest » d'un côté et pas de « TinyWireS.available » de l'autre ! Alors, avant de m'arracher les cheveux, je vous sollicite pour résoudre cette situation.

Je suis très loin de ne devoir que changer les numéros des broches.

Toutes formes d'aide sera la bien venue et merci d'avance aux âmes charitables !

L'ami René
P. S. : Tous ces CIs ne sont pas pour le projet cockpit, je prends simplement les devants sur les futurs besoins ou les accidents.

tu as certainement un probleme dans les version des librairies.
ce fil t'aiderai peut etre:
http://forum.arduino.cc/index.php?topic=265217.new%3btopicseen#new

Rebonjour,

J'ai trouvé une de mes sources de problèmes ! J'utilisais des chartes des broches des Tiny84 et Tiny85 erroné et/ou incomplet trouvés ces derniers jours. En voici les liens (donc à ne pas utiliser) :

http://www.ledsandchips.com/upload/cards/attiny.jpg


Voir en pièces jointes.

Il faudrait aviser les gens du premier hyperlien (site anglophone), je me charge de second (francophone) !

Est-ce que vous auriez une charte équivalente, mais qui ne comporte pas d'erreurs ou d'omissions comme ces deux dernières ?

Merci !

L'ami René

La Reference :
www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf
Bonne lecture
Jacques

Bonjour,

Bon, après la découverte des erreurs dans ma documentation sur les Tiny (mon message précédent), soulagement intellectuel de voir que je ne suis pas aussi bête que ça ! Fierté d'avoir surmonté l’embûche et joie de voir mon code source d'échange en i2c entre Mega et Nano fonctionner entre Mega et Tini85 et Tiny84, du fait d'utiliser maintenant les bonnes broches de ces circuits intégrés !

Il me faut maintenant tester l'équivalent avec un ATMEGA328-PU sur planche d'expérimentation, puis, testé les trois types de circuits (Nano, ATMEGA328-PU et Tiny84) avec quelques encodeurs (je pense à 4) pour finalement pouvoir choisir judicieusement quelle CI intégrer à mon projet de cockpit, avant de tout chambouler derrière le cockpit actuel.

Mais, vous, de par vos expériences dans le concret, à ma place, que choisiriez-vous ?

Avez-vous un penchant plus prononcé pour l'une de ces solutions ?

Pour quoi ?

Je suis curieux de vous lire !

Merci pour tout !

L'ami René

JMe87:
La Reference :
www.atmel.com/images/atmel-2586-avr-8-bit-microcontroller-attiny25-attiny45-attiny85_datasheet.pdf
Bonne lecture
Jacques

Bonjour Jacques,

Oui, je sais bien, c'est l'ultime référence, mais c'est en anglais, ça fait 234 pages. Pas pratique au travers des minuscules composantes d'électronique de mon microscopique atelier, qui n'est qu'un bout de table recyclé.

C'est pour cela que je souhaiterais avoir une feuille, une image du type du premier lien « http://www.ledsandchips.com/upload/cards/attiny.jpg », qui fait la corrélation entre les broches des cartes Arduino, des broches des CI ATMEGA328-PU et des broches des CI Tiny85 et Tiny84.

Et j'y pense, je m'y collerais si le logiciel qui a servi à faire ce montage graphique était sous Linux Kubuntu. Alors, connaissez-vous le logiciel qui a servi à ce montage graphique ?

L'ami René

mon avis:

  1. soit tu colle un attiny45/85 derriere chaque codeur,
  2. soit tu mets un 328 pour l'ensemble des codeurs qui te manquerait sur le 2560.

la solution 1 est a previlegier si tu veut un truc modulaire-extensible
la solution 2 est a previlegier si tu veut gerer d'autres chose avec (par exemple les 3 lcd)

la solution 2 a l'avantage d'avoir sa platine UNO pour laquelle tu devrai deja etre familier.

Rebonjour Jean,

Une fois de plus vos recommandations sont très judicieuses et c'est la première fois que le cas des Tiny85 attirent mon attention, je l'est trouvaient trop limité en nombre de broches, mais ici le côté modulaire resurgir plus qu'avant.

Il va vraiment falloir que je réfléchisse bien à tout cela et que je priorise une option ou une autre.

Merci bien !

J'espère que beaucoup d'autres personnes me feront leurs recommandations, la différence d'opinions et de points de vue est une richesse...

L'ami René

LamiRene:
C'est pour cela que je souhaiterais avoir une feuille, une image du type du premier lien
.....
Et j'y pense, je m'y collerais si le logiciel qui a servi à faire ce montage graphique était sous Linux Kubuntu. Alors, connaissez-vous le logiciel qui a servi à ce montage graphique ?

Sous Linux, il y a Inkscape qui permet de faire ça Dessiner en toute liberté | Inkscape. Tu le trouveras dans les dépôts standards.

Bonjour fdufnews,

Merci pour l'info et le lien !

Inkscape est un éditeur de graphismes vectoriels génériques très performants et je pensais plus à un produit spécialisé, du genre Fritzing, mais avec des formats de puce (CI) que l'on place sur une feuille blanche et une liste d'autres icônes que l'on place à côté et que l'on personnalise et relie entre eux.

Mais s'il existait un modèle Inkscape de circuit et brochage que je pourrais recycler. Par exemple, si j'avais le modèle Inkscape d'une seule des puces Tiny ou Uno, avec du copier/coller je m'en sortirais, mais partir de zéro avec Inkscape cela serait trop laborieux.

L'ami René

Bonjour,
les informations de brochage dans la doc Atmel sont sur la page 2, je crois que c'est accessible meme a un Francophone !
Tu peux aussi aller voir ici :

il y a plein d'infos utiles soft et hard.
Jacques

Rene,
pourrais-tu nous dire clairement ce que tu recherches.
Je viens de relires tes quelques derniers messages, c'est du n'importe quoi.
Tu dis qu'il y a des erreurs et omissions sur une documentations d'un site anglophone et tu nous demandes de les en informer sans nous dire de quoi il s'agit.
Tu es parvenu a faire UNE liaison I2C entre UN Tinny85 et un Mega et tu nous demandes un avis. Si tu as besoin de 8 encodeurs supplementaires, il va te plein de Tinny supplementaires et un soft autrement complexe a developper.
Je t'ai dis qu'il existait des I/O Expander faits pour cela. Tout le travail est prepare, il suffit de configurer.
Si tu veux un Micro distant pour lire tes encodeurs, alors choisis un micro 40 pins, par exemple le 644. Supporte par Arduino, il gere tous les encodeurs et discute avec le Mega en I2C. C'est plus facile a mettre en route.
Je trouve que memoriser a distance un certain nombre de clics d'encodeur et envoyer la somme vers le Mega, cela va avoir pour consequence un affichage qui saute des pas. Deconcertant.
Jacques

Bonjour à tous,

Voici l'une des choses dont un débutant comme moi avec un nouveau circuit imprimé (CI) a besoin pour partir avec une puce comme la Tiny84 :

Tyny84
Numéro ----- Dans
de ----------- le ------- Les
Broche ------ code ---- fonctions
physique # -- source -- de la broche
1 ------------- N/A ---- +5V
2 ------------- 0 ------ PB0 (PCINT8/XTAL1/CLKI)
3 ------------- 1 ------ PB1 (PCINT9/XTAL2)
4 ------------- 3 ------ PB3 (PCINT11/RESET/dW)
5 ------------- 2 ------ PB2 (PCINT10/INT0/OC0A/CKOUT)
6 ------------- ? ------ PA7 (PCINT7/ICP/OC0B/ADC7)
7 ------------- 4 ------ PA6 (PCINT6/SDA/MOSI/DI/ADC6)
8 ------------- 5 ------ PA5 (PCINT5/OC1B/MISO/DO/ADC5)
9 ------------- 6 ------ PA4 (PCINT4/T1/SCL/USCK/ADC4)
10 ------------ 7 ------ PA3 (PCINT3/T0/ADC3)
11 ------------- 8 ------ PA2 (PCINT2/AIN1/ADC2)
12 ------------- 9 ------ PA1 (PCINT1/AIN0/ADC1)
13 ------------ 10 ------ PA0 (PCINT0/AREF/ADC0)
14------------- N/A ---- GND

N/A = Non Applicable

Donc, le numéro de la broche physique sur le CI, le nom à utiliser dans le code source pour la désigner et les désignations des fonctions associées à la broche. Exemple, pour utilisé la fonction MOSI de la broche physique # 7, dans le code source Arduino je dois écrire « 4 ».

Malheureusement, c'est avec une démarche essai/erreur sur chaque broche avec le code source Blink.ino et en passant la valeur de la DEL de 0 à 20 et de A0 à A5, que j'ai finalement constitué le tableau qui précède.

J'aurais deux questions :

  1. Dans les codes sources Arduino, quel est le nom ou numéro a utilisé pour la broche physique # 6, car si vous regardez le tableau, je n'ai rien trouvé pour cette broche et il semblerait que ce n'est pas une valeur entre 0 à 20 et de A0 à A5 ?

  2. Comment cela se fait-il que je doive passer par une démarche essai/erreur pour avoir ce genre d'information fondamental pour utiliser un CI (sujet sous-jacent dans nos deniers messages de la présente discussion) ?

Merci d'avance pour votre compréhension et votre aide à un débutent, parfois un peu stupide comme moi ?

L'ami René

???
sur quoi t'est tu basé pour ajouter le support du tiny84 dans l'ide?
il n'y a pas des explications sur le site ou tu as downloadé ?

tu doit avoir dans arduino-1.0.5/hardware/arduino/variants/tiny14/pins_arduino.h
tout ce que t'as besoin

Bonjour Jean,

Merci pour la piste que je devais suivre « /hardware/arduino/variants/tiny14/pins_arduino.h » !

Je n'ai pas cette structure de fichier chez moi, mais en regardant le « README » de l'archive « arduino-tiny-0100-0018 », il est question de :

  • Extract the contents of the archive into the "hardware" folder. For example,
    if the Arduino Sketch folder is...

C:\Projects\Arduino

After extracting, the following files / folders should exist...

C:\Projects\Arduino\hardware\tiny\license.txt
C:\Projects\Arduino\hardware\tiny\Prospective Boards.txt
C:\Projects\Arduino\hardware\tiny\README
C:\Projects\Arduino\hardware\tiny\bootloaders
C:\Projects\Arduino\hardware\tiny\cores\

Donc, chez moi, sous Linux Kubuntu, c'est plus du genre :

Pour Arduino 1.0.5+dfsg2-2 :

/usr/share/arduino/hardware/tiny/cores/tiny

Pour Arduino partagé :

/home/rene/Arduino/libraries/

Pour Arduino 1.0.5 (directement du site arduino.cc) :

/home/rene/sda6/Électroniques/Arduino_Linux_1.0.5/hardware/tiny

Pour Arduino 1.5.7 beta (directement du site arduino.cc) :

/home/rene/sda6/Électroniques/Arduino_Linux_1.5.7/hardware/tiny

Et dans le fichier « ~/Arduino_Linux_1.0.5/hardware/tiny/cores/tiny/pins_arduino.h », c'est du chinois pour moi !

Mais dans le fichier « ~/Arduino_Linux_1.0.5/hardware/tiny/cores/tiny/pins_arduino.c », j'ai trouvé :

#if defined( __AVR_ATtinyX5__ )

// ATMEL ATTINY45 / ARDUINO
//
//                           +-\/-+
//  Ain0       (D  5)  PB5  1|    |8   VCC
//  Ain3       (D  3)  PB3  2|    |7   PB2  (D  2)  INT0  Ain1
//  Ain2       (D  4)  PB4  3|    |6   PB1  (D  1)        pwm1
//                     GND  4|    |5   PB0  (D  0)        pwm0
//                           +----+

...

#if defined( __AVR_ATtinyX4__ )

// ATMEL ATTINY84 / ARDUINO
//
//                           +-\/-+
//                     VCC  1|    |14  GND
//             (D  0)  PB0  2|    |13  AREF (D 10)
//             (D  1)  PB1  3|    |12  PA1  (D  9) 
//                     PB3  4|    |11  PA2  (D  8) 
//  PWM  INT0  (D  2)  PB2  5|    |10  PA3  (D  7) 
//  PWM        (D  3)  PA7  6|    |9   PA4  (D  6) 
//  PWM        (D  4)  PA6  7|    |8   PA5  (D  5)        PWM
//                           +----+

...

#if defined( __AVR_ATtinyX313__ )

// On the Arduino board, digital pins are also used
// for the analog output (software PWM).  Analog input
// pins are a separate set.

// ATMEL ATTINY2313
//
//                   +-\/-+
//      (D 17) PA2  1|    |20  VCC
// RX   (D  0) PD0  2|    |19  PB7 (D  16)
// TX   (D  1) PD1  3|    |18  PB6 (D  15)
//      (D  2) PA1  4|    |17  PB5 (D  14)
//      (D  3) PA0  5|    |16  PB4 (D  13)*
// INT0 (D  4) PD2  6|    |15  PB3 (D  12)*
// INT1 (D  5) PD3  7|    |14  PB2 (D  11)*
//      (D  6) PD4  8|    |13  PB1 (D  10)
//     *(D  7) PD5  9|    |12  PB0 (D  9)
//             GND 10|    |11  PD6 (D  8)
//                   +----+
//
// * indicates PWM port

Et c'est très près de ce que cherche un néophyte francophone comme moi.

Encore Merci !

L'ami René
P.-S. Si à 52 ans un bonhomme vivant au Québec n'est pas devenu bilingue (français, anglais), c'est qu'il y a de bonnes raisons... Alors il faut être réaliste, cela n'est pas dans cette vie-ci que je le deviendrai, à mon grand regret, vous vous en doutez bien !!!