code qui ne fonctionne pas

Anubis1985

Senior Member
bonjour,

j'ai tester ce code pour faire passer des varriable d'un 14m2 a un 28x1 mais b1 est toujour égale a 0.
apprés plusieur manipulation du code récuperé dans le manuel 2 page 77 , je ne trouve pas la solution.

code du 14m2:


init: hi2csetup i2cmaster, %10100000, i2cslow, i2cbyte

main:
inc b11 ; increment variable
hi2cout 0,(b11) ; send value to byte 0 on slave
pause 200 ; wait a while
goto main
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

code du 28x1:

init: hi2csetup i2cslave, %10100000

main:'récepteur
high B.7
'pause 200
hi2cflag = 0 ; reset flag
get hi2clast,b11
'let outpins = b11
pause 50
debug
goto main
 

PieM

Senior Member
bonjour,

Dans un post précédent vous faisiez état d'un 28X2. Maintenant c'est un 28X1 :confused:
dans ce cas il est normal que ça ne marche pas. Un X1 ne peut pas être déclaré comme I2Cslave.

correction :

Il semblerait que dans la doc ça ne soit pas évident :
on peut lire : hi2csetup - slave mode (X2 parts only)

et effectivement voir en dessous un code pour des X1 !!! Pas bien clair.

Je n'ai malheureusement pas de X1 sous la main pour faire des tests .
ça demande réflexion !!

Vous avez bien mis les résistance de 4.7k entre +5V et les deux lignes I2C ?
 
Last edited:

zebulon

Member
Bonjour,

Dans le code, il vaut mieux ajouter la directive #picaxe; ainsi, à la compilation, le compilateur indique les fonctions non compatibles.

Ainsi on a :
pour le 14M2 : #picaxe 14M2
pour le 28X1 : #picaxe 28X1

Facile, non ?

A+,
Guillaume
 

PieM

Senior Member
Petit programme simple de test :

Code:
# picaxe 14M2
init: hi2csetup i2cmaster, %10100000, i2cslow, i2cbyte
'======================================
main:
[INDENT]inc b11 ; incremente la variable b11
hi2cout 0,(b11) ; écrit la valeur de b11 dans le scrachpad de 28X1, à l'adresse 0
pause 50
hi2cin 10, (b12) ; lit la valeur qui est à l'adresse 10 du scrachpad de 28X1, et l'affecte à b12
debug
pause 200 [/INDENT]
goto main

__________________________________________

# picaxe 28X1
init: hi2csetup i2cslave, %10100000
'===============================
main:
[INDENT]get 0,b3   ' récupère la variable du scratchpad à l'adresse 0 et l'affecte à b3 ( c'est en fait b11 du 14M2, mais on n'est pas obligé de conserver le même nom en local)
pause 50
put 10, b3 ' reécrit la valeur de b3 à l'adresse 10
pause 50[/INDENT]
goto main
Explication :

le maître 14M2 incrémente une variable.
Il la transmet à l'adresse 0 de l'esclave.
l'esclave lit cette valeur, et la réécrit à une autre position de son scratchpad (10)
le maître va lire cette valeur dans le scratchpad de l'esclave à cette nouvelle adresse.

Ainsi la boucle est bouclée: chacun peut lire et écrire des données dans la mémoire scratchpad de l'esclave.

Nota: le nom des variable étant local, il n'est pas nécessaire que la variable b11 transmise par l'un soit récupérée par l'autre sous le même nom.( Ici, b11 de 14M2 devient b3 de 28X1, et est récupéré sous b12 de 14M2 :))

Rappel : Vous avez bien mis les résistance de 4.7k entre +5V et les deux lignes I2C ?
 
Last edited:

Anubis1985

Senior Member
oui les résistance son présente est son connecter au +5v.
j'ai trouver d'ou venai l'eureur. le 28x1 avais perdu un point de connection (connetion scl). alor je les enfoncer au maximum
pour que ca face contacte et mintenant ca marche.
cependent,j'ai remarquer que l'on pouvais faire passer au maximum 8 variable.
de b0 a b7. si par exemple ,je fais passer une varable b8. cette varriable sera récuperé par l'autre microcontroleur comme varialbe b7. si cela peut interesser.
 

PieM

Senior Member
Bonjour,

Il doit y avoir un problème dans votre code !

un extrait d'un programme que j'utilise entre un 18M2 et un 28X2:
Code:
transfert1:
[INDENT]high busy
hi2csetup i2cmaster, $A0, i2cfast_8, i2cbyte
pause 10
hi2cout  10, (b2,b3,b4,b5,b6,b14,b15,b16,b17)
low busy[/INDENT]
return
quel est votre programme, sur chaque picaxe ?
 

Anubis1985

Senior Member
ok. merci. je testerais le code samedi soir. le code que j'ai donner au débu est un code teste. le véritable programme n'est pas encore crée car le circuit imprimer n'est pas encore crée. il est a l'étude. et j'avais besoin de métriser ce code pour ne rien oublier et ne pas avoire de surprise quand le cuicuit imprimer sera crée et assembler.
 
Top