Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

perte de connexion du montage 2 USB. (programme delphi)

Envoyé par johnsly11 
perte de connexion du montage 2 USB. (programme delphi)
jeudi 14 février 2019 15:56:49
Salut Benjamin ,

En reprenant ton circuit et en ne changeant aucun paramètre , j'ai par le bias d'un timer ordonné toutes les secondes une demande d'acquisition du adc du pic.

tout fonctionne bien mais après quelques temps la communication se perd et je dois reset le pic pour que ça fonctionne.

(j'ai annulé la mise en veille de l’écran et de l’économiseur de tension sur le périphérique de l'usb)

Ma question :
N’étant pas un pro de l'usb , est il possible de savoir si l'on perd la connexion sur le pic ? ou ce que tu ajouterais comme contrôle de données ?

J'ai pas mal cherché et là je dois te dire que je planche dur..
En esperant te lire

Cordialement.

John

Re: perte de connexion du montage 2 USB. (programme delphi)
samedi 16 février 2019 20:46:26
Hello,

Je ne sais pas te répondre comme ça quel fonction/registre te donne l'état de la connexion usb. Néanmoins que tu perdes la communication n'est pas normal et ceci est certainement du au fait que tu ne passes plus dans la routine USBTasks.

Il faudrait donc voir si avec l'utilisation du timer tu ne restes pas coincé dans une boucle. Ce que je te conseillerais de faire pour le tester c'est de changer l'état d'une pin à chaque fois que tu passes dans USBTasks, si tu vois que quand tu perds la comm la pin ne changes plus, c'est que le problème vient bien de là.

Après ça, vérifie le timer que tu utilises, est-ce que tu resets bien les flags de l'interruption? (si tu utilises l'interruption)

Cordialement

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: perte de connexion du montage 2 USB. (programme delphi)
mardi 19 février 2019 11:57:16
re salut Benjamin ,

Je postais mon problème sans grande conviction que tu me répondes vu que le site n'est plus actif .-)

le timer c'est dans delphi que je demande une acquisition au pic toutes les secondes ou 500ms, je vais voir avec ton idée et je te tiens au courant si le pic sort ou ne rentre plus dans la routine de usbtasks.

encore mille merci de prendre le temps de me répondre .. a++
Re: perte de connexion du montage 2 USB. (programme delphi)
mercredi 20 février 2019 12:40:29
Hello

Oui je sais, le site est mort... même si j'ai plein d'idées mais plus aucune minute pour les exécuter.

Je comprends mieux, je pensais que tu utilisais un timer dans le pic.

En relisant le code du PIC, attention à une chose, la conversion ADC n'utilise pas les interruptions mais elle attend que la conversion soit finie via la ligne

while (ADCON0bits.GO);

Je dirais que le problème peut venir de là. Si tu veux faire des conversions à la volée de manière régulière, je triggerais la conversion comme tu le fais, mais par contre je lirais regulièrement l'état de ADCON0 sans le bloquer dans un while. Je ne sais pas si c'est clair pour toi?

Bàt

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: perte de connexion du montage 2 USB. (programme delphi)
vendredi 22 février 2019 14:15:59
coucou Benjamin,

oui j'ai bien compris ton idée je vais faire une petite boucle d'attente après le GO d'environ 30uS (l'adc prend 12 uS à 20Mhz) et si la conversion est ok je prends les données valide sinon je passe et je continue le programme.

j'ai fait enclencher une sortie a 1 lorsque le pic entre dans le progamme USBTasks et je le passe à zero à la fin de cette boucle et quand le programme se plante on voit bien la routine USBTasks tourner . mais plus de réponse.

je ne comprends pas un truc .. comment est-il possible que le pic se bloque dans cette boucle ? (while (ADCON0bits.GO) )

j'essaye comme je te le l'ai dis plus haut d'annuler le while par une petite tempo et te donne des News.

encore mille merci de ton aide j’apprécie énormément.

a++
Re: perte de connexion du montage 2 USB. (programme delphi)
vendredi 22 février 2019 21:21:24
Hello

Oui c'est vrai que je vois pas pourquoi il resterait bloqué dans la boucle. Surtout si tu vois qu'il continue a passer sans problème dans l'usbtasks.

Est-ce que tu as changer quelque chose dans le tableau d'échange des données? Je veux dire par là, que lors de la communication, un paquet échangé ferait planter la connexion au niveau du pc.

Si tu utilises un petit soft qui te permet d'échanger/d'espionner la communication HID et que manuellement tu envoies une série de convertion, est-ce que tu observes également des déconnexions?

Bàt

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: perte de connexion du montage 2 USB. (programme delphi)
mercredi 27 février 2019 13:03:21
salut Benjamin,


Non je n'ai rien changé dans ton soft, mais depuis que je ne bloque plus L adc du pic par un while et que je fais une tempo
ton programme tourne sans problème depuis deux jours.

Je ne comprends vraiment pas pourquoi çà peut se bloquer.et ça me laisse perplexe car je vais commencer mon prototype pour la commande d.une machine avec la communication en usb.


je te mets à tout hasard les deux fichiers que j'ai modifié (user et main.)

le circuit, j'ai acheté chez olimex ,il n'est pas cher et j'ai juste rajouté les deux diodes et l'interrupteur pour simuler ton programme dessus.
(J'ai aussi verifié le quartz alimentation etc..) pour pouvoir faire les testes de ton programme.

[www.olimex.com]

modif dans le user.c :


void UserInit(void)
{
TRISC = 244;
PORTC = 0;
}//end UserInit



void setdefaultacd(void)
{
/* 12 TAD FOSC/32 */
ADCON2=42;
/* AN0-15, VREF */
ADCON1 = 0b00001011;
/* Turn on the ADC */
ADCON0bits.ADON = 1;
ADCON0bits.CHS3 = 0;
ADCON0bits.CHS2 = 0;
}

void getacd(int port, int config)

{
int i;
if (config) setdefaultacd();
// FOSC/32 clock select
switch (port) {
case 0 : {ADCON0bits.CHS1=0;ADCON0bits.CHS0=0;} break;
case 1 : {ADCON0bits.CHS1=0;ADCON0bits.CHS0=1;} break;
case 2 : {ADCON0bits.CHS1=1;ADCON0bits.CHS0=0;} break;
case 3 : {ADCON0bits.CHS1=1;ADCON0bits.CHS0=1;} break;
}
ADCON0bits.GO = 1;
for (i=0;i<20000;i++); ; tempo
// while (ADCON0bits.GO); while hinibé
}

MODIF DANS LE MAIN:


main:

/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include "system\typedefs.h" // Required
#include "system\usb\usb.h" // Required
#include "io_cfg.h" // Required

#include "system\usb\usb_compile_time_validation.h" // Optional
#include "user\user.h" // Modifiable

/** V A R I A B L E S ********************************************************/
#pragma udata

/** P R I V A T E P R O T O T Y P E S ***************************************/
static void InitializeSystem(void);
void USBTasks(void);

/** V E C T O R R E M A P P I N G *******************************************/

extern void _startup (void); // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code

/** D E C L A R A T I O N S **************************************************/
#pragma code
/******************************************************************************
* Function: void main(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Main program entry point.
*
* Note: None
*****************************************************************************/
void main(void)
{
InitializeSystem();
while(1)
{
USBTasks(); // USB Tasks
PORTCbits.RC4 = 0; // pour annuler la mise en fonction de usbtask
ProcessIO(); // See user\user.c & .h
}//end while
}//end main

/******************************************************************************
* Function: static void InitializeSystem(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: InitializeSystem is a centralize initialization routine.
* All required USB initialization routines are called from
* here.
*
* User application initialization routine should also be
* called from here.
*
* Note: None
*****************************************************************************/
static void InitializeSystem(void)
{
ADCON1 |= 0x0F; // Default all pins to digital

// #if defined(USE_USB_BUS_SENSE_IO)
// tris_usb_bus_sense = INPUT_PIN; // See io_cfg.h
// #endif

// #if defined(USE_SELF_POWER_SENSE_IO)
// tris_self_power = INPUT_PIN;
// #endif

mInitializeUSBDriver(); // See usbdrv.h

UserInit(); // See user.c & .h

}//end InitializeSystem

/******************************************************************************
* Function: void USBTasks(void)
*
* PreCondition: InitializeSystem has been called.
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Service loop for USB tasks.
*
* Note: None
*****************************************************************************/
void USBTasks(void)
{
/*
* Servicing Hardware // mise à 1 pour mesurer sur une sortie l'entrée de la routine usbtask
*/
PORTCbits.RC4 = 1;
USBCheckBusStatus(); // Must use polling method
if(UCFGbits.UTEYE!=1)
USBDriverService(); // Interrupt or polling method



}// end USBTasks

//configulation***************************************************************
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2

#pragma config FOSC = HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF

#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 2
#pragma config VREGEN = ON

#pragma config WDT = OFF
#pragma config WDTPS = 1

#pragma config MCLRE = OFF
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config CCP2MX = OFF

#pragma config STVREN = OFF
#pragma config LVP = OFF
#pragma config ICPRT = OFF
#pragma config XINST = OFF
#pragma config DEBUG = OFF

#pragma config CP0 = OFF
#pragma config CPB = OFF
#pragma config WRT0 = OFF
#pragma config WRTB = OFF
#pragma config EBTR0 = OFF
#pragma config EBTRB = OFF

/** EOF main.c ***************************************************************/





Je vais encore remettre avec la boucle while et tenter de voir d'ou ça vient se bloquage.

merci encore de ton aide

a++
Re: perte de connexion du montage 2 USB. (programme delphi)
jeudi 28 février 2019 16:06:40
Ps J'ai vu que j'ai activé le bit4 du portc à la place du bit4 du portd pour voir quand ça plante si la routine est toujours dans USBTASK ..
J ai changé car c'était celui de l'usb. (n'a pas eu d'incidence quand même).

a++
Re: perte de connexion du montage 2 USB. (programme delphi)
samedi 2 mars 2019 13:46:51
Hello

Si je comprends bien, la bonne nouvelle c'est que maintenant ça fonctionne, que tu sais ce qui a été changé pour que ça fonctionne (le while) mais que tu ne sais pas pourquoi ça ne marchait pas avant.

Dans ce cas, la meilleur technique, mais qui risque de ne pas être facile c'est de faire un debuggage in situ.

Si tu as un programmateur type PicKit 3 tu peux te connecter directement au pic et mettre un breakpoint.

Le probleme c'est que comme le phénomène ne se produit pas immédiatement, le breakpoint va lui même arreter la comm usb... donc il faudrait plutot, une fois la communication sautée, mettre en pause le programme et lire l'état des registre.

As-tu ce genre d'outil? sais-tu comment ça marche?

Bàt

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: perte de connexion du montage 2 USB. (programme delphi)
lundi 4 mars 2019 16:15:32
oui je suis en icd 3 , j'ai déjà essayé en mode debuggeur mais mon soucis c'est que le programme mplab (8.91) se met en pause tout seul parfois .. je vais revoir et essayer à nouveau (mettre aussi un condo au tantale 10uF sur le 5V ) de l'icd3 (peut-être des bruits qui me font ce problème)

je te tiens au jus .-)

a++

(encore merci bcp de ton aide)
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter