serin, serout, inapropriés ?

PapyJP

Senior Member
J' ai absolument besoin d' imprimer les codes ASCII (0-127) comportant la parité paire.
En effet, pour écrire ' é ' ( e accent aigu ) je dois envoyer la séquence ASCII " $19,$42,$65 " avec la parité paire.
Jusqu'ici, compte tenu du peu de messages prévus dans mon appli 16F84, je calculais la parité " con la mano ".
Mais comme je suis aussi feignant ( voire plus ) qu' une couleuvre, je voudrais imprimer cette table .

A moi, Basic !

L' EEPROM M2 possède, sauf erreur, 256 adresses. Super !
Je pense écrire qqhose comme :
for b1= 0 to 127
let b0=b1
bit7=bit0+bit1+bit2+bit3+bit4+bit5+bit6 ---> calcul parité paire
write EEPROM b1,b0 ---> sauvegarde du résultat
next b1

En supposant que ça marche ( à vous les experts ! ) , comment imprimer cette table mémorisée en EEPROM ?
Si possible en deux colonnes : le code ASCII / le code ASCII + parité paire.
Et en hexa !

Non je ne suis pas chi..., juste feignant .........
 
Last edited:

BESQUEUT

Senior Member
Voici le tableau après correction :
Code:
7	6	5	4	3	2	1	0	sans	paire	impaire
0	0	0	0	0	0	0	0	0	0	128
1	0	0	0	0	0	0	1	1	129	1
1	0	0	0	0	0	1	0	2	130	2
0	0	0	0	0	0	1	1	3	3	131
1	0	0	0	0	1	0	0	4	132	4
0	0	0	0	0	1	0	1	5	5	133
0	0	0	0	0	1	1	0	6	6	134
1	0	0	0	0	1	1	1	7	135	7
1	0	0	0	1	0	0	0	8	136	8
0	0	0	0	1	0	0	1	9	9	137
0	0	0	0	1	0	1	0	10	10	138
1	0	0	0	1	0	1	1	11	139	11
0	0	0	0	1	1	0	0	12	12	140
1	0	0	0	1	1	0	1	13	141	13
1	0	0	0	1	1	1	0	14	142	14
0	0	0	0	1	1	1	1	15	15	143
1	0	0	1	0	0	0	0	16	144	16
0	0	0	1	0	0	0	1	17	17	145
0	0	0	1	0	0	1	0	18	18	146
1	0	0	1	0	0	1	1	19	147	19
0	0	0	1	0	1	0	0	20	20	148
1	0	0	1	0	1	0	1	21	149	21
1	0	0	1	0	1	1	0	22	150	22
0	0	0	1	0	1	1	1	23	23	151
0	0	0	1	1	0	0	0	24	24	152
1	0	0	1	1	0	0	1	25	153	25
1	0	0	1	1	0	1	0	26	154	26
0	0	0	1	1	0	1	1	27	27	155
1	0	0	1	1	1	0	0	28	156	28
0	0	0	1	1	1	0	1	29	29	157
0	0	0	1	1	1	1	0	30	30	158
1	0	0	1	1	1	1	1	31	159	31
1	0	1	0	0	0	0	0	32	160	32
0	0	1	0	0	0	0	1	33	33	161
0	0	1	0	0	0	1	0	34	34	162
1	0	1	0	0	0	1	1	35	163	35
0	0	1	0	0	1	0	0	36	36	164
1	0	1	0	0	1	0	1	37	165	37
1	0	1	0	0	1	1	0	38	166	38
0	0	1	0	0	1	1	1	39	39	167
0	0	1	0	1	0	0	0	40	40	168
1	0	1	0	1	0	0	1	41	169	41
1	0	1	0	1	0	1	0	42	170	42
0	0	1	0	1	0	1	1	43	43	171
1	0	1	0	1	1	0	0	44	172	44
0	0	1	0	1	1	0	1	45	45	173
0	0	1	0	1	1	1	0	46	46	174
1	0	1	0	1	1	1	1	47	175	47
0	0	1	1	0	0	0	0	48	48	176
1	0	1	1	0	0	0	1	49	177	49
1	0	1	1	0	0	1	0	50	178	50
0	0	1	1	0	0	1	1	51	51	179
1	0	1	1	0	1	0	0	52	180	52
0	0	1	1	0	1	0	1	53	53	181
0	0	1	1	0	1	1	0	54	54	182
1	0	1	1	0	1	1	1	55	183	55
1	0	1	1	1	0	0	0	56	184	56
0	0	1	1	1	0	0	1	57	57	185
0	0	1	1	1	0	1	0	58	58	186
1	0	1	1	1	0	1	1	59	187	59
0	0	1	1	1	1	0	0	60	60	188
1	0	1	1	1	1	0	1	61	189	61
1	0	1	1	1	1	1	0	62	190	62
0	0	1	1	1	1	1	1	63	63	191
1	1	0	0	0	0	0	0	64	192	64
0	1	0	0	0	0	0	1	65	65	193
0	1	0	0	0	0	1	0	66	66	194
1	1	0	0	0	0	1	1	67	195	67
0	1	0	0	0	1	0	0	68	68	196
1	1	0	0	0	1	0	1	69	197	69
1	1	0	0	0	1	1	0	70	198	70
0	1	0	0	0	1	1	1	71	71	199
0	1	0	0	1	0	0	0	72	72	200
1	1	0	0	1	0	0	1	73	201	73
1	1	0	0	1	0	1	0	74	202	74
0	1	0	0	1	0	1	1	75	75	203
1	1	0	0	1	1	0	0	76	204	76
0	1	0	0	1	1	0	1	77	77	205
0	1	0	0	1	1	1	0	78	78	206
1	1	0	0	1	1	1	1	79	207	79
0	1	0	1	0	0	0	0	80	80	208
1	1	0	1	0	0	0	1	81	209	81
1	1	0	1	0	0	1	0	82	210	82
0	1	0	1	0	0	1	1	83	83	211
1	1	0	1	0	1	0	0	84	212	84
0	1	0	1	0	1	0	1	85	85	213
0	1	0	1	0	1	1	0	86	86	214
1	1	0	1	0	1	1	1	87	215	87
1	1	0	1	1	0	0	0	88	216	88
0	1	0	1	1	0	0	1	89	89	217
0	1	0	1	1	0	1	0	90	90	218
1	1	0	1	1	0	1	1	91	219	91
0	1	0	1	1	1	0	0	92	92	220
1	1	0	1	1	1	0	1	93	221	93
1	1	0	1	1	1	1	0	94	222	94
0	1	0	1	1	1	1	1	95	95	223
0	1	1	0	0	0	0	0	96	96	224
1	1	1	0	0	0	0	1	97	225	97
1	1	1	0	0	0	1	0	98	226	98
0	1	1	0	0	0	1	1	99	99	227
1	1	1	0	0	1	0	0	100	228	100
0	1	1	0	0	1	0	1	101	101	229
0	1	1	0	0	1	1	0	102	102	230
1	1	1	0	0	1	1	1	103	231	103
1	1	1	0	1	0	0	0	104	232	104
0	1	1	0	1	0	0	1	105	105	233
0	1	1	0	1	0	1	0	106	106	234
1	1	1	0	1	0	1	1	107	235	107
0	1	1	0	1	1	0	0	108	108	236
1	1	1	0	1	1	0	1	109	237	109
1	1	1	0	1	1	1	0	110	238	110
0	1	1	0	1	1	1	1	111	111	239
1	1	1	1	0	0	0	0	112	240	112
0	1	1	1	0	0	0	1	113	113	241
0	1	1	1	0	0	1	0	114	114	242
1	1	1	1	0	0	1	1	115	243	115
0	1	1	1	0	1	0	0	116	116	244
1	1	1	1	0	1	0	1	117	245	117
1	1	1	1	0	1	1	0	118	246	118
0	1	1	1	0	1	1	1	119	119	247
0	1	1	1	1	0	0	0	120	120	248
1	1	1	1	1	0	0	1	121	249	121
1	1	1	1	1	0	1	0	122	250	122
0	1	1	1	1	0	1	1	123	123	251
1	1	1	1	1	1	0	0	124	252	124
0	1	1	1	1	1	0	1	125	125	253
0	1	1	1	1	1	1	0	126	126	254
1	1	1	1	1	1	1	1	127	255	127
Pour la peine, voici les formules utilisées dans Excel :
Code:
bit 7 (parité paire)=MOD(SOMME($B2:$H2),2)
Paire=$I2+128*$A2
Impair=$I2+128*(1-$A2)
 
Last edited:

PapyJP

Senior Member
Merci de votre prompte réponse.
Je ne sais pas comment vous avez fait mais c' est super !
Reste que je voudrais bien avoir les codes en hexa.
Je l' avais écrit : non je ne suis pas chi... mais feignant, il va falloir que je me tape le transcodage de 128 codes .............
A propos, mes lignes de code sont-elles correctes ?
 
Last edited:

PieM

Senior Member
Reste que je voudrais bien avoir les codes en hexa.
Je l' avais écrit : non je ne suis pas chi... mais feignant, il va falloir que je me tape le transcodage de 128 codes .............
.



View attachment Parité_ascii.pdf

vérifiez car il y a des différences avec le tableau BESQUEUT par exemple: 82 est %1010010 donc nécessite un bit de parité... et il devient 210

On peut le faire avec les caractères japonais en couleur aussi .... :rolleyes:
 

PapyJP

Senior Member
Je n' ai pas les yeux bridés et ne mange pas du riz tous les jours .

Décimal 82 = $52 = %1010010 ; donc il y a 4 bits en zéro ---> parité = 1 ---> %11010010 ---> $D2 ---> Décimal 210

En effet Besqueut donne ( pour décimal 82 ) 210 en parité impaire.
Y a un truc !!!!!!!!!!!!!!!!
Bon, il est tard, je verrai demain.
A suivre ................
 
Last edited:

PieM

Senior Member
Désolé : j'ai merdé en copiant mon tableau Excel...
ça m'arrive ... ! :)

Par contre je ne comprends pas pourquoi PapyJP tient absolument à ne pas faire faire le travail au Picaxe.

je dois envoyer la séquence ASCII " $19,$42,$65 " avec la parité paire.
Il suffit de réserver comme on a dit les byte b0 à b3 pour ça , ce qui permet de traiter 4 bytes à la fois, et écrire :

Code:
................
b0 = $19 : b1 = $42: b2 = $65 ; b3 = ....
gosub 8bitsto7bits
serout xx, T1200, b0,b1,b2,...
........

8bitsto7bits:
[INDENT]bit7=bit0+bit1+bit2+bit3+bit4+bit5+bit6
bit15=bit8+bit9+bit10+bit11+bit12+bit13+bit14
bit23=bit16+bit17+bit18+bit19+bit20+bit21+bit22
bit31=bit24+bit25+bit26+bit27+bit28+bit29+bit30[/INDENT]
return

inversement si on reçoit un code 7bit +1,


Code:
.................
serin xx, T1200, b0,b1,b2,b3
gosub 7bitsto8bits
.................

7bitsto8bits:
[INDENT]bit7 = 0; bit 15 = 0; bit23 = 0; bit 31 = 0[/INDENT]
return
 

PapyJP

Senior Member
C' est bien sûr une solution.
Mais j' ai de nombreuses séquences de 3 à 5 caractères à envoyer, en particulier pour la mise en page et la gestion de l' écran. Par ex :

- Home ( curseur en ligne 0, colonne 0) ---> 3 caractères
- Effacement de l' écran ---> 4 caractères
- Ecrire un "A" ligne 7, colonne 25 ---> 5 caractères

Je crains que votre solution n' entraîne un listing de plusieurs dizaines voire centaines de lignes. Ingérable.

Je pensais écrire autant de sous routines que nécessaire et, pour gagner de la place, y placer les codes munis de la parité ===> Une seule ligne par sous routine : serout ...... ( qui envoie les codes avec parité ) !!!
On ne peut faire plus court .
Ces sous-routines seraient plaçées en fin de listing, donc pas génantes lorsqu' on navigue dans le ' main ' à l' écran.

Il y a peut être un os : il n' y a pas, semble-t-il, la notion de ' return ' ( plaçé en fin de sous routine en assembleur ) qui retourne au programme principal juste aprés le ' call ' qui a appelé la sous routine ? si oui, celà complique la gestion des retours des sous routines qui sont susceptibles d' être appelées plusieurs fois, en différents endroits du ' main '.
Mais alors on peut placer la fameuse ligne ' serout ' au coeur du ' main ' chaque fois que la fonction est nécessaire mais c' est au détriment de la lisibilité.

Merci de me donner des conseils à ce sujet issus de votre grande expérience.
 
Last edited:

PieM

Senior Member
Je crois que vous n'avez pas saisi l'exemple donné:

8bitsto7bits: est une sous routine appelée par un GOSUB et se termine par un return.

elle n'est donc écrite qu'une fois dans le programme, et vous pouvez l'appeler autant de fois que vous voulez.

il n' y a pas, semble-t-il, la notion de ' return ' ( plaçé en fin de sous routine en assembleur ) qui retourne au programme principal juste aprés le ' call ' qui a appelé la sous routine
Ben si !! relisez les docs sur le sujet. sinon aucun sous programme n'est possible avec des gosub.

Pour les séquences de plus de 4 caractères vous pouvez dissocier , non ? par exemple envoyer N° ligne N° colonne avant d'envoyer le caractère...
 

PapyJP

Senior Member
Génial ' vil coyote ' ( pour les amateurs de cartoons only ! , référence sur demande )
Manque manifeste d' attention de ma part.
Je crois avoir besoin de relire les manuels !
La couleuvre a besoin de se réchauffer au soleil; ça tombe bien il fait un temps superbe, plus propice à se balader qu' à lire. Quelle galère ! Toutes ces pages et instructions rébarbatives à relire ( et si possible à mémoriser ).
Pour les séquences de plus de 4 caractères vous pouvez dissocier , non ? par exemple envoyer N° ligne N° colonne avant d'envoyer le caractère...
Oui, sans pb.
 

PapyJP

Senior Member
Super !
Ca fonctionne !
Chaque sous routine ne comporte que trois lignes :
- son nom
- serout ................( code avec parité )
- return
et sont plaçées en fin de listing !
Le rêve ............

Merci pour le .pdf en #165
 
Last edited:

PapyJP

Senior Member
En programmation, c' est bien connu, chacun a ses habitudes, ses astuces, ses manies.
Je préfère appeler des sous-routines dans le ' main ' ( ou ailleurs ). Qqchose du genre :

call EffaceEcran
call Home ;(---> curseur en 0,0)
serout ... ('Hello')
call LigneSuivante
call DeuxEspaces
serout ... ('mes mentors !')

Ma petite tête suit mieux la succession des opérations qui sont ' en clair ', affranchies des codes hexa.
Mais Ok, à chacun de voir ce qui lui convient .
Seul le résultat compte !
 
Last edited:

PieM

Senior Member
En programmation, c' est bien connu, chacun a ses habitudes, ses astuces, ses manies.
Je préfère appeler des sous-routines dans le ' main ' ( ou ailleurs ).

Ma petite tête suit mieux la succession des opérations qui sont ' en clair ', affranchies des codes hexa.
Mais Ok, à chacun de voir ce qui lui convient .
Seul le résultat compte !
Le basic du picaxe ne permettant pas le passage de variables lors de l'appel de sous routines par des gosub ( ou son pseudo call) on est soit obligé de faire des sous routines figées, soit de définir avant, les variables devant être traitées par la sous routine.
Dans le cas de commandes répétitive du style Home, ou Ligne suivante, il est certain que la routine figée est indiquée.
Sinon, la seconde est plus économe en mémoire ...
 

BESQUEUT

Senior Member
Dans le cas de commandes répétitive du style Home, ou Ligne suivante, il est certain que la routine figée est indiquée.
D'autant plus qu'il s'agit d'envoyer un code de toutes façons numérique, alors + 128 ou pas, ça ne fait guère de différence. Rien n'empêche d'utiliser des symbols pour rendre les choses plus lisibles sans changer la taille du programme.
 

PapyJP

Senior Member
#176
Ah bon ?
On gagne des lignes mais, du moins dans la phase de mise au point, c' est certainement moins ' lisible ' ( cf #173 ma petite tête ............ )

Est-ce que ça veut dire que
serout ... (EffaceEcran,Home) appelle automatiquement des sous-routines ? ( EffaceEcran sans guillemets )
Si oui elles ne contiennent que le code à transmettre, sans serout ?

#174
Je ne vois pas le pb ?
Le manuel2,page 70 ( tiens ! il l' a lu ? ) donne un exemple d' appel avec passage de variable.
 
Last edited:

PieM

Senior Member
#176

#174
Je ne vois pas le pb ?
Le manuel2,page 70 ( tiens ! il l' a lu ? ) donne un exemple d' appel avec passage de variable.
Ce n'est pas ce que j'appelle un passage de variable !
dans l'exemple p70, on affecte une valeur à la variable b2 en clair,(b2 = 5) avant l'appel de la sous routine.

C'est ce que je disais dans mon post "soit de définir avant, les variables devant être traitées par la sous routine."
 

PapyJP

Senior Member
Vous appelez ' passage de variable ' le passage d' une variable (b1=4) à une sous-routine qui calcule ' square root ' (b1=2) et qui la retourne au 'main' , c' est bien ça qui est impossible ?
Notion de variable globale, variable locale ?
Au sein de la sous-routine ' square roots ' la variable b1 est locale ?

Si oui, et si au sein de la sous-routine square root, j' écris ( aprés calcul ) ' serout .... (b1) ' c'est bien 2 qui est émis ?
Si je l' appelle à nouveau avec b1=9, c' est bien 3 qui est émis ?
Mais je ne peux jamais récupérer ni 2 ni 3 dans le 'main' ?
 
Last edited:

PieM

Senior Member
Ce que j'appelle passage de variable , c'est le passage en tant que paramètre, comme on peut le faire en Pascal ou en C++.

Une sous routine avec passage de paramètres serait de la forme, par exemple, square root (4), pour un passage en valeur , ou square root (b1) pour un passage en paramètre, comme cela existe en Pascal, C++ etc ...

Une sous-routine de ce type pourrait ainsi être appelée par
AFFICHE ( 2,3,w0) ,la routine se chargeant par exemple d'effacer l'écran, se positionner en ligne 2 colonne 3, et d'inscrire la valeur de w0 sous forme binaire.

Nota: En basic picaxe, il n'y a pas de variables locales .
 

PapyJP

Senior Member
Ok !
30 ans d' assembleur, ni Pascal, ni C++, ni .... Juste Fortran et Unix ( sur de 'grosses' machines, et au début, des programmes en cartes perforées ! ) !
est-ce que :
si au sein de la sous-routine square root, j' écris ( aprés calcul ) ' serout .... (b1) ' c'est bien 2 qui est émis ?
Si je l' appelle à nouveau avec b1=9, c' est bien 3 qui est émis ?
Mais je ne peux jamais récupérer ni 2 ni 3 dans le 'main' ?
est valable ?

Anecdote : j' ai mis l' entrée C.3 d'un 08M2 au V+ à travers 1K.
Apparemment ça lui a pas plu ! ---> entrée HS, toujours lue en Zéro
Est-ce normal ?

C' est le métier qui rentre ( en douleur ! )
 
Last edited:

PieM

Senior Member
si au sein de la sous-routine square root, j' écris ( aprés calcul ) ' serout .... (b1) ' c'est bien 2 qui est émis ?
Si je l' appelle à nouveau avec b1=9, c' est bien 3 qui est émis ?
Mais je ne peux jamais récupérer ni 2 ni 3 dans le 'main' ?
Puisqu'il n'y a pas de variables locale, ça veut dire que si une variable est modifiée dans un sous-programme, elle est disponible dans tout le programme donc dans le "main"
 

PapyJP

Senior Member
C' est clair, merci.
Anecdote : j' ai mis l' entrée C.3 d'un 08M2 au V+ à travers 1K.
Apparemment ça lui a pas plu ! ---> entrée HS, toujours lue en Zéro
Ce n' est peut-être pas votre domaine de prédilection mais comment forcer une entrée au niveau Un sans la fusiller.
 

PieM

Senior Member
C' est clair, merci.

Ce n' est peut-être pas votre domaine de prédilection mais comment forcer une entrée au niveau Un sans la fusiller.
On ne risque pas de détruire une entrée en la mettant à Vdd ou Vss , bien qu'il soit conseillé de mettre une résistance de 1k ou moins sur une entrée.
 

PapyJP

Senior Member
Si vous écrivez ' 1k au moins ' c' était le cas.
C.3 d' un 08M2 ne peut être qu' une entrée, pas de doute là dessus.
Je vais vérifier que cette entrée est bien HS ( ou non ) et vous tiendrai au courant ( limité par 1K, lol ! )
 

PapyJP

Senior Member
Vous avez encore raison, ça m' énerve !
Erreur de cablage,
C.3 fonctionne comme prévu dans les livres !
 

BESQUEUT

Senior Member
#176 On gagne des lignes mais...
Comme le temps d'interprétation d'une ligne varie assez peu en fonction de sa complexité, le fait de gagner des lignes permet assez souvent de gagner aussi en temps d'execution. (et je ne trouve pas ça vraiment moins lisibles... mais les gouts et les couleurs...)
Est-ce que ça veut dire que
serout ... (EffaceEcran,Home) appelle automatiquement des sous-routines ? ( EffaceEcran sans guillemets )
Non. Comme indiqué #175, il s'agit de "symbols". Lorsque le PE rencontre un symbole, il le remplace par sa valeur avant de transmettre au Picaxe.
Donc si CR=13 et LF=10 il enverra les caractères ad hoc. C'est juste plus facile à lire. Tout ceci ne marche que si EffaceEcran est un seul caractère (12 en l'occurence)
Pour les Escape sequences, il faut définir : Esc=27, Jeu=29, FR=52
ce qui permet d'écrire : serout ... (Esc, Jeu, FR) pour utiliser les caractères français dans le jeu G2.
A ma connaissance, il n'y a pas de caractère Videotext pour le Home, mais :
- il me semble que le EffaceEcran ramène le curseur en haut à gauche mais c'est un très lointain souvenir, donc très faillible,
- on peut s'en sortir en définissant EnHaut=11 et la commande devient :
serout ...(EffaceEcran, EnHaut, CR)

NB : j'ai écrit ce qui précède sans tenir compte de la parité ; vous remplacerez bien évidement par les valeurs ad hoc.
L'intérêt de symbol, c'est de définir une fois pour toute ces codes rébarbatifs, sans pour autant générer du travail suplémentaire pour le PICAXE puisque la conversion est réalisée avant de transmettre au PICAXE.
 
Last edited:

BESQUEUT

Senior Member
Comme le temps d'interprétation d'une ligne varie assez peu en fonction de sa complexité.
En gros, ce qui prends du temps, c'est d'interpréter le serout. Ensuite, passer 1 ou n caractères ne change pas beaucoup le problème. D'où l'intérêt de pouvoir mettre plusieurs caractères sur la même ligne.
J'aurais bien aimé tester les deux approches, mais je n'ai plus de Minitel sous la main.
 

PapyJP

Senior Member
1/ Il ne s' agit pas pour moi, dans les applications envisagées, de gagner du temps :
qques secondes de + ou de - pour afficher que le volet de la chambre des enfants est fermé, c' est sans importance !
Le pb est plutôt d' avoir un listing moins volumineux et surtout plus lisible.
2/ ?
Il faut donc placer en tête du code
symbol CR = $8D ( code avec parité )
symbol LF = $0A ( code avec parité )
Peut-on écrire:
symbol Home =$1B,$5B,$48 ( code avec parité )
... puis serout ... ( Home,... )
3/ ?
l' instruction ' pause ' est suivie d' une valeur décimale qui fixe le temps en millisecondes.
Mais qu' en j' écris ' pause 5000 ' j' obtiens une pause < à 1,5 s.
Faut-il majorer outrageusement ? ( 08M2 basique )
4/ Faites les brocantes ! Pour 3 ou 5 euros ( même pas le prix d' un paquet de clopes ) vous pourrez vous amuser autant que moi: voir #44
Si vous craquez, je vous donnerai des tuyaux pour choisir le bon modèle à acquérir.
Et même l' astuce pour télécharger le STUM 1b ( Spécifications Techniques d' Utilisation du Minitel 1b ) introuvable sur les moteurs de recherche sur la toile !
prés de 190 pages en .pdf ( document officiel du CNET ( 1986 )) trés complet.
 
Last edited:

PieM

Senior Member
Il faut donc placer en tête du code
symbol CR = $8D ( code avec parité ) : OUI
symbol LF = $0A ( code avec parité ) : OUI
Peut-on écrire:
symbol Home =$1B,$5B,$48 ( code avec parité ) : NON un symbole concerne une variable donc byte ou word, ou bien une chaîne de caractères.
... puis serout ... ( Home,... )
3/ ?
l' instruction ' pause ' est suivie d' une valeur décimale qui fixe le temps en millisecondes.
Mais qu' en j' écris ' pause 5000 ' j' obtiens une pause < à 1,5 s.

Quel picaxe et à quelle fréquence ?? Si vous utilisez un M2 à 16 Mhz c'est normal ! la pause 5000 devient 1.25 s
 

PapyJP

Senior Member
Je m' aperçois que j' ai dit une bêtise concernant le STUM
On le trouve à la condition de ne pas mettre STUM comme mot clé; il faut développer en toute lettre.
mot clé :
Spécifications Techniques d' Utilisation du Minitel 1b
Concernant l' instruction ' pause '
Faut-il majorer outrageusement ? ( 08M2 basique )
( ---> 08M2 à 4 MHz )
J' avais du boire un verre de trop ---> ralentissement de mes facultés de comptage et d' appréciation du temps !
A jeun, je trouve bien environ 5 secondes.
 
Last edited:

PapyJP

Senior Member
Alors là, j' en suis baba !
Suite à ma remarque #191, je suis allé vérifier mes dires sur Google avec le bon mot clé.
Et là, oh surprise, je lis sur la page 3, 2éme article qui contient "Spécifications Techniques d' Utilisation du Minitel 1b", un renvoi sur " serin, serout, inapropriés " ( notre discussion ) avec l' adresse URL du picaxeforum ! .
Cela veut donc dire que les moteurs ' scrutateurs ' de Google viennent lire le contenu des forums !
S' agissant d' un Forum ( espace réservé à des membres inscrits ) il me semble qu'il y a là un abus de pouvoir.

Qu' en pensez-vous ?
Question générale : A-t-on un droit ' d'effacement ' d' une référence donnée par Google ou doit-on subir sans broncher ?
 

PieM

Senior Member
Cela veut donc dire que les moteurs ' scrutateurs ' de Google viennent lire le contenu des forums !
S' agissant d' un Forum ( espace réservé à des membres inscrits ) il me semble qu'il y a là un abus de pouvoir.
Ce forum est totalement libre d'accès en lecture. Y compris pour des moteurs de recherche. Je ne vois pas le problème !

Ce principe vous permet d'ailleurs d'obtenir des infos, auxquelles ne vous n'auriez jamais accès, si vous deviez être inscrit dans les forums, d'une façon générale.
Internet est (encore) un espace de liberté et de partage ...

La première fois que vous avez accédé à ce forum, vous étiez inscrit ?
Finalement, vous êtes d'accord pour lire les écrits des autres via Google mais vous ne voulez pas qu'on puisse lire les vôtres ?
Curieux....
 

PapyJP

Senior Member
Ce forum est totalement libre d'accès en lecture.
Ok !
Il n' empêche que
le forum étant un espace réservé à des membres inscrits
je m' interroge.
Comment Google fait-il parti ' ipso facto ' des membres inscrits ?

Ceci dit, Google est un extraordinaire espace pour augmenter mes connaissances lorsque l' on est curieux ou demandeur d' infos.
Je regrette seulement ( mais fermement ) qu' il n'y ait pas de date d' inscription des articles proposés: certains sont complètement obsolètes.
Des sujets en développement proposent des articles complètement dépassés !
Je viens de terminer une étude sur un " Projet d' aménagement de chambres froides à énergie solaire au Cameroun " et c' est triste de lire des articles non datés sur le sujet complètement dépassés !
Bon, c'était une parenthèse, c' est pas grave ( mais il faut rester vigilant ) et revenons à notre sujet !
Et quid de la question générale : A-t-on un droit ' d'effacement ' d' une référence donnée par Google ou doit-on subir sans broncher ?
 
Last edited:

PapyJP

Senior Member
J' ai commencé à programmer les échanges Minitel ---> Picaxe.
Ca fonctionne trés bien sur un scénario trés simple:
le picaxe attends de recevoir la lettre " P " frappée au clavier ( serin ) et, s' il la reçoit, affiche " Ok " à l' écran ( serout ).
Mais ça me pose un pb ( c' est évident, sinon je n' écrirais pas ce message ! ).
Le manuel2 précise que la séquence attendue par serin doit être " 8 datas, no parity, 1 stop ". ( soit 9 bits ).
Or le Minitel travaille toujours avec ( 1 start + 8bits avec parité + 1 stop ) soit 10 bits.
On peut supposer que le bit start est " implicite " ( Piem, qui avait raison as usual ) et soit ignoré par le picaxe. Déja un premier Pb.
Mais, quand je frappe le chiffre 7 ( $37 ) le Minitel devrait envoyer $B7 ( soit 7 + parité )
Or $B7 correspond à ç ( c cédille ) dans la table ascii !
Le picaxe ne décode-t-il que les 7 premiers bits de l' octet ? Ca m' étonne, 2ème pb

Coup de gueule ( le même depuis des années )
Dans " serin, pin, baudmode, ......... " ( manuel2, page 204 ) avec baudmode = T1200, T2400, T4800, ...
" baudmode " est un abus de langage affreux (#3) baud ne veut rien dire si l' on ne précise pas le nombre de bits nécessaire pour transmettre une donnée.
Le " baud " mesure le nombre données ( caractères, symboles, ... ) transmis par seconde.
Le " bps " ( bits par seconde ) mesure le nombre d' informations ( 0 ou 1 ) transmis par seconde.
Il en résulte qu' une transmission à 1200 bps avec 10 bits par donnée sera à 1200/10 = 120 bauds au maximum.
Si c' est 4 bits par donnée ---> 1200/4 = 300 bauds au maximum.

Une liaison doit être caractérisée par le nombre de bps qu' elle est capable de transmettre.
A partir de là,
OU on connait le nombre de bits nécessaire pour coder une donnée et on peut parler en baud
OU, si le nombre de bauds est précisé, on peut en déduire le nombre de bits par donnée.
Ah, rigueur quand tu nous tiens !!!!!!!!!!!
 
Last edited:

PieM

Senior Member
Mais, quand je frappe le chiffre 7 ( $37 ) le Minitel devrait envoyer $B7 ( soit 7 + parité )
Or $B7 correspond à ç ( c cédille ) dans la table ascii !
Le picaxe ne décode-t-il que les 7 premiers bits de l' octet ? Ca m' étonne, 2ème pb


Le picaxe ne décode rien du tout. Il faut lui dire de décoder de 7Bits+1de parité en 7 bits tout court puisqu'on est limité au code 127.
Donc il faut simplement mettre le bit 7 à 0, à la réception...

Relire #168. :
 

PieM

Senior Member
Maintenant je poursuis :
bit15=0 ( suppression de la parité )
if b9="Q" then ; ' Q 'attendu
...............
Ca marche pas !
Trouvez l' erreur .....................!
L'erreur est que vous ne lisez pas ce qu'on vous écrit .
J'en ai déjà parle dans un post précédent et redis post #168 dans le morceau de programme donné.

Il suffit de réserver comme on a dit les bytes b0 à b3 pour ça , ce qui permet de traiter 4 bytes à la fois, et écrire :

Code:
serin xx, T1200, b0,b1,b2,b3
gosub 7bitsto8bits
.................

7bitsto8bits:
bit7 = 0; bit 15 = 0; bit23 = 0; bit 31 = 0
return
L'accès aux bits individuels ne peut se faire que sur les premiers bytes à savoir b0, b1, b2, b3 pour des M2.

Donc votre bit15 n'a aucun rapport avec le byte b9.
 

PapyJP

Senior Member
Mais oui bien sûr !
J' avais écrit ce post avant de m' apercevoir de mon erreur.
Aprés correction, suivant vos remarques # 168, tout est Ok.
J' ai tenté , alors, de supprimer ce message stupide, sans succès ( ou trop tard ).
Dont acte.
 

PapyJP

Senior Member
Aujourd'hui, compte tenu de plus de 4100 affichages de notre discussion ce soir, je pense qu' il est correct de faire le point .
Je maîtrise ( plus ou moins bien et grâce à mes mentors ) les transferts de données Minitel <---> Picaxe.
A qqchoses prés j' assume.
Pour aller plus loin dans mon projet, j' ai remplaçé le 08M2 par un 20M2 pour disposer de plus d' E/S puisque je veux pouvoir actionner relais ou aiguillages à partir du clavier Minitel.
C'est un peu galère car il faut modifier le code au niveau du nom des pins ( C.4 ---> C.7 , C.2 ---> B.1, etc ).
Mais ça fonctionne !
J' ai simulé les actionneurs par des LEDs et j' arrive à les gérer à partir du clavier !
A suivre .................
 
Top