PICAXE et Modules GROVE

amatpicax59

New Member
Dans le post « picaxe et afficheur segment « de JRTEC du 10/09/13, BESQUEUT écrit « Si c'est seulement pour afficher des chiffres, il y a ça aussi (moins cher...) :
http://www.gotronic.fr/art-afficheur...291p-19020.htm -- Commandez en même temps le câble de liaison qui vous va le mieux.. »

Effectivement, c’est une très bonne idée car en alliant un montage à Picaxe avec le systéme Grove on pourrait utiliser des modules Grove tels que, par exemple,
Afficheur 4 digits Grove LED05291P, Module bargraphe Grove LED05031P, Afficheur LCD série Grove LCD23154P

Mais comment relier et programmer un picaxe à un module grove dont le connecteur comprend 4 broches CLK, DIO, VCC, GND.

Par exemple avec un 08M2 après un « readadc 1,b1 « , comment programmer le picaxe pour envoyer la valeur de b1 vers le module grove afin d’afficher la valeur de b1 sur l’afficheur 4 digits Grove LED05291P ?
Comment cabler le picaxe et le module groove ?

Cela peut paraître évident pour beaucoup, mais, moi aussi, je débute !

GRAND BRAVO à BESQUEUT et aux volontaires pour le Manuel PICAXE BASIC pour débutants en Français
 

BESQUEUT

Senior Member
Effectivement : pas moyen de trouver la doc du TM1637 utilisé.
J'ai trouvé celle du TM1638 qui semble être son grand frère :
http://ftp.jaist.ac.jp/pub//sourceforge/m/ms/msp430-tm1638/Datasheets/
C'est une liaison série synchrone qui ressemble à du I2C.
Pour le reste, la bibliothèque TM1637 donne la marche à suivre, mais il faut traduire depuis le C...

Pour le bargraph, le MY9221 est correctement documenté. Mais là encore il y a du travail coté soft...
Solution sympa d'un point de vue électronique, mais reste effectivement à trouver le quidam qui fera marcher ça sur un Picaxe.

Le système Groove ne normalise que le câblage (c'est pour ça que j'ai indiqué qu'il faut penser à prendre avec le circuit le câble qui va bien)
Il y a deux fils d'alim et deux ports du microcontrôleur.

Pour le reste, ça peut être du tout ou rien, du I2C, du RS232, du PWM, de l'ADC,... suivant le module !
 
Last edited:

GM39

Senior Member
Voilà un programme de test pour ce module. Testé sur 28X2 mais compatible avec les autres à priori mais à quelle fréquence ?
Ca affiche "1234"
Code:
symbol clk=B.2
symbol dio=B.0
symbol pinDio=pinB.0
symbol i=b2
symbol j=b3
symbol Octet=b0
symbol Chiffre=b1

main:
	gosub I2CStart
	Octet=$40
	gosub I2CWrByte
	gosub I2CAsk
	gosub I2CStop
	gosub I2CStart
	Octet=$c0
	gosub I2CWrByte
	gosub I2CAsk

	Chiffre=1
	gosub DecTo7seg
	gosub I2CWrByte
	gosub I2CAsk

	Chiffre=2
	gosub DecTo7seg
	gosub I2CWrByte
	gosub I2CAsk

	Chiffre=3
	gosub DecTo7seg
	gosub I2CWrByte
	gosub I2CAsk

	Chiffre=4
	gosub DecTo7seg
	gosub I2CWrByte
	gosub I2CAsk
	
	gosub I2CStop
	gosub I2CStart
	Octet=$8f
	gosub I2CWrByte
	gosub I2CAsk
	gosub I2CStop
	
	pause 1000
	goto main


I2CStart:
	high clk
	high dio
	low dio
	return
	
I2CStop:
	low clk
	low dio
	high clk
	high dio
	return

I2CAsk:
	low clk
	do:loop while pinDio=1
	high clk
	low clk	
	return

I2CWrByte:
	for i=1 to 8
		low clk
		if bit0=1 then high dio else low dio endif
		Octet = Octet/2
		high clk		
	next i
	return

DecTo7seg:
	select case Chiffre
		case 0
			Octet=$3f
		case 1
			Octet=$06
		case 2
			Octet=$5b
		case 3
			Octet=$4f
		case 4
			Octet=$66
		case 5
			Octet=$6d
		case 6
			Octet=$7d
		case 7
			Octet=$07
		case 8
			Octet=$7f
		case 9
			Octet=$6f
		case 10 ;A
			Octet=$77
		case 11 ;B
			Octet=$7c
		case 12 ;C
			Octet=$39
		case 13 ;D
			Octet=$5e
		case 14 ;E
			Octet=$79
		case 15 ;F
			Octet=$71	
	endselect
	return
La doc du TM1637 (en chinois)
http://www.titanmec.com/docc/product-downloads-48.html
La doc du TM1638 (en anglais), il y a des similitudes
http://www.titanmec.com/doce/product-downloads-182.html
 

GM39

Senior Member
Pour afficher un nombre de 4 chiffres (sur M2)
Code:
symbol clk=B.2
symbol dio=B.0
symbol pinDio=pinB.0
symbol i=b2
symbol j=b3
symbol Octet=b0
symbol Chiffre=b1
symbol Div=w2
symbol Nombre=w3	; nombre de 4 chiffres à afficher

symbol TypeAdr=$40	 ; adressage auto-incrémenté
symbol AdrDep=$c0	 ; adresse du 1er chiffre (poids fort)
symbol RegLum=$8f	 ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité)		

	Nombre=1234
main:
	gosub I2CStart
	Octet=TypeAdr
	gosub I2CEnvoiOctet
	gosub I2CStop

	gosub I2CStart
	Octet=AdrDep
	gosub I2CEnvoiOctet
	Nombre=Nombre//10000	; écrêtage
	Div=1000
	for j=1 to 4
		Chiffre=Nombre/Div
		gosub DecTo7seg
		gosub I2CEnvoiOctet
		Nombre=Nombre//Div
		Div=Div/10
	next j
	gosub I2CStop

	gosub I2CStart
	Octet=RegLum 
	gosub I2CEnvoiOctet
	gosub I2CStop
	
	end

I2CStart:
	high clk
	high dio
	low dio
	return
	
I2CStop:
	low clk
	low dio
	high clk
	high dio
	return

I2CEnvoiOctet:
	for i=1 to 8		; envoi
		low clk
		if bit0=1 then high dio else low dio endif
		Octet = Octet/2
		high clk		
	next i
	
	low clk		; traitement ACK
	do:loop while pinDio=1
	high clk
	low clk
	return

DecTo7seg:
	lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f),Octet	; 0-9 uniquement
	return
 

GM39

Senior Member
Voilà le code pour le bargraphe grove 10 leds à 3,80 € qui utilise un MY9221 http://www.seeedstudio.com/wiki/images/9/98/MY9221_DS_1.0.pdf .
Il nécessite l'utilisation de 2 sorties, l'intensité est réglable par programme et il n'y a pas à se soucier du courant de sortie :p

Testé avec 28X2 à 4 et 16MHz, le code est compatible M2 :
Code:
#picaxe 28X2
#no_table

setfreq m16

symbol di=B.2
symbol pinDi=pinB.2
symbol dcki=B.0

symbol Mot=w0	; b0,b1
symbol i=b2
symbol j=b3
symbol k=b4
symbol NbLeds=b5	; nombre de leds à allumer [0,10]

symbol allume=$0022	; [$01,$ff] en mode 8 bits
symbol eteint=$0000
symbol CMD=$0000	; mot CMD voir doc MY9221 page 13, mode 8bits entre autres

low dcki

'** test dent de scie **
do
	NbLeds=b10
	gosub BarGraphDirect
	inc b10
	if b10>10 then let b10=0 endif
loop


BarGraphDirect:	; niveau bas rouge
	Mot= CMD
	gosub EnvoiMot
	for j=1 to 12
		if NbLeds>=j then let Mot=allume else let Mot=eteint endif
		gosub EnvoiMot
	next j
	gosub Affichage
	return
	
BarGraphInverse:	; niveau haut rouge
	Mot= CMD
	gosub EnvoiMot
	for j=12 to 1 step -1
		k=NbLeds+2
		if k>=j then let Mot=allume else let Mot=eteint endif
		gosub EnvoiMot
	next j
	gosub Affichage
	return	
	

EnvoiMot:
	for i=1 to 16
		pinDi=bit15	; poids fort en premier
		toggle dcki
		Mot=Mot*2
	next i
	return
	
Affichage:
	low di
	pauseus 300		; pause de 220µs mini
	for i=1 to 4
		high di
		low di
	next i
	return
 

MGU

Senior Member
Pour afficher un nombre de 4 chiffres (sur M2)
Code:
symbol clk=B.2
symbol dio=B.0
symbol pinDio=pinB.0
symbol i=b2
symbol j=b3
symbol Octet=b0
symbol Chiffre=b1
symbol Div=w2
symbol Nombre=w3	; nombre de 4 chiffres à afficher

symbol TypeAdr=$40	 ; adressage auto-incrémenté
symbol AdrDep=$c0	 ; adresse du 1er chiffre (poids fort)
symbol RegLum=$8f	 ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité)		

	Nombre=1234
main:
	gosub I2CStart
	Octet=TypeAdr
	gosub I2CEnvoiOctet
	gosub I2CStop

	gosub I2CStart
	Octet=AdrDep
	gosub I2CEnvoiOctet
	Nombre=Nombre//10000	; écrêtage
	Div=1000
	for j=1 to 4
		Chiffre=Nombre/Div
		gosub DecTo7seg
		gosub I2CEnvoiOctet
		Nombre=Nombre//Div
		Div=Div/10
	next j
	gosub I2CStop

	gosub I2CStart
	Octet=RegLum 
	gosub I2CEnvoiOctet
	gosub I2CStop
	
	end

I2CStart:
	high clk
	high dio
	low dio
	return
	
I2CStop:
	low clk
	low dio
	high clk
	high dio
	return

I2CEnvoiOctet:
	for i=1 to 8		; envoi
		low clk
		if bit0=1 then high dio else low dio endif
		Octet = Octet/2
		high clk		
	next i
	
	low clk		; traitement ACK
	do:loop while pinDio=1
	high clk
	low clk
	return

DecTo7seg:
	lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f),Octet	; 0-9 uniquement
	return
Bonjour,

Je viens de tester ce code sur un module 4 digits chinois identique au Grove, et un picaxe M2, mais il ne s'allume pas. Je vais tester un Grove, pour voir.

MM
 

GM39

Senior Member
Je referai le test dès que j'aurai retrouvé le module, des fois que je n'ai pas collé le bon programme.
 

GM39

Senior Member
Retour sur le bargraphe, tests sur 18M2 à 4 et 32MHz et sur 20X2 à 4 et 64Mhz

Le code légèrement simplifié :
Code:
#picaxe 20X2
#no_table

setfreq m64

symbol di=B.2
symbol pinDi=pinB.2
symbol dcki=B.0

symbol Mot=w0	; b0,b1
symbol i=b2
symbol j=b3
symbol NbLeds=b4	; nombre de leds à allumer [0,10]

symbol allume=$0022	; intensité [$01,$ff] en mode 8 bits
symbol eteint=$0000
symbol CMD=$0000	; mot CMD voir doc MY9221 page 13, mode 8bits entre autres

low dcki

'** test dent de scie **
do
	NbLeds=b10
	gosub BarGraphDirect
	inc b10
	if b10>10 then let b10=0 endif
loop


BarGraphDirect:	; niveau bas rouge
	Mot= CMD
	gosub EnvoiMot
	for j=1 to 12
		if NbLeds>=j then let Mot=allume else let Mot=eteint endif
		gosub EnvoiMot
	next j
	gosub Affichage
	return
	
BarGraphInverse:	; niveau haut rouge
	Mot= CMD
	gosub EnvoiMot
	NbLeds=NbLeds+2
	for j=12 to 1 step -1
		if NbLeds>=j then let Mot=allume else let Mot=eteint endif
		gosub EnvoiMot
	next j
	gosub Affichage
	return	
	

EnvoiMot:
	for i=1 to 16
		pinDi=bit15	; poids fort en premier
		toggle dcki
		Mot=Mot*2
	next i
	return
	
Affichage:
	low di
	for i=1 to 4
		high di
		low di
	next i
	return
 

Technoman

Senior Member
Bonsoir,

Mais comment relier et programmer un picaxe à un module grove dont le connecteur comprend 4 broches CLK, DIO, VCC, GND.
Nous avons acheté un ensemble Grove base shield et différents modules Grove pour Arduino. L'idée était aussi de faire l'acquisition de modules AXE401 (très bon rapport qualité/prix) pour les connecter aux modules Grove via le shield. D'après une demande faite par mes soins sur le forum anglophone, il semblerait que cela devrait fonctionner sans problème, excepté pour les modules avec liaison I2C, car les sorties I2C sur le 28X2 ne sont pas au même endroit. Le concept Grove est intéressant, notamment pour un usage pédagogique.
 

GM39

Senior Member
excepté pour les modules avec liaison I2C, car les sorties I2C sur le 28X2 ne sont pas au même endroit.
Sur la base V1.3 une légère modif (2 pistes à couper et 2 straps) est c'est bon.
Le connecteur ISP est à supprimer aussi, il suffit de couper les broches à ras sur la partie inférieure.
 

Technoman

Senior Member
@GM39

Merci pour l'info. Je me demande si ce module aurait pu être plus compatible avec les différents shields avec un autre routage.
 

GM39

Senior Member
Il faudrait faire le bilan des problèmes de compatibilité, je n'ai pas d'autres shield, je ne sais pas s'il n'y a que i2c qui pose problème. Sans refaire l'axe401 on peut imaginer un shield intermédiaire pour établir la compatibilité.
La base grove n'est pas optimale non plus, toutes les e/s ne sont pas sur un connecteur alors qu'il y a 4 i2c
 

GM39

Senior Member
Bonjour,

Je viens de tester ce code sur un module 4 digits chinois identique au Grove, et un picaxe M2, mais il ne s'allume pas. Je vais tester un Grove, pour voir.

MM
Je viens de refaire le test, ça fonctionne. C'est curieux, difficile de croire à un problème de compatibilité il n'y a qu'un tm1637, 4 condensateurs et 2 résistances !
Je n'ai pas de version chinoise pour tester (à 2€ ça vaut le coup).

J'ai apporté une petite simplification :
Code:
symbol clk=B.2
symbol dio=B.0
symbol pinDio=pinB.0
symbol i=b2
symbol j=b3
symbol Octet=b0
symbol Chiffre=b1
symbol Div=w2
symbol Nombre=w3	; nombre de 4 chiffres à afficher

symbol TypeAdr=$40	 ; adressage auto-incrémenté
symbol AdrDep=$c0	 ; adresse du 1er chiffre (poids fort)
symbol RegLum=$8f	 ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité)		

	Nombre=1234
main:
	gosub I2CStart
	Octet=TypeAdr
	gosub I2CEnvoiOctet
	gosub I2CStop

	gosub I2CStart
	Octet=AdrDep
	gosub I2CEnvoiOctet
	Nombre=Nombre//10000	; écrêtage
	Div=1000
	for j=1 to 4
		Chiffre=Nombre/Div
		gosub DecTo7seg
		gosub I2CEnvoiOctet
		Nombre=Nombre//Div
		Div=Div/10
	next j
	gosub I2CStop

	gosub I2CStart
	Octet=RegLum 
	gosub I2CEnvoiOctet
	gosub I2CStop
	
	end

I2CStart:
	high clk
	high dio
	low dio
	return
	
I2CStop:
	low clk
	low dio
	high clk
	high dio
	return

I2CEnvoiOctet:
	for i=1 to 8		; envoi
		low clk
		pinDio=bit0
		Octet = Octet/2
		high clk		
	next i
	
	low clk		; traitement ACK
	do:loop while pinDio=1
	high clk
	low clk
	return

DecTo7seg:
	lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f),Octet	; 0-9 uniquement
	return
 

MGU

Senior Member
]
Je viens de refaire le test, ça fonctionne. C'est curieux, difficile de croire à un problème de compatibilité il n'y a qu'un tm1637, 4 condensateurs et 2 résistances !
Je n'ai pas de version chinoise pour tester (à 2€ ça vaut le coup).

J'ai apporté une petite simplification :
Code:
symbol clk=B.2
symbol dio=B.0
symbol pinDio=pinB.0
symbol i=b2
symbol j=b3
symbol Octet=b0
symbol Chiffre=b1
symbol Div=w2
symbol Nombre=w3	; nombre de 4 chiffres à afficher

symbol TypeAdr=$40	 ; adressage auto-incrémenté
symbol AdrDep=$c0	 ; adresse du 1er chiffre (poids fort)
symbol RegLum=$8f	 ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité)






	Nombre=1234
main:
	gosub I2CStart
	Octet=TypeAdr
	gosub I2CEnvoiOctet
	gosub I2CStop

	gosub I2CStart
	Octet=AdrDep
	gosub I2CEnvoiOctet
	Nombre=Nombre//10000	; écrêtage
	Div=1000
	for j=1 to 4
		Chiffre=Nombre/Div
		gosub DecTo7seg
		gosub I2CEnvoiOctet
		Nombre=Nombre//Div
		Div=Div/10
	next j
	gosub I2CStop

	gosub I2CStart
	Octet=RegLum 
	gosub I2CEnvoiOctet
	gosub I2CStop
	
	end

I2CStart:
	high clk
	high dio
	low dio
	return
	
I2CStop:
	low clk
	low dio
	high clk
	high dio
	return

I2CEnvoiOctet:
	for i=1 to 8		; envoi
		low clk
		pinDio=bit0
		Octet = Octet/2
		high clk		
	next i
	
	low clk		; traitement ACK
	do:loop while pinDio=1
	high clk
	low clk
	return

DecTo7seg:
	lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f),Octet	; 0-9 uniquement
	return

Bonjour,

Merci pour le test. Mon chinois doit avoir un problème.

A suivre
MM
 

MGU

Senior Member
Bonjour,

Petit retour pour info, le test avec un module Grove fonctionne bien.
J'ai contacté le vendeur chinois, après plusieurs échanges, il m'a envoyé ce lien pour m'aider:
http://pan.baidu.com/s/1jGfy2qy

Ils sont gentils, ces chinois...les échanges ne sont pas terminés.

MM
 

GM39

Senior Member
Après examen les modifs concernent les tableaux 1 et 3 de la page 14.
Le code est identique à première vue.
 

MGU

Senior Member
Bonjour,

Pour info, le fournisseur chinois m'envoie un nouvel exemplaire, ça fera deux tests

A suivre
MM
 

MGU

Senior Member
View attachment 17277

Vu que la version anglaise de la doc du TM1638 n'est plus dispo sur le site du fabricant, je la remets ici.
Il y a des similitudes avec celle du TM1637

中文难

Merci 中文难

Il y a en effet beaucoup de ressemblances.

Voici ce que j'ai tiré de ton code et de la doc chinoise (en attendant de lire celle du TM1638)

http://electromag1.wifeo.com/afficheurs-pilotes-par-tm1637.php
http://electromag1.wifeo.com/minuterie-base-picaxe-08m2-et-afficheur-tm1637.php

J'espère qu'il n'y a pas trop d'erreurs.
Qu'en pensez vous?

MM
 
Top