ABCelectronique : portail d'information dans le domaine de l'électronique
Home » Diverses rubriques » Archive forum sujets+corp
 
     
   Disque dur ne tourne plus  
Salut,je cherche qq'un qui pourrais reparer mon disque dur maxtor 20Go 5400trs, j ai des donnée tres importantes a recuperer. Peut etre le fusible ? mais je ne sais pas le reconnaitre..
Aidez-moi!!!!!

Numéro de l'article: 16901   |  De: Daniel   |  Date: 2002-12-14 22:45:59
   RE: Disque dur ne tourne plus
Salut
------

Si ton disque dur ne tourne plus, commence par vérifier les tensions (+5V et +12V) au niveau du connecteur (voir si le connecteur fait bien contact).
Eventuellement, essayer le disque dur dans un autre PC.

S'il refuse tout service, et que tes données sont vraiment très importantes, j'ai souvenance que certains constructeurs proposent la récupération de données (mais je pense que c'est "assez" coûteux).

A+
Bigonoff


Numéro de l'article: 16919   |  De: Bigonoff   |  Date: 2002-12-15 01:33:16
   RE: Disque dur ne tourne plus
Si tu veux obsolument récupérer les données enregistrée NE TOUCHE SURTOUT PAS LA SURFACE DU DISQUE et ne l'approche pas trop d'une source magnétique.

Bye

Numéro de l'article: 16958   |  De: Tronic-man   |  Date: 2002-12-15 16:00:02
   RE: Disque dur ne tourne plus
salut
le plus simple est de se procurer un autre disque dur identique
d'échanger la carte controleur (électronique du disque dur)avec celui du disque mort.
@+

Numéro de l'article: 17042   |  De: alfina   |  Date: 2002-12-16 11:34:09

   panne tv sony kvx 2083  
Mon tv se met en secu de temps en temps, il va marcher normalement pendant des heures, puis par moment dès la mise en route il se met à papillonner puis l'image devient blanche, de plus lorsque je lis un cassette sur mon scope, par moment le son se coupe et la diode se met à clignoter 6x...

Merci de me renseigner si vous avez deja connu ce type de panne


Numéro de l'article: 16902   |  De: fab   |  Date: 2002-12-14 22:56:07
   RE: panne tv sony kvx 2083
Quel chassis ?

Numéro de l'article: 16933   |  De: Ren   |  Date: 2002-12-15 09:50:51
   RE: panne tv sony kvx 2083
Le chassis porte la reférence JMT 2B, est-ce la bonne reférence ?
MERCI




Numéro de l'article: 16954   |  De: fab   |  Date: 2002-12-15 15:08:10
   RE: panne tv sony kvx 2083
je connais pas si c'est ca...

Je pense à un BE-3 non ?

Numéro de l'article: 17379   |  De: Ren   |  Date: 2002-12-19 20:56:00
   RE: panne tv sony kvx 2083
J'ai refait quelques soudures sur toutes les cartes, l'image est revenue, par contre pas le son...la prise casque fonctionne normalement, je pense que c'est l'ampli (TDA 7264);
Qu'en pensez-vous ? Qu'est-ce que ça peut être d'autre ?
MERCI

Numéro de l'article: 17654   |  De: Fab   |  Date: 2002-12-22 22:02:54

   blocage du pc  
slt
mon ibm pc aptiva n'arrive plus à démarrer,j'ai mis la clé d'un logiciel avec licence et j'ai utilisé la copie du cd original de ce logiciel pour le lancer
une fois la clé serrée sur le port parrallèle,l'écran s'est éteint et le bipper ne s'est pas arreté de sonner
problème:lorsque je mets la tension sur mon pc maintenant,il continue à rester éteint et à sonner
j'ai pensé à enlever la batterie du bios puis de la remettre mais je n'est pas encore fait cela...
merci d'avance

Numéro de l'article: 16903   |  De: aniss   |  Date: 2002-12-14 23:10:51
   RE: blocage du pc
essaye de reflasher le bios
t'as pas mis à jours windows XP par hasard ?

a+

Numéro de l'article: 16907   |  De: Fab   |  Date: 2002-12-14 23:37:12

   Analyseur en temps réel  
Bonjour, je cherche tous plans, schémas ou infos pouvant m'aider à réaliser un analyseur audio en temps réel.Il existe un article sur c sujet dans les Elektor de mars et avril 1984 mais il est trés difficile de les récuperer.
vincent

Numéro de l'article: 16908   |  De: Vincent   |  Date: 2002-12-14 23:42:47
   RE: Analyseur en temps réel
Salut,

S'il s'agit d'un analyseur de spectre audio je dois avoir quelques schémas notamment un kit analyseur de spectre (10 voies de 16Hz à 20kHz)

Numéro de l'article: 17242   |  De: syan100x   |  Date: 2002-12-18 13:57:57

   recherche schema tv toshiba  
je cherche le schema de tv toshiba chassis n° 218d7s1, sinon valeur de R448.
urgent merci.

Numéro de l'article: 16909   |  De: brahim   |  Date: 2002-12-15 00:08:17

   Récepteur + Enceintes  
Bonjour. J'aimerais avoir une réponse pour l'installation de mes enceintes.
Voici j'ai 2 enceintes = Impédance nominal 6 Ohms - Impédance minimal 4 Ohms.

Qu'arrivera-t-il si je me sers d'un Récepteur à Impédance 8 - 16 Ohms sans sélecteur.

Serais-ce mieux un Récepteur 4 - 8 Ohms avec sélecteur,soit position 4 ohms ou position 8 ohms.

Ceci pour confirmer une discussion avec mon frère, sur le meilleur arrangement,pour la qualité du son et la protection à long terme de l'équipement ( Récepteur + Enceintes )

Merci beaucoup,pour une réponse technique..

Jacques,,

jacques.asselin@videotron.ca



Numéro de l'article: 16910   |  De: Jacques Asselin   |  Date: 2002-12-15 00:45:51
   RE: Récepteur + Enceintes
Salut
------

Si tes enceintes ont une impédance de 4 ohms, tu dois utiliser un ampli qui puisse débiter sur une charge minimale de 4 ohms.

Un ampli de 8-16 ohms est donc déconseillé (si pas dangereux).

Si tu utilises un ampli avec sortie 4 ohms, la puissance restituée par l'ampli sera maximale.

Si tu utilises un ampli de 8 ohms, le son sera tout aussi bon, mais l'ampli ne pourra pas fournir sa puissance maximale. Pour tirer le maximum de tes enceintes, il te faudra donc un ampli plus puissant.

A+
Bigonoff



Numéro de l'article: 16918   |  De: Bigonoff   |  Date: 2002-12-15 01:30:26

   Recherche schéma TVC SONY  
Je recherche le schéma d'un téléviseur SONY KV E 2963 B.

Merci pour touts remseignements.

Numéro de l'article: 16912   |  De: frédéric   |  Date: 2002-12-15 00:52:25
   RE: Recherche schéma TVC SONY
Chassis ?
Panne ?

A+
Ren

Numéro de l'article: 16932   |  De: Ren   |  Date: 2002-12-15 09:48:42
   RE: Recherche schéma TVC SONY
c'est un chassis AE 2F

Numéro de l'article: 16938   |  De: dede   |  Date: 2002-12-15 11:03:45

   Relais 16A qui reste scotché avec 2A !!!!  
salut,
j'avais un relais schrack 16A 250V AC, je voulais simplement commuter une ligne electrique alimentant un transfo ballast s'occupant d'une lampe HSP 400W. mais là oh surprise, mon relais reste collé avec 1 utilisation...apres l'avoir demonté, et en retestant le montage sous tension, je vois bien la petite etincelle se former, et apres extinction, le contact reste soudé, je dois y aller avec un tournevis pour le dessouder...

je veux bien que mon ballast consomme plus de 2.5A au demarrage mais je trouve que les indications constructeurs sont abusées, on devrait avoir plus facilement acces à l'intensité max de commutation qu'à l'intensité max de passage...c'est vraiment ridicule...

je vais devoir m'acheter un plus gros contacteur alors...

aurélien




Numéro de l'article: 16915   |  De: Aurélien   |  Date: 2002-12-15 01:23:12
   RE: Relais 16A qui reste scotché avec 2A !!!!
Salut
------

En fait, le problème c'est qu'il s'agit d'une charge fortement selfique.

Tu dois donc protéger ton contact, soit avec un varistor, une capa, ou autre procédé destiné à évacuer le courant de rupture.

Le constructeur ne t'a pas menti concernant le courant de rupture. Ce courant est bien évidemment donné pour une charge résistive, toi tu es en régime inductif.

A+
Bigonoff



Numéro de l'article: 16917   |  De: Bigonoff   |  Date: 2002-12-15 01:26:50
   RE: Relais 16A qui reste scotché avec 2A !!!!
salut,
peux tu t'expliquer stp ?
je ne vois pas tres bien quoi faire en fait...

je n'aime pas vraiment l'electricité de puissance (je me vois mal ingénieur EDF dans 5 ans par exemple ;), et je vois bien que la charge est selfique mais je ne vois pas trop en fait ce que ça change...si je me rapelle mes cours d'y a qques années, la self debite du courant apres la coupure de mon relais ce qui fait que celui ci reste collé.?? hum chuis pas super convaincu :((
donc comment peut tu eviter ce phenomene (et si tu as des valeurs de composants ça serait tres sympa aussi) ??

et sinon avec un triac ? je suppose qu'il faut le circuit snubber RC...(qu'evidemment je n'ai pas incorporé car il s'agit d'une carte que j'avais faite il y a un an où je pigeais encore moins et que je "recycle" actuellement ;)..

je te remercie toi et ceux qui voudront bien m'aider !

@ +
@urélien
PS : j'avais avant tenté avec un programmateur du commerce, celui-ci n'a pas resisté au bout de 4 utilisations.

Numéro de l'article: 16923   |  De: Aurélien   |  Date: 2002-12-15 01:49:22
   RE: Relais 16A qui reste scotché avec 2A !!!!
Salut
------

Le rapport, c'est que tu dis dans ton post : "je vois bien la petite etincelle se former".

L'étincelle se forme au moment de la coupure. Il ne peut y avoir d'étincelle aux bornes d'un contact de résistance nulle.

Donc, ça signifie que les contacts de ton relais rebondissent (plusieurs marche/arrêt). Donc, tu as bien un extra-courant de rupture. En effet, l'étincelle ne peut apparaître que sur la coupure, SAUF si le contact entre les "contacts" n'est pas franc, mais ça, je suppose que tu as vérifié.

Sinon, il te suffit de remplacer, pour essais, ta charge selfique par une charge résistive de grosse intensité (disons 5 ampères) pour vérifier la fiabilité de ton relai. Ainsi, tu seras fixé.

Je pense que si c'est bien un problème dû à la self, le même réseau RC que pour la commande par triac devrait te sortir d'affaire. En fait, il faudrait connaître la valeur de la self pour pouvoir compenser exactement.

Il y a probablement des gens ici qui connaissent par expérience les valeurs à mettre sur ce type de transfo.

Si ton relai continue à bruler avec la charge résistive, alors il est défectueux.

A+
Bigonoff


Numéro de l'article: 16944   |  De: Bigonoff   |  Date: 2002-12-15 12:33:34
   RE: Relais 16A qui reste scotché avec 2A !!!!
salut!
en fait l'etincelle se produit lors de l'etablissement du contact; et non lors de la coupure.
car meme si je debranche la prise apres, les contacts sont soudés entre eux, quasiment...

j'espere donc qu'ici quelqueu'n pourra me dire quelles valeusr mettre..

ou alors je serai obligé d'acheter un plus gros contacteur style telemecanique...mai mon temps presse pourtant...

@ +
@urélien

Numéro de l'article: 16953   |  De: Aurélien   |  Date: 2002-12-15 15:02:06
   RE: Relais 16A qui reste scotché avec 2A !!!!
Salut ,
tu commande ton transfo au primaire ....
prq tu le commanderai pas au secondaire ?

Sinon mais une capa en parallèle avec ton contact ...
essaye 1µF utilise une capa X2 400V , ca devrais faire l'affaire ...

Ce qu'on fait géneralement on place une résistance en // avec la bobine , la tu le fait par tatonement ...

Avec c'est 2 truques a tous les coups ton prb sera résolus

A+

Numéro de l'article: 16973   |  De: byte   |  Date: 2002-12-15 18:14:30
   RE: Relais 16A qui reste scotché avec 2A !!!!
salut!
ouais je vais essayer avec une capa 0.1µF X2 et uen res 1k de puissance c ce que j'ai sous la main... je vais essayer avec le relais donc...et si meme pb avec le triac...:(

commuter le secondaire...? :) hum je connais pas bcp de relais capables de commuter du 3500V-4000V. c'est la tension de sortie du ballast pour une lampe à décharge...

@ +
@urélien

Numéro de l'article: 16980   |  De: Aurélien   |  Date: 2002-12-15 19:40:37
   RE: Relais 16A qui reste scotché avec 2A !!!!
Sorry pour le secondaire ...
g dit une connerie ( en plus que le courant est géneralement plus important qu'on primaire "sauf dans ton cas"

Sinon g déja commuter par thyristor des transfo pour soudeuse par point , avec une commande de phase pour augmenter ou dimuner la puissance . Et j'ai du mettre une résitance de 1K mais pour 380 donc une résistance bobiner ...

Et la j'avais plus de problème ...

A+



Numéro de l'article: 16986   |  De: byte   |  Date: 2002-12-15 20:25:51
   RE: Relais 16A qui reste scotché avec 2A !!!!
Salut
------

400V, c'est pas un peu juste?
On a déjà 324 volts en crête, augmenté de la surtension de rupture.

(ben oui, rupture, due aux rebonds du contact, sinon, pas d'étincelle, pas de soudure).

A mon humble avis, 630 volts seraient préférables, non?

A+
Bigonoff


Numéro de l'article: 17007   |  De: Bigonoff   |  Date: 2002-12-15 23:09:58
   RE: Relais 16A qui reste scotché avec 2A !!!!
Bhen oui c'est mieux ...
et un de 1000V aussi (lolll)

non c juste 400V c'est un peux juste

A+

Numéro de l'article: 17016   |  De: byte   |  Date: 2002-12-15 23:58:45

   module démodulateur AM  
je voudrais savoir si on peut trouver des modules démodulatur tout fait pour le son AM en TV ds les commerces électronique

Merci

Numéro de l'article: 16926   |  De: grondin   |  Date: 2002-12-15 07:04:14
   RE: module démodulateur AM
change de téléviseur se serra bien moins cher et plus rentable pour toi

Vu que tu n'est même pas capable de répondre aux questions qui te sont posées depuis le début de ton intervention

Pour sois disant reconstruire un téléviseur non prévu pour les normes que tu prétends vouloir
gr_16943

Numéro de l'article: 16943   |  De: dev   |  Date: 2002-12-15 12:31:25
   RE: module démodulateur AM
Bon je t'explique dev

je voudrais mettre une TV secam DK en secam LL'
pour la france

Pour la vidéo j'ai pas problème

Je me suis renseigner le LL' c du son en AM à 39,2mhz
ds mon pays on vend des modules son DK en FM

je voudrais savoir si on peut trouver ds les commerces en france ce module pour le son en LL' en AM

voila

Numéro de l'article: 16947   |  De: grondin   |  Date: 2002-12-15 13:37:18
   RE: module démodulateur AM

SECAM LL'
FI Vision : 38,9 Mhz
FI Son : 32,4 Mhz
Modulation (vidéo) : Positive
Porteuse son : 6,5 Mhz
Fb : 4,250 Mhz
Modulation Son : AM
Fr : 4,406 Mhz
Largeur de bande vidéo : 6 Mhz
Largeur canal : 8 Mhz
Fréquence trame : 50 Hz
Fréquence lignes : 15625 Hz
Nombre de lignes : 625
Les normes FI dépendent de l'oscillateur
local et peuvent varier.




Numéro de l'article: 16955   |  De: dev   |  Date: 2002-12-15 15:09:38
   RE: module démodulateur AM
Es qu'il existe des modules son AM tout fait à brancher sur la sortie FI tuner, dans les commerce electronique

Numéro de l'article: 16957   |  De: grondin   |  Date: 2002-12-15 15:57:02
   RE: module démodulateur AM
" Es qu'il existe des modules son AM tout fait à brancher sur la sortie FI tuner, dans les commerce electronique "

La réponse est NON car les modules dépendraient des fréquences en sortie des tuners.[ ce qui n'est pas le cas pour le DK en FM ] ou alors le module devrait comprendre le Tuner et le traitement de la FI et détection Son ainsi que la FI Image et détection Vidéo

le plus simple serait de récupérer un magnétoscope Secam LL' ( d'occasion même avec la mécanique HS ) pour se servir de la partie Tuner FI et d'injecter le signal ainsi reçu par la prise péritel au téléviseur

Tu auras ainsi un signal correctement traité aussi bien en FI Son qu'en FI Image

Tu vois qu'en posant correctement le problème la réponse adéquate en est d'autant plus simple et rapide


Numéro de l'article: 16965   |  De: dev   |  Date: 2002-12-15 17:03:57

   autoradio blaupunkt RCR45  
cherche mode de câblage ,alimenté entre le plot 4 et 8 il affiche toujours CODE ERREUR que peut on faire merci

Numéro de l'article: 16928   |  De: Rakotonaivo Rembert   |  Date: 2002-12-15 09:10:41
   RE: autoradio blaupunkt RCR45
Mettre le bon code

A+
Ren

Numéro de l'article: 16935   |  De: Ren   |  Date: 2002-12-15 10:06:48
   RE: autoradio blaupunkt RCR45
Salut
------

Pour gagner du temps, j'ai inventé un simulateur de conversation (simulword).
Dites-moi s'il fonctionne correctement, LOL.

simulword start gererated code :

- Rak : Quel code?
- Ren : Le code secret qui bloque l'autoradio
- Rak : Mais je viens de l'acheter d'occasion, on ne m'a pas donné le code
- Ren : Il en faut un
- Rak : Comment faire si on ne l'a pas?
- Ren : s'adresser au fabricant avec la facture d'achat.
- Rak : je ne l'ai pas, on ne peut pas court-circuiter le code?
- Ren : Non.

end of generated code

Si mon simulateur ne fonctionne pas bien, n'en tenez pas compte, LOL.

A+
Bigonoff



Numéro de l'article: 16942   |  De: Bigonoff   |  Date: 2002-12-15 12:15:18
   RE: autoradio blaupunkt RCR45
il fonctionne correctement il ne lui manque q'un AutoStart ce serai encore plus pratique ( mdr )

Numéro de l'article: 16945   |  De: dev   |  Date: 2002-12-15 12:45:14
   RE: autoradio blaupunkt RCR45
LOL !

Numéro de l'article: 16974   |  De: Ren   |  Date: 2002-12-15 18:30:26

   lA7710  
je recherche le datasheet du LA7710

merci

Numéro de l'article: 16929   |  De: grondin   |  Date: 2002-12-15 09:41:54
   RE: lA7710
http://service.semic.sanyo.co.jp/semi/ds_pdf_e/LA7710.pdf

Numéro de l'article: 16930   |  De: Ren   |  Date: 2002-12-15 09:46:34
   RE: lA7710
Merci A++

Numéro de l'article: 16939   |  De: grondin   |  Date: 2002-12-15 11:39:12

   chronomètre de course  
Salut à tous.
Voila, pour mon projet de fin d'année, je désire réaliser un chronomètre de course pour voitures électriques, précis à la milliseconde.Pour ce qui est du capteur de passage de la voiture, j'ai pensé utiliser un capteur magnétique. Pensez-vous qu'il est possible d'utiliser l'aimant permanent du moteur de la voiture pour faire la détection plutôt que d'acheter un aimant?
Merci pour ceux qui répondront.
Brice.


Numéro de l'article: 16931   |  De: Brice   |  Date: 2002-12-15 09:48:09
   RE: chronomètre de course
A mon avis, mettre un aimant, c'est plus sûr... et peu couteux !
( je pense que tu veux utiliser un ILS ( interrupteur à lame
souple ? )
Autrement, un capteur magnétique, c'est un noyau aimanté entouré
par une bobine; il peut capter le passage d'un objet metallique
sans qu'il y ait un aimant dessus !

http://membres.lycos.fr/rpoint/

Numéro de l'article: 16936   |  De: Rémy   |  Date: 2002-12-15 10:32:17
   RE: chronomètre de course
SAlut
------

Moi, j'aurais plutôt utilisé un détecteur optique par réflexion (un trou sous la piste, ça me semble plus sûr.

Mais bon, c'est mon avis :)

A+
Bigonoff


Numéro de l'article: 16941   |  De: Bigonoff   |  Date: 2002-12-15 12:07:16

   ampli classe A de LED 167  
J'ai réalisé l'ampli de LED 167 classe A à transistors bipolaires.

j'ai 2 soucis: l'alimenttaion est symétrique au départ et dès que je branche la partie ampli, j'ai un déséquilibre (22 volts et 26 volts) un Pb de condos ?

Ensuite, l'ampli a un gain de 14 , faut il un prés ampli avant ?

Merci

Numéro de l'article: 16937   |  De: francois   |  Date: 2002-12-15 10:47:19

   recherche CI autoradio sony  
Bonjour,
Je recherche un composant d'un autoradio sony xplod CDX-C5000 RX.
Il s'agit de l'ampli qui a les références suivantes :
XPLOD
TA826...
0036K....

Le ci ayant explosé, c'est tous ce que j'ai réussi à lire.

Merci d'avance.

Numéro de l'article: 16940   |  De: miked   |  Date: 2002-12-15 12:03:48

   Autonomie ???  
Bonjour,
Voilà, je souhaite rendre autonome un montage consommant au mini. 200 mA/H (12 V). Pour 2 semaines, je peux prévoir une batterie plomb de 60 A à mettre en parallèle avec la batterie existante de 1,2A. La petite batterie ne va-t-elle pas se décharger beaucoup plus vite ? quelqu'un aurait-il une meilleure solution technique ?
Merci d'avance

Numéro de l'article: 16946   |  De: Neo   |  Date: 2002-12-15 13:31:01
   RE: Autonomie ???
salut,

Avec une consommation de 200mA pour une autonomie de 2semaines soit 336 heures, il te faudrait en théorie une batterie de 0.2*336=67.2Ah.

L'utilisation d'une batterie de 60Ah ne te permettra donc pas de tenir 2 semaine (surtout si la conso est de 200mA minimum, comme tu le dis). De plus, un batterie de 67.2Ah, si elle existait, ne pourrait pas fournir 0.2A pendant 336h (pertes).

A part ca, mettre la batterie au plomb en // de l'autre batterie me semble possible. "A CONFIRMER"
La petite batterie ne se déchargera pas plus vite c'est sur ; c'est plutot elle qui va se décharger en dernier puisque, d'une technologie plus performante que la batterie au plomb NiMh ou CdNi, sa tension baisse plus lentement en fonction de la charge que celle de la batterie au plomb.

@+

Numéro de l'article: 16948   |  De: petitours   |  Date: 2002-12-15 13:46:17
   RE: Autonomie ???
Il faut aussi prèvoir le cas fréquent d'un élément de la petite batterie (Nicd ou Nimh) lâche ou CC.

Numéro de l'article: 16964   |  De: Eric   |  Date: 2002-12-15 16:24:43
   RE: Autonomie ???
Salut
------

Ben, le mieux est d'enlever la batterie d'origine, et de ne laisser que celle de capacité plus importante.

A+
Bigonoff


Numéro de l'article: 17006   |  De: Bigonoff   |  Date: 2002-12-15 23:02:20
   RE: Autonomie ???
Salut,

Je dirais aussi de virer la petite batterie, c'est pas elle qui va te servir beaucoup...

Par contre il existe des batteries de 100Ah (ss pointe de courant).
Elle sont utilisée dans les cabines de téléphone en cas de coupure de courant, ils les changes tout les 2 ans (pour plus de sécu), mais elle sont encore bonne, alors essaye de trouver un technicien Belgacom ou France télécom pour qu'il te file une batterie (ils les jettent quand même)

PS: j'en ai eu deux il y a un an, et elles vont tjrs...

A+
Ren

Numéro de l'article: 17021   |  De: Ren   |  Date: 2002-12-16 00:09:49

   oscillo PCS500 velleman  
et bien voila je n'ai pas un bugjet énorme 500 euro max alors je voudrais bien savoir si l'oscillo velleman serait un bonne achat sachent que les ascillo analogique pour se prix sont vraiment limités!!!
mais bon je suis ouvert a toutes prosition merci

Numéro de l'article: 16949   |  De: Mc   |  Date: 2002-12-15 13:59:19
   RE: oscillo PCS500 velleman
Bonjour,

J'ai la version inférieur de cette oscillo, il n'y a pas de problème et en plus c'est multi-usage.

@+

Numéro de l'article: 16969   |  De: KO   |  Date: 2002-12-15 18:04:13
   RE: oscillo PCS500 velleman
Moi je possède cette version , et je la trouve formidable (qualité prix ).

plein de fonction (mémoire,impression,sauvgarde,etc....)

A+

Numéro de l'article: 16971   |  De: byte   |  Date: 2002-12-15 18:07:42

   optimisation logiciel  
bonjour,

Je reprend sur la question que j'ai posé sans réponse...snif

J'essai donc de lire le port // du pc à 400kHz environ.

J'ai fait des esais en C++ :
1)lecture du port+"prinf"=11KHz max en moyenne
2)lecture du port seulle =500KHz max en moyenne
3)lesture du port+mise en tableau de la valeur=500KHz en moyenne


Il y a quelque temps, on m'a conseillé sur ce forum de signer les valeurs que je dois lire sur le port // afin que le pc puisse savoir si la valeur lu est la bonne ou si elle est "en retard".

Vu le temps que prend la la lecture du registre du port, si je vais en lire un second, je ne saurait jamais si la signature va avec les données recues ???!!!
Qu'en pensez vos ?

Y a t'il des commandes "rapides" pour lire les registres de port ?

Il y a pas mal de trucs dans un pc qui vont à plus de 500KHz ! JE ne comprend pas pourquoi la simple lecture d'une bete registre prend tant de temps. JE suis limité par le soft, pas par l'electronique du port // !!!!

merci pour vos conseils, remarques, expériences ...
Ne pas avoir peur etre exhaustif.

@+

Numéro de l'article: 16950   |  De: petitours   |  Date: 2002-12-15 14:19:43
   une precision importante
...le pc utilisé est muni d'un athlon 900MHz !
Quand on pense que cette bete occupée à 100% à la lecture d'un registre ne peut le faire que 500 000 fois par secondes, il y a des questions à se poser...

merci pour votre aide

Numéro de l'article: 16966   |  De: petitours   |  Date: 2002-12-15 17:15:57
   RE: une precision importante
Salut !

Tu utilises quel OS ?
Si cet OS n'est pas un vrai DOS, quelle librairie utilises-tu pour accéder aux ports matériel ?
Quel est le compilateur utilisé ?

Personnellement sous Win2000 en Visual C++ avec PortTalk.sys, je scan 500000 fois le port // et stocke dans un tableau mes lectures en 9.325 secondes !
Donc j'imagine que tes 500KHz sont bien sous dos...

Je n'ai pas fait recemment de tests sous dos, mais je crois me rappeller que je "montais" à 450000 ou 500000 par seconde au grand maxi... et ce, sur un bouzin portable PII à 233 MHz

Je vais quand même essayer de refaire des tests un de ces 4...
Il semblerait que DOS perds beaucoup de temps à faire "autre chose"

Tu as sans doute aussi déjà essayé de "disabled" les interruptions je suppose...
M'enfin, dans ce cas là, la mesure du temps devient un peu aléatoire non ?

Il y a peut être d'autres OS qui "perdent" moins de temps et qui sont mono-mono tache ...



Numéro de l'article: 17038   |  De: Guillaume   |  Date: 2002-12-16 09:02:53
   RE: une precision importante
Salut,

je crois pas que le problème vienne de l'OS, par contre la fonction 'printf' est très gourmande en temps d'execution puisqu'elle accède à la carte graphique (peut-être même via le BIOS). Je me demande si le port parallele n'est pas tout simplement limité physiquement aux environs de 500kHz. Sa gestion était dédiée autrefois à un microcontrôleur, sa limite en vitesse est peut-être encore utilisée aujourd'hui.

En plus, passer des signaux numériques au dela de 500kHz sur câble via un port parallele n'est pas très fiable. J'ai déjà essayé de faire du téléchargement de données sur port parallele avec un câble en nappe de moins d'un mètre, le résultat était pas génial.

Pour faire de l'acquisition il faut plutôt utiliser une carte sur port ISA par exemple (pas très compliquée à mettre au point) ou sur port USB pourquoi pas.

Numéro de l'article: 17241   |  De: syan100x   |  Date: 2002-12-18 13:48:20

   trouver un HP mort  
Bonjour,

Je suis à la recherche de haut parleur ou d'enceintes "morts" destinés à etre placé pres d'un ecran. (enceinte de pc, de voie centrale de système home ciné...)

Je souhaite récupérer le culot d'excitation magnétique de ces HP "blindés".

Savez vous où je peux me procurer ce genre de matériel "en panne" voir meme "pulvérisé" ?


merci d'avance



Numéro de l'article: 16951   |  De: petitours   |  Date: 2002-12-15 14:26:09
   RE: trouver un HP mort
S'agit-il de l'aimant ?
ou du blindage ?

Numéro de l'article: 16989   |  De: Lio   |  Date: 2002-12-15 20:37:57
   RE: trouver un HP mort
Je souhaite récupérer l'aimant d'une part et regarder si il n'y a pas des astuces de conception sur le circuit magnétique d'autre part.
Le système que je fabrique n'est pas pareil du tout, je vais le fabriquer moi meme.

Je cherche plus particulièrement un aimant qui équipe un haut parleur "blindé" car ils ne sont normalement pas de la meme technologie que ceux des HP "standards". Ce ne sont pas des ferrites.

Pour la petite histoire, les HP "blindés" ne sont pas blindés...C'est juste l'excitation qui n'est pas faite pareil afin de limiter les fuites magnétiques.

merci


Numéro de l'article: 16993   |  De: petitours   |  Date: 2002-12-15 21:05:29
   RE: trouver un HP mort
Salut,

Les HP blindé sont munis d'une "coque" métal qui enrobe l'aimant.
Mais je ne pense pas que l'aimant soit différent.

Par curiosité, que fabriques tu ?

Numéro de l'article: 17018   |  De: Ren   |  Date: 2002-12-16 00:01:24
   RE: trouver un HP mort
salut,

Je ne sais pas si tu te souviens de mes posts concernant une "espèce de pointeau" mu par la force de Laplace...Ben c'est encore pour ca !

Il est en effet bien possible que les aimants permanents utilisés dans les HP "blindés" sont les memes sur les HP bas de gamme, mais je suis sur qu'ils sont différents (et bien plus chers) dans les autres...
Je vais retrouver pourquoi précisément et je te le dirais si tu veux...De toute manière, il faut que je retrouve, ca mévitera de faire des conneries.
Toute ce que je peux te dire, c'est qu'ils sont nettements plus performants...Et leur utilisation est imposée par la configuration particulière de ces culots magnétiques avares en place...

Je vais faire essayer de faire 2 crobar pour expliquer comment sont fait les 2 types de HP...

@+
gr_17022

Numéro de l'article: 17022   |  De: petitours   |  Date: 2002-12-16 00:11:26

   QAM 16  
Bonjour,



Numéro de l'article: 16959   |  De: Manzo   |  Date: 2002-12-15 16:00:25
   RE: QAM 16
Salut;

Comment va tu ?

Numéro de l'article: 16962   |  De: Tronic-man   |  Date: 2002-12-15 16:10:23
   RE: QAM 16
Tu passes un bon Week-End Tronic-man ?

Moi, ça va.

Numéro de l'article: 16963   |  De: Freud   |  Date: 2002-12-15 16:19:52

   QAM 16  
Bonjour,

Je recherche les schemas des modulations et demodulations de la QAM 16.Je travaille sous ADS....si quelqu'un a un lien....ou des resultats
Merci



Numéro de l'article: 16960   |  De: Manzo   |  Date: 2002-12-15 16:01:31

   Programmer PIC en Basic  
J'aimerai m'y mettre à la programmation du 16f84 en Basic, que me conseiller vous comme compilateur Basic pour PIC ?
Ou trouver en téléchargement ?

Numéro de l'article: 16967   |  De: Max   |  Date: 2002-12-15 17:34:39
   RE: Programmer PIC en Basic
PIC BASIC PRO 2.42
Pour le télechargement (bhen faut l'acheter)
sinon ya des autres gratuis (m'est je les trouves pas génial )

A+

Numéro de l'article: 16970   |  De: byte   |  Date: 2002-12-15 18:06:02
   RE: Programmer PIC en Basic
Salut
------
tu trouveras un compilateur basic ici :http://perso.wanadoo.fr/pat.deaubonne/

Mais bon, tu y tiens vraiment, au basic? hmmmm?

A+
Bigonoff


Numéro de l'article: 17005   |  De: Bigonoff   |  Date: 2002-12-15 22:54:14
   RE: Programmer PIC en Basic
pas pour te contrarier ...
le basic convient très vient pour des applications style automate PLC
moi j'utilise l'asm , le bas , et le C ...

Et j'utilise le language suivant l'application ...

Toutes les applications non pas bessoin de vitesse d'exécution rapide , quand tu voie qu'un automate en industrie tourne au mieux a 20mS , pourtant c'est des lignes de productions ....

Donc l'assembleur est très bien et très soupple puisque il nous permet d'utiliser a 100% le µC . Mais quelle gallère des fois pour la conception d'un programme un peux conplexe ....

C'est pour ca qu'on a fait des compilateurs ...
et picbasic pro s'en sort trés bien pour certaine application , sans parler du géant pic-c de chez hitech ...

a chaqun son truque

Numéro de l'article: 17019   |  De: byte   |  Date: 2002-12-16 00:05:14
   RE: Programmer PIC en Basic
Salut,

à te lire j'ai l'impression que le basic (pour PIC) est réservé aux applications lentes voir très lentes.
Moi j'utilise PicBasic Pro (pour le moment, je n'ai trouvé aucun compilateur basic aussi performant) à titre perso et pro et je n'ai
JAMAIS été limité par la vitesse d'exécution du code.
Et même si PBP ne permet pas l'optimisation du code à 100% (on ne doit pas en être loin quand même), la vitesse d'écriture d'un programme compense très largement ce (petit) défaut.

@+
Alexandre
http://perso.wanadoo.fr/atexa_elec

Numéro de l'article: 17033   |  De: Alexandre   |  Date: 2002-12-16 06:11:09
   RE: Programmer PIC en Basic
Non , pas du tous ...
Mais c'est le compilateur le plus lent (par rapport au C )
mais trés éfficace quand même , ta déja regarder le programme qui génere ? ...

- Il utilise trés mal la gestion de pagination mémoire ...
- Il n'utilise pas d'intéruption en basic "si si si " sauf si tu fait ta routine en asm .....
- Travaille sur des nombres de 16 Bits et pas 32
- Il ne connais pas des nombres en virgulle ...
- etc ....

Mais on peut mixer bas & asm pour les routines critiques en speed ...
donc non problème ....

A+


Numéro de l'article: 17036   |  De: byte   |  Date: 2002-12-16 07:54:56
   RE: Programmer PIC en Basic
Il est vrai que je n'ai pas spécialement épluché le code généré (je peux juste dire qu'il semble bien plus compact que celui d'autres compilateur basic).
Toutefois, à part "Il utilise trés mal la gestion de pagination mémoire" (je veux bien te croire sur parole) le reste ce n'est que des performances sans rapport avec la vitesse (le compilateur fait ou ne fait pas).

@+
Alexandre.

Numéro de l'article: 17037   |  De: Alexandre   |  Date: 2002-12-16 08:59:17
   RE: Programmer PIC en Basic
oui , m'est c'est domage quil fait pas du 32Bits...
A+

Numéro de l'article: 17085   |  De: byte   |  Date: 2002-12-16 21:28:14
   RE: Programmer PIC en Basic
hep le pro du pic, il est clair que un compilateur Basic,C,Pascal,.... sera toujours moins bon que le language machine.
Mais la conception et surtout la maintenance est plus facile.
Alors il faut faire des concéssions, entre la rapidité et la taille du code.

C'est valable pour tout les micros ou programme sur tout les OS.

Le basic a fait beaucoup de progres depuis sa creation, pour exemple VisualBasic, micro$ travaille plus sur vb que sur C++ et pense remplacer un jour C+++ par VB version 4012......

Pour ma part je programme seulement en ASM, c'est plus simple et plus sur surtout tu garde le controle complet de ton programme (sauf pour les bugsss :) )

Mais tu moment que le programme fonctionne comme prévu .........

@+

Numéro de l'article: 17093   |  De: Maudio   |  Date: 2002-12-16 22:49:05
   RE: Programmer PIC en Basic
Salut
------

Ah ben non. LOLOLOL

Je ne peux pas laisser dire que le basic ou autre sont plus faciles pour la maintenance. LOL

Ce qui est bon pour la maintenance, c'est de programmer de façon structurée. Le langage n'y est pour rien, c'est le programmeur qui est responsable.

Si tu veux, je peux te donner une ligne en C, tu m'expliqueras ce que c'est : LOL. bonjour la maintenance.

Et le basic, non seulement c'est plus lent, mais c'est plus gros. Donc, aucun compromis, car aucun avantage.

Sur PIC, le gros problème que rencontrent les compilateurs, c'est l'absence de possibilité de passer des variables sur la pile.
Or, il faut savoir que c'est la base de tout compilateur C.
Donc, C en PIC = C mutilé.

Moi, je pense que je programme aussi vite en assembleur qu'en basic.
Du reste, j'ai une vue complète et réelle de mon programme, alors qu'en basic, il faut faire confiance à la "boîte noire" du compilateur.

En plus, la gestion correcte des interruptions, avec un compilateur....

Et, à mon avis, la base de l'efficacité de la programmation en PIC, ce sont les interruptions.

Alors, à partir du moment où on connait bien l'assembleur, quel peut donc bien encore être l'intérêt du basic???

D'autant qu'après un certain temps, on crée des librairies de fonctions, donc tout ce qui est "habituel" est déjà écrit.

De plus, quand sort un nouveau composant, on ne peut pas l'exploiter en basic (compilateur pas dispo, ou payant etc.).

Donc, autant je ne programme plus en assembleur sur ordinateur (je l'ai fait, même sur système multitâche), autant je ne suis pas près d'abandonner l'assembleur pour les pics 16xxx.

Pour Alexandre :

"à te lire j'ai l'impression que le basic (pour PIC) est réservé aux applications lentes voir très lentes. "

Ben oui, désolé.
Maintenant, si tu penses qu'une ms, c'est rapide, alors je n'ai rien dit.

"Moi j'utilise PicBasic Pro (pour le moment, je n'ai trouvé aucun compilateur basic aussi performant)"

Ben oui, compilateur. Ralentissement estimé mesuré : entre 10 fois et 100 fois suivant les applications par rapport à l'assembleur.

"à titre perso et pro et je n'ai JAMAIS été limité par la vitesse d'exécution du code."

C'est tout simplement parceque tu n'as jamais eu besoin de la vitesse complète du PIC. Tout dépend de l'application. Tu pourais également dire : avec un PIC à 4Mhz, je n'ai jamais été limité par la vitesse. Mais, si on fait des 20Mhz, c'est qu'il y a une raison.

"Et même si PBP ne permet pas l'optimisation du code à 100% (on ne doit pas en être loin quand même)"

La, permets moi d'en douter :)
D'autant que la principale cause de ralentissement du basic, c'est l'utilisateur lui-même. Comme on ne voit plus le code généré, on ne se rend plus compte qu'une solution choisie est inadaptée. Donc, frein.

Allez, un petit exercice pratique :

J'ai fait, en asm, un gradateur 16 canaux sur 256 niveaux chacun, et indépendants, avec détection du passage à 0 du secteur, avec un seul pic 16F876. En plus, avec communication en RS232 à 38400 bauds pour recevoir les commandes en provenance d'une carte maître (système domotique).
Essaye de faire ça en basic, tu me diras si tu penses encore que le basic est rapide.
Si tu doutes, je te place le source ci-dessous.

Maintenant, second problème : la maîtrise du code généré, et la taille.

Second exercice :
Tu vas sur mon site, tu charges le debugger CBDS, et tu fais la même chose en basic en respectant le même cahier des charges.
Bon courage...

Ca, ce n'est pas du discours théorique, ce sont des applications pratiques réelles des pics.

"la vitesse d'écriture d'un programme compense très largement ce (petit) défaut. "

Ben, moi je suis convaincu qu'on peut écrire aussi vite en assembleur qu'en basic.

Et, en utilisant mon debugger sur circuit, je dipose d'un outil de debuggage bien plus puissant que sur basic. Donc, gain de temps de debuggage, et c'est là, en général, qu'on perd du temps.

Maintenant, s'il s'agit de faire un automate, avec 20ms de temps de réaction, pas de problème.
Pour les applications corsées, il faudra revenir à l'asm.
Alors, pourquoi se casser la tête à se disperser avec 2 langages, quand le même peut tout faire en mieux???

A+
Bigonoff






A+
Bigonoff


Numéro de l'article: 17127   |  De: Bigonoff   |  Date: 2002-12-17 01:10:05
   RE: Programmer PIC en Basic
Bonjour,

>> "à te lire j'ai l'impression que le basic (pour PIC) est
>> réservé aux applications lentes voir très lentes. "

> Ben oui, désolé.
> Maintenant, si tu penses qu'une ms, c'est rapide, alors
> je n'ai rien dit.

Je ne pense pas cela.

>> "Moi j'utilise PicBasic Pro (pour le moment, je n'ai trouvé
>> aucun compilateur basic aussi performant)"

> Ben oui, compilateur. Ralentissement estimé mesuré : entre 10 fois > et 100 fois suivant les applications par rapport à l'assembleur.

10 et 100 fois !?
Tu es certain qu'on parle de la même chose ?
Je ne parle pas des systèmes interprétés type BASICSTAMP ou autre...

>> "à titre perso et pro et je n'ai JAMAIS été limité
>> par la vitesse d'exécution du code."

> C'est tout simplement parceque tu n'as jamais eu besoin
> de la vitesse complète du PIC. Tout dépend de l'application.

C'est une évidence...

> Tu pourais également dire : avec un PIC à 4Mhz, je n'ai
> jamais été limité par la vitesse. Mais, si on fait des 20Mhz,
> c'est qu'il y a une raison.

???

>> "Et même si PBP ne permet pas l'optimisation du code à 100%
>> (on ne doit pas en être loin quand même)"

> La, permets moi d'en douter :)

Juste histoire de voir cela, merci de me fournir le fichier asm et hex du programme (qui ne sert à rien) basic suivant :
Pour 16F84 et fosc = 4MHz

a = 5
i = byte
j = byte
k = word
l = word

FOR i = 0 TO 255

FOR j = 3 TO 210 step 3
HIGH PORTB.0
PAUSE 1 (pause de 1 ms)
LOW PORTB.0
PAUSE 1
NEXT j

FOR k = 0 TO 5000
l = k * a
HIGH PORTB.0
PAUSEUS 50 (pause de 50 µs)
LOW PORTB.0
PAUSEUS 50
NEXT k

NEXT i

END

J'ai demandé la même chose à "byte" en C (j'attends sa réponse...)


> D'autant que la principale cause de ralentissement du basic,
> c'est l'utilisateur lui-même. Comme on ne voit plus le code généré, > on ne se rend plus compte qu'une solution choisie est inadaptée.
> Donc, frein.

Là je suis +/- d'accord. Mais avec l'habitude on arrive à ce dépatouiller et au besoin, on utilise de l'assembleur. :-)

> Allez, un petit exercice pratique :
> J'ai fait, en asm, un gradateur 16 canaux sur 256 niveaux
> chacun, et indépendants, avec détection du passage à 0 du secteur, > avec un seul pic 16F876. En plus, avec communication en RS232
> à 38400 bauds pour recevoir les commandes en provenance d'une
> carte maître (système domotique).
> Essaye de faire ça en basic, tu me diras si tu penses encore
> que le basic est rapide.

Pourquoi pas.
Quelle est la fréquence du quartz que tu as utilisé ?

> Si tu doutes, je te place le source ci-dessous.

Aucun doute. Mais je ne vois pas de code source !!!

> Maintenant, second problème : la maîtrise du code généré,
> et la taille.

> Second exercice :
> Tu vas sur mon site, tu charges le debugger CBDS,
> et tu fais la même chose en basic en respectant
> le même cahier des charges.
> Bon courage...

Effectivement, cela va être difficile.
Mais bon, je ne suis pas certain que le basic ait la prétention de rivaliser à l'assembleur sur ce genre de chose.

> Ca, ce n'est pas du discours théorique, ce sont
> des applications pratiques réelles des pics.

Effectivement, moi je ne fais que des trucs théoriques.
www.atexa-electronique.com
http://perso.wanadoo.fr/atexa_elec

>> "la vitesse d'écriture d'un programme compense très largement
>> ce (petit) défaut. "

> Ben, moi je suis convaincu qu'on peut écrire aussi vite
> en assembleur qu'en basic.

Super !!! J'aurais mon programme en assembleur dans la journée. (+/- cinq minutes pour écrire le programme basic)

> Et, en utilisant mon debugger sur circuit, je dipose d'un outil
> de debuggage bien plus puissant que sur basic. Donc, gain de
> temps de debuggage, et c'est là, en général, qu'on perd du temps.

Je ne sais pas, je n'utilise pas de debugger.
Par contre il est exact que le debuggage est la phase la plus longue (surtout sur des programmes de 6000 lignes de basic et + de 1200 variables)

> Maintenant, s'il s'agit de faire un automate, avec 20ms de temps
> de réaction, pas de problème.
> Pour les applications corsées, il faudra revenir à l'asm.

Des exemples d'applications corsées ?

> Alors, pourquoi se casser la tête à se disperser avec 2 langages,
> quand le même peut tout faire en mieux???

Les goûts et les couleurs...

@+
Alexandre.

Numéro de l'article: 17142   |  De: Alexandre   |  Date: 2002-12-17 11:16:13
   RE: Programmer PIC en Basic
Salut,

> m'est c'est domage quil fait pas du 32Bits...

Je suis d'accord.

Sinon, as tu reçu mon e-mail ?

@+
Alexandre.


Numéro de l'article: 17143   |  De: Alexandre   |  Date: 2002-12-17 11:18:47
   RE: Programmer PIC en Basic
Oui g bien reçus ,
je vais faire le test , mais je suis sur que c plus petit ...
j'ai déja comparer avec autres routine

Sinon bigonoff :

ET BASCOM AVR TU CONNAIS , ca c'est puissants comme compilateur bcp plus que picbasic pro ....:)))))

Et pourquoi tu utilise VISUAL BASIC "studio" pour des appz ?
pourquoi tu n'utilise pas l'assembleur , g des soft pour l'asm sur pc si tu veut (lolll) et j'aime même un déboggeur en prime (softice).

Sinon vive picbasic pro
vive bascom avr
vive pic-c
vive l'asm et les cours de bigonoff (hiiii)




Numéro de l'article: 17191   |  De: byte   |  Date: 2002-12-17 23:23:39
   RE: Programmer PIC en Basic
SAlut
-----

Bon, plusieurs choses :

Pour le programme qui ne sert à rien : effectivement, s'il ne sert à rien, ça ne représente aucun intérêt. Sur un programme qui sert à quelque-chose, je ne choisirais pas les mêmes solutions en basic et en assembleur. Vouloir démontrer le contraire, c'est penser qu'un compilateur est plus "intelligent" qu'un humain. On n'en est guère encore là.

Mais, à part ça, on peut toujours faire mieux en assembleur.

Par exemple, ton programme utilise "pause" et PauseUS". Maintenant, comment peux-tu savoir quel hardware est encore disponible pour générer un PWM?
Comment choisis-tu les timers utilisés, les bases de temps communes, les interruptions utilisées par intermittance etc.?
Evidemment, ton programme, il allume une LED. Dans ce cas, pas de problème.
Si tu devais, maintenant, générer 1 signal PWM, mesurer un temps avec un module CCP, tout en instaurant une mesure de dépassement de délais de liaison, etc? Comment vérifier les contraintes d'utilisation des ressources?

Tu dis :"Effectivement, moi je ne fais que des trucs théoriques. ". Tu m'as mal compris, ou je me suis mal exprimé, désolé. Je ne voulais pas dire que tu ne faisais que du théorique, je voulais dire que ce que je disais concernant l'avantage de l'assembleur n'était pas que de la théorie. Je ne me serais pas permis de dire une telle chose sur toi, sans même te connaitre. :)

Tu dis encore :
"Super !!! J'aurais mon programme en assembleur dans la journée. (+/- cinq minutes pour écrire le programme basic) "

ben, ça ne veut rien dire, ça. Je peux t'écrire en 5 minutes un programme asm qui ne sert à rien, et pour lequel tu devras te casser la tête une journée pour le traduire en basic. Maintenant, ce genre de cas ultra-simple et classique est le cas typique pour lequel un compilateur s'en tire à merveille. Faut pas me prendre pour un bleu, LOL.
Essaye un autre exemple simple : dans un programme avec des tas de variables déjà utilisées, copie un tableau de 16 octets vers une zone de destination. Envoie-moi le code :). Tu vas voir le problème des compilateurs : ils ne peuvent pas prendre de décision à ta place.

Ce n'est pas comme ça qu'on raisonne : on part d'un problème réel concret (pas une led qui clignote), et on réalise suivant les 2 méthodes. On compare l'efficacité (par exemple, l'économie de ressource, qui permet d'utiliser un pic moins cher).

Pour la rapidité, je travaille aussi vite en asm. Je viens de commencer un programme aujourd'hui, pour une application pratique, j'ai déjà écrit ou copié 1300 lignes.

Pour les exemples d'application corsées, il y a sûrement moyen d'en faire, mais je peux dire que :

- Tout ce qu'il est possible de faire en basic est possible en assembleur
- Le contraire n'est pas vrai.

Pour Byte : j'utilise VB pour le PC par gain de temps, et parceque les ressources mises à disposition sur le PC n'ont rien à voir avec celles mises en oeuvre sur les microcontrôleur.

Quand on a 512MB de mémoire RAM, on peut se permettre d'en gaspiller 1000 octets. Quand on a 64 octets, on ne parle plus de la même chose du tout. Idem quand on a 1GHz de fréquence d'un processeur CISC, pour afficher des fenêtres et boutons. Rien à voir avec 20Mhz d'un RISC pour gérer du process en temps réel. Tu avoueras que les contraintes n'ont rien à voir.

Le basic sur PIC, je n'en vois pas l'utilité, personnellement. Ca ne veut pas dire qu'il soit inutile, il est pratique pour les applications non critiques, pour celui qui n'a pas envie de s'investir en assembleur.

Les calculs de temps, c'est du réel. En interprété, on parle de 1000 fois plus lent, pas 10 à 100 fois.

Petite anecdote. Un jour, sur un ordi (Amiga), je devais programmer un ciel étoilé défilant, avec effet de perspective.
J'ai décidé d'écrire le programme en C.
Résultat : une lenteur lamentable.
J'ai réécrit en assembleur : résultat impeccable.

Et pourtant, le C me générait un code tout ce qu'il y avait d'optimisé. Le problème, ce n'était pas le C, c'était moi.
En c, j'avais utilisé des valeurs réelles, avec décimales, pour les mouvements. Ca me servait pour les offset. Je faisais des calculs dessus et je conservais les valeurs entières pour les affichages.
Quand j'ai voulu faire ça en assembleur, je me suis dit : horreur, ce n'est pas une bonne méthode. J'ai donc utilisé une autre technique, ce qui a réglé le problème.

C'est donc ce que je dis : le basic n'est pas fondamentalement en cause, mais la façon de programmer en langage évolué est trop aisée pour que l'utilisateur se rende compte de ce qu'il est en train d'exiger du processeur. En assembleur, c'est lui qui encode, donc il va rechercher les solutions simples, donc efficaces, d'où le rapport moyen constaté de 10 à 100 pour la moyenne des applications, par pour un bout de code qui ne sert à rien.

Quand on me pose un problème, je vois comment le résoudre. Si on rencontre une difficulté de programmation, c'est qu'on a choisi une mauvaise méthode de résolution. L'adoption d'un langage évolué ne permettra que de masquer cette inadaptation par une simplicité apparante qui se traduira par un code non efficace.
Si le problème est bien appréhendé, alors la résolution en assembleur sera simple.

Mais, si ça peut te rassurer, j'ai programmé aussi en assembleur sur ordis (mon record est un programme de 30.000 lignes (430 pages A4), tout en assembleur sous environnement multitâche (un vrai), et parfaitement structuré et maintenable, avec multi-process, sémaphores, signaux etc. J'ai abandonné, justement, parce qu'avec les ressources actuelles, ce n'est plus nécessaire.

Bon, maintenant, puisqu'on me demande le source de l'exemple cité, je vais le coller ci-dessous :)
A+
Bigonoff




;*****************************************************************************
; GRADATEUR A BASE DE PIC16F876 *
; 16 sorties sur 256 niveaux *
; Liaison bi-directionnelle half-duplex 38400 bauds 8 bits / sans parité *
; Réseau token-ring RS485 + ligne de requête d'émission *
; *
; La trame de communication se compose d'un caractère de début de trame, *
; de l'adresse du destinataire, de l'adresse de l'émetteur, de la longueur *
; utile de la trame, des caractères de commande et de donnée. La trame se *
; termine par un checksum, reste de la division par 256 de la trame + *
; l'adresse de la carte. La détection de fin de message se fait uniquement*
; sur base du temps d'inactivité de la ligne (>2ms). *
; La longueur totale de la trame ne peut dépasser 48 caractères *
; Toute commande entraîne une réponse *
; A la première mise en service, initialisation de l'EEPROM, suivie d'un *
; clignotement de la LED ERR 3X. Pour un reset, mettre sous tension avec *
; le jumper placé, puis enlever le jumper. La LED ERR clignote 3X. *
; La LEDERR flashe à chaque réception d'une trame destinée à la carte. *
; En cas d'erreur, la LEDERR reste allumée. *
; *
;*****************************************************************************
; *
; NOM : GRADCOMM *
; Date de création : 20/05/2000 *
; DAte de modification : 16/10/2000 *
; Version : 1.00 *
; Circuit : GRADCOMM *
; Auteur : Bigonoff *
; *
;*****************************************************************************
; *
; Fichier requis: P16F876.inc *
; VALIDER NOMBRES DECIMAUX PAR DEFAUT *
; *
;*****************************************************************************
; *
; Notes: Réception RS485 sur Rx *
; Emission RS485 sur Tx *
; Vitesse : 19200 bauds *
; Configuration : 1 start, 8 data, 1 stop *
; *
; REGLER LES PARAMETRES DANS LES ASSIGNATIONS PROGRAMME (ADRESSE ETC) *
; *
; TRAME DE MESSAGE *
; ---------------- *
; CARACTERE1 : DEBUT DE MESSAGE : 0XFA *
; *
; CARACTERE2 : ADRESSE DU DESTINATAIRE *
; esclave : de 0x00 à 0x7F *
; Adresse 0x80 à l'initialisation *
; maître : 0xA5 *
; *
; CARACTERE3 : ADRESSE DE L'EXPEDITEUR *
; *
; CARACTERE4 : LONGUEUR DE LA TRAME (SANS CARS 1 à 3) *
; *
; CARACTERE5 ET SUIVANTS : COMMANDE ET ATTRIBUTS *
; *
; COMMANDES RECUES PAR TOUTES LES CARTES *
; -------------------------------------- *
; *
; 'R': ReSet imposé *
; -'S'doit suivre pour confirmation *
; *
; 'A': nouvelle Adresse *
; - 'D' pour confirmation *
; - nouvelle adresse de 0x00 à 0x80 *
; *
; 'C': nom et version de la carte *
; *
; 'P': interrogation de la carte-Pooling *
; *
; *
; COMMANDES RECUES PAR CETTE CARTE *
; --------------------------------- *
; *
; 0 : 16 valeurs en montée douce *
; - Suivent les 16 valeurs de 0 à 255 *
; *
; 1 : 16 valeurs en montée brutale *
; - suivent les 16 valeurs de 0 à 255 *
; *
; 2 : valeur unique en montée douce *
; - Adresse de la sortie : de 0 à 15 *
; - Valeur d'allumage *
; *
; 3 : valeur unique en montée immédiate *
; - Adresse de la sortie : de 0 à 15 *
; - Valeur d'allumage *
; *
; 4 : augmenter niveau sur sortie *
; - masque des 8 premières entrées à augmenter *
; - masque des 8 dernières entrées à augmenter *
; *
; 5 : diminuer niveau sur sortie *
; - masque des 8 premières entrées à diminuer *
; - masque des 8 dernières entrées à diminuer *
; *
; 6 : Fin de modification de niveau *
; - masque des sorties 0/7 *
; - masque des sorties 8/15 *
; *
; 7 : mémorisation d'une valeur *
; - Numéro de la mémoire concernée de 0 à 9 *
; *
; 8 : restauration valeur mémorisée douce *
; - Numéro de la mémoire de 0 à 9 *
; - Masque des sorties concernées 0/7 *
; - Masque des sorties concernées 8/15 *
; *
; 9 : restauration valeur mémorisée brutale *
; - Numéro de la mémoire de 0 à 9 *
; - Masque des sorties concernées 0/7 *
; - Masque des sorties concernées 8/15 *
; *
; 10: Réception des paramètres *
; - 2 valeurs de EEPROM (adresses 4 à 5) *
; *
; COMMANDES ENVOYEES PAR TOUTES LES CARTES *
; ---------------------------------------- *
; *
; 'I': reQuête d'initialisation *
; - Pas de caractère supplémentaire *
; *
; 'C': nom et version de la carte *
; - nom *
; - version *
; *
; 'N": Non, rien à envoyer *
; *
; 'Y': Commande acceptée *
; *
; COMMANDES ENVOYEES PAR CETTE CARTE *
; ---------------------------------- *
; *
; 0 : 16 valeurs finales *
; - Suivi des 16 valeurs *
; *
; CARACTERE FINAL : CHECKSUM *
; *
; Liason exclusivement entre le maître et un esclave *
; Le passage du token fait partie de la commande reçue *
; le token est validé pour l'envoi d'un seul message *
; *
;*****************************************************************************


LIST p=16F876 ; Définition de processeur
#include <p16F876.inc> ; fichier include

__CONFIG _CP_ALL & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _HS_OSC

; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation du processeur. Les définitions sont dans le fichier include.
; Choisir une valeur par groupe.
; Voici les valeurs et leurs définitions :

; Protection du programme
; -----------------------
;_CP_ALL protection totale
;_CP_HALF protection de 1000 à 1FFF
;_CP_UPPER_256 protection de 1F00 à 1FFF
;_CP_OFF Pas de protection

; Debuggage
; ---------
;_DEBUG_ON RB6 et RB7 utilisées pour debugger
;_DEBUG_OFF RB6 et RB7 en utilisation normale

; Accès à la flash programme
; --------------------------

;_WRT_ENABLE_ON Le programme peut écrire dans la flash
;_WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash

; Protection de la EEprom
; -----------------------

;_CPD_ON Mémoire EEprom protégée
;_CPD_OFF Mémoire EEprom déprotégée

; Programmation sur circuit
; -------------------------

;_LVP_ON RB3 permet la programmation série de la PIC
;_LVP_OFF RB3 en utilisation normale
; Reset de la PIC si tension <4V
; ------------------------------
; _BODEN_ON Reset tension en service
; Valide PWRTE_ON automatiquement
; _BODEN_OFF Reset tension hors service

; Retard à la mise sous tension
; -----------------------------

;_PWRTE_OFF Démarrage rapide
;_PWRTE_ON Démarrage temporisé

; Watchdog
; --------

;_WDT_ON Watchdog en service
;_WDT_OFF Watchdog hors service

; Oscillateur
; -----------
;_LP_OSC Oscillateur basse vitesse (32<F<200Khz)
;_XT_OSC Oscilateur moyenne vitesse (200Khz<F<4Mhz)
;_HS_OSC Oscillateur haute vitesse (4Mhz<F<20Mhz)
;_RC_OSC Oscillateur à réseau RC

;*****************************************************************************
; ASSIGNATIONS SYSTEME *
;*****************************************************************************

; REGISTRE OPTION_REG (configuration)
; -----------------------------------
OPTIONVAL EQU B'01000110'
; RBPU b7 : 0= Résistance rappel +5V en service
; INTEDG b6 : 1= Interrupt sur flanc montant de RB0
; TOCS b5 : 0= horloge interne
; TOSE b4 : N.U. (b5=0)
; PSA b3 : 0= Assignation prédiviseur sur Tmr0
; PS2/PS0 b2/b0 valeur du prédiviseur
; 000 = 1/1 (watchdog) ou 1/2 (tmr0)
; 001 = 1/2 1/4
; 010 = 1/4 1/8
; 011 = 1/8 1/16
; 100 = 1/16 1/32
; 101 = 1/32 1/64
; 110 = 1/64 1/128
; 111 = 1/128 1/256


; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTCONVAL EQU B'00000000'
; GIE b7 : masque autorisation générale interrupt
; ne pas mettre ce bit à 1 ici
; sera mis en temps utile
; PEIE b6 : masque autorisation générale périphériques
; T0IE b5 : masque interruption tmr0
; INTE b4 : masque interuption RB0/Int
; RBIE b3 : masque interruption RB4/RB7
; T0IF b2 : flag tmr0
; INTF b1 : flag RB0/Int
; RBIF b0 : flag interruption RB4/RB7

; REGISTRE PIE1 (contrôle interruptions périphériques)
; ----------------------------------------------------
PIE1VAL EQU B'00110000'
; PSPIE b7 : Toujours 0 sur PIC 16F786
; ADIE b6 : masque interrupt convertisseur A/D
; RCIE b5 : masque interrupt réception USART
; TXIE b4 : masque interrupt transmission USART
; SSPIE b3 : masque interrupt port série synchrone
; CCP1IE b2 : masque interrupt CCP1
; TMR2IE b1 : masque interrupt TMR2 = PR2
; TMR1IE b0 : masque interrupt débordement tmr1

; REGISTRE PIE2 (contrôle interruptions particulières)
; ----------------------------------------------------
PIE2VAL EQU B'00010000'
; UNUSED b7 : inutilisé, laisser à 0
; RESERVED b6 : réservé, laisser à 0
; UNUSED b5 : inutilisé, laisser à 0
; EEIE b4 : masque interrupt écriture EEPROM
; BCLIE b3 : masque interrupt collision bus
; UNUSED b2 : inutilisé, laisser à 0
; UNUSED b1 : inutilisé, laisser à 0
; CCP2IE b0 : masque interrupt CCP2

;*****************************************************************************
; ASSIGNATIONS PROGRAMME *
;*****************************************************************************

BAUDS EQU 0x20 ; 40 = 19200 ; 20 = 38400 bauds
AD_DEF EQU 0x01 ; adresse d'initialisation
; Adresses prévues pour Gradcomm :
; de 01 à 09
SPEEDPLUS EQU 0x03 ; vitesse d'augmentation
CARTE1 EQU 'G' ; nom de la carte, caractère 1
CARTE2 EQU 'R' ; nom de la carte, caractère 2
CARTE3 EQU 'A' ; nom de la carte, caractère 3
CARTE4 EQU 'D' ; nom de la carte, caractère 4
CARTE5 EQU 'C' ; nom de la carte, caractère 5
CARTE6 EQU 'O' ; nom de la carte, caractère 6
CARTE7 EQU 'M' ; nom de la carte, caractère 7
CARTE8 EQU 'M' ; nom de la carte, caractère 8
VERS1 EQU '1' ; version soft, caractère 1
VERS2 EQU '.' ; version soft, caractère 2
VERS3 EQU '0' ; version soft, caractère 3
VERS4 EQU '0' ; version soft, caractère 4
TRAME1 EQU 0xFA ; premier caractère de trame
ADMASTER EQU 0xA5 ; adresse du maître
TIMEBASE2 EQU d'136' ; base de temps allumage. 100<Timebase2<170
; une diminution augmente la tension de sortie
; pour le niveau demandé = 1. Ceci permet de
; supprimer l'effet 'temps mort'. Diminuer si
; les lampes restent éteintes aux petites val.
; augmenter si les lampes sont trop allumées
; au niveau 1

;*****************************************************************************
; DEFINE *
;*****************************************************************************

#DEFINE S0 PORTC,5 ; sortie 0
#DEFINE S1 PORTC,4 ; sortie 1
#DEFINE S2 PORTC,0 ; sortie 2
#DEFINE S3 PORTC,3 ; sortie 3
#DEFINE S4 PORTC,2 ; sortie 4
#DEFINE S5 PORTC,1 ; sortie 5
#DEFINE S6 PORTA,5 ; sortie 6
#DEFINE S7 PORTA,3 ; sortie 7
#DEFINE S8 PORTA,2 ; sortie 8
#DEFINE S9 PORTA,1 ; sortie 9
#DEFINE S10 PORTA,0 ; sortie 10
#DEFINE S11 PORTB,7 ; sortie 11
#DEFINE S12 PORTB,6 ; sortie 12
#DEFINE S13 PORTB,5 ; sortie 13
#DEFINE S14 PORTB,4 ; sortie 14
#DEFINE S15 PORTB,3 ; sortie 15
#DEFINE REQUEST PORTB,1 ; Request
#DEFINE TX_SEL PORTB,2 ; sélection transmission
#DEFINE RST PORTA,4 ; Switch reset (entrée)
#DEFINE LEDERR PORTA,4 ; Led signalisation erreur (sortie)
#DEFINE RSOUT PORTB,1 ; sélectionner RS485 en sortie
#DEFINE DETECT0 PORTB,0 ; détecteur de passage à 0

;*****************************************************************************
; MACRO *
;*****************************************************************************

BANK0 macro ; passer en banque0
bcf STATUS,RP0
endm

BANK1 macro ; passer en banque1
bsf STATUS,RP0
endm

REEPROM macro ; lire eeprom(adresse & résultat en w)
clrwdt ; reset watchdog
bcf STATUS,RP0 ; passer en banque2
bsf STATUS,RP1
movwf EEADR ; pointer sur adresse eeprom
bsf STATUS,RP0 ; passer en banque3
bcf EECON1,EEPGD ; pointer sur eeprom
bsf EECON1,RD ; ordre de lecture
bcf STATUS,RP0 ; passer en banque2
movf EEDATA,w ; charger valeur lue
bcf STATUS,RP1 ; passer en banque0
endm

YES macro ; activer réponse YES
bcf STATUS,RP0 ; passer banque0
movlw 'Y' ; réponse = Yes
movwf toreply ; positionner réponse
bsf REPLY ; signaler réponse à envoyer
bsf TOKEN ; placer token
endm

;*****************************************************************************
; VARIABLES BANQUE 0 *
;*****************************************************************************
; Zone de 80 bytes
; ----------------

CBLOCK 0x20 ; Début de la zone (0x20 à 0x6F)
; LAISSER LES 4 TABLES A LEUR PLACE
valcur : d'16' ; 16 valeurs courantes
valfin : d'16' ; 16 valeurs finales
cmptactu : d'16' ; 16 compteurs de passage dans tmr2
increment :d'16' ; incrément demandé pour sorties

fsr_temp : 1 ; sauvegarde fsr durant interrupt
comptcar : 1 ; compteur de caracères de message
aenvoyer : 1 ; prochaine commande à envoyer
toreply : 1 ; reponse à envoyer
defspplus : 1 ; vitesse d'augmentation par défaut
cmptplus : 1 ; compteur d'augmentation ou diminution

ENDC ; Fin de la zone

;*****************************************************************************
; VARIABLES ZONE COMMUNE *
;*****************************************************************************
; Zone de 16 bytes
; ----------------

CBLOCK 0x70 ; Début de la zone (0x70 à 0x7F)
w_temp : 1 ; Sauvegarde registre W
status_temp : 1 ; sauvegarde registre STATUS
addeeptr : 1 ; pointeur adresse eeprom
dataeep : 1 ; data eeprom
adcarte : 1 ; adresse de la carte
locali1 : 1 ; variable uniquement pour interrupts
locali2 : 1 ; variable uniquement pour interrupts
localc1 : 1 ; variable locale1
localc2 : 1 ; variable locale2
localc3 : 1 ; variable locale3
localc4 : 1 ; variable locale4
cmpttmr2 : 1 ; compteur de passages dans tmr2
serstat : 1 ; status série
; b0 = donnée à émettre
; b1 = Token reçu
; b2 = donnée reçue à traiter
; b3 = réponse à envoyer
; b4 = caractère reçu à traiter
; b7 = Ecriture eeprom en cours

serialcar : 1 ; caractère reçu sur la RS485

ENDC

#DEFINE ENVOI serstat,0 ; donnée à émettre
#DEFINE TOKEN serstat,1 ; token obtenu
#DEFINE RECU serstat,2 ; donnée reçue à traiter
#DEFINE REPLY serstat,3 ; réponse à envoyer
#DEFINE CARREC serstat,4 ; caractère reçu à traiter
#DEFINE EWRITE serstat,7 ; écriture eeprom en cours

;*****************************************************************************
; VARIABLES BANQUE 1 *
;*****************************************************************************
; Zone de 80 bytes
; ----------------

CBLOCK 0xA0 ; Début de la zone (0xA0 à 0xEF)
message : d'29' ; zone de message

endc ; fin de zone

;*****************************************************************************
; VARIABLES BANQUE 2 *
;*****************************************************************************
; Zone de 80 bytes
; ----------------

CBLOCK 0x120 ; Début de la zone (0x120 à 0x16F)

ENDC ; fin de zone

;*****************************************************************************
; VARIABLES BANQUE 3 *
;*****************************************************************************
; Zone de 80 bytes
; ----------------

CBLOCK 0x1A0 ; Début de la zone (0x1A0 à 0x1EF)

ENDC ; fin de zone

;*****************************************************************************
; CONTENU DE L'EEPROM *
;*****************************************************************************

eecar1 EQU 0x00 ; caractère "C" pour vérification
eecar2 EQU 0x01 ; caractère "D" pour vérification
eecar3 EQU 0x02 ; caractère "L" pour vérification
eeadress EQU 0x03 ; adresse de la carte
eevitaug EQU 0x04 ; vitesse pour variation par défaut
eetimebase2 EQU 0x05 ; base de temps pour allumage (voirTIMEBASE2)

eereserv1 EQU 0x06 ; réservé
eereserv2 EQU 0x07 ; réservé
eereserv3 EQU 0x08 ; réservé
eereserv4 EQU 0x09 ; réservé

eemem0 EQU 0x10 ; mémoire0 (16 valeurs)
eemem1 EQU 0x20 ; mémoire1 (16 valeurs)
eemem2 EQU 0x30 ; mémoire2 (16 valeurs)
eemem3 EQU 0x40 ; mémoire3 (16 valeurs)
eemem4 EQU 0x50 ; mémoire4 (16 valeurs)
eemem5 EQU 0x60 ; mémoire5 (16 valeurs)
eemem6 EQU 0x70 ; mémoire6 (16 valeurs)
eemem7 EQU 0x80 ; mémoire7 (16 valeurs)
eemem8 EQU 0x90 ; mémoire8 (16 valeurs)
eemem9 EQU 0xA0 ; mémoire9 (16 valeurs)

; ////////////////////////////////////////////////////////////////////////////

; I N T E R R U P T I O N S

; ////////////////////////////////////////////////////////////////////////////

;*****************************************************************************
; DEMARRAGE SUR RESET *
;*****************************************************************************

org 0x000 ; Adresse de départ après reset
clrf PCLATH ; Effacer sélecteur de pages
goto init ; Initialiser

;*****************************************************************************
; ROUTINE INTERRUPTION PRINCIPALE *
;*****************************************************************************
;----------------------------------------------- ------------------------------
; Exécutée lors de chaque interruption, s'occuper du reset des flags et de
; l'appel des routines d'interruption concernées
;-----------------------------------------------------------------------------
;sauvegarder registres
;---------------------
org 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
bcf STATUS,RP0 ; passer en banque0
bcf STATUS,RP1
movf FSR,w ; charger registre FSR
movwf fsr_temp ; sauvegarder FSR

; Interruption TMR2
; -----------------
btfss PIR1,TMR2IF ; tester si interrupt en cours
goto intsw1 ; non sauter
call inttmr2 ; oui, traiter interrupt
bcf PIR1,TMR2IF ; effacer flag interupt
goto restorereg ; et fin d'interrupt

; Interruption RB0/INT
; --------------------
intsw1
btfsc INTCON,INTE ; tester si interrupt RB0 autorisée
btfss INTCON,INTF ; oui, tester si interrupt RB0 en cours
goto intsw2 ; non sauter au test suivant
call intrb0 ; oui, traiter interrupt RB0
bcf INTCON,INTF ; effacer flag interupt RB0
goto restorereg ; et fin d'interruption

; Interruption TMR0
; -----------------
intsw2
btfsc INTCON,T0IE ; tester si interrupt timer autorisée
btfss INTCON,T0IF ; oui, tester si interrupt timer en cours
goto intsw3 ; non test suivant
call inttmr0 ; oui, traiter inactivité de ligne
bcf INTCON,T0IF ; effacer flag interrupt tmr0
goto restorereg ; et fin d'interruption

; Interruption réception USART
; ----------------------------
intsw3
btfss PIR1,RCIF ; oui, tester si interrupt en cours
goto intsw4 ; non sauter
call intcar ; oui, traiter interrupt
goto restorereg ; et fin d'interrupt

; Interruption EEPROM
; -------------------
intsw4
call inteprom ; traiter interrupt
bcf STATUS,RP0 ; passer banque0
bcf STATUS,RP1
bcf PIR2,EEIF ; effacer flag interupt

;restaurer registres
;-------------------
restorereg
movf fsr_temp,w ; charger ancien FSR
movwf FSR ; restaurer FSR
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; Inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; réinversion de L et H dans W
; W restauré sans modifier status
retfie ; return from interrupt

;*****************************************************************************
; INTERRUPTION TIMER 0 (inactivité RS485) *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Intervient lorsque la réception de caractères est interrompue depuis le
; temps prédéfini sélectionné dans la routine d'interruption de réception
; du caractère reçu via USART.
;-----------------------------------------------------------------------------
inttmr0
bcf INTCON,T0IE ; fin d'interruption timer0

; Tester si longueur message correcte
; -----------------------------------
movf comptcar,w ; charger compteur caractères
addlw -3 ; garder longueur trame effective
BANK1 ; passer banque1
subwf message,w ; comparer avec longueur annoncée
btfsc STATUS,Z ; tester si égalité

bsf RECU ; oui, signaler donnée reçue à traiter
BANK0
clrf comptcar ; effacer compteur de caractères
return ; et fin d'interruption timer

;*****************************************************************************
; INTERRUPTION RB0/INT (Detection 0 secteur) *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Interruption basée sur le passage à 0 de la sinusoide secteur
; Le postdiviseur de tmr2 lors du passage dans cette routine provoque le
; décalage de la première interruption tmr2, et donc augmente l'écart de
; variation entre l'allumage complet (255) et la valeur 254.
;-----------------------------------------------------------------------------

; mettre timer 2 en service avec diviseur = 32
; --------------------------------------------
intrb0
clrf TMR2 ; effacer timer2
movlw 0x7D ; valeur d'initialisation
movwf T2CON ; timer 2 on avec postscaler et préscaler

clrf cmpttmr2 ; reset compteur de passages dans tmr2
bcf INTCON,INTE ; interdire interruptions RB0

; couper les sorties <255, allumer les autres
; -------------------------------------------
incfsz valcur,w ; incrémenter valeur
bcf S0 ; pas 255, couper
comf valcur,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S0 ; oui, allumer S0

incfsz valcur+1,w ; incrémenter valeur
bcf S1 ; pas 255, couper
comf valcur+1,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S1 ; oui, allumer S1

incfsz valcur+2,w ; incrémenter valeur
bcf S2 ; pas 255, couper
comf valcur+2,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S2 ; oui, allumer S2

incfsz valcur+3,w ; incrémenter valeur
bcf S3 ; pas 255, couper
comf valcur+3,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S3 ; oui, allumer S3

incfsz valcur+4,w ; incrémenter valeur
bcf S4 ; pas 255, couper
comf valcur+4,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S4 ; oui, allumer S4

incfsz valcur+5,w ; incrémenter valeur
bcf S5 ; pas 255, couper
comf valcur+5,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S5 ; oui, allumer S5

incfsz valcur+6,w ; incrémenter valeur
bcf S6 ; pas 255, couper
comf valcur+6,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S6 ; oui, allumer S6

incfsz valcur+7,w ; incrémenter valeur
bcf S7 ; pas 255, couper
comf valcur+7,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S7 ; oui, allumer S7

incfsz valcur+8,w ; incrémenter valeur
bcf S8 ; pas 255, couper
comf valcur+8,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S8 ; oui, allumer S8

incfsz valcur+9,w ; incrémenter valeur
bcf S9 ; pas 255, couper
comf valcur+9,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S9 ; oui, allumer S9

incfsz valcur+10,w ; incrémenter valeur
bcf S10 ; pas 255, couper
comf valcur+10,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S10 ; oui, allumer S10

incfsz valcur+11,w ; incrémenter valeur
bcf S11 ; pas 255, couper
comf valcur+11,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S11 ; oui, allumer S11

incfsz valcur+12,w ; incrémenter valeur
bcf S12 ; pas 255, couper
comf valcur+12,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S12 ; oui, allumer S12

incfsz valcur+13,w ; incrémenter valeur
bcf S13 ; pas 255, couper
comf valcur+13,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S13 ; oui, allumer S13

incfsz valcur+14,w ; incrémenter valeur
bcf S14 ; pas 255, couper
comf valcur+14,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S14 ; oui, allumer S14

incfsz valcur+15,w ; incrémenter valeur
bcf S15 ; pas 255, couper
comf valcur+15,w ; charger inverse sortie
btfsc STATUS,Z ; tester si 255
bsf S15 ; oui, allumer S15

; recharger compteurs de passage tmr2 = valeur courante+1
; -------------------------------------------------------
movlw valcur ; charger adresse valeur courante
movwf FSR ; dans pointeur
movlw 16 ; 16 sorties à traiter
movwf locali1 ; dans compteur de boucles
intrb01
incf INDF,w ; charger valeur courante +1
bsf FSR,6 ; pointer sur compteur
bcf FSR,5
movwf INDF ; sauver dans compteur
bcf FSR,6 ; pointer sur valeur courante
bsf FSR,5
incf FSR,f ; incrémenter pointeur
decfsz locali1,f ; décrémenter compteur de boucles
goto intrb01 ; pas dernière, boucler

; tester le compteur de variation
; -------------------------------
decfsz cmptplus,f ; décrémenter compteur de variation
goto intrb03 ; pas 0, sauter

movf defspplus,w ; charger vitesse d'incrémentation
movwf cmptplus ; mettre dans compteur

; si 0, ajouter incrément à valeur finale
; ---------------------------------------
movlw 16 ; pour 16 sorties
movwf locali1 ; dans compteur de boucles
movlw increment ; pointer sur tableau des incréments
movwf FSR ; dans pointeur
intrb02
movf INDF,w ; charger incrément
btfsc STATUS,Z ; tester si 0
goto intrb02d ; oui, sauter
decf INDF,w ; tester incrément
bcf FSR,6 ; pointer sur valeur finale
bsf FSR,5
btfss STATUS,Z ; incrément = 1?
goto intrb02b ; non, sauter

incfsz INDF,f ; incrémenter valeur finale
goto intrb02c ; pas débordement, sauter
comf INDF,f ; débordement, finale = 255
bsf FSR,6 ; pointer sur incrément
bcf FSR,5
clrf INDF ; annuler incrément
goto intrb02d ; et suivant
intrb02b
decf INDF,f ; décrémenter valeur finale
comf INDF,w ; tester valeur finale
btfss STATUS,Z ; tester si débordement
goto intrb02c ; non, sauter
clrf INDF ; valeur finale à 0
bsf FSR,6 ; pointer sur incrément
bcf FSR,5
clrf INDF ; annuler incrément
intrb02c
bsf FSR,6 ; pointer sur incrément
bcf FSR,5
intrb02d
incf FSR,f ; pointer sur suivant
decfsz locali1,f ; décrémenter compteur de boucles
goto intrb02 ; pas dernière, boucler

; amener valeur courante vers valeur finale
; -----------------------------------------
intrb03
movlw 16 ; pour 16 sorties
movwf locali1 ; dans compteur de boucles
movlw valfin ; charger adresse valeurs finales
movwf FSR ; sauver dans pointeur
intrb04
movf INDF,w ; charger valeur finales
bcf FSR,4 ; pointer sur valeur courantes
subwf INDF,w ; Comparer finale et courante
btfsc STATUS,Z ; égalité?
goto intrb04b ; oui, sauter
btfsc STATUS,C ; tester si courante>finale
goto intrb04a ; courante>finale, sauter
incf INDF,f ; courante<finale, incrément courante
goto intrb04b ; et sauter
intrb04a
decf INDF,f ; courante>finale, décrémenter courante
intrb04b
bsf FSR,4 ; pointer sur valeur finale
incf FSR,f ; pointer sur suivante
decfsz locali1,f ; décrémenter compteur de boucles
goto intrb04 ; pas dernière, boucler
return ; fin d'interruption RB0/INT

;*****************************************************************************
; INTERRUPTION RECEPTION CARACTERE *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Intervient lors de chaque caractère reçu sur la RS485
;-----------------------------------------------------------------------------

; reset timer activité de ligne
; -----------------------------
intcar
movlw 0xEC ; +- 0,5ms
movwf TMR0 ; dans timer activité de ligne

; prendre caractère reçu et signaler
; ----------------------------------
bsf CARREC ; signaler caractère reçu
movf RCREG,w ; lire caractère port série
movwf serialcar ; et le sauver
return ; fin d'interruption

;*****************************************************************************
; INTERRUPTION TIMER 2 (pour allumage sorties) *
;*****************************************************************************
;-----------------------------------------------------------------------------
; 254 passages dans cette routine après chaque interruption RB0. Le temps
; avant le premier passage dépend de la valeur mise au posttimer dans la
; routine d'interruption RB0. Le temps entre chaque passage est réglé par
; eetimebase2. Les compteurs de passage ont été initialisés par RB0 à la
; valeur courante d'allumage+1. Donc, au premier passage dans cette routine,
; il y a allumage des sorties de niveau 254. Il n'y a jamais d'allumage pour
; les valeurs 0 (car seulement 254 passages), ni pour les valeurs 255, qui ont
; déjà été positionnées dans RB0
;-----------------------------------------------------------------------------
inttmr2
; gestion compteur de passages
; ----------------------------
incf cmpttmr2,f ; incrémenter compteur de passages
comf cmpttmr2,w ; tester compteur de passages
btfss STATUS,Z ; tester si 255
goto inttmr2a ; non, sauter

; traiter 255ème passage
; ----------------------

bcf T2CON,TMR2ON ; stopper timer2
bcf INTCON,INTF ; effacer flag éventuel RB0 (parasite)
bsf INTCON,INTE ; autoriser interruptions RB0
return ; et retour

; traiter 1er passage
; -------------------
inttmr2a
sublw 254 ; comparer avec 1er passage
btfss STATUS,Z ; tester si égalité
goto inttmr2b ; non, sauter
movlw 0x4 ; préparer valeur
movwf T2CON ; placer postdiviseur à 1

; allumer sorties concernées
; --------------------------
inttmr2b
incf cmptactu,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S0 ; oui, allumer sortie

incf cmptactu+1,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S1 ; oui, allumer sortie

incf cmptactu+2,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S2 ; oui, allumer sortie

incf cmptactu+3,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S3 ; oui, allumer sortie

incf cmptactu+4,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S4 ; oui, allumer sortie

incf cmptactu+5,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S5 ; oui, allumer sortie

incf cmptactu+6,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S6 ; oui, allumer sortie

incf cmptactu+7,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S7 ; oui, allumer sortie

incf cmptactu+8,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S8 ; oui, allumer sortie

incf cmptactu+9,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S9 ; oui, allumer sortie

incf cmptactu+10,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S10 ; oui, allumer sortie

incf cmptactu+11,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S11 ; oui, allumer sortie

incf cmptactu+12,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S12 ; oui, allumer sortie

incf cmptactu+13,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S13 ; oui, allumer sortie

incf cmptactu+14,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S14 ; oui, allumer sortie

incf cmptactu+15,f ; incrémenter compteur sortie
btfsc STATUS,Z ; tester si 0
bsf S15 ; oui, allumer sortie
return ; et retour

;*****************************************************************************
; INTERRUPTION EEPR OM *
;*****************************************************************************
;-----------------------------------------------------------------------------
; exécutée lors de chaque fin du cycle d'écriture de l'EEPROM. Se contente de
; de modifier un flag utilisé par les routines du programme principal
;-----------------------------------------------------------------------------
inteprom
bcf EWRITE ; effacer flag écriture eeprom
bsf STATUS,RP1 ; passer banque2
bcf EECON1,WREN ; fin d'écriture
return ; fin d'interruption

; ////////////////////////////////////////////////////////////////////////////

; P R O G R A M M E

; ////////////////////////////////////////////////////////////////////////////

;*****************************************************************************
; INITIALISATIONS *
;*****************************************************************************
init
; initialisation PORTS (banque 0 et 1)
; ------------------------------------
clrwdt ; effacer watch-dog
BANK0 ; sélectionner banque0
clrf PORTA ; Sorties PORTA à 0
clrf PORTB ; sorties PORTB à 0
clrf PORTC ; sorties PORTC à 0
BANK1 ; passer en banque1
movlw B'00000110' ; PORTA en mode digital
movwf ADCON1 ; écriture dans contrôle A/D
movlw B'00010000' ; Direction PORTA '1=input"
movwf TRISA ; écriture dans registre direction
movlw B'00000001' ; Direction PORTB
movwf TRISB ; écriture dans registre direction
movlw B'10000000' ; Direction PORTC
movwf TRISC ; écriture dans registre direction

; Registre d'options (banque 1)
; -----------------------------
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option

; Initialiser RAM banque 1
; ------------------------
clrwdt ; effacer watch-dog
movlw 0xA0 ; initialisation pointeur
movwf FSR ; d'adressage indirect
bcf STATUS,IRP ; adresse 8 bits
init1
clrf INDF ; effacer mémoire
incf FSR,f ; pointer sur suivant
btfsc FSR,7 ; tester si fin zone atteinte (>0xFF)
goto init1 ; non, boucler

; Initialiser RAM banque 0
; ------------------------
movlw 0x20 ; initialisation pointeur
movwf FSR ; d'adressage indirect
init4
clrf INDF ; effacer mémoire
incf FSR,f ; pointer sur suivant
btfss FSR,7 ; tester si fin zone atteinte (>0xFF)
goto init4 ; non, boucler

; valider interruptions eeprom
; ----------------------------
BANK0 ; passer banque0
clrf PIR1 ; effacer flags PIR1
bsf INTCON,PEIE ; autoriser interruptions périphériques
BANK1 ; passer banque1
bsf PIE2,EEIE ; valider interruptions écriture eeprom
BANK0 ; passer banque0
bsf INTCON,GIE ; valider interruptions générales

; tester si jumper reset positionné
; ---------------------------------
btfss RST ; tester si reset mis
goto rston ; traiter jumper reset mis

; tester si EERPROM valide
; ------------------------
movlw eecar1 ; pointer sur caractère1
REEPROM ; lire eeprom
sublw 'C' ; comparer avec 'C'
btfss STATUS,Z ; tester si égalité
goto rston ; non, reset complet
movlw eecar2 ; pointer sur caractère2
REEPROM ; lire eeprom
sublw 'D' ; comparer avec 'D'
btfss STATUS,Z ; tester si égalité
goto rston ; non, reset complet
movlw eecar3 ; pointer sur caractère3
REEPROM ; lire eeprom
sublw 'L' ; comparer avec 'L'
btfss STATUS,Z ; tester si égalité
goto rston ; non, reset complet

; Initialiser LED
; ---------------
BANK1 ; passage banque1
bcf TRISA,4 ; sélectionner port en sortie
BANK0 ; passage banque0
bsf LEDERR ; éteindre LED

; initialiser variables
; ---------------------
movlw eeadress ; pointer sur adresse en eeprom
REEPROM ; lire eeprom
movwf adcarte ; sauver en ram

movlw eevitaug ; pointer sur vitesse augmentation
REEPROM ; lire eeprom
movwf defspplus ; placer dans ram

; demande d'initialisation
; ------------------------
movlw 'I' ; demande d'initialisation
movwf aenvoyer ; à envoyer
bsf ENVOI ; positionner flag émission

; initialiser communication série (banques1/0)
; --------------------------------------------
BANK1 ; passer banque1
movlw BAUDS ; valeur de diviseur pour nb bauds
movwf SPBRG ; dans registre de contrôle
bcf TXSTA,SYNC ; communication asynchrone
bsf TXSTA,BRGH ; communication haute vitesse
BANK0 ; passer banque0
bsf RCSTA,SPEN ; valider port série
bsf RCSTA,CREN ; autoriser réception

; initialiser timer 2 (banques0/1)
; --------------------------------
clrf T2CON ; pas de pré ni de post et arrêt
bcf PIR1,TMR2IF ; effacer flag timer2
BANK1 ; passer banque1
bsf PIE1,TMR2IE ; valider interruptions timer2
movlw eetimebase2 ; pointer sur base de temps
REEPROM ; lire eeprom
BANK1 ; passer banque1
movwf PR2 ; placer dans reload tmr2

; autoriser interruptions (banques 0/1)
; -------------------------------------
BANK0 ; passer banque0
clrf PIR2 ; effacer flags 2
bcf INTCON,INTF ; effacer flag INT0
bcf PIR1,RCIF ; effacer flag réception USART
bsf INTCON,INTE ; autoriser interruptions detect0
BANK1 ; passer banque1
bsf PIE1,RCIE ; autoriser interruptions réception USART

BANK0 ; passer banque0
goto start ; programme principal

;*****************************************************************************
; RESET TOTAL *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Exécuté su le switc Reset a été positionné lors de la mise sous tension, ou
; si le contenu de l'EEPROM est invalide suite à une mise sous tension.
;-----------------------------------------------------------------------------
rston
; Initialiser début EEPROM
; ------------------------
movlw AD_DEF ; charger adresse par défaut
movwf dataeep ; mettre dans envoi
movlw eeadress ; pointer sur adresse carte
movwf addeeptr ; sauver dans pointeur
call writeeprom ; écriture dans EEPROM

movlw SPEEDPLUS ; charger vitesse d'augmentation par défaut
movwf dataeep ; mettre dans envoi
incf addeeptr,f ; incrémenter offset
call writeeprom ; écriture dans EEPROM

movlw TIMEBASE2 ; charger base de temps allumage
movwf dataeep ; mettre dans envoi
incf addeeptr,f ; incrémenter offset
call writeeprom ; écriture dans EEPROM

movlw "C" ; charger caractère C
movwf dataeep ; mettre dans envoi
clrf addeeptr ; pointeur offset 0
call writeeprom ; écriture dans EEPROM

movlw "D" ; charger caractère D
movwf dataeep ; mettre dans envoi
incf addeeptr,f ; incrémenter offset
call writeeprom ; écriture dans EEPROM

movlw "L" ; charger caractère L
movwf dataeep ; mettre dans envoi
incf addeeptr,f ; incrémenter offset
call writeeprom ; écriture dans EEPROM

; Attendre remove jumper
; ----------------------
rston5
clrwdt ; effacer watchdog
btfss RST ; Tester si jumper Reset positionné
goto rston5 ; oui, attendre

; faire clignoter la LED erreur
; -----------------------------
bcf LEDERR ; pour allumer LED
BANK1 ; passage banque1
bcf TRISA,4 ; sélectionner port en sortie
BANK0 ; passer banque0
clrf localc2 ; effacer compteur
rston5a
clrf localc1 ; effacer compteur
rston6
btfsc DETECT0 ; tester pulse détection0
goto rston6 ; 1? attendre
rston7
clrwdt ; effacer watchdog
btfss DETECT0 ; tester pulse détection0
goto rston7 ; toujours 0? attendre
incf localc1,f ; incrémenter compteur1
btfss localc1,6 ; tester valeur compteur
goto rston6 ; pas arrivé à 64? pulse suivant
incf localc2,f ; incrémenter compteur2
btfsc localc2,3 ; tester si arrivé à 8
goto init ; oui, redémarrage
bsf LEDERR ; éteindre LEDERR
btfss localc2,0 ; tester compteur2
bcf LEDERR ; pair, allumer LED
goto rston5a ; et recommencer

;*****************************************************************************
; ECRIRE UNE VALEUR EN EEPROM *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Ecrit une valeur en eeprom. Paramètres reçus : adresse en addeeptr, donnée
; en dataeep. La routine doit être appelée en banque0 et retourne en banque0
;-----------------------------------------------------------------------------

; Attender fin d'écriture précédente
; ----------------------------------
writeeprom
clrwdt ; effacer watchdog
btfsc EWRITE ; tester si écriture tjrs en cours
goto writeeprom ; oui, attendre

bsf EWRITE ; signaler écriture en cours

; placer adresse et valeur
; ------------------------
bsf STATUS,RP1 ; passer en banque2
movf addeeptr,w ; charger adresse
movwf EEADR ; dans pointeur adresse
movf dataeep,w ; charger valeur
movwf EEDATA ; dans registre data

; procédure d'écriture
; --------------------
bsf STATUS,RP0 ; passer en banque3
bcf EECON1,EEPGD ; destination = EEPROM
bsf EECON1,WREN ; autorisation d'écriture
bcf INTCON,GIE ; interdiction des interruptions
movlw 0x55 ; séquence requise
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1,WR ; début d'écriture
bsf INTCON,GIE ; réautoriser interruptions
bcf STATUS,RP0 ; repasser en banque0
bcf STATUS,RP1

return ; et retour

;*****************************************************************************
; TRAITER CARACTERE RECU *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Traitement d'un caractère reçu placé dans une variable par la routine
; d'interruption.
;-----------------------------------------------------------------------------
; Si trop de caractères, fin
; ---------------------------
receptcar
bcf CARREC ; annuler réception caractère
btfsc comptcar,5 ; tester si =32 caractères
return ; oui, fin de traitement

; switch selon numéro de caractère
; --------------------------------
incf comptcar,f ; incrémenter compteur de caractères
movf comptcar,w ; charger compteur de caractères
addlw 0xFF ; soustraire 1
btfsc STATUS,Z ; tester si 0
goto incar1 ; traiter caractère 1
addlw 0xFF ; soustraire 1
btfsc STATUS,Z ; tester si 0
goto incar2 ; traiter caractère 2
addlw 0xFF ; soustraire 1
btfsc STATUS,Z ; tester si 0
goto incar3 ; traiter caractère 3

; traiter caractère quelconque
; ----------------------------
addlw 0xFF ; soustraire 1
addlw message ; pointer sur emplacement message
movwf FSR ; initialiser pointeur
bcf STATUS,IRP ; adresse 8 bits
movf serialcar,w ; charger caractère reçu
movwf INDF ; le sauver dans message
return ; et retour

; traiter caractère 1
; -------------------
incar1
bcf INTCON,T0IF ; oui, effacer flag tmr0
bsf INTCON,T0IE ; autoriser interrupts TMR0
movf serialcar,w ; charger caractère
sublw TRAME1 ; comparer avec début trame
btfss STATUS,Z ; tester si égalité
goto incarerr ; non, erreur
return ; retour

; traiter caractère 2
; -------------------
incar2
movf serialcar,w ; lire caractère reçu
subwf adcarte,w ; comparer avec adresse carte
btfss STATUS,Z ; tester si égalité
goto incarerr ; non, erreur
bcf LEDERR ; allumer LED RS485
return ; et retour

; traiter caractère 3
; -------------------
incar3
movf serialcar,w ; lire caractère reçu
sublw ADMASTER ; comparer avec adresse maître
btfsc STATUS,Z ; tester si égalité
return ; oui, retour

; traiter caractère incorrect
; ---------------------------
incarerr
bsf comptcar,5 ; signaler erreur (empêche prise en compte
; du caractère suivant
return ; et retour

;*****************************************************************************
; TRAITER MESSAGE RECU *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Traitement du message reçu complet dont la fin est détectée par l'inactivité
; de ligne RS485 détectée par le timer0. Exécute le switch vers les routines
; particulières concernées.
;-----------------------------------------------------------------------------
messrecu
bcf RECU ; signaler message reçu traité

; calculer checksum
; ------------------
BANK1 ; passer banque1
movf message,w ; charger longueur message
addlw -1 ; soustraire 1
movwf localc1 ; sauver dans variable
movlw message ; pointeur sur message
movwf FSR ; initialiser pointeur
clrf localc2 ; compteur de checksum
messrecu1
movf INDF,w ; charger caractère message
addwf localc2,f ; ajouter au checksum
incf FSR,f ; incrémenter pointeur
decfsz localc1,f ; décrément compteur de boucles
goto messrecu1 ; pas dernier, boucler
movf adcarte,w ; charger adresse carte
addwf localc2,f ; ajouter au checksum

; vérifier checksum
; -----------------
movf INDF,w ; charger checksum
subwf localc2,w ; comparer avec calcul
btfss STATUS,Z ; tester si égalité
return ; non, retour

; switch selon commande
; ---------------------
; appel toujours sous la banque 1, retour indéfini
; ------------------------------------------------

; Commandes communes à toutes les cartes
; ---------------------------------------
movf message+1,w ; charger commande
sublw 'R' ; comparer avec commande 'R'
btfss STATUS,Z ; tester si égalité
goto messrecu2 ; non, sauter
call mrecu_R ; traiter commande 'R'
goto messrecuend ; et sauter
messrecu2
movf message+1,w ; charger commande
sublw 'A' ; comparer avec commande 'A'
btfss STATUS,Z ; tester si égalité
goto messrecu3 ; non, sauter
call mrecu_A ; traiter commande 'A'
goto messrecuend ; et sauter
messrecu3
movf message+1,w ; charger commande
sublw 'P' ; comparer avec commande 'P'
btfss STATUS,Z ; tester si égalité
goto messrecu3b ; non, sauter
call mrecu_P ; traiter commande 'P'
goto messrecuend ; et sauter
messrecu3b
movf message+1,w ; charger commande
sublw 'C' ; comparer avec commande 'C'
btfss STATUS,Z ; tester si égalité
goto messrecu4 ; non, sauter
call mrecu_C ; traiter commande 'C'
goto messrecuend ; et sauter

; Commandes particulières à cette carte
; -------------------------------------
messrecu4
movf message+1,w ; charger commande
andlw 0xFE ; éliminer bit faible
btfss STATUS,Z ; tester si commande 0 ou 1
goto messrecu5 ; non, sauter
call mrecu0 ; traiter commande 0 ou 1
goto messrecuend ; et sauter
messrecu5
movf message+1,w ; charger commande
addlw -2 ; enlever 2
andlw 0xFE ; éliminer bit0
btfss STATUS,Z ; tester si commande 2 ou 3
goto messrecu6 ; non, sauter
call mrecu2 ; traiter commande 2 ou 3
goto messrecuend ; et sauter
messrecu6
movf message+1,w ; charger commande
sublw 4 ; comparer avec 4
btfss STATUS,Z ; commande correspond?
goto messrecu7 ; non, sauter
call mrecu4 ; oui, traiter commande4
goto messrecuend ; et sauter
messrecu7
movf message+1,w ; charger commande
sublw 5 ; comparer avec 5
btfss STATUS,Z ; commande correspond?
goto messrecu8 ; non, sauter
call mrecu4 ; oui, traiter commande5
goto messrecuend ; et sauter
messrecu8
movf message+1,w ; charger commande
sublw 6 ; comparer avec 6
btfss STATUS,Z ; commande correspond?
goto messrecu9 ; non, sauter
call mrecu6 ; oui, traiter commande6
goto messrecuend ; et sauter
messrecu9
movf message+1,w ; charger commande
sublw 7 ; comparer avec 7
btfss STATUS,Z ; commande correspond?
goto messrecu10 ; non, sauter
call mrecu7 ; oui, traiter commande7
goto messrecuend ; et sauter
messrecu10
movf message+1,w ; charger commande
sublw 8 ; comparer avec 8
btfss STATUS,Z ; commande correspond?
goto messrecu11 ; non, sauter
call mrecu8 ; oui, traiter commande8
goto messrecuend ; et sauter
messrecu11
movf message+1,w ; charger commande
sublw 9 ; comparer avec 9
btfss STATUS,Z ; commande correspond?
goto messrecu12 ; non, sauter
call mrecu8 ; oui, traiter commande8 ou 9
goto messrecuend ; et sauter
messrecu12
movf message+1,w ; charger commande
sublw 10 ; comparer avec 10
btfss STATUS,Z ; commande correspond?
return ; non, non valide
call mrecuA ; oui, traiter commande10

; vérification token
; ------------------
messrecuend
BANK0 ; passer banque0
btfsc TOKEN ; token obtenu
bsf LEDERR ; oui, éteindre LED
return ; retour
return

;*****************************************************************************
; RECEPTION COMMANDE R (RESET TOTAL) *
;*****************************************************************************
;-----------------------------------------------------------------------------
; La réception de cette commande provoque le reset total, dévalidation du
; contenu de l'eeprom, donc remise des paramètres par défaut, y compris
; l'adresse
;-----------------------------------------------------------------------------
mrecu_R
; vérifier longueur message
; -------------------------
movf message,w ; charger longueur message
sublw 4 ; soustraire longueur valide
btfss STATUS,Z ; égalité?
return ; non, retour

; vérifier 3ème caractère
; -----------------------
movf message+2,w ; charger 2ème octet commande
sublw 'S' ; comparer avec 'S'
btfss STATUS,Z ; égalité?
return ; non, retour

; dévalider EEPROM
; ----------------
bcf STATUS,RP0 ; passer banque0
movlw 0 ; charger caractère invalide
movwf dataeep ; mettre dans envoi
clrf addeeptr ; pointeur offset 0
call writeeprom ; écriture dans EEPROM
mrecu_R1
clrwdt ; effacer watchdog
btfsc EWRITE ; tester si écriture terminée
goto mrecu_R1 ; non, attendre

; reset sorties et fin d'interruption
; -----------------------------------
bcf INTCON,GIE ; interdire interruptions
clrf PORTA ; effacer PORTA
clrf PORTB ; effacer PORTB
clrf PORTC ; effacer PORTC

; provoquer reset watchdog
; ------------------------
mrecu_R2
goto mrecu_R2 ; forcer reset watchdog

;*****************************************************************************
; RECEPTION COMMANDE A (nouvelle adresse) *
;*****************************************************************************
;-----------------------------------------------------------------------------
; Modification de l'adresse de la carte, avec ecriture en eeprom. Résiste donc
; à une mise hors tension, jusqu'au reset total (placement du switch reset ou
; réception de la commande reset.
;-----------------------------------------------------------------------------
mre

Numéro de l'article: 17205   |  De: Bigonoff   |  Date: 2002-12-18 01:06:29
   RE: Programmer PIC en Basic
SAlut bis
----------
Désolé, l'intégralité ne passe pas, LOL

Mais bon, je pense que tu as vu le principal ?

A+
Bigonoff


Numéro de l'article: 17208   |  De: Bigonoff   |  Date: 2002-12-18 01:20:59
   RE: Programmer PIC en Basic
Salut,

> Oui g bien reçus , je vais faire le test.

Merci.

> mais je suis sur que c plus petit ...
> j'ai déja comparer avec autres routine

On verra bien...

@+
Alexandre.


Numéro de l'article: 17217   |  De: Alexandre   |  Date: 2002-12-18 06:14:20
   RE: Programmer PIC en Basic
Bonjour,

> Pour le programme qui ne sert à rien : effectivement, s'il ne
> sert à rien, ça ne représente aucun intérêt. Sur un programme
> qui sert à quelque-chose, je ne choisirais pas les mêmes
> solutions en basic et en assembleur. Vouloir démontrer le
> contraire, c'est penser qu'un compilateur est plus
> intelligent qu'un humain. On n'en est guère encore
> là.

Evidemment que l'intérêt serait plus grand que un "vrai" programme
mais on ne vas pas y passer des heures dessus.
Donc, pour mon information perso, j'aurais juste voulu comparé
la taille d'un même programme en assembleur, en C et en Basic.
Ensuite chacun en tire les conclusions qu'il veut.

> Mais, à part ça, on peut toujours faire mieux en assembleur.

Je n'en doute pas une seconde (sans ironie).
Mais je n'ai pas encore reçu celui-ci (tu as bien 5 minutes pour me l'écrire ce petit programme...).

> Par exemple, ton programme utilise pause et PauseUS.
> Maintenant, comment peux-tu savoir quel hardware
> est encore disponible pour générer un PWM?

Sur PBP aucune pause n'utilise de timer et plus généralement aucune
instruction (sauf celles qui servent à cela) n'utilise de resource
hardware => ce n'est que des boucles imbriquées.

> Comment choisis-tu les timers utilisés, les bases de temps
> communes, les interruptions utilisées par intermittance etc.?

Tu configures tes périphériques en utilisant à la place de 2 movxx
une syntaxe du genre variable/registre = xx

> Evidemment, ton programme, il allume une LED. Dans ce cas, pas
> de problème.
> Si tu devais, maintenant, générer 1 signal PWM, mesurer un
> temps avec un module CCP, tout en instaurant une mesure de
> dépassement de délais de liaison, etc? Comment vérifier les
> contraintes d'utilisation des ressources?

Je crois qu'il y a un malentendu.
Moi, je pense juste que le BASIC permet de gagner du temps dans l'écriture d'un programme. En aucun cas, je ne pense qu'il est plus performant ou que le code est optimisé à 100% par rapport à l'assembleur. Il est donc évident que pour des routines très critiques l'assembleur s'impose. Pour le reste (qui représente
pour mes programmes une très grosse partie) je ne le pense pas.
Mais rien n'interdit d'écrire ces programmes entièrement en assembleur. Comme toujours : Les goûts et les couleurs...

> Tu dis : Effectivement, moi je ne fais que des trucs
> théoriques. Tu m'as mal compris, ou je me suis mal
> exprimé, désolé. Je ne voulais pas dire que tu ne faisais que
> du théorique, je voulais dire que ce que je disais concernant
> l'avantage de l'assembleur n'était pas que de la théorie. Je ne
> me serais pas permis de dire une telle chose sur toi, sans même
> te connaitre. :)

Y a pas de mal. :-)
Je pourrais dire +/- la même chose de moi en BASIC.

> Tu dis encore :
> Super !!! J'aurais mon programme en assembleur dans la
> journée. (+/- cinq minutes pour écrire le programme basic)
> ben, ça ne veut rien dire, ça. Je peux t'écrire en 5 minutes un
> programme asm qui ne sert à rien, et pour lequel tu devras te
> casser la tête une journée pour le traduire en basic.
> Maintenant, ce genre de cas ultra-simple et classique est le
> cas typique pour lequel un compilateur s'en tire à merveille.
> Faut pas me prendre pour un bleu, LOL.

Dans ce cas, j'attend. ;-)

> Essaye un autre exemple simple : dans un programme avec des tas
> de variables déjà utilisées, copie un tableau de 16 octets vers
> une zone de destination. Envoie-moi le code :). Tu vas voir le
> problème des compilateurs : ils ne peuvent pas prendre de
> décision à ta place.

Comme je ne vois pas trop l'intérêt de copier un tableau dans une zone non défini, je suppose donc que l'on copie un tableau dans un autre.

tab1 var byte[16]
tab2 var byte[35]
offset var byte
i var byte

For i = 0 TO 15
offset = i + 12
tab2[offset] = tab1[i]
Next i

le code généré (16F628) :

goto main
main clrf 0x6D
L00001 clrwdt
movlw 0x10
subwf 0x6D,W
btfsc 0x3,0x0
goto L00002
movlw 0xC
addwf 0x6D,W
movwf 0x6E
movf 0x6D,W
addlw 0x5D
movwf 0x4
movf 0x0,W
movwf 0x32
movf 0x6E,W
addlw 0x3A
movwf 0x4
movf 0x32,W
movwf 0x0
incfsz 0x6D
goto L00001
L00002

> Ce n'est pas comme ça qu'on raisonne : on part d'un problème
> réel concret (pas une led qui clignote), et on réalise suivant
> les 2 méthodes. On compare l'efficacité (par exemple,
> l'économie de ressource, qui permet d'utiliser un pic moins
> cher).

Si le truc de la led est trop compliqué pour toi,
je te laisse le choix des armes... :-)

> Pour la rapidité, je travaille aussi vite en asm. Je viens de
> commencer un programme aujourd'hui, pour une application
> pratique, j'ai déjà écrit ou copié 1300 lignes.

Mais je te crois.

> Pour les exemples d'application corsées, il y a sûrement moyen
> d'en faire, mais je peux dire que :
> - Tout ce qu'il est possible de faire en basic est possible en
> assembleur
> - Le contraire n'est pas vrai.

C'est plutôt évident. :-)

> Bon, maintenant, puisqu'on me demande le source de l'exemple
> cité, je vais le coller ci-dessous :)

Merci.

@+
Alexandre.

Numéro de l'article: 17218   |  De: Alexandre   |  Date: 2002-12-18 07:35:20
   RE: Programmer PIC en Basic
Salut
------

Alors, on a là un cas concret.

Copier 15 éléments d'un tableau dans un autre.
Le code que tu donnes en basic :

tab1 var byte[16]
tab2 var byte[35]
offset var byte
i var byte

For i = 0 TO 15
offset = i + 12
tab2[offset] = tab1[i]
Next i

qui génère ça :

goto main
main clrf 0x6D
L00001 clrwdt
movlw 0x10
subwf 0x6D,W
btfsc 0x3,0x0
goto L00002
movlw 0xC
addwf 0x6D,W
movwf 0x6E
movf 0x6D,W
addlw 0x5D
movwf 0x4
movf 0x0,W
movwf 0x32
movf 0x6E,W
addlw 0x3A
movwf 0x4
movf 0x32,W
movwf 0x0
incfsz 0x6D
goto L00001
L00002

Ce que moi j'aurais fait en assembleur (16F876 par exemple).

tab1 EQU 0x20 ; les tables
tab2 EQU 0x30
movlw tab1 ;adresse table 1
movwf FSR ; dans pointeur indirect
loop
movf INDF,w ; charger un élément
bsf FSR,4 ; pointer table destination
movwf INDF ; sauver élément
bcf FSR,4 ; pointer sur table source
incf FSR,f ; incrémenter pointeur
btfss FSR,4 ; table parcourue?
goto loop ; non, élément suivant

Concernant la vitesse, on est à 3 fois en faveur de l'assembleur, sur une toute bête boucle.
Concernant la taille, il n'y a pas photo, je pense. 2,5 fois en faveur de l'assembleur.

Et de plus, je n'utilise aucune variable autre que les tableaux en eux-même, contrairement à ton programme.

Le compilateur a bien généré du code, mais son problème, c'est qu'il ne réfléchit pas. Il n'a pas pensé qu'on pouvait arranger les tables pour qu'un seul bit sépare la source de la destination. Autrement dit : manips incessantes de fsr, sauvegardes temporaires etc. Voila ce qui sépare programmation en assembleur de programmation en basic. C'est comme je disais : le compilateur, il lui manque l'intelligence artificielle pour travailler correctement :)

Rigolo, aussi, le saut de la fin vers le début, et l'autre du début vers la fin, alors qu'il n'y avait qu'une seule boucle. 2 tests pour une seule boucle?

Par contre, tu me dis que les tempos n'utilisent pas les timers?
Comment on fait alors, pour faire :

- J'allume la LED pour 15 ms.
- je fais autre-chose
- quand la LED s'éteint, je fais un bip.
- Je fais autre-chose
- j'éteins le bip 15µs après le début de son émission

Ton problème de led, je n'ai pas dit qu'il était trop compliqué, j'ai dit qu'il était trop simple.
Plus c'est compliqué, plus l'assembleur prend l'avantage en terme d'efficacité.

Mais tu peux placer ton code généré, je placerais le mien LOL

Mais bon, c'est vrai que c'est aussi une histoire de goûts, donc un débat de passions :)

N"empêche, moi qui n'utilise QUE les timers et les interruptions, je me vois mal avec un compilateur qui n'utilise que des boucles software, LOL.

A+
Bigonoff



Numéro de l'article: 17313   |  De: Bigonoff   |  Date: 2002-12-19 03:04:09
   RE: Programmer PIC en Basic
Salut,

> Alors, on a là un cas concret.
>
> Copier 15 éléments d'un tableau dans un autre.
> Le code que tu donnes en basic :
>
> tab1 var byte[16]
> tab2 var byte[35]
> offset var byte
> i var byte
>
> For i = 0 TO 15
> offset = i + 12
> tab2[offset] = tab1[i]
> Next i
>
> qui génère ça :
>
> goto main
> main clrf 0x6D
> L00001 clrwdt
> movlw 0x10
> subwf 0x6D,W
> btfsc 0x3,0x0
> goto L00002
> movlw 0xC
> addwf 0x6D,W
> movwf 0x6E
> movf 0x6D,W
> addlw 0x5D
> movwf 0x4
> movf 0x0,W
> movwf 0x32
> movf 0x6E,W
> addlw 0x3A
> movwf 0x4
> movf 0x32,W
> movwf 0x0
> incfsz 0x6D
> goto L00001
> L00002
>
> Ce que moi j'aurais fait en assembleur (16F876 par exemple).
>
> tab1 EQU 0x20 ; les tables
> tab2 EQU 0x30
> movlw tab1 ;adresse table 1
> movwf FSR ; dans pointeur indirect
> loop
> movf INDF,w ; charger un élément
> bsf FSR,4 ; pointer table destination
> movwf INDF ; sauver élément
> bcf FSR,4 ; pointer sur table source
> incf FSR,f ; incrémenter pointeur
> btfss FSR,4 ; table parcourue?
> goto loop ; non, élément suivant
>
> Concernant la vitesse, on est à 3 fois en faveur de
> l'assembleur, sur une toute bête boucle.
> Concernant la taille, il n'y a pas photo, je pense. 2,5 fois en
> faveur de l'assembleur.
>
> Et de plus, je n'utilise aucune variable autre que les tableaux
> en eux-même, contrairement à ton programme.
>
> Le compilateur a bien généré du code, mais son problème, c'est
> qu'il ne réfléchit pas. Il n'a pas pensé qu'on pouvait arranger
> les tables pour qu'un seul bit sépare la source de la
> destination. Autrement dit : manips incessantes de fsr,
> sauvegardes temporaires etc. Voila ce qui sépare programmation
> en assembleur de programmation en basic. C'est comme je disais
> : le compilateur, il lui manque l'intelligence artificielle
> pour travailler correctement :)
>
> Rigolo, aussi, le saut de la fin vers le début, et l'autre du
> début vers la fin, alors qu'il n'y avait qu'une seule boucle. 2
> tests pour une seule boucle?

Je m'incline.
Toutefois, dans ton programme je ne vois pas la gestion
de l'offset (et dans mon programme le watchdog aurait pu être supprimé par le compilateur (il y a une option)). Ou peut être est
ce un mauvais exemple pour le BASIC. ;-)
Non, ne chipotons pas, l'assembleur est plus performant et le BASIC pas terrible.
Sincérement, je le pensais un peu plus performant que cela.
Sans doute parce que je n'ai pas encore été bloqué.
Toutefois, même si je connais +/- l'assembleur je trouve bien
plus pratique et rapide d'écrire en Basic (question d'habitude c'est certain).
De plus, l'assembleur nécessite de commenter pratiquement
chaque ligne (sinon bonjour pour s'y retrouver ensuite). En BASIC
c'est nettement plus explicite => peu de commentaires.
Mais il s'agit de détails si on veut un programme performant et optimisé, pas le choix, c'est l'assembleur !

> Par contre, tu me dis que les tempos n'utilisent pas les timers?
> Comment on fait alors, pour faire :
>
> - J'allume la LED pour 15 ms.
> - je fais autre-chose
> - quand la LED s'éteint, je fais un bip.
> - Je fais autre-chose
> - j'éteins le bip 15µs après le début de son émission

Ce ne sont pas des tempos mais des pauses (pendant ce temps on ne peut pas faire grand chose).
Perso, je les utilise le moins souvent possible.
Avec le BASIC rien ne t'empêche d'utiliser les interruptions et/ou les timers.

> Ton problème de led, je n'ai pas dit qu'il était trop
> compliqué, j'ai dit qu'il était trop simple.
> Plus c'est compliqué, plus l'assembleur prend l'avantage en
> terme d'efficacité.
>
> Mais tu peux placer ton code généré, je placerais le mien LOL

Merci mais j'attendrais de le recevoir dans ma BAL.
Pour info, il fait 148 mots et ne pas utiliser les timers (pour
faire comme le basic).

> Mais bon, c'est vrai que c'est aussi une histoire de goûts,
> donc un débat de passions :)

Exactement.

@+
Alexandre qui va "réassembler" un peu ses programmes BASIC...

Numéro de l'article: 17314   |  De: Alexandre   |  Date: 2002-12-19 07:21:31
   RE: Programmer PIC en Basic
Et pic-c dans l'histoire ..... (loll)

Moi je suis d'accord avec vous deux ....
mais rien de t=elle que le C

Ferme la bigonoff , pas bessoin d'exemple pour comparer (loll)
mais c'est trés pratique c tous ...

Mais le net + ultra c'est PIC-C & assembleur en même temps .

tu peut définir la zone ou sera placer ton programme C , et définir la zone ASM . Alors tu est libre de faire ce que tu veut (bootloader , etc ...)

Donc y a pas photos pic-c + asm c'est le top ...




Numéro de l'article: 17370   |  De: byte   |  Date: 2002-12-19 19:21:21
   RE: Programmer PIC en Basic
Salut
------

LOL

Mais bon, j'avoue que je vous ai un peu chambré, LOL.

J'aime bien, je suis un peu taquin, LOL.

Honnètement, il faut reconnaitre que les langages évolués, bien que moins performants (LOL), sont parfois bien pratiques pour réaliser une application rapidement.

Même si personnellement, je ne les utilise pas (par goût), je pense qu'il ne faut pas "jeter le bébé avec l'eau du bain".

optimiser un programme, c'est bien, mais si c'est pour de toute façon devoir attendre au final, et laisser la moitié de la mémoire vide, alors où se trouve l'intérêt?

Donc, l'important, c'est que l'application prévue fonctionne correctement. Le reste...

Pour Byte : avant de la "fermer" (LOL), je voudrais te dire que ton programme en C pour réaliser le debugger, il va ressembler à ça :

Main()
{
Début de la routine assembleur
...
...
...
fin de la routine assembleur


Désolé, je ne connais pas la syntaxe exacte
LOLOLOL.

A+
Bigonoff


Numéro de l'article: 17406   |  De: Bigonoff   |  Date: 2002-12-20 01:42:57

   Ampli trame sur Hitachi CL2574  
J'ai un probleme d'ampli trame sur un hitachi Cl2574TAN
( ligne blanche horizontale ), je ne connais pas la ref du circuit en question, ni ou il se trouve sur le chassis

quelqu'un peut'il m'aider , merci

Numéro de l'article: 16975   |  De: Jean michel   |  Date: 2002-12-15 18:32:02
   RE: Ampli trame sur Hitachi CL2574
Salut,

Si c'est le chassis que je pense, c'est un TDA3654 sur un petit radiateur en cuivre. Fond du chassis.
Il faut aussi changer les condos autour et la résistance fusible.

A+
Ren

Numéro de l'article: 17015   |  De: Ren   |  Date: 2002-12-15 23:57:55

   Nomenclature TE-20SE V2.0  
bonjour à tous,

Pourriez-vous m 'indiquer ou trouver la nomenclature du programmateur
de pic et d'eeprom mentionné ci dessus. G flambé trois diodes et je n arrive plus a trouver la nomenclature de la V2.0 de ce programmateur sur le net;

Ci quelqu'un aurait l' amabilité de me la passer ou de me dire ou la trouver ca serait sympa.

Merci par avance.

Numéro de l'article: 16976   |  De: Pelle-Pelle   |  Date: 2002-12-15 18:39:07
   RE: Nomenclature TE-20SE V2.0
Voila la nomenclature complète (sans compter les support ci et le db9)

10k
1.5k
100k
3x 1k
zener 8.2v
zener 5.1v
2x led 3mm
4x 1n4148
22ùf/16v
100ùf/16v
2x bc237
bc307


Numéro de l'article: 17109   |  De: sylvain   |  Date: 2002-12-16 23:38:30
   RE: Nomenclature TE-20SE V2.0
Ben ca c sympa.
Je n y croyais plus.
Merci beaucoup

Numéro de l'article: 18419   |  De: Pelle-Pelle   |  Date: 2003-01-03 00:12:58
   RE: Nomenclature TE-20SE V2.0
Et zut alors !!

c la nomenclature de la premiere version du programmateur.
Est ce que c la meme pour la version V2.0 ???

A+

Numéro de l'article: 18420   |  De: Pelle-Pelle   |  Date: 2003-01-03 00:19:54

   Cours PIC18Fxxx "BIGONOFF"  
Salut bigonoff,

Vas tu faire aussi un cours pour les micro-contrôleurs PIC18F et pourquoi pas pour les AVR ?

Maintenant que ta finis tous t'est courssss .:))))))


gr_16977

Numéro de l'article: 16977   |  De: byte   |  Date: 2002-12-15 19:14:57
   RE: Cours PIC18Fxxx "BIGONOFF"
Il faut le laisser se reposer aprés les 4 livres qui vient de faire.


Numéro de l'article: 16988   |  De: Fab   |  Date: 2002-12-15 20:27:41
   RE: Cours PIC18Fxxx "BIGONOFF"
Non justement ...
Les gens comme lui ne ce reposse jamais c'est impossible ca ...



Numéro de l'article: 16990   |  De: byte   |  Date: 2002-12-15 20:40:42
   RE: Cours PIC18Fxxx "BIGONOFF"
Pourquoi j'ai l'impresion que le webmaster de ce site commence a regretter d'avoir ajouter la possibilité de faire des dessins??

Numéro de l'article: 16995   |  De: marc   |  Date: 2002-12-15 21:08:26
   RE: Cours PIC18Fxxx "BIGONOFF"
Salut
------

Ben, pour le moment, impossible.

J'ai du boulot à terminer, puis un système domotique à recommencer (18Fxx en réseau CAN).

Donc, je vais être occupé durant quelques mois.

Et puis, je fatigue un peu, moi, LOL.

Mais bon, j'y penserai...... peut-être......LOL.

Mais la motivation, ça s'entretient, LOLOLOL.

A+
Bigonoff


Numéro de l'article: 17004   |  De: Bigonoff   |  Date: 2002-12-15 22:52:21
   RE: Cours PIC18Fxxx "BIGONOFF"
Fait le malin la ...
Mais je suis sur que tu vas faire ca ...
ca te ronge déja lolll


Numéro de l'article: 17012   |  De: byte   |  Date: 2002-12-15 23:55:08

   Filtre vidéo anti-parasites  
Bonjour
Est-ce que quelqu'un pourrais me procurer un schémat d'un filtre vidéo anti-parasites
mon probleme est que j'ai des petits parasites quand je branche mes deux PC a une source vidéo commune
Il me faudrais un schéma pour un signal s-vidéo
Je voudrais un truc passif assez simple vu que la carte vidéo compense la perte de gain.

Merci d'avance !


Numéro de l'article: 16978   |  De: Petrus   |  Date: 2002-12-15 19:25:56

   Logiciel de CAO  
Existe-t-il un bon logiciel gratuit de préférence, pour faire des typons corrects ?!
Si oui ou les télécharger ? :o)

Merci d'avance


Numéro de l'article: 16979   |  De: GaMMa   |  Date: 2002-12-15 19:33:01
   RE: Logiciel de CAO
oups désolé pour le dérangement j'avais pas vu la rubrique logiciel :
en tout cas WinTypon est excellent je trouve !! (pour un simple utilisateur et newbie en électronique :))
A+

Numéro de l'article: 16985   |  De: GaMMa   |  Date: 2002-12-15 20:19:35
   RE: Logiciel de CAO
ya proteus mais c po gratuit


multi-power.fr

Numéro de l'article: 17049   |  De: zanzeoo   |  Date: 2002-12-16 12:47:01

   salam  
bonjour je chèrche a achetie une fassade, de pk7 auto; (pioneer 6600) et j'abite a bouira, merci d'avance salut

Numéro de l'article: 16992   |  De: rahim   |  Date: 2002-12-15 21:04:47
   RE: salam
Salut
------

Pour les face avant : s'adresser au fabricant, avec facture d'achat, et carte de n° de série.

Pour les radio volés, les rapporter au propriétaire.

A+
Bigonoff


Numéro de l'article: 17003   |  De: Bigonoff   |  Date: 2002-12-15 22:47:16
   RE: salam
LOL

Numéro de l'article: 17013   |  De: Ren   |  Date: 2002-12-15 23:55:22
   RE: salam
Il vas nous dirre qu'il la fait tomber ca face ...
mais moi je croit que c'est son poste qui est tomber de camion (loll)

A+


Numéro de l'article: 17024   |  De: byte   |  Date: 2002-12-16 00:13:28

   Temps de multiplication pour un 16f877  
Bonjour,
J'aurais aimé savoir combien de cycles d'horloge requiert une multiplication et une division pour un 16f877 (introuvable dans le datasheet).
merci

Numéro de l'article: 16997   |  De: julien   |  Date: 2002-12-15 21:24:00
   RE: Temps de multiplication pour un 16f877
Introuvable ?

bhen j'ai déja utiliser des routines de chez microchip
il il te donne deux routines pour chaque opération :

une routine optimiser pour le code
et une autre pour la vitesse .
et a chaque fois il te donne le nombre de cycle horloge maximum pour
la routine
pour cela vas voir dans application note , chez microchip ...
c'est pas un datasheet mais la routine , et au débuts ya un cadre ou c mis ...
a+

Numéro de l'article: 17000   |  De: byte   |  Date: 2002-12-15 21:49:22
   RE: Temps de multiplication pour un 16f877
salut!
si tu penses qu'il ya une fonction multiply dans les 16f tu te trompes et donc c normal que tu ne trouves rien dans les datasheets...

il s'agit des 18F qui gerent une multiplication, et on peux alors trouver les temps moyens et max dans le datasheet...;)

@ +
@urélien

Numéro de l'article: 17001   |  De: Aurélien   |  Date: 2002-12-15 21:57:45
   RE: Temps de multiplication pour un 16f877
je vois pas ou il parle d'une fonction muliply , mais simplement de combien de cycle d'horloge ?

donc il y a bien une routine pour ca avec les temps de cycle détailler suivant la routine (rapide ou code petit).

Pour ce qui est du pic18F elle fait une multiplication 8X8 en un cycle horloge , puisque c'est le hardware qui le fait ...

A+

Numéro de l'article: 17023   |  De: byte   |  Date: 2002-12-16 00:12:18
   RE: Temps de multiplication pour un 16f877
le 18f fait en 1 cycle du 8x8 unsigned..
des lors que tu passes en signed ou 16x16 ça monte...

@ +
@urélien

Numéro de l'article: 17032   |  De: Aurélien   |  Date: 2002-12-16 01:33:43
   RE: Temps de multiplication pour un 16f877
Bhen oui , et si tu veut faire en 32x32 ca monte encore plus (lol)



Numéro de l'article: 17035   |  De: byte   |  Date: 2002-12-16 07:49:51

   faux stereo  
bonjour , j'ai un schèma de "faux stéréo" , mais j'ai l'impression qu'il y a une erreur de masse . quelqu'un peut-il me donné sont avis ?

Numéro de l'article: 16998   |  De: lherbaux   |  Date: 2002-12-15 21:26:16
   RE: faux stereo
salut,

suffit de nous le donner...

si le magnifique editeur de schéma du webmaster ne te suffit pas, envoie le moi. Si je n'ai pas d'avis, tu pouras essayer d'autres volontaires

@+


Numéro de l'article: 17026   |  De: petitours   |  Date: 2002-12-16 00:43:03

   débuter en électronique  
Salut,

J'aimerai bien apprendre (ou au moins essayer) à construire des instruments électroniques pour faire de la musique (genre sampleur, synthétiseur, table de mix...). Je sais pas vraiment vers ou m'orienter pour faire ça. Existe-t-il des sites, des bouquins traitant spécifiquement de ce sujet? Soit je trouve des sites que sur la hi-fi (amplis, encintes...) ou que sur le DSP. Je sais bien que ce que je veux faire touche à ces domaines mais c pas vraiment ça en même temps...

Merci à vous si vous pouvez m'aider :)

Ciao

Numéro de l'article: 16999   |  De: BeatManiak   |  Date: 2002-12-15 21:41:57