Home › Forum › Microcontrôleurs & microprocesseurs › PIC 16F877A pour électronique embarquée voiture

Forum

Veuillez vous identifier avant de répondre ou pour vous abonner à cette discussion

Sujet: PIC 16F877A pour électronique embarquée voiture

Auteur Message

mazoul72

28 messages

De passage
De passage

Read post 15-08-2011 23:30

Bonjour,
j'ai un circuit à base de PIC 16F877A et des sources en picbasic.
Ce circuit permet de gérer l'affichage sur un compteur de voiture des éléments graphiques et de remplacer le menu existant pour pouvoir accéder aux différents organes de la voiture par le biais du bus CAN.
N'étant pas familier de ce bus et de l'accès à sa programmation,je voudrais déjà analyser les différentes parties des sources mais je ne comprends pas tout.
Mon premier but est de gérer l'accès aux boutons multi-fonctions du volant (12 en tout) pour pouvoir commander l'autoradio.
J'ai deux fils qui peuvent sortir du volant pour envoyer ce type d'infos.(le reste servant au klaxon et au +12V)

Comment programmer les entrées du pic sachant que deux modules sont présents dans le volant ?
Ces modules contiennent les boutons qui ferment des circuits où se trouvent des résistances de 1001 , 2001 ,3921 ohms .L'appui sur le bouton met à la masse un des cotés de ces résistances , l'autre coté va vers une sortie n°1 du module (donc 3 boutons);Les 3 autres boutons vont vers une autre sortie n°2 donc cela fait 6 boutons en tout pour le coté gauche du volant .
Sans appui , une résistance de 3902 ohms qui est à la masse d'un coté va sur la sortie n°1 , pareil pour la sortie n°2
Normalement ces 2 sorties sont reliés à un troisième module qui multiplexe sur un bus LIN v2.1.Mais là mon but est de shunter le multiplexage des info pour faire arriver sur le fameux boitier à base de PIC .
Doit-on utiliser les entrées en convertion A/D par rapport aux valeurs de résistances des modules de chaque boutons ?
Ou peut-on faire autrement tout en gardant ces deux modules bien sur ?
Cordialement.

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 16-08-2011 02:21

Si je comprend bien:
- Tu as actuellement une résistance dont la valeur varie en fonction des boutons, c'est "lu" par un "boitier" qui l'analyse et l'envoi vers un bus
- Tu veux recopier l'information de résistance (sans perturber le fonctionnement actuel) pour un usage perso

Il est probable que le "boitier" génère un certain courant, peut être constant, pour transformer cette variation de résistance en variation de tension.

C'est facile à voir en mettant un voltmètre entre les deux fils qui sortent du volant avec le véhicule en marche. Tu mesures des variations de tension? c'est bon !
- Dans la gamme 0/5V , tu rentres sur l'entrée ADC du µC
- Dans une autre gamme , faut amplifier ou atténuer

mazoul72

28 messages

De passage
De passage

Read post 16-08-2011 10:19

salut,
je suis étonné qu'il n'y ai pas du +5 v à la place de la masse en faisant contact avec le bouton , ainsi de l'autre coté suivant la résitance associée ,ça donnerait une tension directe plus ou moins basse dans la plage 0-5v ; non ?
Pourquoi une masse ?
La sortie n°1 et 2 arrive sur deux entrées d'un pic cms il me semble (module multiplexage) , je vais regarder la réf de ce chip pour voir ce qu'il y a en interne sur ces entrées.
Par contre je veux shunter le module multiplexage , connais pas le bus lin donc plus simple avec le pic normalement.
Merci.

Modifié par mazoul72 le 16-08-2011 10:29

Loblick

447 messages

Habitué
Habitué

Read post 16-08-2011 11:00

Bonjour,

Le multiplexage "analogique' est assez courant sur les véhicules modernes (par exemple, les 4 boutons du régulateur de vitesse sur les Renault).

L'ECU (Electronic Control Unit ou calculateur) a une résistance de pull-up en interne et on vient commuter différentes valeurs de résistances, pour faire varier la tension au point milieu.
L'ECU lit la valeur analogique et en déduit la touche appuyée!

Pourquoi tirer à la masse plutôt qu'au 5V ou au 12V?
Tout simplement par que la masse est présente partout (pas de fil supplémentaire à tirer) et que si le fil est blessé et touche la carcasse de la voiture, il n'y a pas de risque de court-circuit, tout au plus une valeur erronée ou de défaut.

Pour ne pas perturber le système, je te conseille fortement de passer par un ampli-op monté en suiveur.

A+,
Loïc

mazoul72

28 messages

De passage
De passage

Read post 17-08-2011 16:27

Salut,
pour ce qui est d'une partie du code de programmation :
Low ena

somme=0

dat=126

ShiftOut data, clk, 5,[dat]

somme=somme ^ dat

rem High data



dat=237

ShiftOut data, clk, 5,[dat]

somme=somme ^ dat


rem Low data

dat=15

ShiftOut data, clk, 5,[dat]

somme=somme ^ dat


rem High data
'message

For cont=0 TO 15

tmp=msg[cont]

rem dat=255 - tmp

dat= ~ tmp

somme=somme ^ dat


ShiftOut data, clk, 5,[dat]

rem Low data


Next cont



'Somme de controle



dat=somme + 1

ShiftOut data, clk, 5,[dat]

rem Low data


High ena

......

ena , data sont des ports en sortie connecté sur le canbus
je ne saisi pas les valeurs dat de 126,237,15 , je ne vois pas à quoi elle servent
ni les high,low data.

Loblick

447 messages

Habitué
Habitué

Read post 18-08-2011 10:45

bonjour,

J'ai un peu de mal à te suivre...

ena et data sont des pattes connectées au can bus... Il va y avoir un soucis... Car le bus CAN se compose de 2 fils, CANL (pour low) et CANH (pour high)... L'information envoyée sur le CANL étant l'exacte opposée à celle envoyée sur le CANH (signaux diférentielle)...

Donc, soit tu pilotes un composant d'interface CAN, soit tu n'es pas sur un bus CAN, soit je ne n'ai rien compris!!!

Tu peux nous faire un petit schéma vite fait de ce que tu veux faire?

A+,
Loïc

mazoul72

28 messages

De passage
De passage

Read post 18-08-2011 15:39

Salut,
je devais pas avoir les idées claires mais en fait , la partie commande du bus can n'est pas implémentée (ce que je veux faire plus tard pour faire afficher ce que l'on veut des controleurs situés dans la voiture).
Cette toute petite partie de code permet d'accéder au compteur de la voiture .Les 3 broches ENA , DATA , CLK sont trois entrées derrière le compteur qui servent à le commander et afficher ce que l'on veut après .Le commodo est aussi géré (up,down,reset) sur les voitures pourvues de ceux-ci au volant.
Les données affichées sont contenues dans l'eeprom non effaçable après hors tension avec les "DATA".
La partie entrée boutons multifonctions sera implémentée par la suite d'où mon premier post.
Dès que je peux , j'envoie un petit schéma.
Cordialement.

mazoul72

28 messages

De passage
De passage

Read post 20-08-2011 23:08

Bonsoir,
quel est le plus judicieux avec le pic , mettre une résistance de tirage vers le +5 V ,dans ce cas pourra t-on mesurer la tension entre la résistance du bouton multifonctions et la résistance de tirage OU valider la résistance de tirage interne du port B ?
Le but est je précise de savoir quelle résistance du bouton multifonctions va être en série avec l'entrée du port B .
Donc je suppose que cela se fera forcément par une mesure de la tension appliqué sur l'entrée RBx.

Modifié par mazoul72 le 20-08-2011 23:11

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 20-08-2011 23:49

Ton schéma n'est pas bon.
Le bouton doit être entre le 5V et la résistance. Et il faut une pullDown sur l'entrée analogique pour mesurer une tension qui est variable en fonction du bouton appuyé

mazoul72

28 messages

De passage
De passage

Read post 21-08-2011 01:07

Voici le schéma qui doit être câblé (les boutons restent tels quel )

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 21-08-2011 09:21

mazoul72Voici le schéma qui doit être câblé (les boutons restent tels quel )
Ben, je préfère mieux cette réponse !

En électronique, pour mesurer une résistance, on y passer un courant .... et on mesure la chute de tension aux bornes de la résistance.

Donc il faut relier l'entrée analogique du µC à une source de courant bien stable (c'est à préciser ...) positive.

On peut utiliser un vrai générateur de courant ou une simple résistance de tirage.
Je te laisse le soin de calculer les valeurs à utiliser

mazoul72

28 messages

De passage
De passage

Read post 21-08-2011 10:13

Si je comprends bien , d'après le convertisseur du 16F877 , le VAIN voltage correspond à la tension qu'on lui applique sur l'entrée analogique du bouton ( S1 ou S2 dans mon cas).
On met forcément un +5 sur une résistance de tirage pour avoir au point milieu une tension suivant la valeur 1001 ,2001,etc... des bmf .

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 21-08-2011 11:35

Le schéma

mazoul72

28 messages

De passage
De passage

Read post 21-08-2011 16:05

comment on lit la valeur analogique ?

TRISA = %11111111
ADCON1 = %10000010

lecture_bmf:

Adcin 0, bmfs
Adcin 1, bmfs
.....

ou faut-il lire le ADRESH:ADRESL ?
mais comment ?
edit;
bmfs = ADRESH * 256 + ADRESL
tel quel , ça fonctionne ?

EDIT :
c'est pas du C par hasard car en picbasic ,
c'est plutot ,non ?
TRISA = %11111111 ' Set PORTA to all input
ADCON1 = %10000010 'configuration en I/O et ra0 en analogique

'lecture de la valeur

lecture_bmf:

'départ conversion
'ADCON0 = 1
'ADON = 1

'Do
'Pause
'Loop Until GO_DONE = 1
'ADON = 0

'Mesure en sortie de bmf
'adH = ADRESH
'adL = ADRESL
'bmfs = adH*256 + adL
' Exemple pour allumer deux leds suivant la tension en entrée
Adcin 0,bmfs ' remplace plusieurs instructions en C ???
Adcin 1,bmfs1
if (bmfs > 1000) or (bmfs1 > 1000) Then Goto boucle_fin
if (bmfs > 750) or (bmfs1 = 450) or (bmfs1 >= 450) Then High bmf_comm1
if (bmfs < 450) or (bmfs1 < 450) Then High bmf_comm1
pause 2000

boucle_fin:
Goto lecture_bmf


Merci.

Modifié par mazoul72 le 21-08-2011 18:17

Modifié par mazoul72 le 22-08-2011 18:51

mazoul72

28 messages

De passage
De passage

Read post 23-08-2011 10:35

Pas de réponses ???

Sinon,
comment sont interprétées les valeurs de résistances derrière une entrée télécommande de l'autoradio ?
des valeurs en omhs qui donnent une tension ?
Le calcul se fait entre une masse et une entrée sur la même prise jack.

Cordialement.

mazoul72

28 messages

De passage
De passage

Read post 24-08-2011 14:32

Bonjour,
c'est bien du +5V , si on met au cul une résistance X cela fait une tension correspondante .
Mais comment commander les sorties du PIC ?
Doit-on utiliser un réseau R2R et cela est-il connectable facilement ?

Ou y a t-il une autre solution ?

Cordialement.

Loblick

447 messages

Habitué
Habitué

Read post 24-08-2011 15:13

Bonjour,

J'ai un doute tout d'un coup.
Tu veux simuler la télécommande pour attaquer l'autoradio ou simuler un autoradio pour lire la télécommande?

A+,
Loïc

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 24-08-2011 15:23

J'ai l'impression qu'il veut transformer la résistance lu en une autre valeur de résistance ..... pour leurrer le système actuel
Dans ce cas, on son µC il lit la tension (donc la valeur de la résistance) et son µC pilote un DAC (ou un PWM+filtre) , sachant que le système actuel s'attend à une mesure de tension

mazoul72

28 messages

De passage
De passage

Read post 24-08-2011 20:06

Exactement Daudet78.
un sytème à base de R2R ou autre
lequel est le meilleur ?

J'ai refait le prog ,
Hello,
i made this to programm ADC

bmf_comm1 VAR PORTB.0
bmf_comm2 VAR PORTB.1
'Variables
bmfsD VAR WORD
bmfs1D VAR WORD
iled var byte
blink1 var byte 'pour clignotement 1ère led
blink2 var byte 'pour clignotement 2ème led
'configuration du port pour lire l'entrée analogique
TRISA = %00000011 ' RA0 et RA1 en entrée
TRISB = %11111100 ' RB0 et RB1 en sortie
ADCON1 = $10000010 'RA0 à RA3

test_depart:
Low bmf_comm1
Low bmf_comm2
High bmf_comm1
high bmf_comm2
pause 2000
goto mainloop
'lecture de la valeur
getad:
PAUSEUS 50 ' Wait for A/D channel acquisition time
ADCON0.2 = 1 ' Start conversion
WHILE ADCON0.2 ' Wait for it to complete
WEND
Return

' Subroutine to get pot x value
getx:
ADCON0 = $41 ' Set A/D to Fosc/8, Channel 0, On
Gosub getad
bmfsD = ADRESL + (ADRESH*256)
Return

' Subroutine to get pot y value
gety:
ADCON0 = $49 ' Set A/D to Fosc/8, Channel 1, On
Gosub getad
bmfs1D = (ADRESH*256) + ADRESL
Return
val_leds:
low bmfs_comm1
low bmfs_comm2
gosub getx
gosub gety

if (bmfsD > 1000) Then Goto val_leds
if (bmfsD > 750) Then Goto boucle_led
if (bmfsD > 500) Then Goto boucle1_led
if (bmfsD > 250) Then Goto boucle2_led

High bmf_comm1
High bmf_comm2
pause 1500
goto val_leds
boucle_led:
iled = 0
while iled < 5
if iled = 1 or 3 or 5 then high blink1:low blink2
if iled = 0 or 2 or 4 then low blink1:high blink2
iled = iled + 1
pause 1000
wend
goto val_leds
boucle1_led:
High bmf_comm1
low bmf_comm2
pause 3000
goto val_leds
boucle2_led:
low bmf_comm1
high bmf_comm2
pause 2000
Goto val_leds
End

Les leds sont tout le temps allumées et rien de rien concernant l'action sur les boutons .
Pas de changement , une ou l'autre ou les 2 en mêmes temps .Elles ne s'éteignent pas ou d'un seul coup,pourquoi je ne sais pas.
J'ai mis un condo entre la masse et le +4.98V du lm7805
Il n'a pas l'air de varier en tension d'alim.
J'ai bien mis les deux VSS et deux VDD rien d'autres par contre niveau composants.
Je n'ai pas de debug concernant les sorties RBx , y a t-il un moyen de les visualiser de manière simple ?
J'ai un pickit3 debug que je viens d'acheter en plus de mon programmateur de base.
il y a peut-etre une option avec mplab ,non ?

Merci d'avance.

Modifié par mazoul72 le 24-08-2011 20:08

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 24-08-2011 20:14

Moi, le soft, je ne veux plus m'en mêler .... Il y a plein de jeunes boutonneux qui savent te pisser 100 lignes à l'heure, je suis trop âgé pour les concurrencer !

Mais comme il ne savent pas souder deux résistances, j'ai encore du boulot à faire !

pour moi, une sortie PWM, un petit filtre (capable de recevoir 10mA en sortie) et basta

Modifié par Daudet78. le 24-08-2011 20:20

mazoul72

28 messages

De passage
De passage

Read post 24-08-2011 21:58

Tu sais moi aussi j'approche la quarantaine...
je suis tombé sur un mec sur un autre forum spécial PIC , il m'a pas donné de réponse car je ne lui ai pas donné d'assembleur à manger ,pourtant je trouve plus simple à l'oeil de programmer en basic...

Et j'ai pas le temps de réapprendre l'assembleur avec la famille...

C'est bête , j'aurais voulu savoir si y avait un truc qui cloche ...
j'ai essayé par adcin , marche pas non plus.
Allez , mets moi sur la piste .

Merci .

Daudet78.

113 messages

Visiteur régulier
Visiteur régulier

Read post 24-08-2011 22:59

Tu en rajoutes 28 au compteur pour moi. J'ai programmé en assembleur des TMS9995, TMS32020, 8051 et 8086 ...
Donc je ne peux t'être d'aucune aide (sauf sur l’algorithme)

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 00:06

Bonjour "mazoul72",

Le problème avec le basic c'est qu'il y a DES basic(s). Pour le seul PIC il en existe au moins une demi-douzaine (de tête donc probablement plus) alors que l'assembleur est unique pour une classe de processeurs (à quelques nuances dans les pseudo-instructions d'assemblage donc en-dehors des instructions elles-mêmes).

Si tu avais parlé de "C" on aurait à peine pu te parler de variantes car ils sont tous proches du standard ANSI.

Quoiqu'il en soit ce dialecte n'est pas incompréhensible mais il manque au moins un embryon de "mainloop" !

Soit ce code n'a pas été compilé avec succès soit tu as omis une partie de l'envoi.

Amicalement, Yves.

mazoul72

28 messages

De passage
De passage

Read post 25-08-2011 00:50

Merci Yves,
j'ai essayé mais sans succès.
Poutant , bon nombre d'exemple fourmillent sur le net et ça ne passe pas.
Il faudrait que je puisse visualiser la valeur ADRESH:ADRESL en sortie pour voir si la conversion arrive à son terme.
Cordialement.

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 07:01

Bonjour "mazoul72",

Tu devrais passer ton code compilé dans un simulateur. Celui de MICROCHIP dans MPLAB fonctionne évidemment parfaitement et celui d'OSHON -PIC Simulator IDE- est plus convivial et dispose d'un basic simple (mais permet de passer les .HEX venant d'autres horizons.

Amicalement, Yves.

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 09:09

Bonjour "mazoul72",

Le premier conseil :
- Si ton code a pu être compilé sans erreur il faut jeter immédiatement le compilateur (goto label inconnu sans erreur et utilisation de variables non déclarées sans erreur ce serait lamentable). Comme je ne crois pas qu'un basic actuel, même pas très bon, laisse passer ces anomalies, il serait sympa que la prochaine fois que tu soumets un code ce que ce soit l'exacte représentation de ce que tu as testé.

Deuxième conseil (après quelques modifications) :
- Certains compilateurs basculent automatiquement un port en mode sortie (output) si on exécute un changement de valeur de bit (instructions HIGH, LOW, TOGGLE, BSET, BCLEAR, ...). C'est ce que tu fais (Low bmf_comm1; Low bmf_comm2; High bmf_comm1; high bmf_comm2) pour les entrées analogiques qui ne pourront plus représenter que la valeur écrite par le programme. Ce n'est probablement pas ce que tu souhaitais faire alors, même remarque que ci-dessus et d'une part Cela ne concerne pas les entrées analogiques contrairement à ma première lecture mais il n'empêche qu'il faut indiquer le compilateur utilisé (avec sa version) et vérifier que les instructions utilisées ne perturbent pas la configuration que tu espères.

Ce ne sont que des conseils, en les suivant tu recevras sûrement une aide plus efficace.

Amicalement, Yves.

Modifié par YMasquel le 25-08-2011 12:21

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 12:35

Bonjour "mazoul72",

Ta configuration utilise "AN3/RA3" comme tension de référence, est-ce réellement le cas ou utilises-tu la référence de tension interne ? Si c'est cette dernière option il te faudrait configurer PCFG3..PCFG0 = 100 (AN0 à AN3 en mode ADC et VREF interne.

Attention aussi à VREF qui ne doit pas excéder VDD.

Pour finir quelle est la fréquence de l'oscillateur ? Sachant que tu utilises FOSC/8 comme horloge de conversion, cet oscillateur ne peut excéder 5MHz.

Amicalement, Yves.

mazoul72

28 messages

De passage
De passage

Read post 25-08-2011 13:55

Bonjour,
mon quartz est un 4Mhz .
Par contre ma conf sur ADCON1 est %10000010 : ce qui fait RA0,RA1,RA2,RA3,RA5 en analogique d'après la datasheet et VDD/VSS pour les références donc la 5/0.
Tu me conseille la 3/0 ? (seule différence la RA2 en numérique)
Le code a été rectifié avec les labels , j'ai du toucher au code après compil. et le copier (désolé).
Dois-je utiliser le registre ADCON0 dans le code ?
Bon nombre d'exemples l'utilisent sur le net , des fois non .Ca me laisse perplexe.
J'utilise microcode studio pour l'instant avec le compilateur PBP en version 2.50c .
Je regarde en même temps le manuel en pdf , effectivement il parle de adcin mais pas d'adresh .
Cela veut-il dire que ce compilateur ne prend pas en compte la gestion des deux registres du datasheet mais seulement ADCIN peut y accéder de manière transparente ?
Pourtant j'avais essayé adcin mais peut-être y avait-il une erreur ailleurs.
Je vais refaire , et je poste.

Peux tu me dire si il faut mettre ADC_CLOCK 1 ou 3 alors que je suis avec un quartz externe sur 13/14 ? RC correspond à une horloge interne ?

Merci pour les conseils.

mazoul72

28 messages

De passage
De passage

Read post 25-08-2011 13:58

Sinon ,je viens de recevoir mon pickit 3 .
bon il veut absolument soit du c doit le pic basic pro mais en trial 15 jours.Ils auraient pu l'inclure en version totale.
Du coup je sais pas trop comment sans lcd je peux voir les valeurs de conversion numériques .
J'ai vu qu'il y avait un simulateur

Modifié par mazoul72 le 25-08-2011 16:17

Modifié par mazoul72 le 25-08-2011 18:18

Modifié par mazoul72 le 25-08-2011 18:19

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 19:01

Bonjour "mazoul72",

Si la séquence que tu as fournie :
getad:
PAUSEUS 50 ' Wait for A/D channel acquisition time
ADCON0.2 = 1 ' Start conversion
WHILE ADCON0.2 ' Wait for it to complete
WEND
' Subroutine to get pot x value
getx:
ADCON0 = $41 ' Set A/D to Fosc/8, Channel 0, On
Gosub getad
bmfsD = ADRESL + (ADRESH*256)
Return

est bien conforme au programme que tu as testé je peux te dire que tu ne verras jamais les LEDS indiquer quoi que ce soit.
Il manque en effet un "RETURN" en fin de routine GETAD (derrière le WEND). Quand l'acquisition est terminée tu passes le WEND puis tu ré-exécute la routine GETX qui te renvoie sur GETAD etc...

Sinon je crois que l'initialisation des registres pour l'ADC est correcte.

Amicalement, Yves.

mazoul72

28 messages

De passage
De passage

Read post 25-08-2011 19:29

C'est étrange car sur le post d'hier où j'ai mis le code , il y a bien un return , regarde un peu plus haut .
Tu me confirme que ça doit passer tel quel sinon
Par contre sur ce site http://fabrice.sincere.pagesperso-orange.fr/cm_electronique/projet_pic/aidememoire/16F88_ADC/ADC_16F88.htm#1 , il y a une phase d'acquisition(go/done=1) , attente de 20 µs environ et conversion (adon=1).

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 19:59

Bonjour "mazoul72",

Je suis reparti de la copie que j'ai faite et sur laquelle j'ai supprimé les lignes "blanches" avant impression. Le "RETURN" a dû passer à la trappe au cours de ce ménage.

Tu exécutes également ce délai d'acquisition par le "PAUSEUS 50" (50µS c'est plus qu'il n'en faut mais sans problème) puis tu actives la conversion (ADCON0.2 = 1) et enfin tu attends que ce bit repasse à Zéro pour t'indiquer le fin de conversion. Ici c'est le module lui-même qui te signale la fin de l'opération.

ADON n'est que l'activation globale du "module" ADC si on fait de la conversion analogique/digitale on laisse ce bit à 1. On ne le désactive que pour réduire la consommation.

Par contre il manque un délai de 2xTAD (soit 3,2µS) entre la fin de la conversion et l'acquisition suivante mais le RETURN suivi du GOSUB suivant consomment déjà 4µS avec un oscillateur à 4MHz. Donc inutile d'en rajouter.

Le problème reste entier.

Amicalement, Yves.

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 23:16

Bonjour "mazoul72",

J'ai transposé ton exemple dans le BASIC d'OSHONSOFT et je lui ai fait passer un coup de simulation en m'arrêtant lorsque les deux canaux AN0 et AN1 ont été lus et stockés dans bmfsd et bmfs1d. Les résultats sont corrects.

Je te joins le source. Tu verras qu'il n'y a que peu de différences. J'ai fait passer le "boucle_led" dans un "selectcase" qui est plus propre (à mon avis) que la comparaison sur plusieurs valeurs.

Amicalement, Yves.

AttachmentMAZOUL72.bas

mazoul72

28 messages

De passage
De passage

Read post 25-08-2011 23:36

Tu le trouves ou ce basic ?
j'ai un simulateur fourni avec MPLAB 8.73 mais il n'a pas la même forme que les exemples fournis.
et la ca fonctionne avec RA0 à XX volts .On voit bien ADRESH alors que mon code reste dans une petite boucle tout le temps .
Mais à mon avis mon compilateur ne compile pas bien les ADCONx .(cela n'engage que moi)

l'exemple :

Symbol ad_action = ADCON0.GO_DONE
Symbol display = PORTB
TRISB = %00000000
TRISA = %111111
ADCON0 = 0xc0 'moi je me mets en /8 donc XT (4 Mhz)
ADCON1 = 0
High ADCON0.ADON

main:
Gosub getadresult
display = ADRESH
Goto main
End

getadresult:
High ad_action
While ad_action
Wend
Return

YMasquel

2503 messages

Expert
Expert

Read post 25-08-2011 23:45

Bonjour "mazoul72",

C'est le BASIC qui accompagne PIC Simulator IDE première ligne du menu Tools.

Fouille tous les menus, c'est plein d'outils sympas.

Amicalement, Yves.

mazoul72

28 messages

De passage
De passage

Read post 26-08-2011 00:13

Merci Yves,

Connais-tu le prix du compilateur basic ?
Je suis limité à 50 lignes ,arh...

Je me demande si je vais pas pomper un prog en assembleur car là je vois pas ce qui bloque.Il n'y a rien qui doit bloquer....c'est à n'y rien comprendre !
par contre , j'ai vu sur des forums que l'emploi d'ADCON0 était ADCON0.1 et pas .2 .Pourquoi ?

Cordialement
Hervé

Modifié par mazoul72 le 26-08-2011 00:15

mazoul72

28 messages

De passage
De passage

Read post 27-08-2011 12:16

Bonjour,

tu utilises quel compilateur ?
je ne suis plus sur de tel ou tel programme ni compilateur .
La je ne comprends plus rien concernant les lignes de code.
Sous le simulateur , le basic a l'air pas mal mais différent de celui de microcode studio (picbasic pro 2.5c) au niveau du language.
C'est pour ça que j'essaie l'assembleur en parallèle mais sous microcode studio , ça bloque sur certains registres genre ADCONx qu'il n'arrive pas à comprendre.
Par contre j'ai essayé le compilateur basic sous le pic simulateur IDE , ça passe après avec le .hex généré mais pas toutes les sources.

Quel programme utiliser pour l'assembleur ?

Là je n'avance pas du tout depuis plusieurs jours et je suis perdu.
Au secours ,merci.

Hervé

mazoul72

28 messages

De passage
De passage

Read post 27-08-2011 16:50

j'ai un bout de code qui fonctionne à peu près sous le basic de pic simulator qui d'ailleurs est le seul qui me donne un résultat dans adresh:adresl (incroyable quand même !)
le basic est de oshonsoft et ça passe.
par contre pour les conditions IF , je n'arrive pas à cumuler facilement les choix . contrairement à PicBasic pro .
raz_leds:
adval = 1023
Low bmf_comm1
Low bmf_comm2
val_leds:
While ADCON0.GO_DONE = 1
Wend
Adcin 0, adval
Adcin 1, adval1
If adval > 785 And adval < 1024 Then Goto raz_leds ' no action
If adval1 > 785 And adval1 < 1024 Then Goto val_leds ' no action
If adval > 290 And adval < 785 Then Goto leds1 ' 1er bouton
If adval1 > 290 And adval1 < 785 Then Goto leds1 '1er
If adval > 90 And adval < 290 Then Goto leds2 ' 2ème
If adval1 > 90 And adval1 < 290 Then Goto leds2 ' 2ème bouton
If adval > 1 And adval < 89 Then Goto leds3 ' 3ème bouton
If adval1 > 1 And adval < 89 Then Goto leds3 ' 3ème
Goto val_leds
leds1:
High bmf_comm1
Low bmf_comm2
WaitMs 1500
Goto raz_leds
leds2:
High bmf_comm2
Low bmf_comm1
WaitMs 2500
Goto raz_leds
leds3:
High bmf_comm1
High bmf_comm2
WaitMs 3000
Goto raz_leds
End

YMasquel

2503 messages

Expert
Expert

Read post 29-08-2011 15:44

Bonjour "mazoul72",

Le BASIC de PIC-Simulator-IDE n'est pas très sophistiqué mais parfaitement exploitable et sa simplicité le rend très lisible.

Si tu cherches à obtenir une licence je te conseille un "bundle" comprenant les PIC 10, 12, 12, 18 ainsi que les AVR ATMEGA et ATTINY en licence personnelle à 99€ comprenant les bibliothèques MATH 32 bits.

Sinon tu as la version limitée aux PIC 10, 12, 12, 18 en licence personnelle à 69€ comprenant les bibliothèques MATH 32 bits.

Mais il serait dommage de se limiter à une seule origine de contrôleurs.

Amicalement, Yves.

mazoul72

28 messages

De passage
De passage

Read post 09-10-2011 00:41

Bonjour,

ayant fait mon programme complètement , il me reste à couper la masse lorsque le circuit n'est plus alimenté par le contact neiman.
Je m'explique , à la coupure contact le réseau de résistance en parallèle étant branché en permanence sur l'entrée DCin remote de l'autoradio (+5V nominal ) donne donc une fonction en boucle.

Quel composant branché sur le +5V du coté autoradio peut couper instantanément la masse du commun entre le circuit PIC et la remote de l'autoradio ? diode zener ? autre ?

Cordialement.

mazoul72

28 messages

De passage
De passage

Read post 28-10-2011 22:03

Bonsoir,
est-ce qu'avec un opto-isolateur montage inversé ça pourrait passer ?
Amicalement.
Hervé

Veuillez vous identifier avant de répondre ou pour vous abonner à cette discussion