Véhicule RC

dje8269

Senior Member
Je ne comprends pas trop cette partie de ping pong entre 2 picaxes...
Ben j'essaye toujours de faire cohabiter deux maitres ensembles ; en fait . sans votre aide je met vachement plus de temps lol . Le 28X2 recoit le Rfin et envoie ces données au 20X2 ( donc 28X2 maitre et 20X2 esclave) . apres interprétation des donnes le 20x2 envoie les données au SD20 . ( donc le 20x2 passe maitre a son tour et le sd20 toujours esclave ) . mais ces trois µC doivent etre sur le même bus

Sinon, je ne vois pas comment le 20X2 pourrait renvoyer des bonnes valeurs puisqu'elle n'ont pas été lues dans le scratchpad !
Elles le sont non ? avec la commande : "get 0,b0,b1,b2,b3,b4,b5,b6,b7 ' Lecture du scratchpad"

Mais de toute façon gros problème si sda reste à l'état bas ! un picaxe est demandeur mais il n'y a pas de réponse.
Oui je pense aussi . dans quel état doit être le sck quand rien ne se passe sur la ligne ? a l'état haut normalement aussi non ?

et le sd20 il est où dans tout ça ?
J'ai appris grâce a vous , a avancez pas à pas . alors tant que les deux picaxes ne peuvent passer maitre l'un après l'autre en concordance, il est pas la . en fait il sera a la place de l'esclave du 20X2 .

J'avance dans l'inconnu donc a tatons .
 

PieM

Senior Member
Elles le sont non ? avec la commande : "get 0,b0,b1,b2,b3,b4,b5,b6,b7 ' Lecture du scratchpad"
Exact sorry.
pourquoi avoir deux maîtres ? c'est perdre du temps ces allers et retours. le 20X2 est maître et c'est tout.
 

dje8269

Senior Member
J'ai essayé d'expliquer au mieux le choix possibles ici .

car je pense qu'il va y avoir une synchro a faire toute biscornu pour que le maitre aille chercher les infos juste après leurs arrivées . Peut être une interruption hard du coup .
Si tu as une idée de l'organigramme général je suis preneur . j'ai peur de faire un truc super compliqué !.

Avec l'histoire des deux maitres ça aurait plus fiable je trouve . mais comme ça a vraiment l'air de ne pas marché , je pense que je vais abandonné , car j'avance pas d'un iota

c'est perdre du temps ces allers et retours. le 20X2 est maître et c'est tout.
En fait, ce n'est que pour les test ; en vrai j'aurais aimé créer un bus sur deux niveaux . un esclave(sd20) commandé par un maitre(20X2) qui lui même commandé par un autre maitre(28x2).
 

PieM

Senior Member
le 28X2 se contente de mettre à jour son scratchpad. Le 20X2 va chercher les infos quand il en a besoin en fonction de son timing de calcul. Ce sont deux process totalement asynchrones. inutile de chercher des complications!
Sinon tu utilises une liaison hserin du 28 vers le 20X2, mais ça ne me semble pas utile.
 

dje8269

Senior Member
Le 20X2 va chercher les infos quand il en a besoin en fonction de son timing de calcul
D'après mes données récoltées le 20X2 iras toujours plus vite que les 40ms de la réception Rfin . donc il risque d'aller cherché les données qui ne sont pas MAJ
encore . Et donc on pourrait avoir un décalage de 40 ms de temps en temps.
inutile de chercher des complications!
Oui mais il reste la détection de perte de communication !

il faudrait donc , aussi compter l'absence de MAJ de données quand le RFin est bloquée avec un flag par exemple....
 

PieM

Senior Member
donc il risque d'aller cherché les données qui ne sont pas MAJ
et ben elles seront à jour au cycle suivant. et si ton cycle est plus long que ça (ce que tu ne sais pas) rien t'empêche de faire plusieurs lectures du 28.
Oui mais il reste la détection de perte de communication !
il faudrait donc , aussi compter l'absence de MAJ de données quand le RFin est bloquée avec un flag par exemple....
ben oui, pas compliqué !
 

dje8269

Senior Member
ben oui, pas compliqué !
Ben quand même , pour moi , c'est du lourd ! .

tout est a prendre en compte . il faut donc utiliser hi2cin pour la récupération et hi2cout pour posé un flag . tout ca sur une interruption hard ...
 

PieM

Senior Member
oui mais pas besoin d'interruption ! pour quoi faire ?
autre methode, une ligne TOR entre les deux. mise à 1 avant un RFIN et à 0 après .
tu lis l'état sur le 20X par un pulsin. Si = 0, c'est qu'il y a un pb de com.
 

dje8269

Senior Member
oui mais pas besoin d'interruption ! pour quoi faire ?
En fait pour voir que mes données sont reçues je fais clignoter une led au rythme de la réception (après le RFin) . si la led s'allume c'est que le RFin est passé , donc les données a jour . je comptais utilisé cette broche pour créer une interruption sur mon 20X2 qui sache que les données sont a jour et qu'il faut allez les cherchées . ainsi il n'y aurais aucun loupé .

autre methode, une ligne TOR entre les deux. mise à 1 avant un RFIN et à 0 après .
Ca méthode ne fonctionnera pas . car si le Rfin est bloqué, Je ne verrais jamais la mise à 0. et si jamais le RFin n'est pas bloqué il faut bien faire une interrupt sur la mise a 1 pour avoir le temps de le détecter et être sur de ne pas le louper ; C'est pas si simple que ca en a l'air en fait !!

tu lis l'état sur le 20X par un pulsin. Si = 0
Je n'ai pas eu l'occasion d'utilisé pulsin encore . je vais allé regarde comment ca fonctionne ;

Ma seule priorité c'est la mise a jour des données moteurs . j'aimerais autant que faire ce peu, évité d'avoir un creux de 80ms sur des ordres prioritaires. Tu trouve que ca sert a rien toi ?

PS : je préfère ne pas touché au données Rfin ( de b0 à b7) , car sur d'après mon expérience , il convient d'espacer les valeurs par une valeur vide pour avoir un résultats optimum ) . dans mon cas j'ai :
b0,b1 pour les TOR : ( seule exception) pas critique car temporisé donc moins d'erreur possible.
b2 : vide
b3: moteur
b4 vide
b5 : direction
b6 : vide
b7 : tilt
 
Last edited:

PieM

Senior Member
comptais utilisé cette broche pour créer une interruption sur mon 20X2 qui sache que les données sont a jour et qu'il faut allez les cherchées . ainsi il n'y aurais aucun loupé .
mais il faut que tu comprennes que ton 20X2 il a son job à faire ! donc tu vas l'interrompre à n'importe quel moment pour dire qu'une nouvelle info est dispo alors qu'il vient peut être juste finir de mettre à jour les commandes et qu'il est entrain de faire ses calculs et s'apprête à envoyer les ordres aux servos ! Donc tu fais quoi ? après l'interruption et la nouvelle mise à jour, tu repars au début des calculs ? Et tes servos attendent ?
J'ai du mal à comprendre.
Il me semblait aussi que tu devais écrire des trucs dans une eeprom ? tu sais le temps total mis par le programme du 20X2 ?

Ca méthode ne fonctionnera pas . car si le Rfin est bloqué, Je ne verrais jamais la mise à 0. et si jamais le RFin n'est pas bloqué il faut bien faire une interrupt sur la mise a 1 pour avoir le temps de le détecter et être sur de ne pas le louper ; C'est pas si simple que ca en a l'air en fait !!
Ben évidemment que tu ne verra pas la mise à 0 ! c'est fait pour ça!
donc le pulsin passera à 0 au bout de 327 ms (si 8MHz) d'ou détection d'un pb de RFIN

Je croyais que ta caméra était commandée par le même joystick que moteur/direction.
 

dje8269

Senior Member
Je vais essayé d'être plus clair en effet .

mais il faut que tu comprennes que ton 20X2 il a son job à faire
Ca j'ai bien compris y'a pas de problème !!

donc tu vas l'interrompre à n'importe quel moment pour dire qu'une nouvelle info est dispo
Non , justement l'astuce est la ...... en fait l'interruption remplace le hi2cflag dans l'ancienne version . Le programme attendra l'interruption pour lancé la MAJ . donc :
une mise a jour par Rfin = lancement de l' interruption = mise a jour des données aux servos puis on attends une nouvelle MAJ du Rfin

L'interrutpion se produiera apres chaque RFin donc toutes les 40ms environ . Il s'agit en fait d'une interruption programmé . Je met une interruption car la led passe a l'état haut pendant un delais extremement court . j'ai peur qu'avec un simple if x =1 , ça passe a coté , car pendant l'attente il y aura incrémentation d'un compteur pour detecter la perte de com .

tu sais le temps total mis par le programme du 20X2 ?
Non pas encore . il faut que je finalise mon fonctionnement pour cela ; Mais je suis sur d'une chose , c'est qu'il durera moins que 40ms . donc c'est toujours le programme qui attendra l'interruption et non l'interruption qui interrompra le programme .

Il me semblait aussi que tu devais écrire des trucs dans une eeprom ?
Rien n'est encore décidé, je n'ai pas pu finir les test en condition réel sur le back up . Suivant les tests et le résultats obtenues , les données nécessaire à une marche viable peuvent etre trés réduites, peut être même stockable dans la mémoire d'un picaxe, vu qu'on as besoin d'une mémoire rotative .

Je croyais que ta caméra était commandée par le même joystick que moteur/direction.
Non , la caméra ,comme sur le proto , sera pilotée par le seul joystick moteur ( en pan et en tilt) si appui sur un BP .

Je vais essayé de pondre un programme on y verra plus clair . Je ne doute que vous saurez me dire les defauts de celui-ci on comment faire mieux
 

PieM

Senior Member
Le programme attendra l'interruption pour lancé la MAJ
et si le RFIN est bloqué tu fais quoi ?
Un programme n'attend pas une interruption. Par définition elle intervient à tout moment dans le déroulement d'un programme.

Non pas encore . il faut que je finalise mon fonctionnement pour cela ; Mais je suis sur d'une chose , c'est qu'il durera moins que 40ms . donc c'est toujours le programme qui attendra l'interruption et non l'interruption qui interrompra le programme .

Mais:
Rien n'est encore décidé, je n'ai pas pu finir les test en condition réel sur le back up . Suivant les tests et le résultats obtenues ....
Alors si tu en es sûr sans avoir finalisé ton programme ....

Non , la caméra ,comme sur le proto , sera pilotée par le seul joystick moteur ( en pan et en tilt) si appui sur un BP .
mais :
b3: moteur
b4 vide
b5 : direction
b6 : vide
b7 : tilt
 

dje8269

Senior Member
Tu fais vachement bien le contradicteur . Ca fait avancer au moins , et je suis obligé de re-reflechir avant de te répondre a chaque fois lol .
Donc :

Un programme n'attend pas une interruption
En temps normal je sais bien ; c'est l'intérêt premier de l'interruption , j'avoue détourné ca fonction, pour réagir instantanément a une action très brève . je viens de finir un premier jet de programme je le test et je te montre ;

je pense que ce sera beaucoup plus clair avec le programme ;

Alors si tu en es sûr sans avoir finalisé ton programme ....
je suis pas sur à 100% mais , mais un bon 99.9% . Que pour faire quelques calculs de mise a l'échelle , regarder la position des TOR , écrire sur sd20 écrire sur une eerpom et faire un hi2cin ,cela me prendra moins de 40ms . dans le prototype j'ai dus rajouter une pause de 17ms je crois ( de mémoire) pour ralentir . en sachant le µc ne tournait pas a fond .

mais :

b3: moteur
b4 vide
b5 : direction
b6 : vide
b7 : tilt
Sorry : b7 : Pan .
c'est le moteur le tilt ( b3)
 

dje8269

Senior Member
C'est pas la direction le Pan ?
Non , pour une question purement de convenance et de praticabilité dans la réalité ; En fait , le BP de la camera se trouve a droite , quand on appui dessus, on est plus aussi adroit avec sa main droite , il est plus confortable de tout gérer avec son pouce gauche !

Résultat du test de ma proposition au dessus . Il est quasiment indispensable ( mais pas vital) de voir( avec une led) le RFin en action . pour le dépannage et la compréhension de l'etat du VHL . donc l'état haut de cette led dure 3 ms d'après mon analyseur . c'est qui du coup est trop long pour mon interruption . Je vais passé plutôt a une condition basique qui aura le temps en 3ms d'être détecté sans problème ;

Je sais qu'on travaille pas de la même manière , mais quand on tape le programme , c'est vraiment la que je me rends compte de ce qu'il faut faire . y'as tellement de paramètres a prendre en compte , que je n'y arrive pas en avance de phase . je fais , et je corrige au fur et a mesure .
 

PieM

Senior Member
c'est qui du coup est trop long pour mon interruption
Sur un X2 il faut utiliser les entrées interruption hard qui se font sur changement d'état, front montant ou descendant! (hint)
 

dje8269

Senior Member
Sur un X2 il faut utiliser les entrées interruption hard qui se font sur changement d'état, front montant ou descendant! (hint)
Oui , mais je préfère éviter les interruption si c'est possible, c'est bien ce que tu préconise ? car dans tous les cas , je veux voir ma liaison Rf donc ma led doit s'allumer quelques ms . En fait ca m'arrange et ainsi plus besoin d'interruption .

Sinon je retombe sur un OS . Le même qu'avec mes recherches sur le multi-maitre . c'est bizarre ; Le problème ce situe au niveau de l'i2c du 20X2. Les valeurs que je vais cherché ou que j'envoie ne correspond a rien ; peut être mon analyseur logique que j'utilise mal !!!

J'ai le start et le stop et rien au milieu ??? je commence a désespérer !

Ce programme dans son déroulement , fonctionne trés bien . il n'est pas ajusté et optimisé , j'essaye juste de tout faire fonctionné ensemble .

l'organigramme du 28X2 est ainsi :
j'attend le Rfin, une fois recu , j'ecris dans les données dans son scratchpad, pour que le 20X2 vienne les cherchés . J'allume la led pour voir le clignotement et ainsi confirmé que mon RFin n'est pas bloqué ;

Code:
[color=Blue]do

low A.0
RFin C.1[/color][color=Black],[/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7          [/color][color=Green]' Recoit les donnees du RX[/color]
[color=Blue]High A.0

put [/color][color=Navy]0[/color][color=Black],[/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7             [/color][color=Green]' Enregistrement des donnees dans le scratchpad[/color]

[color=Blue]loop[/color]
celui du 20X2

J'attend que la broche C.5 passe a un 1 ( relié par une R de 1K a la broche de la led du 28X2) . pas de mise a jour du RFin je compte . si le compteur deborde , c'est qu'il y perte de com, j'arrete le VHL .
Quand la broche C.5 passe à 1 donc j'ai recu un RFin .
j'attend 3 ms le temps de l'ecriture dans le scratchpad ( de la part du 28X2) , et je vais checher les données dans le scratchpad du 28X2
je met a jour
je re-attend un ordre .

Code:
[color=Navy]#PICAXE [/color][color=Black]20X2[/color]
[color=Green]'#################################################################################
'##########################   Programme 20X2 Slave   #############################  
'#################################################################################

'########################  Configuration des I/O  ########################

'b0 a b7 pour les communications[/color]
[color=Blue]Symbol [/color][color=Purple]compteur_com [/color][color=DarkCyan]= [/color][color=Purple]b10[/color]
[color=Blue]Symbol [/color][color=Purple]flag_interrupt [/color][color=DarkCyan]= [/color][color=Purple]b11[/color]

[color=Blue]Symbol led_jaune  [/color][color=DarkCyan]= [/color][color=Blue]C.0
Symbol led_rouge  [/color][color=DarkCyan]= [/color][color=Blue]C.2[/color]

[color=Green]'###########################  Initialisation  ########################[/color]

[color=Blue]setfreq m8
hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%11000010[/color][color=Black], [/color][color=Blue]i2cfast_8[/color][color=Black], [/color][color=Blue]i2cbyte    [/color][color=Green]' met le 20X2 en mode maitre et le SD20 zsclave[/color]

[color=Purple]compteur_com [/color][color=DarkCyan]= [/color][color=Navy]255                  [/color][color=Green]' bloque le compteur au demarrage


'#################################################################################
'##########################    Programme Principal    ############################  
'#################################################################################[/color]
[color=Blue]do
      do                                        [/color][color=Green]' Boucle d'attente d'une MAJ
      [/color][color=Purple]compteur_com [/color][color=DarkCyan]= [/color][color=Purple]compteur_com [/color][color=DarkCyan]+ [/color][color=Navy]1 [/color][color=DarkCyan]max [/color][color=Navy]255   [/color][color=Green]'incremente le compteur

            [/color][color=Blue]if [/color][color=Purple]compteur_com [/color][color=DarkCyan]>= [/color][color=Navy]254 [/color][color=Blue]then         [/color][color=Green]' a ajuster suivant le timing d'une boucle
                  [/color][color=Blue]gosub [/color][color=Black]arret                   [/color][color=Green]' perte de com donc ,arret du VHL
            [/color][color=Blue]endif
            
      loop while [/color][color=Purple]pinC.5 [/color][color=DarkCyan]= [/color][color=Navy]0                     [/color][color=Green]' On reboucle tant qu'on a pas mis a jour[/color]

[color=Purple]compteur_com [/color][color=DarkCyan]= [/color][color=Navy]0        [/color][color=Green]' RAZ du compteur de communication car on a recu une com[/color]
[color=Blue]pause [/color][color=Navy]3[/color]
[color=Blue]high led_jaune
hi2cin [PLAIN][[/PLAIN][/color][color=Navy]%10100000[/color][color=Blue][PLAIN]][/PLAIN][/color][color=Black],[/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7[/color][color=Blue])  [/color][color=Green]' Recuperation des données sur le 28X2 [/color]
[color=Blue]low led_jaune

pause [/color][color=Navy]20    [/color][color=Green]' simulation du temps de calcul et gestion des TOR[/color]

[color=Blue]hi2cout [PLAIN][[/PLAIN][/color][color=Navy]%11000010[/color][color=Blue][PLAIN]][/PLAIN][/color][color=Black],[/color][color=Navy]17[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b7[/color][color=Blue])         [/color][color=Green]' Envoi des donnees au SD20 pour MAJ[/color]

[color=Blue]loop[/color]

[color=Green]'#################################################################################
'##########################    Programme Secondaire    ###########################  
'#################################################################################[/color]

[color=Black]arret:[/color]
[color=Blue]do
      high led_rouge    
loop while [/color][color=Purple]PinC.5 [/color][color=DarkCyan]= [/color][color=Navy]0[/color]

[color=Blue]low led_rouge

return[/color]
maintenant voici un screen de l'analyseur .

Sans titre.jpg

La courbe rouge indique le hi2cin ........ .
on voit donc sur la ligne i2C , le départ et le stop mais rien au milieu ??? alors qu'il devrait etre censé récupéré les 8 octets dans le scratchpad du 28X2 ?
et cela est pareil durant le hi2Cout qui devrait écrire sur le SD20 . j'ai le start et le stop rien au milieu . je devrais au moins avoir des zeros non ?
 

PieM

Senior Member
ou est définie l'adresse de l'esclave ?
le SD20 est connecté ?

D'autre part je suis un peu surpris car ton I2C étant à 400Hz , la transmission de 8 octets demande normalement 0.18 ms !
 
Last edited:

dje8269

Senior Member
J'ai vraiment l'impression d'avancer d'un pas et de reculer de deux .

ou est définie l'adresse de l'esclave ?
L'adresse de l'esclave est définie sur le 28X2


Code:
[color=Navy]#PICAXE [/color][color=Black]28X2[/color]

[color=Green]'#################################################################################
'##########################     Programme 28X2 RX    #############################  
'#################################################################################

'########################  Configuration  ########################

'b0 a b7 pour les communications

'########################  Initialisation  ########################[/color]

[color=Blue]setfreq m8

hi2csetup i2cslave[/color][color=Black], [/color][color=Navy]%10100000[/color]

[color=Green]'#################################################################################
'##########################    Programme Principal    ############################  
'#################################################################################[/color]

[color=Blue]do

low A.0
RFin C.1[/color][color=Black],[/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7          [/color][color=Green]' Recoit les donnees du RX[/color]
[color=Blue]High A.0

put [/color][color=Navy]0[/color][color=Black],[/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7             [/color][color=Green]' Enregistrement des donnees dans le scratchpad[/color]

[color=Blue]loop[/color]
le SD20 est connecté ?
Non effectivement . le sd20 n'ai pas connecté donc c'est normal qu'il n'y ai pas de réponse ; j'avais oublié qu'il y avait un vrai dialogue dans les deux sens . Je me concentre donc seulement entre les deux picaxes !!!!
Désolé je suis pas très à l'aise avec l'i2C, j'avais oublié qu'il fallait un recepteur a l'autre bout

j'ai donc refait un mini programme pour testé ca . voici celui du 20X2 je peux pas faire plus simple

Code:
[color=Navy]#PICAXE [/color][color=Black]20X2[/color]

[color=Green]'###########################  Initialisation  ########################[/color]

[color=Blue]setfreq m8

hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%10100000[/color][color=Black], [/color][color=Blue]i2cfast_8[/color][color=Black], [/color][color=Blue]i2cbyte    [/color][color=Green]' met le 20X2 en mode maitre et le SD20 zsclave

'#################################################################################
'##########################    Programme Principal    ############################  
'#################################################################################[/color]
[color=Purple]b3 [/color][color=DarkCyan]= [/color][color=Navy]33[/color]
[color=Purple]b5 [/color][color=DarkCyan]= [/color][color=Navy]55[/color]
[color=Purple]b7 [/color][color=DarkCyan]= [/color][color=Navy]77[/color]

[color=Blue]do

pause [/color][color=Navy]5     [/color][color=Green]' simulation du temps de calcul et gestion des TOR[/color]

[color=Blue]hi2cout [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b7[/color][color=Blue])          [/color][color=Green]' Envoi des donnees au SD20 pour MAJ[/color]

[color=Blue]loop[/color]
voici le résultat
la zone entourée en rouge sera zoomé dans l'image d'apres
Sans titre.jpg

Sans titre2.jpg
 

dje8269

Senior Member
J'en perds mon latin .

Après une tripoté de re-lance de l'analyseur j'ai obtenu ceci . une courbe de bien sur trois . est ce normal !!??!! la vraiment je sature , please help . Normalement les trois com auraient dues être pareil ; je comprends pas pourquoi .........
Une autre valeur de résistance pourrait elle changer quelques choses ? ( jai des 4.7K comme préconisé dans la DS )

Sans titre.jpg

Sans titre2.jpg
 

dje8269

Senior Member
Bon , j'espere enfin avoir trouvé le probléme , je n'ai pas d'explication , mais je vois que ca . Il s'agit de la commande RFin qui met le bazar .

J'ai enlevé la commande RFin sur le programme du 28X2 .

Et voici ce que j'obtiens 3 coup sur 3 .

View attachment 17556

View attachment 17557

Donc je pense que ca va compliqué le scmilblic . car il va falloir que je récupère mes infos juste avant le Rfin et juste après la MAJ . j'ai donc très peu de temps , mais vraiment pas beaucoup . l'interruption risque de revenir sur le devant de la scène du coup .
 

dje8269

Senior Member
Je confirme .

Sans RFin aucun raté :

Sans titre3.jpg

Bon ben c'est partis je me lance dans un travail de précision ...... mais du coup je suis tenté de refaire aussi mon multi-maitre !
 

dje8269

Senior Member
Je re-re-re-confirme .

Ici la courbe verte signifie a l'état bas Pendant le RFin , et l'état haut quand on est pas sur Rfin .

On voit clairement , que quand la courbe verte donc le programme n'est pas sur Rfin , la liaison passe impeccable ; et quand on est sur RFin ca bloc la liaison i2C .

Pouvez vous me confirmer , que par ma sueur , et de grosses prise de tête, mon raisonnement tient debout ?

LA COMMANDE RFIN, PETARDE LA LIAISON I2C .

Sans titre2.jpg

Bon je sais , qu'il faut pas être un ingénieur pour trouvé ca . Car la commande RFin est bloquante, mais de la empecher la lecture sur son scratchpad .
Maintenant je dois testé si le bazar est présent seulement , sur la liaison 28X2 / 20x2 ou sur tout le bus i2C quand je voudrais parlé avec mon SD20 .
 

PieM

Senior Member
Je suis très très surpris car la ligne scl est normalement sous contrôle du maître car c'est lui qui pilote le signal d'horloge.
de toute façon, si perturbation il y a c'est sur toute la ligne bien sûr y compris avec le SD20.

Fais le test de déconnecter les sda et slc du 20X2. laisse la ligne avec ses R pull up, tu mets une sonde sur la ligne scl et sda , et envoies des RFIN.
 

dje8269

Senior Member
de toute façon, si perturbation il y a c'est sur toute la ligne bien sûr y compris avec le SD20.
Hummm , sorry , mais jecrois que non .

Voici le test avec ce programme .

Code:
[color=Navy]#PICAXE [/color][color=Black]20X2[/color]

[color=Green]'###########################  Initialisation  ########################[/color]

[color=Blue]setfreq m8

hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%10100000[/color][color=Black], [/color][color=Blue]i2cfast_8[/color][color=Black], [/color][color=Blue]i2cbyte    [/color][color=Green]' met le 20X2 en mode maitre et le SD20 zsclave

'#################################################################################
'##########################    Programme Principal    ############################  
'#################################################################################[/color]
[color=Purple]b0 [/color][color=DarkCyan]= [/color][color=Navy]255[/color]
[color=Purple]b1 [/color][color=DarkCyan]= [/color][color=Navy]11[/color]
[color=Purple]b2 [/color][color=DarkCyan]= [/color][color=Navy]22[/color]
[color=Purple]b3 [/color][color=DarkCyan]= [/color][color=Navy]33[/color]
[color=Purple]b4 [/color][color=DarkCyan]= [/color][color=Navy]44[/color]
[color=Purple]b5 [/color][color=DarkCyan]= [/color][color=Navy]55[/color]
[color=Purple]b6 [/color][color=DarkCyan]= [/color][color=Navy]66[/color]
[color=Purple]b7 [/color][color=DarkCyan]= [/color][color=Navy]77[/color]

[color=Blue]do

hi2cout [PLAIN][[/PLAIN][/color][color=Navy]%10100000[/color][color=Blue][PLAIN]][/PLAIN][/color][color=Black],[/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Blue]) [/color][color=Green]' Envoi des infos au 28X2     [/color]
[color=Blue]pause [/color][color=Navy]2[/color]
[color=Blue]hi2cout [PLAIN][[/PLAIN][/color][color=Navy]%11000010[/color][color=Blue][PLAIN]][/PLAIN][/color][color=Black],[/color][color=Navy]16[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7[/color][color=Blue])      [/color][color=Green]' Envoi des donnees au SD20 pour MAJ[/color]

[color=Blue]loop[/color]
C'est simple j'écris un coup sur le picaxe 28X2 et un coup le SD20 ( que j'ai branché lol) .

On remarque clairement . que quand le programme est sur le RFin , pas de communication sur le 28X2 par contre il y a com sur le SD20 . et quand on est pas sur le RFin , les deux passent nickels .
Donc c'est bien le Rfin qui bloque sa communication avec le picaxe maitre. mais la liaison I2C reste intact on peut donc communiquer avec d'autres pendant le RFin .

Sans titre.jpg

J'ai toutefois une question ? j'envoie 4 bytes sur le SD20 , et seulement trois sont envoyées ou passe b7 ? Le SD20 serait il limiter a 3 byte par envoie .
Voici un zoom .

Sans titre2.jpg

Fais le test de déconnecter les sda et slc du 20X2. laisse la ligne avec ses R pull up, tu mets une sonde sur la ligne scl et sda , et envoies des RFIN.
Ok je te fais ca .
 

dje8269

Senior Member
Résultat de ton test ;

Encéphalogramme plat .

Sans titre.jpg

mais bon j'ai du loupé un truc , car si je débranche le sda et scl du 20X2 forcement je n'ai plus de commande hi2c ? vu quelles se trouvent sur le 20 X2
 

PieM

Senior Member
Alors si la perturbation est interne au 28X2, le mieux je pense, comme je te l'avais proposé, est d'utiliser un hserout vers le 20X2 qui te mettra directement les données dans le scratchpad en tâche de fond.
et tu réserves le I2C pour le reste.
 

dje8269

Senior Member
D'accord , par contre pourrait tu me demander juste quelques précisions. avec hserout vers le 20X2 , cela écrira dans le scratchpad du 20X2 ? pour aller le lire ces données je dois donc utilisé " get" ? Quand tu dis en tache de fond , cela signifie que je n'ai rien a faire ca reste transparent , c'est bien ca ?

je vais regarder la notice, mais il me semble qu'il y a un flag aussi pour hserout .ce qui m'arrangerai bien pour caler mes infos .

si tu as le temps , en quelques mots , quels sont les différences entre une com i2c et serin ?
 

PieM

Senior Member
D'accord , par contre pourrait tu me demander juste quelques précisions. avec hserout vers le 20X2 , cela écrira dans le scratchpad du 20X2 ? pour aller le lire ces données je dois donc utilisé " get" ? Quand tu dis en tache de fond , cela signifie que je n'ai rien a faire ca reste transparent , c'est bien ca ? OUI

je vais regarder la notice, mais il me semble qu'il y a un flag aussi pour hserout OUI .ce qui m'arrangerai bien pour caler mes infos .

si tu as le temps , en quelques mots , quels sont les différences entre une com i2c et serin ?
I2C est une com série synchrone rapide entre équipements proches multiples.
 

dje8269

Senior Member
I2C est une com série synchrone rapide entre équipements proches multiples.
Merci .

Je continue mes tests , et je confirme aussi que le SD20 , ne peut prendre que 3 ordres par envoie via la com i2C . La quatrième ou plus est toujours squizzé ; Je suppose que c'est du au programme pré-installé dans le pic . ca Peut toujours servir de le savoir au personne qui souhaite utilisé le SD20 et ses 20 commandes servos ( je pense notamment au fana de train miniature)

Niveau hard ca m'arrange pas de faire une liaison série ; je sais je suis gourmand . mais du coup avec toutes ces nouvelles infos apprises , je vais relancé mon mode multi-maitre , car j'y étais presque , y'a pas de raison que ca ne fonctionne pas . Et niveau fonctionnement c'est le top ; bon j'avoue que je vais pas essayer longtemps , car je me suis déjà bien cassé les dents dessus ; Mais si ca fonctionne j'ouvrirai un post pour faire un espèce de mini tuto si ça peut aider du monde ;
 

dje8269

Senior Member
Une dernière petite info pour la nuit ?

Je suis en train de regarder la fonction hint . qui semble prometteuse pour mes essais, mais je n'ai pas tout compris en suivant la notice .

J'utilise par exemple hint1 . donc je branche ma led du 28X2 , sur la broche hint1 (B.0) .

Dans la doc, il est dit d'utiliser la bit5 . à 1 pour un front montant et à 0 pour un front descendant . mais a c'est a dire . puis je declencher une interruption sur le front montant et une autre sur le front descendant ? Si c'est ca , c'est génial ; ( sur un front montant je passe en maitre , je traite , et sur le front descendant , je repasse en esclave )

et que signifié le bit1 , interruption vérifié ? il n'y a aucun exemple dans la doc .
 

PieM

Senior Member
puis je declencher une interruption sur le front montant et une autre sur le front descendant ? Si c'est ca , c'est génial ; ( sur un front montant je passe en maitre , je traite , et sur le front descendant , je repasse en esclave )
oui

et que signifié le bit1 , interruption vérifié ? il n'y a aucun exemple dans la doc .
il faut mettre le bit1 à 1 pour autoriser l'interruption hint1
 

dje8269

Senior Member
Bon j'avance encore un peu ! . le hi2cflag me met le bazar .

j'arrive maintenant a faire le multi-maitre . mais ce n'est pas encore au point . J'aurais aimé utilisé INT1 , mais je n'arrive a rien . je comprends pas son fonctionnement ;

Voici l'idée :

mon 28x2 allume une led . cette broche A.0, est egalement relié a mon 20X2 sur l'entre INT1(B.0) . donc quand cette led est allumé cela signifie que mon 28X2 va passer en maitre ( à l'instruction suivante) pour envoyer les infos . il faut donc passer le 20x2 en esclave pour les recevoir ( extrêmement vite).

Code:
[color=Navy]#PICAXE [/color][color=Black]28X2[/color]

[color=Green]'#################################################################################
'##########################     Programme 28X2 RX    #############################  
'#################################################################################

'########################  Configuration  ########################

'b0 a b7 pour les communications

'########################  Initialisation  ########################[/color]

[color=Blue]setfreq m8
hi2csetup i2cslave[/color][color=Black], [/color][color=Navy]%10100000                         [/color][color=Green]' Met le 28X2 en Esclave

'#################################################################################
'##########################    Programme Principal    ############################  
'#################################################################################[/color]
[color=Blue]do

RFin C.1[/color][color=Black],[/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7                      [/color][color=Green]' Enregistre les donnees du RX[/color]

[color=Blue]High A.0
hi2csetup i2cmaster[/color][color=Black], [/color][color=Navy]%10000000[/color][color=Black], [/color][color=Blue]i2cfast_8[/color][color=Black], [/color][color=Blue]i2cbyte    [/color][color=Green]' met le 28X2 en mode maitre  [/color]
[color=Blue]hi2cout [/color][color=Navy]0[/color][color=Black],[/color][color=Blue]([/color][color=Purple]b0[/color][color=Black],[/color][color=Purple]b1[/color][color=Black],[/color][color=Purple]b2[/color][color=Black],[/color][color=Purple]b3[/color][color=Black],[/color][color=Purple]b4[/color][color=Black],[/color][color=Purple]b5[/color][color=Black],[/color][color=Purple]b6[/color][color=Black],[/color][color=Purple]b7[/color][color=Blue])                   [/color][color=Green]' Envoi des donnees[/color]
[color=Blue]hi2csetup i2cslave[/color][color=Black], [/color][color=Navy]%10100000                         [/color][color=Green]' Met le 28X2 en Esclave[/color]
[color=Blue]low A.0

loop[/color]
Il faudrait donc que mon 20X2 passe en esclave sur un front montant de sa broche INT1 , et repasse en maitre sur un front descendant . Si jamais quelqu'un connait bien cette fonction , car je n'y suis pas arrivé .
 
Last edited:

PieM

Senior Member
hintsetup %00100010 :inter front montant de hint1
hintsetup %00000010 :inter front descendant de hint1

ensuite armement de l'interruption sur le flag de hint1:
setintflags %00000010, %00000010

Mais là il faut repasser en maitre qd tu as le hi2flag. C'est que tu as reçu les infos.
donc c'est un setintflags %01000000, %01000000

et gérer tout ça dans ton interruption qui va faire bascule entre master/slave !

bien compliqué !
 

dje8269

Senior Member
Merci PieM ,

Même après une nuit de réflexion j'ai pas réussis à le faire correctement . J'essaye tout de suite ton aide précieuse .
Je n'ai aucune explication, vu mon niveau mais je ne peux pas utilisé le hi2cflag . il me met le bazar . en fait quand j'utilise la commande hi2cflag ; il doit se passer un truc avec le changement de maitre a esclave , que le bus i2C n'aime pas ;

Il me faut donc utiliser la broche de la led pour détecter quand je passe en maitre et en esclave .

Hier soir j'ai reussis a faire le mode multi-maitre, c'est a dire que le 28 ecrit sur le 20 et ensuite le 20 ecrit sur le SD ; mais je n'ai pas fais de synchro , ce qui forcement des fois les deux voulais passés maitre ensemble . je dois donc trouvé l'astuce ultime , pour synchro c'est passage , pour ne pas qu'il se marchent dessus

Mais là il faut repasser en maitre qd tu as le hi2flag. C'est que tu as reçu les infos.
Avec les explication du dessus je ne peux pas utiliser hi2cflag pour repasser en maitre

Mais en fait l'interruption sert qu'a une seule chose maitre le 20x2en esclave attendre que le 28x2 lui écrive dessus et repassé en maitre .

bien compliqué !
Oui ,mais rudement efficace si ca fonctionne . et puis maintenant je commence a en faire une histoire personnelle de ce mode multi-maitre ; Si cette méthode fonctionne , je n'aurai aucun raté d'info une réaction optimum , une facilité de hard en évitant les problèmes dues au TX video a coté etc ...
 

PieM

Senior Member
Mais en fait l'interruption sert qu'a une seule chose maitre le 20x2en esclave attendre que le 28x2 lui écrive dessus et repassé en maitre .
Avec un hserout il n'y avait rien à faire. Ton 20X2 restait maître et plus besoin d'interruptions.
donc beaucoup plus simple et efficace en timing !
et tu pouvais mettre un simple 08M2 à la place de ton 28X2 !
 

dje8269

Senior Member
Avec un hserout il n'y avait rien à faire. Ton 20X2 restait maître et plus besoin d'interruptions.
Oui mais ca me fait faire une liaison série ; De toute façon je crois que je finir par passer a cette méthode si je n'y arrive pas .

tu pouvais mettre un simple 08M2 à la place de ton 28X2 !
Un 14M2 mieux pour le RFin lol ;
 

dje8269

Senior Member
c'est 1 fil à mettre entre deux broches ! si tu veux je t'en envoie un....
ca devrait aller ! merci quand même ....... :rolleyes:

Je n'y arrive pas , mes pinceaux se mélange je pense

Voila ce que j'aimerais reussir a faire

Sans titre.jpg

Mais en fait on ne peut faire qu'une seule interruption sur les picaxes ? genre interrupt , interrupt1 , interrupt2 , ca n'est pas possible ?
 
Last edited:

PieM

Senior Member
#74 : "et gérer tout ça dans ton interruption qui va faire bascule entre master/slave !
 
Top