Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Microcontroleur PIC [ Archives / Les PIC ] (pickolo)

mercredi 15 février 2006 à 09:22:19 | Microcontroleur PIC

pickolo

salut
j'utilise un PIC 16F628 pour traiter une serie d'information venant d'un PC via le port RS232.le probleme se posse lorsque je doit envoyer les informations a 4 equipements que j'ai monté avec toujours les meme PIC 16F628. Les informations du PC passe par un HUB construit a cette effet et chaque equipements a une adresse personnelle. Le probleme est que lorsque j'envoi les infos pour un equipement je ne peux plus envoyer d'autre informations aux autres equipements du moins ils ne reagissent plus aux nouveaux messages. Mais lorsque je fais un reset sur un equpement et que j'envoi un message a cet equipement il reagit.
je veux commender ces 4 equipements sans avoir a faire de reset pour que l'un traite les information quand un precedent en a deja traité.
Pouvier vous m'aider?


lundi 20 février 2006 à 18:08:24 | Re : Microcontroleur PIC

frobinet

Réponse acceptée !
Salut, Le protocole série n'a pas d'adressage ! Donc qui s'occupe de rediriger est-ce que c'est le Hub qui determine la cible ou est-ce que c'est le microcontroleur qui considère que c'est pour lui ou pas ? Comment les autres sont mis en attente (mise en attente logiciel ou matériel DTR/DSR) ? Petite astuce : Dans notre cas, nous envoyons dans chaque trame emise une entête reprenant la cible ce qui permet à chaque unité de vérifier si le message est pour lui et en cas de plantage il n'y a pas à faire de fonction de reveil!

mardi 21 février 2006 à 09:27:43 | Re : Microcontroleur PIC

pickolo

slt Frobinet

Dans ma conception actuelle ce sont les microcontroleurs de chaque boitiers qui reconnaisent les informations.car chaque information a une entete .pratiquement voila un extrait du code pour l'entete.

ADRESSE1 bsf RCSTA,CREN ; debut de réception
 
  btfss PIR1,RCIF  ; attend que le flag soit à 1 ==> dés que l'octet est reçu et
                                ; transféré  dans rcreg
  
goto $-1
  movfw RCREG   ; charger octet reçu dans W
  movwf CTRL_ADRESSE ; le sauver l'octet d'adresse
  movfw  CTRL_ADRESSE ; on charge RCREG dans W
  xorlw 0x31  ;adresse définie pour la CABINE 1
  btfss STATUS,Z 
  goto ADRESSE1 
  
  btfss PIR1,RCIF  ; attend que le flag soit à 1 ==> dés que l'octet est reçu et
                               ; transféré dans rcreg
  
goto $-1
  movfw RCREG   ; charger octet reçu dans W
  movwf CTRL_PHONE ; le sauver l'octet d'adresse
  movfw  CTRL_PHONE ; on charge RCREG dans W
  xorlw 0x41  ;Téléphone décroché
  btfss STATUS,Z 
  goto RECEPTION1 
  call MES_AFF6

Pour la mise en attente des autres je ni ai vraiment pas pensé
Et je ne sais pas trop grande chose sur le DTR/DSR mais je vais faire des recherches tout à l'heure.
merci pour ton aide
mon contact msn si tu veux: kolotcholoma@hotmail.com


mardi 21 février 2006 à 10:13:13 | Re : Microcontroleur PIC

frobinet

Salut, Suivant les lignes de ton programme, tu reboucle sur le test de chaque caractère reçu par le port série jusqu'à ce que tu reconnaisse le numéro de cabine et pas seulement sur une entête ! La longueur de ta trame lorsque les deux interlocuteurs se parle est elle importante et est-tu sûr que dans une des trames que reçoit la cabine 2 (0x32) tu n'utiserai pas un 0x31 qui passerai du coup la cabine 1 en reception alors qu'elle ne devrait pas.

mardi 21 février 2006 à 12:16:11 | Re : Microcontroleur PIC

pickolo

Hi

Pour ce qui est des trames envoyer aux differentes cabines il n ya pas de risque de repeter par exemple l'adresse d'une autre cabine.j'ai devollopé parallelement une interface en VB qui me génére les trames pour chaque cabine avec les adresses comme entete de chaque trame.
comme je l'ai dit precedament quand j'envoi les informations pour la cabine 1 tout marche correctement ;par ailleurs si je souhaite envoyer des infos a la cabine 2 rien et il faut d'abors faire un reset de la cabine 2 avant puis renvoyer la trame pour observer quelque chose.
Et ce probleme se posse quand j'en vois plusieurs octets (12 octets environ )de suite a la cabine 1.
sinon pour 2 octets envoyés il n'ya pas de probleme a communiquer avec la cabine 2 bizar!
vois tu peux de quoi je parle?
comment faire une procedure de mise en attente?


mardi 21 février 2006 à 12:53:08 | Re : Microcontroleur PIC

frobinet

Réponse acceptée !
Yes but, As tu un exemple de trame qui fais planté ? (les douzes octets qui font planté à coups sûr par exemple !)

mardi 21 février 2006 à 16:54:13 | Re : Microcontroleur PIC

pickolo

ADRESSE1 bsf RCSTA,CREN ; debut de réception
 
  btfss PIR1,RCIF  ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1
  movfw RCREG   ; charger octet reçu dans W
  movwf CTRL_ADRESSE ; le sauver l'octet d'adresse
  movfw  CTRL_ADRESSE ; on charge RCREG dans W
  xorlw 0x32  ;adresse définie pour la CABINE 1
  btfss STATUS,Z 
  goto ADRESSE1 
  

  btfss PIR1,RCIF  ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1
  movfw RCREG   ; charger octet reçu dans W
  movwf CTRL_PHONE ; le sauver l'octet d'adresse
  movfw  CTRL_PHONE ; on charge RCREG dans W
  xorlw 0x41  ;Téléphone décroché
  btfss STATUS,Z 
  goto RECEPTION1 
  call MES_AFF6
  
RECEPTION1 
          
  movfw CTRL_PHONE ;RCREG  ; charger octet reçu dans W
  movwf X0  ;  sauver
  nop
  
         
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1      
  movfw RCREG  ; charger octet reçu dans W
  movwf X1  ;  sauver
  nop
  
     
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X2  ;  sauver
  nop
  

  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1  
  movfw RCREG  ; charger octet reçu dans W
  movwf X3  ;  sauver
  nop 
  
         
  btfss PIR1,RCIF  ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X4  ;  sauver
  nop 
  
     
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1 
  movfw RCREG  ; charger octet reçu dans W
  movwf X5  ;  sauver
  nop


  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1 
  movfw RCREG  ; charger octet reçu dans W
  movwf X6  ;  sauver
  nop

         
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X7  ;  sauver
  nop

     
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X8  ;  sauver
  nop 


  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1      
  movfw RCREG  ; charger octet reçu dans W
  movwf X9  ;  sauver
  nop

         
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1   
  movfw RCREG  ; charger octet reçu dans W
  movwf X10  ;  sauver
  nop
  
    
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1    
  movfw RCREG  ; charger octet reçu dans W
  movwf X11  ;  sauver
  nop

    
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X12  ;  sauver
  

         
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1   
  movfw RCREG  ; charger octet reçu dans W
  movwf X13  ;  sauver
  nop  

     
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1    
  movfw RCREG  ; charger octet reçu dans W
  movwf X14  ;  sauver
  nop
  

  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X15  ;  sauver
  nop

         
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1   
  movfw RCREG  ; charger octet reçu dans W
  movwf X16  ;  sauver
  nop 

     
  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1    
  movfw RCREG  ; charger octet reçu dans W
  movwf X17  ;  sauver
  nop
  

  btfss PIR1,RCIF ; attend que le flag soit à 1 ==> dés que l'octet est reçu et transféré dans rcreg
  goto $-1       
  movfw RCREG  ; charger octet reçu dans W
  movwf X18  ;  sauver
  nop     


  bcf RCSTA,CREN ; FIN de réception

TRANSFERT1 ;call Clear_LCD ;on efface l'ecran

 ;**************************************************
 ;**********************  LIGNE1 *******************
   
  movlw ' '  ;espace
  call LCD_PUTCHAR

  movlw ' '  ;espace
  call LCD_PUTCHAR

 ;*****************************************
 ;*************** ************ *************

  movfw X0  ;prémiere lettre du type 
  call LCD_PUTCHAR

  movfw X1  ;deuxième lettre du type 
  call LCD_PUTCHAR

  movfw X2  ;troisième lettre du type 
  call LCD_PUTCHAR
 
 ;******************************************

  movlw ' '  ;espace
  call LCD_PUTCHAR

  movlw ' '  ;espace
  call LCD_PUTCHAR

 ;**********************************************
 ;*************** ***************** *************

  movfw X3  ;prémiere lettre 
  call LCD_PUTCHAR

  movfw X4  ;deuxième lettre 
  call LCD_PUTCHAR

  movfw X5  ;troisième lettre 
  call LCD_PUTCHAR

  movfw X6  ;quatrième lettre 
  call LCD_PUTCHAR

  movfw X7  ;cinquième lettre 
  call LCD_PUTCHAR

  movfw X8  ;sixième lettre 
  call LCD_PUTCHAR

  movfw X9  ;septième lettre 
  call LCD_PUTCHAR

 ;******************************************

  movlw ' '  ;espace
  call LCD_PUTCHAR

  movlw ' '  ;espace
  call LCD_PUTCHAR


 ;*******************************************
 ;///////////////////////////////////////////
 ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 ;*******************************************

 ;**************************************************
 ;**********************  LIGNE2 *******************

  movlw 0xC0  ;basculement a la ligne 2 première position a gauche
  call LCD_PUTCMD ;envoi la commande au LCD

 ;*******************************************
 ;*************  TEMPS ECOULE****************

  movlw 'T'  ;T pour indiquer la zone de chrono (temps)
  call LCD_PUTCHAR

  movlw ':'  ;deux point d'espacement
  call LCD_PUTCHAR

 ;*******************************************

  movfw X10  ;dizaines 
  call LCD_PUTCHAR

  movfw X11  ;unités 
  call LCD_PUTCHAR

 ;*******************************************
  movlw ':'  ;deux point d'espacement
  call LCD_PUTCHAR
 ;*******************************************

  movfw X12  ;dizaines 
  call LCD_PUTCHAR

  movfw X13  ;unités 
  call LCD_PUTCHAR

 ;********************************************
  movlw ' '  ;espace
  call LCD_PUTCHAR

  movlw ' '  ;espace
  call LCD_PUTCHAR

 ;******************************************** 
 ;****************************** **************

  movlw 'F'  ;
  call LCD_PUTCHAR

  movlw ':'  ;deux point d'espacement
  call LCD_PUTCHAR

 ;********************************************


  movfw X14  ;
  call LCD_PUTCHAR

  movfw X15  ;
  call LCD_PUTCHAR

  movfw X16  ;
  call LCD_PUTCHAR

  movfw X17  ;
  call LCD_PUTCHAR

  movfw X18  ;
  call LCD_PUTCHAR  

  goto ADRESSE1


mardi 21 février 2006 à 17:01:43 | Re : Microcontroleur PIC

pickolo

ci.dessus c'est la trame la plus longue que les pic recoivent.
regarde s'il ya quelque chose d'anormal qui planterai le reste des cabines fait moi signe.
mais ça marche bien pour une cabine.
A +


mardi 21 février 2006 à 17:19:52 | Re : Microcontroleur PIC

frobinet

Le caractère de sélection de la cabine est 0x31 soit '1' or tu envoie visiblement un afficheur horaire (LIGNE 2), il y a de grande chance que la trame contienne au moins un caractère numerique '2','3','4' ce qui fais que la mauvaise cabine croit que la trame est pour elle et rentre dans ta fonction de reception, la trame n'étant pas complète elle n'est plus en attente du prochaine ordre. Choisit commme adresse de Cabine les adresses 0xB1, 0xB2, 0xB3, 0xB4 et comme adresse de racrochage un 0xBA comme ça il y a peu de chance que t'utilise ces carcatères

mardi 21 février 2006 à 18:45:50 | Re : Microcontroleur PIC

pickolo

ok j'ai essayer ça et je te contact pour te donner une suite
merci encore
et A+



Cette discussion est classé dans : informations, pic, microcontroleur, equipements, 16f628


Répondre à ce message

Sujets en rapport avec ce message

pic 16f628 [ par theyoupione ] je suis un débutant dans la programmation de PIC et je voudrai savoir comment réaliser avec le 16f628:la réception de 2 signaux analog (d'un inclinomè espion clavier pic 16f628 [ par pic16f ] Bonjour,  Quelqu'un pourrait-il m'aider à écrire un petit programme assembleur permettant à un PIC 16f628  d'espionner les touches d'un clavier matric prob interruption timer (pic) [ par julien__68 ] bonjours tout le monde, voici une parti de mon programme, je réalise une interruption avec mon timer, et je voulai mettre une interruption toute les interface I2C et PIC 18F2431 [ par ruppuk ] Bonjour, Pouvez-vous me dire comment on reçoit des données en utilisant l'interface I2C du PIC 18F2431? PIC et pda [ par madaj ] dévellope en eVB pour pocketpc et fait de l'électro avec des pics. voudrai dévellopé appli PIC pilotable par un pocket pc. recherche comment interface probleme avec K8048 Velleman [ par niax1 ] Bonjour à vous tous. Je dispose du programmateur pic de VM111 /  K8048 de Velleman. Lorsque j'essaye de transférer un code sur le pic avec le progra programmation du PIC 12C508 [ par arzew99 ] bonjour, Quelqu'un connaitrait-il un site où apprendre à programmer le PIC 12c508 ou équivalent ? Il y a bien le site de Bigonnof qui passe en détail configuration registre OSCCAL du PIC 12c508A [ par arzew99 ] bonjour,Le PIC 12c508A possède un registre qui permet de configurer la calibration de son oscillateur .Des bits de configuration permettent de choisir pic 16c745 [ par boobours ] BONJOUR J'AI REALISER UN PROGRAMMATEUR DE PIC MAIS JE VOUDRAIT FAIRE UN EXTANTION CAR JE VAUDRAI PROGRAMMER LE PIC 16C745 POURRIEZ VOUS M'AIDEZ MERCI PIC: long call et table [ par flagyg ] Bonjour,J'appelle une table qui se trouve à l'adresse 0x700 depuis ~0x20. J'ai remarqué que ça ne jouait plus car la table me renvoie nimporte ou dans


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.