Prépositionner une valeur en Eeprro, avant téléchargement.

jojojo

Senior Member
Hello!

Bon, le titre du post n'est pas évident.
Je vais tenter de m'exprimer plus clairement.

Il s'agit d'un projet de télécommande HF, le principe étant de transmettre 3 valeurs de 0 à 9 (clavier), avec validation par une des touches A ou B.

Pour ce faire, le pic memorise en Eeprom les trois valeurs tapées (sachant, que le système n'est actif QUE si une touche est enfoncée, conso oblige, cf schéma), puis les envoie, en Manchester, via le Laipac.

Bien sûr, les "gardes-fous" interdisent la validation d'un code invalide (pas de valeur, seulement deux valeurs).

Le souci (pas grave, mais ça me tracassouille ...), c'est que, forcément, à l'issu du premier téléchargement de programme dans le pic, le contenu des trois adresses Eeprom n'est pas défini.

Ce qui implique, de facto que la première utilisation pourra être erronée (validation d'une ou deux entrée(s) fonctionnelle Aie !)

Question, donc : Existe-t-il un moyen de "pré-positionner" une valeur en Eeprom, AVANT le téléchargement ?

Code et schéma:

Code:
'Telecommande Manchester 14M2
'Emetteur
'G.Treels
'05/2013

'Code à trois chiffre, validé soit par "A", soit par "B"
'Sortie en cmd Laipac 432Mhz, 10 trames



#picaxe 14M2
Let dirsC=%000010
Let dirsB=%110000
Symbol LED=C.4
Symbol TX=B.2


Debut:
	
	
	Readadc b.3,b0				'U fct touche, cf schema
	
	Select b0
	Case >155
		b1="A"
		Gosub WriteEeprom
		Goto debut
	Case >145
		b1="1"
		Gosub WriteEeprom
		Goto debut
	Case >135
		b1="4"
		Gosub WriteEeprom			'Explo clavier, via ADC
		Goto debut
	Case >125
		b1="7"
		Gosub WriteEeprom
		Goto debut
	Case >115
		b1="0"
		Gosub WriteEeprom
		Goto debut
	Case >108
		b1="2"
		Gosub WriteEeprom
		Goto debut
	Case >102
		b1="5"
		Gosub WriteEeprom
		Goto debut
	Case >95
		b1="8"
		Gosub WriteEeprom
		Goto debut
	Case >91
		b1="B"
		Gosub WriteEeprom
		Goto debut
	Case >87
		b1="3"
		Gosub WriteEeprom
		Goto debut
	Case >83
		b1="6"
		Gosub WriteEeprom
		Goto debut
	Case >79
		b1="8"
		Gosub WriteEeprom
		Goto debut
	
	Else
		Goto debut
	End Select
	

	
	
	Goto debut
	
WriteEeprom:
	High LED
	If b1="A" or b1="B" Then	
		Read 0,b2					'le "0" vaut 48
		Read 1,b3
		Read 2,b4
		b4=b4+b3+b2					'test si bien tois valeus
		
		If b4 <144 Then				'inferieur à trois zéros
			Goto erreur
		End if				
	
		Read 2,b4					'ramene b4 a sa valeur
		Goto envoi
	End If
	Read 0,b5
	If b5<48 Then					'premier emplacement prom libre ?
		Write 0,b1
		Goto fin
	End If
	Read 1,b5
	If b5<48 Then					'deuxième emplacement libre ?
		Write 1,b1
		Goto fin
	End If
	Read 2,b5
	If b5<48 Then					'troisième emplacement libre ?		
		Write 2,b1
		Goto fin
	End If
	Goto erreur	
	
	
Envoi:
	'b2,b3,b4
	
	High TX
	Write 0,0						'Re init Eeprom
	Write 1,0
	Write 2,0
	For b5=1 to 10
	RFout B.1,("Z","C","Z","C",b2,b3,b4,"Z")	'Envoi 10 trames
	Pause 10
	Next b5
	Low TX
	Low LED						'Coupe tout
	Goto Fin
Erreur:
	Write 0,0						'Re init Eeprom			
	Write 1,0
	Write 2,0
	
	Low LED
	Pause 100
	High LED
	Pause 100
	Low LED
	Pause 100
	High LED
	Pause 100
	
Fin:
	Low LED						'Pas vraiment utile, mais ...
Merci.
Edit:
Tiens ! on ne peut pas éditer le titre du post ! Désolé pour la faute.
 

Attachments

PieM

Senior Member
Bonsoir,
Pourquoi "avant téléchargement" ? il suffit d'utiliser l'instruction EEPROM adresse, (data, data, ...) avant le main:

Sinon pour éviter tout problème commencer le prog par une lecture d'eeprom . Si tout à 0 c'est qu'il faut demander tout de suite une demande de codes.

Mais je ne sais si j'ai bien compris le pb ? :rolleyes:
 

jojojo

Senior Member
Sinon pour éviter tout problème commencer le prog par une lecture d'eeprom

Merci !

C'était pourtant évident.

Suis benêt, parfois.
 

jojojo

Senior Member
Sniff !

Ben ... Non.

Il faut bien comprendre, que chaque fois qu'une touche est relachée, le pic s'arrête, faute d'alim (c'est fait pour, d'ou la mise en eeprom des valeurs succesives).

Donc, si je vide les prom's au démarrage...

L'erreur ne se produit QUE lors de la frappe du premier code, après téléchargement.

???
 

PieM

Senior Member
Sniff !

Ben ... Non.

Il faut bien comprendre, que chaque fois qu'une touche est relachée, le pic s'arrête, faute d'alim (c'est fait pour, d'ou la mise en eeprom des valeurs succesives).

Donc, si je vide les prom's au démarrage...

L'erreur ne se produit QUE lors de la frappe du premier code, après téléchargement.

???

alors je ne vois que la solution d'une EEPROM externe ...
 
Last edited:

jojojo

Senior Member
Merci, Piem, mais je vais faire autrement (le PCB est fait et câblé, et je suis parresseux !)

Déjà, la transmission de 1000 ordres me semble à présent un peu excessive.

Donc, je passe à 100. Deux chiffres, une valid. Tant pis, pour le premier transfer, je n'aurais qu'a choisir un code inutilisé en RX, ou couper les RX (10 de prévus, avec 10 sorties par RX).

Même hardware, mais nouveau code.

Merci encore.
Code:
'Telecommande Manchester 14M2
'Emetteur
'G.Treels
'05/2013

'Code à deux chiffres, validé soit par "A", soit par "B"
'Sortie en cmd Laipac 432Mhz, 10 trames



	#picaxe 14M2
	Let dirsC=%000010
	Let dirsB=%110000
	Symbol LED=C.4
	Symbol TX=B.2
	Symbol NOTX=b6
	NOTX=1					'a definir pour chaque TX				
Debut:
	
	
	Readadc b.3,b0				'U fct touche, cf schema
	
	Select b0
	Case >155
		b1="A"
		Gosub WriteEeprom
		Goto debut
	Case >145
		b1="1"
		Gosub WriteEeprom
		Goto debut
	Case >135
		b1="4"
		Gosub WriteEeprom			'Explo clavier, via ADC
		Goto debut
	Case >125
		b1="7"
		Gosub WriteEeprom
		Goto debut
	Case >115
		b1="0"
		Gosub WriteEeprom
		Goto debut
	Case >108
		b1="2"
		Gosub WriteEeprom
		Goto debut
	Case >102
		b1="5"
		Gosub WriteEeprom
		Goto debut
	Case >95
		b1="8"
		Gosub WriteEeprom
		Goto debut
	Case >91
		b1="B"
		Gosub WriteEeprom
		Goto debut
	Case >87
		b1="3"
		Gosub WriteEeprom
		Goto debut
	Case >83
		b1="6"
		Gosub WriteEeprom
		Goto debut
	Case >79
		b1="8"
		Gosub WriteEeprom
		Goto debut
	
	Else
		Goto debut
	End Select
	

	
	
	Goto debut
	
WriteEeprom:
	High LED
	If b1="A" or b1="B" Then	
		Read 0,b2					'le "0" vaut 48
		Read 1,b3
		
		b4=b3+b2					'test si bien deux valeurs
		
		If b4 <96 Then				'Si inferieur à deux zéros
			Goto erreur
		End if				
	
		
		Goto envoi
	End If
	Read 0,b5
	If b5<48 Then					'premier emplacement Eeprom libre ?
		Write 0,b1
		Goto fin
	End If
	Read 1,b5
	If b5<48 Then					'deuxième emplacement libre ?
		Write 1,b1
		Goto fin
	End If
	
	Goto erreur	
	
	
Envoi:
	
	
	'b2,b3
	
	High TX
	Write 0,0						'Re init Eeprom
	Write 1,0
	
	For b5=1 to 10
	RFout B.1,("Z","C","Z",NOTX,b2,b3,"N","N")	'Envoi 10 trames
								'possibilité identification
								'de l'emetteur
	Pause 10						'b6=identification TX
	Next b5
	Low TX
	Low LED						'Coupe tout
	Goto Fin
Erreur:
	Write 0,0						'Re init Eeprom			
	Write 1,0

	
	Low LED
	Pause 100
	High LED						'Clignotement indique erreur
	Pause 100
	Low LED
	Pause 100
	High LED
	Pause 100
	
Fin:
	Low LED						'Pas vraiment utile, mais ...
								'Et retombe en veille profonde.
 
Top