chercheursduvrai.fr
To view this board in english, you must be registered.

Pages: (5) 1 2 [3] 4 5  ( Aller vers premier message non lu ) Reply to this topicStart new topicStart Poll

> BlueDragon joue avec Arduino / RaspBerry
Ecrit le: Lundi 07 Octobre 2013 à 21h09 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 2064
Membre n°: 275
Inscrit le: 11/06/2007



Citation (BlueDragon @ Lundi 07 Octobre 2013 à 21h51)
Je suis chaud pour le monter ton ampli Apoc, encore me faut-il les schémas, les pcb, les valeurs des composants, les types, etc icon_smile.gif
PMEmail Poster
Top
Ecrit le: Lundi 07 Octobre 2013 à 21h14 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Ah yes c'est celui là ! trop bien ! vais pouvoir l'utiliser quand je ferais mes essais, j'ai hâte.

Bon j'en ai jamais monté de ma vie, mais il n'est pas trop tard (tôt ?) wink.png


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mardi 08 Octobre 2013 à 13h14 Posted since your last visit
Quote Post


Administrateur
******

Groupe: Administrateurs
Messages: 5756
Membre n°: 1
Inscrit le: 04/08/2002



Citation ( BlueDragon @ Lundi 07 Octobre 2013 à 22h14)
Ah yes c'est celui là ! trop bien ! vais pouvoir l'utiliser quand je ferais mes essais, j'ai hâte.

Bon j'en ai jamais monté de ma vie, mais il n'est pas trop tard (tôt ?) wink.png

Pour être précis c'est celui là:
http://zedico.info/Extraits_Publics/Cherch...MPLI_1_WATT.pdf

Mais moi je ne sais pas faire de circuit imprimé; je travaille sur piste à trous; il faut trouver des magasins qui font ça et envoient par internet.


Et il faut que tu travailles avec 13,8V d'entrée. Déjà je souhaite de mon côté travailler avec 9V (piles en parallèle) car le 12V fait chauffer l'Arduino (donc perte de puissance rapide par échauffement, je cherche un truc qui consomme peu dans le temps).


--------------------
"L’homme sage n’est pas comme un vase ou un instrument qui n’a qu’un usage ; il est apte à tout."
"Appliquez-vous à garder en toute chose le juste milieu."
Confucius
PM
Top
Ecrit le: Mardi 08 Octobre 2013 à 13h22 Posted since your last visit
Quote Post


Administrateur
******

Groupe: Administrateurs
Messages: 5756
Membre n°: 1
Inscrit le: 04/08/2002



Citation (Obelix @ Lundi 07 Octobre 2013 à 19h16)
http://www.ebay.fr/itm/Ramsey-LPA1C-Broadb...t-/360283780147

Comme je te l'ai dit j'ai un Ramsey depuis quelques années.

Soit la tension était trop faible pour amplifier:
https://www.chercheursduvrai.fr/forum/in...indpost&p=18145

Soit trop forte pour l'utiliser en théorie mais trop faible sur le cas concret pratique, complètement déjanté cet appareil, il ne fait rien de ce qu'il doit faire:
https://www.chercheursduvrai.fr/forum/in...indpost&p=19482

En ce qui me concerne il ne m'a jamais donné satisfaction, outre le fait d'être non transportable facilement et devant nécessiter plein de cablages variés en BNC, alimentation, etc.

Il est bien pour les radio amateur, c'est de la puissance qu'il faut pour leurs tests, pas pour nos montages en terme de spécifs.


--------------------
"L’homme sage n’est pas comme un vase ou un instrument qui n’a qu’un usage ; il est apte à tout."
"Appliquez-vous à garder en toute chose le juste milieu."
Confucius
PM
Top
Ecrit le: Mardi 08 Octobre 2013 à 14h34 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Citation (Chercheur @ Mardi 08 Octobre 2013 à 13h14)
Et il faut que tu travailles avec 13,8V d'entrée.

13.8V ? euh, là je les aurais pas c'est certain.
Je peux sortir du 12v, 9v, 5v et 3.3v le tout régulé à partir de la batterie de moto (même si elle n'est qu'à 10V), mais par contre du 13.8v je peux pas.


Seul moyen ça serait de faire un transfo sur torre je pense. et encore, c'est pas alternatif donc ça marchera pas, faudrait générer du 12v 50hz pour pouvoir le faire simplement....pfff qu'elle galère, je vais voir avec APOC.


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mercredi 09 Octobre 2013 à 20h51 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Hello,

Suite à discussion par téléphone avec APOC hier, ce dernier me confirme que l'ampli fonctionne bien avec du 12V. Le préampli, au lieu de sortir du 1W sortira environs du 800mW mais le travail est là.

Il convient parfaitement pour les fréquences que nous employons. Ce petit message pour confirmer que cet ampli peut répondre au besoin.

Note : je parle de l'ampli d'APOC qui est constitué d'un préampli qui sort du 1W et est suivi par un ampli qui peut sortir du 5W sans problème.

Voilà pour les infos,
Dragon


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mercredi 09 Octobre 2013 à 20h56 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Dans le cadre du projet Aether-Metre, et parcequ'il me sera utile pour toutes les experiences à venir (de par sa large bande passante), je viens de me doter d'un wattmetre :

http://www.ebay.fr/itm/Tos-wattmetre-K-PO-...=item1c30864bfc

Il s'agit du KPO CN-600 que l'on trouve sur Ebay à 93€ (FDP inclus).
il permet d'afficher le VSWR, la puissance directe et réfléchie sur une gamme de fréquence allant de 1,8Mhz à 525Mhz, pour des puissances de 30W, 300W, 600W et 3KW. Impédance en 50Ohm (standard quoi).

Merci à Apoc : ne pas oublier les résistances fictives pour boucler un circuit en test (dans le cas du test d'un ampli par exemple). Ces resistances doivent être non inductives (je me suis procurée deux résistances de 100Ohm 60W +/-1% que je mettrai en parallèle, ce qui me permettra de tester des ampli débitant jusqu'à 120W grand maximum....j'ai donc de la marge icon_smile.gif )

Voilou !


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Jeudi 10 Octobre 2013 à 07h41 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1561
Membre n°: 10313
Inscrit le: 11/03/2013



Bien et pas cher ! icon_wink.gif
faudrait que je potasse un peu comment dans le principe on mesure ces histoires de puissance directe et réfléchie...
PM
Top
Ecrit le: Vendredi 11 Octobre 2013 à 20h21 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Hello,

En attendant l'arrivée de mon DDS je travaille actuellement sur l'implémentation des boutons, et du futur encodeur.

user posted image

On retrouve à l'habitude dans mon montage le level shifter I2C qui permet la communication I2C entre les appareils à tension 5.5v (Arduino, MCP23008) et le raspberry.

Actuellement, j'étudie la puce MCP23008 qui peut se brancher sur un bus I2C et accepter jusqu'à 8 boutons en entrées (ou 8 sorties pilotable en 5v). Cette puce dispose d'une broche interessante qui est une broche d'interruption : ainsi lorsqu'une patte du GPIO de la puce est configurée en entrée, et qu'un signal haut est détecté, alors la puce génère une interruption sur la patte d'interruption (INT).

A quoi ça sert ?

Sous arduino, nous avons deux moyens de savoir si un bouton a été préssé :

Le premier moyen est de faire une boucle qui vient lire l'état d'une broche, et doit détecter qu'une broche est à l'état haut. Si la boucle n'est pas assez rapide, alors l'arduino ne lira pas la pression de la touche (car relâchée trop vite par l'utilisateur) et celà peut donner l'impression que la touche ne répond pas. Si cette solution est viable pour très peu de boutons, elle ne l'est plus lorsque l'arduino travaille déjà en mode interruption avec le port serie pour le Debug ou le bus I2C (la boucle de lecture étant stoppée le temps que l'arduino traite les instructions du port série ou de l'I2C).

Le second moyen est de configurer l'arduino pour qu'il déclenche une interruption sur le changement d'état d'une de ses broches. Ce moyen est très efficace car il oblige l'arduino à traiter l'interruption lorsque le bouton est préssé : l'effet de LAG pour l'utilisateur disparait. Cependant, le problème est qu'il faut faire celà pour tous les boutons qui arrivent sur les pattes de l'arduino, ce qui devient vite très lourd à programmer et à configurer.

Le moyen que j'étudies ici est de faire appel à un "proxy" (ie : un intermédiaire) qui va sauvegarder quelle patte est passée à l'état haut (celle ou un bouton a été appuyée) et déclenche une interruption sur une seule et même patte de l'arduino. Le gain est triple : côté programmation, celà allège fortement le code, côté utilisateur, pas d'effet de LAG, et côté câblage : 1 seule entrée à utiliser sur l'arduino. Les données peuvent ensuite être récupérées via une interrogation de la puce par I2C.

je vais donc étudier le sujet d'un peu plus près, produire mon code arduino et je vous dirais si ça vaut le coup. Le sujet est lié à mon IHM pour mon Aether-Metre et mes futurs projets : Le DDS sera pilotable via 4 boutons et un encodeur rotatif, et cette puce permet de me simplifier la vie.

Wait & see icon_smile.gif


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mardi 15 Octobre 2013 à 21h47 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Bon quelques news de mes déboires avec le MCP23008.

Donc j'arrive bien à communiquer avec via le bus I2C,
J'arrive à configurer les registres et à lire les registre,
par contre impossible de faire fonctionner correctement le bestiaud.

En soit deux choses :

1 - mêmes sans rien faire la sortie INT passe à l'état haut (pattes d'entrées reliées à rien)
2 - lorsque je lis le registre INTCAP j'ai pas l'impression qu'il fasse un reset du registre INTF

En soit j'en perd mon latin.... je devient maboule.
ça fait deux jours que je suis dessus et j'en suis à vérifier tout point par point, c'est un truc de fou, première fois que je me prends autant la tête !

Je vous en dirai plus dans les jours à venir.
Si quelqu'un a réellement mis les doigts dans un MCP23008 (sans me sortir la librairie d'adafruit qui ne gère pas les interruptions ^^) je suis preneur !

Ah vi, j'ai fusillé un MCP23008 en reliant une de ses broches à la masse après un reset => ces derniers sont automatiquements placées en sorties actives juste après le reset. Mon fusible général de 1A à pété, mais pas assez vite pour éviter de crâmer la puce :/ Heureusement j'en ai un peu d'avance


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mercredi 16 Octobre 2013 à 07h51 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1247
Membre n°: 303
Inscrit le: 15/06/2007



Citation (Chercheur @ Mardi 08 Octobre 2013 à 12h14)
Citation (BlueDragon @ Lundi 07 Octobre 2013 à 22h14)
Ah yes c'est celui là ! trop bien ! vais pouvoir l'utiliser quand je ferais mes essais, j'ai hâte.

Bon j'en ai jamais monté de ma vie, mais il n'est pas trop tard (tôt ?) wink.png

Pour être précis c'est celui là:
http://zedico.info/Extraits_Publics/Cherch...MPLI_1_WATT.pdf

Mais moi je ne sais pas faire de circuit imprimé; je travaille sur piste à trous; il faut trouver des magasins qui font ça et envoient par internet.


Et il faut que tu travailles avec 13,8V d'entrée. Déjà je souhaite de mon côté travailler avec 9V (piles en parallèle) car le 12V fait chauffer l'Arduino (donc perte de puissance rapide par échauffement, je cherche un truc qui consomme peu dans le temps).

Chercheur, il faudra que je te donne le mode d' emploie pour faire tes circuits imprimés . Maintenant d'une facilite déconcertante .Avec un petit logiciel gratuit qui fait 1,5 méga il me semble.Ou je peux t'envoyer la réponse que j'ai donné a Blue Dragon .... au choix.
Après tu peux la mettre sur le forum ..... Il y a du pain sur la planche en info pratique .....Bonne journée a vous
PMEmail Poster
Top
Ecrit le: Mercredi 16 Octobre 2013 à 10h00 Posted since your last visit
Quote Post


Administrateur
******

Groupe: Administrateurs
Messages: 5756
Membre n°: 1
Inscrit le: 04/08/2002



Citation (Apoc @ Mercredi 16 Octobre 2013 à 08h51)
Chercheur, il faudra que je te donne le mode d' emploie pour faire tes circuits imprimés . Maintenant d'une facilite déconcertante .Avec un petit logiciel gratuit qui fait 1,5 méga il me semble.Ou je peux t'envoyer la réponse que j'ai donné a Blue Dragon .... au choix.
Après tu peux la mettre sur le forum ..... Il y a du pain sur la planche en info pratique .....Bonne journée a vous

Je prends volontiers et t'en remercie par avance, et on peut créer un sujet là-dessus pour ceux qui sont intéressés. Il me faut aussi de quoi faire la réalisatiion physique: matériel insoleuse de base que je n'ai pas ou adresse de société qui le fait à distance à bon prix pour envoi ensuite (avec l'image du routage effectué par nos soins grâce à tes infos)


--------------------
"L’homme sage n’est pas comme un vase ou un instrument qui n’a qu’un usage ; il est apte à tout."
"Appliquez-vous à garder en toute chose le juste milieu."
Confucius
PM
Top
Ecrit le: Mercredi 16 Octobre 2013 à 10h22 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Avec la méthode d'APOC, fini les insoleuses et les graveuses icon_smile.gif
Vive l'huile de coude ^_^


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mercredi 16 Octobre 2013 à 12h06 Posted since your last visit
Quote Post


Administrateur
******

Groupe: Administrateurs
Messages: 5756
Membre n°: 1
Inscrit le: 04/08/2002



Quand APOC m'envoie ça je remets ici, sinon tu peux le poster si tu veux Bluedragon, puisqu'il nous dit qu'il te l'a envoyé; merci dans tous les cas icon_smile.gif


--------------------
"L’homme sage n’est pas comme un vase ou un instrument qui n’a qu’un usage ; il est apte à tout."
"Appliquez-vous à garder en toute chose le juste milieu."
Confucius
PM
Top
Ecrit le: Mercredi 16 Octobre 2013 à 13h19 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Yep, je peux pas poster ce que m'a envoyé APOC tel quel, donc je ferais un article sur le sujet et épinglé dans les recherches expérimentales.


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
  Ecrit le: Samedi 19 Octobre 2013 à 08h38 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Hello,

Quelques nouvelles concernant ma commande chinoise : je suis déçu.
Commande passée le 24 Septembre 2013, nous sommes le 19 Octobre 2013 et le colis n'a été envoyé que le 11 Octobre 2013.

Deux points positifs toutefois :
1- La personne de Eileen répond aux mails, et pour des chinois c'est plutôt positif, même si la communication a un peu de mal à s'établir entre ce que je souhaiterai et ce qu'on me fournit
2- Un tracking number qui permet de suivre là où est le colis

Item No: RF170651482SG
Despatch No.: 4948
Beat No.: -

Status Date Status Description
11-10-2013 Information Received (This is not an acknowledgment of the physical receipt of the stated Registered Article)
15-10-2013 Despatched to overseas (Country code: FR)
17-10-2013 Arrived at overseas (Country code: FR)

Nos diverses communications (à commencer par en bas) :

Dear Sebastien,

Sorry for reply you so late.

I just ask our warehouse about your order, i am so sorry for you.
Our warehouse forgot to send your first package seperately, then send your all items in one package.

I am really sorry about this, i told them ship other items first, maybe they have a lot of packages need to be deal, then they forgot
and today they just inform me, i am really sorry about this.

Regards,
Eileen

============================

Dear friend,

Thanks for your e-mail.

We have shipped your package, here is the tracking number: RF170651482SG
You can track it here: http://www.singpost.com/index.php?quickTool=TrackItem#Quick

Sorry for informing you so late.

Regards,
eileen

==============================

Hello Eileen,

Got some news about the second part ?
Can you provide me the tracking number of the first part please ?

Have a nice day,
Kingest regards,

============================

Dear Sebastien .

Thanks for your support.

After we send the second part, then we will inform you.

Hope you could get it early.

Regards,
Eileen

=============================

Dear eileen,

Thank you for your response and disponibility.
To be sure to understand :

- you've already sent the first par of the order (the LCD, AD9850, etc.) (have you the shipment date so that i could know approximately when the shipment arrive at destination)
- you will inform me when you'll send the second part of the order (a second shipment with the items listed [dupond wire and connectics])

Because English is not my native language, i want to be sure to understand the situation.
Many thanks for your disponibility, and hope you opportunities and profits in this year.

Kingest Regards,


============================

Dear Sebastien,

Thanks for your e-mail.

It is ok, we will change that items for you.
About the gift, we will send it with your order.

After we send it, we will inform you.

Thanks for your understanding.

Regards,
eileen
============================

Hello eileen,

Thanks for your reply.

it's a bit disappointing for the AD9851 DDS :/
On my ordre i've paid it $38.74 (x2)
Can you replace this item (AD9851 DDS) by these items :

100pcs 2.54mm Dupont Head 8P 1x8P Dupont Plastic Shell Pin Head (quantity = 1)
100pcs 2.54mm Dupont Head 6P 1x6P Dupont Plastic Shell Pin Head (quantity = 1)
100pcs 2.54mm Dupont Head 4P 1x4P Dupont Plastic Shell Pin Head (quantity = 1)
100pcs 2.54mm Dupont Head 3P 1x3P Dupont Plastic Shell Pin Head (quantity = 1)
100pcs 2.54mm Dupont Head 2P 1x2P Dupont Plastic Shell Pin Head (quantity = 1)
100pcs 2.54mm Dupont Head 1P 1x1P Dupont Plastic Shell Pin Head (quantity = 1)
100pcs 2.54mm Male Pins Long Dupont Head Reed (quantity = 1)
100pcs 2.54mm Female Pins Long Dupont Head Reed (quantity = 9)

Total: $38.30
Then add a free gift and all be good for me icon_smile.gif
Are you ok with this ?

Keep me in touch,
Kingest regards,
Sebastien.

============================

Dear friend,

Thanks for your e-mail.

Just our supplier told us the DDS Signal Generator Module 0-70MHz AD9851 2 Sine Wave and 2 Square Wave is out of stock, and they are not able to show the accurate stock time.

About your othe items, we will ship them in advance.

About the out of stock item, would you mind change to another item?
If you don't want to change, we can refund you.

Look forward to your prompt reply for next step

Regards,
eileen


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Samedi 19 Octobre 2013 à 20h18 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1247
Membre n°: 303
Inscrit le: 15/06/2007



Citation (BlueDragon @ Samedi 19 Octobre 2013 à 07h38)
Hello,

Quelques nouvelles concernant ma commande chinoise : je suis déçu.
[...]

BlueDragon . Pour la commande j'obtiens de 500 KiloHertz jusqu' a 10 M.Hertz environ 8 watts , un creux autours de 11 M.Hertz mais 2 watts quand même ???? et après on descend avec environ 5 Watts autours de 12 M.Hertz linéairement jusqu 'a 2 Watts autours de 28 M.Hertz .Je transmet par le Forum puisque pas possible de contact par telephone ......Je laisse chauffer . A 8 Watts je suis environ a 1,2 amperes . J'y suis dessus depuis hier soir dessue et depuis 8 heures ce matin , j'y ai passé la journée dessus et je viens d'aboutir il y a 1/2 h ; parce que je n'avais pas assez de linéarité .. Les composants de plus en plus difficiles a obtenir. , hélas icon_eek.gif
PMEmail Poster
Top
Ecrit le: Samedi 19 Octobre 2013 à 20h19 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1247
Membre n°: 303
Inscrit le: 15/06/2007



Sous 12 volts bien sur ....
PMEmail Poster
Top
Ecrit le: Dimanche 20 Octobre 2013 à 10h43 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Hello Apoc,

Super nouvelle merci ! Ben dis donc comme ça se fait que tu luttes autant pour le réglage ? c'est si compliqué que ça ? :/

Bon j'ai bien reçu mon TosMetre à la maison, ça au moins c'est fait icon_razz.gif

Merci beaucoup pour le temps que tu prends à régler l'ampli ! c'est très gentil de ta part !


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Lundi 21 Octobre 2013 à 07h55 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1247
Membre n°: 303
Inscrit le: 15/06/2007



Citation (BlueDragon @ Dimanche 20 Octobre 2013 à 09h43)
Hello Apoc,

Super nouvelle merci ! Ben dis donc comme ça se fait que tu luttes autant pour le réglage ? c'est si compliqué que ça ? :/

Bon j'ai bien reçu mon TosMetre à la maison, ça au moins c'est fait icon_razz.gif

Merci beaucoup pour le temps que tu prends à régler l'ampli ! c'est très gentil de ta part !

C'est pour cela que peux de fabricants ne veulent pas se lancer la dedans surtout pas des KITS large bande ,parce que ce n'est pas rentable pour eux, par contre des schémas tu en as en quantité illimitée , il faut avoir envie se lancer dans la chose , et qu'il est plus facile de vendre un émetteur comme cela dans un ensemble complet décamétrique a 500 ou 600 euros ....D'autant plus que la pièce détachée , et je me suis laissé prendre au piège moi aussi , les pièce détachée pour certaines devient hors de prix et peux de boites veulent importer du matériel en Europe .Au pire les fabricants américains gagnent suffisamment de fric sur leur territoire ( Canada, USA , Amérique du sud ) et n'en ont plus rien a foutre de l'Europe .......regarde le problème des tores ferrites , c'est une chasse gardée USA et sur le marché chinois , c'est la première fois que je vois cela ,on en trouve quasiment pas ..Pour finir je t'explique qu'il est plus facile de faire un ampli seul par exemple sur 28 MHZ , je t'y met toute la puissance que tu veux sans problème et cela GARANTI , tandis que un large bande de 1 a 28 MHZ c'est moins évident d'autant plus qu'il est quasi impossible de conserver une linéarité parfaite sur toute la bande .Il faut que je retouche encore l'ampli parce que j'y ai un accrochage sur une fréquence , pas grave on va y arriver et j 'expédie ....
PMEmail Poster
Top
Ecrit le: Lundi 21 Octobre 2013 à 08h02 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1247
Membre n°: 303
Inscrit le: 15/06/2007



Maudits X sur peu . icon_lol.gif
PMEmail Poster
Top
Ecrit le: Lundi 21 Octobre 2013 à 10h55 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



ça y est j'ai reçu mon colis de singapour ! nice, expédié le 10/10 et livré ce jour.
Bon je suis plutôt content c'est cool icon_smile.gif

J'ai tout ce que j'ai commandé à vue d'oeil : les matrices LCD, les ecrans nokia, les DDS, les afficheurs, etc.

user posted image


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Lundi 21 Octobre 2013 à 13h29 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Citation (Apoc @ Lundi 21 Octobre 2013 à 08h55)
Citation (BlueDragon @ Dimanche 20 Octobre 2013 à 09h43)
Hello Apoc,

Super nouvelle merci ! Ben dis donc comme ça se fait que tu luttes autant pour le réglage ? c'est si compliqué que ça ? :/

Bon j'ai bien reçu mon TosMetre à la maison, ça au moins c'est fait icon_razz.gif

Merci beaucoup pour le temps que tu prends à régler l'ampli ! c'est très gentil de ta part !

C'est pour cela que peux de fabricants ne veulent pas se lancer la dedans surtout pas des KITS large bande ,parce que ce n'est pas rentable pour eux, par contre des schémas tu en as en quantité illimitée , il faut avoir envie se lancer dans la chose , et qu'il est plus facile de vendre un émetteur comme cela dans un ensemble complet décamétrique a 500 ou 600 euros ....D'autant plus que la pièce détachée , et je me suis laissé prendre au piège moi aussi , les pièce détachée pour certaines devient hors de prix et peux de boites veulent importer du matériel en Europe .Au pire les fabricants américains gagnent suffisamment de fric sur leur territoire ( Canada, USA , Amérique du sud ) et n'en ont plus rien a foutre de l'Europe .......regarde le problème des tores ferrites , c'est une chasse gardée USA et sur le marché chinois , c'est la première fois que je vois cela ,on en trouve quasiment pas ..Pour finir je t'explique qu'il est plus facile de faire un ampli seul par exemple sur 28 MHZ , je t'y met toute la puissance que tu veux sans problème et cela GARANTI , tandis que un large bande de 1 a 28 MHZ c'est moins évident d'autant plus qu'il est quasi impossible de conserver une linéarité parfaite sur toute la bande .Il faut que je retouche encore l'ampli parce que j'y ai un accrochage sur une fréquence , pas grave on va y arriver et j 'expédie ....

Oui c'est la cata ces torres ferrites... je pensais pas que c'était à ce point !
C'est super gentil de ta part de faire les réglages ! du coup c'est quoi que tu fais varier en fait ? les potars ^^ ? où c'est carrément les composants que tu révises ?

Si ce n'est pas liéaire, c'est pas grave APOC, l'objectif est que j'ai à minima 1 à 2W ! ça me permettra d'attaquer un autre ampli plus puissant derrière sans problème quand je retournerai à ma WFC.

Merci pour tout ! si t'étais dans le coin, je t'aurai payé un coup ! Sacrebleu tu m'enlèves une belle épine du pied avec ça !


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Dimanche 27 Octobre 2013 à 23h19 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Bon, je reviens avec quelques news concernant le MCP23008 avant d'aller au lit icon_smile.gif

J'ai réussi à faire fonctionner les entrées non sans mal, en effet, lorsque j'utilisais la puce en mode input, sans les pull-ups, en faisant en sorte que le bouton poussoir délivre du courant lorsqu'il était appuyé, j'avais un comportement assez sporadique du MCP, parfois il détecté, parfois d'autres PIN passaient à l'état haut, bref du grand n'importe quoi.

j'ai donc inversé toute la logique que j'utilisais avec cette bestiole :
J'ai activé toutes les pull-ups internes, ce qui passe toutes les entrées en état haut
J'ai inversé la logique interne du MCP = un état haut est vu comme un niveau logique 0
J'ai branché le bouton poussoir à la masse avec une résistance de 510Ohm pour limiter le courant sortant de la broche à 10mA (soit inferieur aux 20mA max par broche)
J'ai branché une résistance de 62Ohm sur l'entrée de VDD pour protéger le MCP en cas de mauvaise manip, ce qui implique qu'il ne pourra consommer que 80mA au maximum

Voilà donc le registre du bigniou quand tout est au repos (c'est mes valeurs de config actuelles, sans l'interrupt) :

CODE

MCP23008_REG_IODIR : 11111111
MCP23008_REG_IPOL : 11111111
MCP23008_REG_GPINTEN : 0
MCP23008_REG_DEFVAL : 0
MCP23008_REG_INTCON : 0
MCP23008_REG_IOCON : 0
MCP23008_REG_GPPU : 11111111
MCP23008_REG_INTF : 0
MCP23008_REG_INTCAP : 0
MCP23008_REG_GPIO : 0
MCP23008_REG_OLAT : 0


Je viens de tester toutes les broches et ça fonctionne désormais correctement. Je vais pouvoir maintenant faire fonctionner correctement le mode interrupt (enfin j'espere icon_smile.gif )

Note importante : Je me suis aperçu que le mode d'écriture sequentiel en registre ne fonctionnait pas correctement. J'ai donc désactivé la fonctionnalité car je me suis aperçu en relisant les registres après écriture qu'ils n'étaient pas correctement écrits. Ainsi chaque écriture de registre nécéssite une indication du registre de l'adresse du registre (Registre IOCON, SEQOP = 1, non mis pour l'instant)

Voici le code arduino pour cette première partie, à titre experimental. Il me reste à nettoyer certains commentaires inappropriés :

(Sketch uses 5 644 bytes (17%) of program storage space. Maximum is 32 256 bytes.
Global variables use 428 bytes (20%) of dynamic memory, leaving 1 620 bytes for local variables. Maximum is 2 048 bytes.)

CODE

#include <Wire.h>

#define __DEBUG true
#if __DEBUG
 #define SERIAL_BAUD 115200
#endif

#define MCP23008_ADDRESS     0x25 // calcul dépend du câblage => 0x20 + (A2*4) + (A1*2) + (A0*1)
#define MCP23008_ARDN_PIN_INT 0x02 // broche de l'arduino où est câblé la patte interrupt du MCP23008 (sur Arduino UNO : 2 ou 3)
#define MCP23008_REG_IODIR   0x00 // I/O direction register (permet de configurer si une pin est une entree ou une sortie)
#define MCP23008_REG_IPOL    0x01 // Input Polarity register (permet d'inverser la logique etat haut / etat bas)
#define MCP23008_REG_GPINTEN 0x02 // Interrupt-on-change control register (active ou non la gestion d'interruption sur le changement d'un pin)
#define MCP23008_REG_DEFVAL  0x03 // Default compare register for interrupt-on-change (tableau de reference pour le mode de declenchement des interruptions par comparaison)
#define MCP23008_REG_INTCON  0x04 // Interrupt control register (defini le mode de declenchement des interruptions [comparaison ou changement d'etat])
#define MCP23008_REG_IOCON   0x05 // Configuration register
#define MCP23008_REG_GPPU    0x06 // Pull-up resistor configuration register (permet de configurer la resistance interne de pull-up)
#define MCP23008_REG_INTF    0x07 // Interrupt Flag Register (Read only - permet de savoir quels sont les pin qui generent un interrupt)
#define MCP23008_REG_INTCAP  0x08 // Interrupt capture register (mémoire de l'état du pin qui a déclenché l'interruption)
#define MCP23008_REG_GPIO    0x09 // Port (GPIO) Register (table de l'etat des pins - lecture = valeur du pin, ecriture = ecrit dans le registre OLAT)
#define MCP23008_REG_OLAT    0x0A // Output latch register (definition des etats des pins en mode sortie)
byte MCP23008_REG[11] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; // Nous utilisons le MCP23008 en mode input, les 3 derniers registre ne servent pas


void setup()
{
 Serial.begin(SERIAL_BAUD);
 Serial.println("Mode debug active");
 
 //demarrage du protocole I2C
 Wire.onRequest(I2CReceiveRequest);
 Wire.onReceive(I2CReceiveData);
 Wire.begin(0x03);
 byte I2CTx = 0x0;
 TWBR = 12; //BUS I2C à 400Khz, semble stabiliser les bugs aléatoires
 
 //initialisation du MCP23008
 MCP23008_Init();  
 //lecture des registres du MCP23008 pour le mode debug
 MCP23008_Debug();
 
 
}

void loop()
{
 delay(1000);
 MCP23008_Debug();
}

/////////////////////////////////////
// MCP23008 - Initialisation       //
/////////////////////////////////////
// Input : nop
// Output : Byte Error (si != 0 alors il y a eu une erreur)
boolean MCP23008_Init()
{
 boolean Error = 0x0;
 //configuration du MCP23008 pour qu'il fonctionne en mode interruption sur l'ensemble de ses broches
 //l'ensemble des broches auront le pull-up d'activé et les boutons poussoirs seront reliés à la masse (logique inversée)
 //l'interruption se déclenchera sur un passage à l'état haut d'une broche
 MCP23008_REG[MCP23008_REG_IODIR] = B11111111; //ensemble des broches en mode input
 MCP23008_REG[MCP23008_REG_IPOL] = B11111111; //les polarités des broches sont inversées
 MCP23008_REG[MCP23008_REG_GPINTEN] = B00000000; //activation des interruptions sur l'ensemble des pin sur un changement d'état
 MCP23008_REG[MCP23008_REG_DEFVAL] = B00000000; //par defaut, les interruptions seront déclenchées si les pin ne sont pas à l'etat BAS
 MCP23008_REG[MCP23008_REG_INTCON] = B00000000; // la comparaison des etats se fait à partir de la table DEFVAL
 MCP23008_REG[MCP23008_REG_IOCON] = B00000000; // SEQOP=1, DISSLW=0, ODR=O, INTPOL=0
 MCP23008_REG[MCP23008_REG_GPPU] = B11111111; // activation du pull-up interne de 100K sur toutes les entrées du GPIO
 MCP23008_REG[MCP23008_REG_INTF] = B00000000; // ignoré car lecture seule
 MCP23008_REG[MCP23008_REG_INTCAP] = B00000000; // ignoré car lecture seule
 MCP23008_REG[MCP23008_REG_GPIO] = B00000000; //ignoré car nous utilisons le mode INPUT des pins
 MCP23008_REG[MCP23008_REG_OLAT] = B00000000; //ignoré car nous utilisons le mode INPUT des pins
 Error += MCP23008_WriteReg(MCP23008_REG_IODIR, MCP23008_REG[MCP23008_REG_IODIR]);
 Error += MCP23008_WriteReg(MCP23008_REG_IPOL, MCP23008_REG[MCP23008_REG_IPOL]);  
 Error += MCP23008_WriteReg(MCP23008_REG_GPINTEN, MCP23008_REG[MCP23008_REG_GPINTEN]);
 Error += MCP23008_WriteReg(MCP23008_REG_DEFVAL, MCP23008_REG[MCP23008_REG_DEFVAL]);
 Error += MCP23008_WriteReg(MCP23008_REG_INTCON, MCP23008_REG[MCP23008_REG_INTCON]);
 Error += MCP23008_WriteReg(MCP23008_REG_IOCON, MCP23008_REG[MCP23008_REG_IOCON]);  
 Error += MCP23008_WriteReg(MCP23008_REG_GPPU, MCP23008_REG[MCP23008_REG_GPPU]);
 return Error;
}
/////////////////////////////////////
// MCP23008 - Debug                //
/////////////////////////////////////
// Input : Nop
// Output : Nop
void MCP23008_Debug()
{
 byte I2CTx = 0x0;
 if(__DEBUG)
 {
   //Lecture des registres du MCP23008
   I2CTx = MCP23008_ReadReg(MCP23008_REG_IODIR);
   Serial.print(F("MCP23008_REG_IODIR : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_IPOL); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_IPOL : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_GPINTEN); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_GPINTEN : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_DEFVAL); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_DEFVAL : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_INTCON); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_INTCON : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_IOCON); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_IOCON : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_GPPU); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_GPPU : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_INTF); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_INTF : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_INTCAP); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_INTCAP : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_GPIO); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_GPIO : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_OLAT); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
   Serial.print(F("MCP23008_REG_OLAT : "));
   Serial.println(I2CTx, BIN);
 }
}
/////////////////////////////////////
// MCP23008 - Initialisation       //
/////////////////////////////////////
// Input : Adresse du registre à écrire, Valeur à écrire sur 8 bits
// Output : Byte Error (si != 0 alors il y a eu une erreur)
boolean MCP23008_WriteReg(byte Registry, byte value)
{
 byte Error = 0x0;
 Wire.beginTransmission(MCP23008_ADDRESS);
 Wire.write(Registry); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
 Wire.write(value);
 Error = Wire.endTransmission(true); //on envoie le STOP de fin de transmission
 if(__DEBUG)
 {
   if(Error != 0)
   {
     Serial.print(F("Echec de transmission vers le MCP23008 : "));
     Serial.println(Error);
   }
 }
 return Error;
}

/////////////////////////////////////
// MCP23008 - Initialisation       //
/////////////////////////////////////
// Input : Adresse du registre à lire
// Output : valeur du registre
byte MCP23008_ReadReg(byte Registry)
{
 byte value = 0x0;
 Wire.beginTransmission(MCP23008_ADDRESS);
 Wire.write(Registry); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
 Wire.endTransmission(true);
 Wire.requestFrom(MCP23008_ADDRESS, 8);
 while(!Wire.available());
 value = Wire.read();
 return value;
}

void I2CReceiveData(int NombreOctets)
{
}
void I2CReceiveRequest()
{
}



--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Lundi 28 Octobre 2013 à 22h28 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Bon, quelques news de mon avancée :

J'arrive désormais à faire fonctionner correctement le mode interrupt du MCP23008 et à le faire détecter sur le pin de l'Arduino.

Actuellement, ça fonctionne pas exactement comme je le voudrais, mais le principe fonctionne et j'ai bien une interruption à chaque fois que j'appuie sur le bouton.

Là ou je suis en train de galérer un peu, c'est que je n'utilise pas d'anti-rebond sur le bouton, et l'arduino allant très rapidement, il me détecte plusieurs appuis sur le bouton. Je vais donc tenter de placer un condo de 10nF ou de 22nF pour faire l'anti-rebond, voir si ça vient bien de là.

@+


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mardi 29 Octobre 2013 à 22h14 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Hello,

Bon, n'ayant pas eu de résultat avec un DEBOUCE (anti rebond) materiel, j'ai donc mis en place un debounce software qui marche plutôt bien.

Cette version est donc fonctionnelle pour fonctionner avec un MCP23008, bien que le code nécessite un petit toiletage icon_smile.gif Le mode DEBUG est disponible via la terminal, à l'habitude.

Je ne gère pas encore les appuis long sur les boutons, qui permettrait de savoir que l'utilisateur reste appuyé sur le bouton (utile pour ne pas s'acharner sur un bouton en tapotant comme un fou pour faire incrémenter un chiffre par exemple).

voici le code tant attendu...par personne icon_smile.gif enfin si, Edenguard qui avait l'air intéressé.

CODE

#include <Wire.h>

#define __DEBUG true
#if __DEBUG
 #define SERIAL_BAUD 115200
#endif

#define MCP23008_ADDRESS     0x25 // calcul dépend du câblage => 0x20 + (A2*4) + (A1*2) + (A0*1)
#define MCP23008_ARDN_PIN_INT 0x02 // broche de l'arduino où est câblé la patte interrupt du MCP23008 (sur Arduino UNO : 2 ou 3)
#define MCP23008_REG_IODIR   0x00 // I/O direction register (permet de configurer si une pin est une entree ou une sortie)
#define MCP23008_REG_IPOL    0x01 // Input Polarity register (permet d'inverser la logique etat haut / etat bas)
#define MCP23008_REG_GPINTEN 0x02 // Interrupt-on-change control register (active ou non la gestion d'interruption sur le changement d'un pin)
#define MCP23008_REG_DEFVAL  0x03 // Default compare register for interrupt-on-change (tableau de reference pour le mode de declenchement des interruptions par comparaison)
#define MCP23008_REG_INTCON  0x04 // Interrupt control register (defini le mode de declenchement des interruptions [comparaison ou changement d'etat])
#define MCP23008_REG_IOCON   0x05 // Configuration register
#define MCP23008_REG_GPPU    0x06 // Pull-up resistor configuration register (permet de configurer la resistance interne de pull-up)
#define MCP23008_REG_INTF    0x07 // Interrupt Flag Register (Read only - permet de savoir quels sont les pin qui generent un interrupt)
#define MCP23008_REG_INTCAP  0x08 // Interrupt capture register (mémoire de l'état du pin qui a déclenché l'interruption)
#define MCP23008_REG_GPIO    0x09 // Port (GPIO) Register (table de l'etat des pins - lecture = valeur du pin, ecriture = ecrit dans le registre OLAT)
#define MCP23008_REG_OLAT    0x0A // Output latch register (definition des etats des pins en mode sortie)
byte MCP23008_REG[11]; //définition du tableau de configuration pour l'init du MCP
boolean MCP23008_INT = false; //variable qui sert à détecter l'interruption
byte MCP23008_HIST[256]; // Tableau d'historique stocké en mémoire flash (8bits * 20 = 60o)
byte MCP23008_HIST_INDX = 0;
byte MCP23008_BOUNCE = 0;
/// gestion du temps
unsigned long TICK_START = millis();
unsigned long TICK_STEP = TICK_START;
unsigned long TICK_BUTT = TICK_START;

void setup()
{
 Serial.begin(SERIAL_BAUD);
 Serial.println(F("Mode debug active"));
 
 //demarrage du protocole I2C
 Wire.onRequest(I2CReceiveRequest);
 Wire.onReceive(I2CReceiveData);
 Wire.begin(0x03);
 byte I2CTx = 0x0;
 TWBR = 12; //BUS I2C à 400Khz, semble stabiliser les bugs aléatoires
 
 //initialisation du MCP23008
 MCP23008_Init();  
 //lecture des registres du MCP23008 pour le mode debug
 MCP23008_Debug();
}

void loop()
{
 if(MCP23008_INT == true && MCP23008_BOUNCE == 1)
 {
     MCP23008_INT = false;
     MCP23008_HIST_INDX += 1;
     MCP23008_Debug();
 }
 if(MCP23008_INT == true && (millis() - TICK_BUTT > 50) && MCP23008_BOUNCE > 1)
 {
   Serial.println("Clear Bounce && interrupt");
   MCP23008_BOUNCE = 0;
   MCP23008_INT = false;
   MCP23008_ReadReg(MCP23008_REG_GPIO);
 }
 if(millis() - TICK_STEP > 3000)
 {
   TICK_STEP = millis();
   Serial.println("-------------------------------------");
   Serial.println(MCP23008_BOUNCE);
   Serial.println(MCP23008_INT);
   Serial.println(MCP23008_HIST_INDX);
   Serial.println("-------------------------------------");
 }
}

/////////////////////////////////////
// MCP23008 - Initialisation       //
/////////////////////////////////////
// Input : nop
// Output : Byte Error (si != 0 alors il y a eu une erreur)
boolean MCP23008_Init()
{
 boolean Error = 0x0;
 //configuration du MCP23008 pour qu'il fonctionne en mode interruption sur l'ensemble de ses broches
 //l'ensemble des broches auront le pull-up d'activé et les boutons poussoirs seront reliés à la masse (logique inversée)
 //l'interruption se déclenchera sur un passage à l'état haut d'une broche
 MCP23008_REG[MCP23008_REG_IODIR] = B11111111; //ensemble des broches en mode input
 MCP23008_REG[MCP23008_REG_IPOL] = B11111111; //les polarités des broches sont inversées
 MCP23008_REG[MCP23008_REG_GPINTEN] = B11111111; //activation des interruptions sur l'ensemble des pin sur un changement d'état
 MCP23008_REG[MCP23008_REG_DEFVAL] = B00000000; //par defaut, les interruptions seront déclenchées si les pin ne sont pas à l'etat BAS
 MCP23008_REG[MCP23008_REG_INTCON] = B11111111; // la comparaison des etats se fait à partir de la table DEFVAL
 MCP23008_REG[MCP23008_REG_IOCON] = B00100010; // SEQOP=1, DISSLW=0, ODR=O, INTPOL=0
 MCP23008_REG[MCP23008_REG_GPPU] = B11111111; // activation du pull-up interne de 100K sur toutes les entrées du GPIO
 MCP23008_REG[MCP23008_REG_INTF] = B00000000; // ignoré car lecture seule
 MCP23008_REG[MCP23008_REG_INTCAP] = B00000000; // ignoré car lecture seule
 MCP23008_REG[MCP23008_REG_GPIO] = B00000000; //ignoré car nous utilisons le mode INPUT des pins
 MCP23008_REG[MCP23008_REG_OLAT] = B00000000; //ignoré car nous utilisons le mode INPUT des pins
 Error += MCP23008_WriteReg(MCP23008_REG_IODIR, MCP23008_REG[MCP23008_REG_IODIR]);
 Error += MCP23008_WriteReg(MCP23008_REG_IPOL, MCP23008_REG[MCP23008_REG_IPOL]);  
 Error += MCP23008_WriteReg(MCP23008_REG_GPINTEN, MCP23008_REG[MCP23008_REG_GPINTEN]);
 Error += MCP23008_WriteReg(MCP23008_REG_DEFVAL, MCP23008_REG[MCP23008_REG_DEFVAL]);
 Error += MCP23008_WriteReg(MCP23008_REG_INTCON, MCP23008_REG[MCP23008_REG_INTCON]);
 Error += MCP23008_WriteReg(MCP23008_REG_IOCON, MCP23008_REG[MCP23008_REG_IOCON]);  
 Error += MCP23008_WriteReg(MCP23008_REG_GPPU, MCP23008_REG[MCP23008_REG_GPPU]);
 pinMode(2, INPUT);
 attachInterrupt(0, MCP23008_Interrupt, RISING);
 return Error;
}
/////////////////////////////////////
// MCP23008 - Debug                //
/////////////////////////////////////
// Input : Nop
// Output : Nop
void MCP23008_Debug()
{
 byte I2CTx = 0x0;
 if(__DEBUG)
 {
   //Lecture des registres du MCP23008
   I2CTx = MCP23008_ReadReg(MCP23008_REG_IODIR);
   Serial.print(F("MCP23008_REG_IODIR : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_IPOL);
   Serial.print(F("MCP23008_REG_IPOL : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_GPINTEN);
   Serial.print(F("MCP23008_REG_GPINTEN : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_DEFVAL);
   Serial.print(F("MCP23008_REG_DEFVAL : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_INTCON);
   Serial.print(F("MCP23008_REG_INTCON : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_IOCON);
   Serial.print(F("MCP23008_REG_IOCON : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_GPPU);
   Serial.print(F("MCP23008_REG_GPPU : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_INTF);
   Serial.print(F("MCP23008_REG_INTF : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_INTCAP);
   Serial.print(F("MCP23008_REG_INTCAP : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_GPIO);
   Serial.print(F("MCP23008_REG_GPIO : "));
   Serial.println(I2CTx, BIN);
   I2CTx = MCP23008_ReadReg(MCP23008_REG_OLAT);
   Serial.print(F("MCP23008_REG_OLAT : "));
   Serial.println(I2CTx, BIN);
 }
}
/////////////////////////////////////
// MCP23008 - WriteReg             //
/////////////////////////////////////
// Input : Adresse du registre à écrire, Valeur à écrire sur 8 bits
// Output : Byte Error (si != 0 alors il y a eu une erreur)
boolean MCP23008_WriteReg(byte Registry, byte value)
{
 byte Error = 0x0;
 Wire.beginTransmission(MCP23008_ADDRESS);
 Wire.write(Registry); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
 Wire.write(value);
 Error = Wire.endTransmission(true); //on envoie le STOP de fin de transmission
 if(__DEBUG)
 {
   if(Error != 0)
   {
     Serial.print(F("Echec de transmission vers le MCP23008 : "));
     Serial.println(Error);
   }
 }
 return Error;
}

/////////////////////////////////////
// MCP23008 - ReadReg              //
/////////////////////////////////////
// Input : Adresse du registre à lire
// Output : valeur du registre
byte MCP23008_ReadReg(byte Registry)
{
 byte value = 0x0;
 Wire.beginTransmission(MCP23008_ADDRESS);
 Wire.write(Registry); // on place le pointeur du MCP sur le registre IODIR et l'écriture dans les registres étant sequentielle (SEQOP=0), on envoie les blocs de bits
 Wire.endTransmission(true);
 Wire.requestFrom(MCP23008_ADDRESS, 8);
 while(!Wire.available());
 value = Wire.read();
 return value;
}

/////////////////////////////////////
// MCP23008 - Interrupt            //
/////////////////////////////////////
// Input : N/A
// Output : N/A
void MCP23008_Interrupt()
{
 MCP23008_BOUNCE = MCP23008_BOUNCE + 1;
 if(MCP23008_INT == false)
 {
    MCP23008_INT = true;
    TICK_BUTT = millis();
 }
}

void I2CReceiveData(int NombreOctets)
{
}
void I2CReceiveRequest()
{
}




Bon, je vais pouvoir m'atteler maintenant à l'encodeur rotatif via les 74LS74 (ou 74HC74) fournit par crocro31. Je vais ainsi pouvoir (j'espère) pouvoir utiliser l'encodeur rotatif comme un "bouton" normal. Celà nécessitera peut-être de réviser le temps de debounce (actuellement fixé en dur à 50ms dans le code)

Edit de 22H23 :
Je pense que je viens de comprendre le problème... en effet, il ne peut être question de BOUNCE lorsque l'on passe à travers un chip comme le MCP23008, puisque son fonctionnement est un debouncer à lui tout seul (un peu long à expliquer, mais il fait tampon de part son fonctionnement).

En fait je viens juste de comprendre (merci mes guides...) la raison de pourquoi j'avais l'impression que ça faisait des rebonds !!!!! et c'est vraimment super très bête mais fallait le comprendre ! icon_razz.gif ça fait des rebonds parceque mon ARDUINO va trop vite en lecture des registres du MCP23008 et donc en reset des registres !

Je m'explique, imaginez une camera à très haute vitesse qui filme l'action :

J'appuie sur le bouton, et les contacts mecaniques font descendre le niveau logique d'une broche du MCP23008
L'électronique interne du MCP23008 copie alors l'ensemble des états des broches du MCP dans un registre, indique dans un autre registre quel est la broche qui a déclenchée l'interruption, puis passe à l'état haut la broche d'interruption
L'arduino est configuré pour détecter que la broche d'interruption du MCP passe de l'état bas à l'état haut (RISING), il déclenche donc l'interruption via la fonction MCP23008_INTERRUPT
La fonction modifie une variable qui va déclencher dans la boucle loop, le bout de code qui vient traiter l'interruption, et va donc afficher le debug des broches du MCP (toutes les broches ici). Or la lecture de certains registre entraîne automatiquement la remise à zero du registre d'interruption et le repassage de la broche INTERRUPT du MCP à l'état bas

Mais vu que je réagit peut-être 100x plus lentement que la vitesse d'execution de mon code, je n'ai absolument pas levé mon doigt du bouton qu'il recommence un tour ! car mon doigt est toujours appuyé sur le bouton et ça fait donc déclencher une nouvelle interruption, et donc réexécuter le code, etc.... et ce, tant que mon doigt reste appuyé sur le bouton.

Donc en gros, même en essayant un appui très bref sur le bouton avec mon doigt, l'arduino et le MCP ont eu le temps de se renvoyer la balle plus d'une vingtaine de fois !!!!!

Voilà d'où ça vient, non de zeus ! j'ai compris icon_smile.gif il faudra que je révise ma manière de fonctionner icon_razz.gif au moins mon aventure servira à d'autres !

Et donc, point besoin d'anti-rebond materiel avec ce chip : il le fait de lui même, sans le savoir icon_razz.gif

Bonne nuit !

Ce message a été modifié par BlueDragon le Mardi 29 Octobre 2013 à 22h37


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Mardi 29 Octobre 2013 à 23h17 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 534
Membre n°: 10240
Inscrit le: 29/12/2012



Bonsoir à tous,

Bien beau programme, beaucoup de code pour ce seul composant héhé ^^

Bravo à toi en tous cas icon_smile.gif

Pour ma part je n'ai toujours pas ces ptain d'écrans donc bon...
En attendant je "m'amuse" avec des transceivers 2.4Ghz, pour faire des radiocommandes.(pour drone, minipelle...)
J'ai passé toute la journée dessus avant d'arriver à faire circuler les infos entres deux arduinos, sans fils ^^
Et ce soir j'ai avancé dans la fabrication de ma Bobine Tesla, que je traine depuis quelques années déjà, mais jamais eu le courage de la continuer ^^

Fin bon, je vois que quelques personnes ici s'amusent bien avec la programmation, çà fait plaisir icon_smile.gif

Bonne soirée !
Et bonne continuation icon_smile.gif

A+


--------------------
PMEmail PosterUsers Website
Top
Ecrit le: Samedi 02 Novembre 2013 à 23h38 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 3939
Membre n°: 10047
Inscrit le: 07/11/2011



Yop,

Je viens de finir de souder le bridge I2C sur le LCD 1602A.
La communication se fait par l'arduino via l'adresse 0x27 et grâce à la librairie LCD via I2C de DFRobot (http://www.dfrobot.com/wiki/index.php/I2C/TWI_LCD1602_Module_(SKU:_DFR0063))

Marche bien pour de la cam chinoise à 5$ icon_smile.gif
Un petit clin d'oeil à chercheursduvraiicon_wink.gif

user posted image


--------------------
« No matter where you are, Look for the brightest star, Believe it is true, My soul is smiling at you", FastWalkers
PM
Top
Ecrit le: Dimanche 10 Novembre 2013 à 18h52 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 361
Membre n°: 10190
Inscrit le: 22/10/2012



Alors BlueDragon, des nouvelles de ton Aether-Metre ?

PMEmail Poster
Top
Ecrit le: Dimanche 10 Novembre 2013 à 18h57 Posted since your last visit
Quote Post


Expert(e)
******

Groupe: Membres
Messages: 1247
Membre n°: 303
Inscrit le: 15/06/2007



BlueDragon = Marche bien pour de la cam chinoise à 5$ icon_smile.gif ????

Apoc = C'est un porte clef ????
PMEmail Poster
Top
3 utilisateur(s) sur ce sujet (3 invités et 0 utilisateurs anonymes)
0 membres:

Topic OptionsPages: (5) 1 2 [3] 4 5  Reply to this topicStart new topicStart Poll

 



[ Script Execution time: 0.1530 ]   [ 12 queries used ]   [ GZIP activé ]