Signal irout trop rapide

GM39

Senior Member
Bonjour à tous,

Suite à des erreurs de transmission de commande infrarouge avec un 18M2 et irout (ou infraout) j'ai mesuré le signal à l'oscillo.

Pour start + 1 blanc : 2780µs soit un écart de 220µs par rapport à la valeur théorique de 3000µs
Pour 0 + 1 blanc : 1120µs soit -80µs / 1200µs
Pour 1 + 1 blanc : 1680µs soit -120µs / 1800µs

Ce qui est beaucoup et peut entraîner des erreurs sur une trame de 12 bits.

En comparaison avec TVR010A dans les 3 cas l'écart maxi mesuré est de 20µs.
(Pour 18M2 et TVR010A la porteuse est à T=24µs soit 41.6 kHz)

L'instruction calibfreq n'a pas eu d'effet sensible et j'ai testé 3 picaxes (2x18M2 et 1x18M2+).
 

MGU

Senior Member
Bonjour,

Je suis un peu étonné que la commande calibfreq n'ait pas eu d'effet.
Quels paramètres ont été essayés exactement et quelle variation de fréquence obtenue?

MM
 

GM39

Senior Member
Bonjour,

Voilà les résultats obtenus sur une seule mesure par cas.
La porteuse est mesurée sur 10 périodes.

calibfreq 0 :
T=24µs
start+blanc : 2760µs
0+blanc : 1120µs
1+blanc : 1680µs

calibfreq 12 :
T=23,8µs
start+blanc : 2740µs
0+blanc : 1120µs
1+blanc : 1640µs

calibfreq -12 :
T=24,2µs
start+blanc : 2800µs
0+blanc : 1140µs
1+blanc : 1680µs

L'erreur semble venir du comptage des périodes de la porteuse dans la génération du signal.
 

PieM

Senior Member
Bonjour,

Suite à des erreurs de transmission de commande infrarouge avec un 18M2 et irout
Quel type d'erreur ?
Le nombre de bits importe peu puisque la mesure se fait entre fronts du signal démodulé.

Dans ces problèmes de transmission, il y a deux choses: l'émetteur et le décodage des pulses dans le récepteur. Les tolérances SIRC sont en principe larges.
Quel filtre utilisez vous à la réception? centré sur 40 kHz?
Aussi sur un 18M2 ?
Il faut savoir que le 18M2 est réputé pour ses problèmes d'horloge !
Vous pouvez agir sur le calibfreq du récepteur et de l'emetteur entre -32 et + 32
 

GM39

Senior Member
Bonjour,

Voilà le type d'erreur obtenu

Programme émetteur :
Code:
#picaxe 18M2
	symbol commande = b4

main:
	commande = 8
	gosub envoyer
	
	commande = 10
	gosub envoyer

	commande = 13
	gosub envoyer
	
	commande = 3
	gosub envoyer
	
	goto main
	
	envoyer:
		for b5=1 to 2
			irout B.0,1,commande
			pause 50
		next b5
		return
Programme récepteur :
Code:
#picaxe 20X2
main:
	irin C.0,b1
	sertxd(#b1,32)
	goto main
Résultat :
8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3
3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 8 8 10 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 8 8 10 10 13 13 3 3 8 8
10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10
10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 10 10 5 3 3 0 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10
13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 8 0 10 13 13 3 3 8 8 10 13
13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 8 8 10 10 13
13 3 8 8 10 10 13 13 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13
3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 10 10 13 9 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13
3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 2 10 13 13 3 3 8 8 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 5 3
3 8 8 10 10 13 13 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13
3 3 8 8 10 10 13 13 3 3 8 8 10 8 13 13 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 5 3 3 8 8 10 10 5 13 3
3 8 8 10 10 13 13 3 3 8 8 10 10 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3
3 8 8 10 10 13 13 1 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 2 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3
3 8 8 10 10 13 13 3 3 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 13 13 3 3 8 8 10 10 5 8

Perdre des données ce n'est pas gênant, la répétition est là pour ça, mais récupérer des codes qui ne sont pas censés être émis c'est embêtant.

Là le récepteur est un 20X2, mais j'ai le même problème avec un 18M2.
 
Last edited:

PieM

Senior Member
Essayez de mettre une pause de 200 ms par exemple entre chaque "envoyer" de l'émetteur.
 

GM39

Senior Member
J'ai testé un 20X2 en émission (avec un bot120) :
T=24µs
start+blanc : 2800µs
0+blanc : 1120µs
1+blanc : 1680µs

J'obtiens les mêmes erreurs.

J'ai modifié le programme pour n'envoyer que des 3 et je récupère de temps à autre 0, 1 et 2.
Même test en utilisant la TVR010 je n'ai que des 3.

Sur la TVR010 l'intervalle mesuré entre 2 starts est de 44ms donc plus rapide que ce que j'effectue.
 

MGU

Senior Member
Vous pouvez agir sur le calibfreq du récepteur et de l'emetteur entre -32 et + 32
Bonjour,

C'est sûr? Dans la doc, j'ai lu -15 à + 15

Ça vaudrait peut être le coup d'essayer d'aligner les fréquences pour lever le doute en poussant calibfreq un peu plus loin.
Si cela provoque un problème de reprogrammation, penser au Hard Reset.

MM

MM
 

GM39

Senior Member
Bonjour,
Sur les anciennes docs il y avait -31 / +31 mais hard reset assuré.

Du coup j'ai généré directement le signal ir
Programme avec irout :
Code:
#picaxe 20X2
	symbol commande = b4

main:
	commande = 3
	gosub envoyer
	
	commande = 10
	gosub envoyer

	commande = 13
	gosub envoyer
	
	commande = 8
	gosub envoyer
	
	goto main
	
	envoyer:
		for b5=1 to 2
			irout B.0,1,commande
			pause 50
		next b5
		return
Programme sans irout :
(sans boucle for car trop lent, il faudrait même sans gosub pour être plus précis, les écarts obtenus sont de 40µs maxi)
Code:
#picaxe 20X2
	symbol commande = w0
	symbol donnee = bit0
	symbol rang = b2

	
	setfreq m32
	'pwmout C.5, 191, 253
main:
	commande = 3 + 128
	gosub envoyer
	pause 50
	commande = 10 + 128
	gosub envoyer
	pause 50
	commande = 13 + 128
	gosub envoyer
	pause 50
	commande = 8 + 128
	gosub envoyer
	pause 50			
	goto main

envoyer:
	gosub start		

	if bit0 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit1 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit2 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit3 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit4 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit5 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit6 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit7 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit8 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit9 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit10 = 0 then
		gosub zero
	else
		gosub un
	endif

	if bit11 = 0 then
		gosub zero
	else
		gosub un
	endif

	return

start:
	pwmout C.5, 191, 253
	pauseus 900
	pwmout C.5, OFF
	pauseus 40
	return

zero:
	pwmout C.5, 191, 253
	pauseus 190
	pwmout C.5, OFF
	pauseus 0
	return

un:
	pwmout C.5, 191, 253
	pauseus 430
	pwmout C.5, OFF
	pauseus 10
	return
Avec la deuxième version je ne suis pas parvenu à faire apparaitre des erreurs en orientant la télécommande dans toutes les directions (c'est pour la commande d'un engin mobile). Malheureusement ça ne marche qu'avec un 20X2.

Ce serait bien qu'une correction soit apportée.
 

GM39

Senior Member
Bonjour,

Voilà la version pour 18M2 (et sans doute les autres M2)
Code:
#picaxe 18M2
	symbol commande = w0	;b0 et b1 réservés
	symbol donnee = bit0
	symbol repetition = b2

	symbol s_ir = B.6		;sortie IR

	symbol t_start = 1810
	symbol t_zero = 242
	symbol t_un = 750
	symbol t_blanc_start = 290
	symbol t_blanc =290
	
	symbol T_pwm = 199 	;fréquence porteuse 40kHz
	symbol D_pwm = 264 	;rapport cyclique 33%
	
	setfreq m32
main:
	commande = 2 + 128
	gosub envoyer

	commande = 10 + 128
	gosub envoyer

	commande = 13 + 128
	gosub envoyer

	commande = 8 + 128
	gosub envoyer
		
	goto main

envoyer:
	for repetition=1 to 2
		pwmout s_ir, T_pwm, D_pwm
		pauseus t_start
		pwmout s_ir, OFF
		pauseus t_blanc_start
		
		pwmout s_ir, T_pwm, D_pwm
		if bit0 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc	

		pwmout s_ir, T_pwm, D_pwm
		if bit1 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit2 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit3 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit4 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit5 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit6 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit7 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit8 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit9 = 0 then
			pauseus t_zero
		else
		pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc
	
		pwmout s_ir, T_pwm, D_pwm
		if bit10 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pwmout s_ir, T_pwm, D_pwm
		if bit11 = 0 then
			pauseus t_zero
		else
			pauseus t_un
		endif
		pwmout s_ir, OFF
		pauseus t_blanc

		pause 200	; 45ms entre 2 start
	next repetition
	return
 
Last edited:
Top