Pic18F2620 - usart - Rs232 - ascii - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 53 sur 53

Pic18F2620 - usart - Rs232 - ascii



  1. #31
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii


    ------

    pour les contraintes alimentations

    ben quand je suis dans l etat arret , ben j appuye sur S et si apres j appuye sur A , ben sa avance

    je vois pas ou y a le probleme... sa m allere bon ...

    enfaite sa marche bien pour les touches , envoié l information au robot ect

    le seul probleme , s est pouvoir ravoir l info a l ordi et dire que le robot avance apres sa serai nickel

    donc ché pas si faut forcement utilisé les interruptions ???

    ps : juste prévenir que je dois montré mon projet le 2 septembre , donc j espere que pourra trouvé la solution avant

    -----

  2. #32
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    coucou,

    quand tu es dans l'état arrêt, tu arrive à tourner tes roues à la main ou pas?? c'est juste une question bête pour savoir un truc personnellement

    @+

  3. #33
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    Citation Envoyé par Xtr£M Voir le message
    coucou,

    quand tu es dans l'état arrêt, tu arrive à tourner tes roues à la main ou pas?? c'est juste une question bête pour savoir un truc personnellement

    @+
    oui je sais tournée a la main

  4. #34
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    donc si ton robot se retrouve dans une descente, que tu souhaite l'immobiliser (ce ne sont que des hypothèses), ben il va redescendre

    Donc si tu peux te permettre de garder tes moteurs toujours alimentés, laisse les sur une position fixe (attention aux problèmes de chauffe peut-être)

  5. #35
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    Citation Envoyé par Xtr£M Voir le message
    donc si ton robot se retrouve dans une descente, que tu souhaite l'immobiliser (ce ne sont que des hypothèses), ben il va redescendre

    Donc si tu peux te permettre de garder tes moteurs toujours alimentés, laisse les sur une position fixe (attention aux problèmes de chauffe peut-être)
    ben ouais s est justement sa , le probleme de chauffe , sa chauffe bcp trop
    mais tkt , le test se fait une surface plane

    donc la s est bon

    faut voir mnt pour recevoir les informations sur le pc

  6. #36
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    Oki, donc plus de soucis de ce côté!

    sinon essaies ça dans les déclarations!

    Code:
    const unsigned char *ordre_1[10] = "le robot \0";
    const unsigned char *ordre_avancer[7] = "avance\0";
    const unsigned char *ordre_droite[16] = "tourne a droite\0";
    const unsigned char *ordre_gauche[16] = "tourne a gauche\0";
    const unsigned char *ordre_reculer[7] = "recule\0";
    const unsigned char *ordre_arreter[9] = "s arrete\0";
    Et dans le while:

    Code:
    if ((buffer_ordre == 0x41) || (buffer_ordre == 0x44) || (buffer_ordre == 0x47) || (buffer_ordre == 0x52) || (buffer_ordre == 0x53))
    {
     ordre = buffer_ordre;
     put_string(ordre_1);
     switch(ordre)
     {
     case 0x41:
      put_string(ordre_avancer);
      break;
    
     case 0x44:
      put_string(ordre_droite);
      break;
    
     case 0x47:
      put_string(ordre_gauche);
      break;
    
     case 0x52:
      put_string(ordre_reculer);
      break;
    
     case 0x53:
      put_string(ordre_arreter);
      break;
    
     }
    }
    J'espère que ça va passer ce coup ci! sinon dis moi quel compilateur tu utilises ça pourra aider pour les fonctions.

  7. #37
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    ici je comprend pas , c est quoi ces [10] , [7] , etc????

    const unsigned char *ordre_1[10] = "le robot \0";
    const unsigned char *ordre_avancer[7] = "avance\0";
    const unsigned char *ordre_droite[16] = "tourne a droite\0";
    const unsigned char *ordre_gauche[16] = "tourne a gauche\0";
    const unsigned char *ordre_reculer[7] = "recule\0";
    const unsigned char *ordre_arreter[9] = "s arrete\0";

    a propos , j utilise Mplab

    v essayé de testé sa mnt

  8. #38
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    voila je viens de testé et sa marche pas

    j ai l impression que les [10] ect se reconnais pas , comme l erreur de tantot que j avais montré avec illegal ect ...

    par contre , en effet , y a tj un probleme avec les moteurs ... ( je pensais que s est oki mais enfaite me suis trompé )

    quand j appuie sur Droite ou Gauche et apres sur stop , sa marche nickel

    mais s est pour avancer et reculer que parfois faut appuié 2,3 fois sur stop pour que il s arrete , ché pas si tu vois comment faire ???

    voila

  9. #39
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    Salut geo!

    Bon ben ça va être plus simple du coup! Laisses-moi le temps de pondre un code et je te donnes ça!

    @ toute!

  10. #40
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    Citation Envoyé par Xtr£M Voir le message
    Salut geo!

    Bon ben ça va être plus simple du coup! Laisses-moi le temps de pondre un code et je te donnes ça!

    @ toute!
    oki ben j attend ton code avec impatience

  11. #41
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    Coucou,

    j'ai une autre question, c'est quoi le compilateur?? Le interface de développement c'est MPLab mais le compilateur?? C 18 peut-être??

  12. #42
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    Citation Envoyé par Xtr£M Voir le message
    Coucou,

    j'ai une autre question, c'est quoi le compilateur?? Le interface de développement c'est MPLab mais le compilateur?? C 18 peut-être??
    enfaite le truc a installé , s etait un truc du genre HTSOFT

    et le compilateur que j utilise s est Hi Tech Toolsuite C18 dans mplab un truc du genre

  13. #43
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    Salut,

    bon voilà j'ai quelque chose mais je n'ai rien testé! Il y a des possibilités d'erreurs!

    Code:
    // On inclus les fichiers nécessaires au programme
    #include <P18F2620.h>
    #include <usart.h>
    #include <string.h>
    #include <stdio.h>
    
    // On configure l'oscillateur
    #pragma config OSC=XT
    #pragma config DEBUG=OFF
    
    // Défintion des variables globales
    volatile int timeout = 10;
    volatile int pas_moteur1 = 1;
    volatile int pas_moteur2 = 1;
    volatile unsigned char buffer_reception;
    
    unsigned step_moteur[9] = {0x00, 0x08 ,0x09 ,0x01 ,0x05 ,0x04 ,0x06, 0x02, 0x0A}	// différents états des commandes du moteur
    
    #pragma code high_vector = 0x08
    void 
    interrupt_vector_high(void) { _asm goto isr_high _endasm }
    #pragma code
    
    #pragma code low_vector = 0x18
    void interrupt_vector_low(void) { _asm goto isr_low _endasm }
    #pragma code
    
    #pragma interrupt isr_high
    void 
    isr_high(void)
    {
    	if ( INTCONbits.TMR0IF )	// interruption du au timer 0
    	{
    		INTCONbits.TMR0IF = 0;
    		WriteTimer0(0xEC77);
    		if( timeout != 0 ) timeout--;
    	}
    	if ( PIR1bits.RCIF )		// interruption du à une réception sur la RS232
    	{
    		buffer_reception = ReadUSART();
    		flag_reception = 1;
    		PIR1bits.RCIF = 0;
    	}
    	return;
    }
    
    #pragma interruptlow isr_low
    void 
    isr_low(void)
    {
    }
    
    // Fonction de gestion des moteurs
    void moteur (int cote, int sens)
    {
    /*
    cote :
    	- 1 : moteur de droite
    	- 2 : moteur de gauche
    sens :
    	- 0 : moteur à l'arrêt
    	- 1 : moteur tourne dans le sens horaire
    	- 2 : moteur tourne dans le sens anti-horaire
    */
    	if (cote == 1)	// moteur de droite
    	{
    		switch(sens)
    		{
    			case 0:
    				// on n'alimente pas le moteur
    				LATB = (LATB&0xF0) | step_moteur[0];
    				break;
    			
    			case 1:
    				// on fait avancer le moteur d'un 1/2 pas
    				pas_moteur1 = (pas_moteur1 == 8)? pas_moteur1 = 1 : ++pas_moteur1;
    				LATB = (LATB&0xF0) | step_moteur[pas_moteur1];
    				break;
    			
    			case 1:
    				// on fait reculer le moteur d'un 1/2 pas
    				pas_moteur1 = (pas_moteur1 == 1)? pas_moteur1 = 8 : --pas_moteur1;
    				LATB = (LATB&0xF0) | step_moteur[pas_moteur1];
    				break;
    			
    			default :
    				break;
    		}
    	}
    	else			// moteur de gauche
    	{
    		switch(sens)
    		{
    			case 0:
    				// on n'alimente pas le moteur
    				LATC = (LATC&0xF0) | step_moteur[0];
    				break;
    			
    			case 1:
    				// on fait avancer le moteur d'un 1/2 pas
    				pas_moteur2 = (pas_moteur2 == 8)? pas_moteur2 = 1 : ++pas_moteur2;
    				LATC = (LATC&0xF0) | step_moteur[pas_moteur2];
    				break;
    			
    			case 1:
    				// on fait reculer le moteur d'un 1/2 pas
    				pas_moteur2 = (pas_moteur2 == 1)? pas_moteur2 = 8 : --pas_moteur2;
    				LATC = (LATC&0xF0) | step_moteur[pas_moteur2];
    				break;
    			
    			default :
    				break;
    		}
    	}
    }
    
    
    // Programme principal
    void main (void)
    {
    	unsigned char ordre;
    
    // Paramètrage du PIC
    	OSCCONbits.IDLEN = 0x00;
    
    	RCONbits.IPEN = 1;			// Interrupt Priority Enable
    	INTCON = 0xE0;				// On active les interruptions et l'interruption du Timer0
    	INTCON2 = 0x04;				// On active l'interruption de réception de l'UART
    	INTCON3 = 0x00;
    	PIE1 = 0x20;				// Intérruption du Timer0 en priorité haute
    	IPR1 = 0x20;				// Intérruption de l'UART en priorité haute
    
    	PORTA = 0x00;				// le port A en sortie
    	PORTB = 0x00;				// le port B en sortie
    	PORTC = 0x80;				// le port C en sortie, sauf RC7 (RX de l'uart)
    
    	OpenUSART(
    		USART_TX_INT_OFF	&	// Pas d'interruption en emission
    		USART_RX_INT_ON		&	// Interruption en réception
    		USART_ASYNC_MODE	&	// Mode asynchrone
    		USART_EIGHT_BIT		&	// Mode 8 bits
    		USART_CONT_RX		&	// Réception en continu
    		USART_BRGH_HIGH,		// High baud rate
    		129);					// Baud rate generator
    
    	OpenTimer0(
    		TIMER_INT_ON	&
    		T0_16BIT		&
    		T0_SOURCE_INT	&
    		T0_PS_1_1);
    	
    	WriteTimer0(0xEC77);
    
    	ordre = 0x53;				// le robot est stoppé au démarrage
    	timeout = 10;
    
    	while(1)
    	{
    		while( (timeout != 0) && !(flag_reception) );
    		if (flag_reception)
    		{
    			if( buffer_reception == (0x41 | 0x44 | 0x47 | 0x52 | 0x53) ) ordre = buffer_reception;
    			putch("\r");
    			putch("\n");
    		}
    		switch(ordre)
    		{
    			case 0x41:
    				/* avance :
    				 * le moteur droit avance
    				 * le moteur gauche avance
    				 */
    				if(flag_reception)
    				{
    					putch("A");
    					putch("V");
    					putch("A");
    					putch("N");
    					putch("C");
    					putch("E");
    				}
    				moteur(1,1);
    				moteur(2,1);
    				break;
    			
    			case 0x44:
    				/* droite :
    				 * le moteur droit avance
    				 * le moteur gauche recule
    				 */
    				if(flag_reception)
    				{
    					putch("D");
    					putch("R");
    					putch("O");
    					putch("I");
    					putch("T");
    					putch("E");
    				}
    				moteur(1,1);
    				moteur(2,2);
    				break;
    			
    			case 0x47:
    				/* gauche :
    				 * le moteur droit recule
    				 * le moteur gauche avance
    				 */
    					putch("G");
    					putch("A");
    					putch("U");
    					putch("C");
    					putch("H");
    					putch("E");
    				moteur(1,2);
    				moteur(2,1);
    				break;
    			
    			case 0x52:
    				/* recule :
    				 * le moteur droit recule
    				 * le moteur gauche recule
    				 */
    					putch("R");
    					putch("E");
    					putch("C");
    					putch("U");
    					putch("L");
    					putch("E");
    				moteur(1,2);
    				moteur(2,2);
    				break;
    			
    			case 0x53:
    				/* stoppé :
    				 * le moteur droit à l'arrêt
    				 * le moteur gauche à l'arrêt
    				 */
    					putch("S");
    					putch("T");
    					putch("O");
    					putch("P");
    					putch("P");
    					putch("E");
    				moteur(1,0);
    				moteur(2,0);
    				break;
    			
    			default:
    				break;
    		}
    		if (flag_reception)
    		{
    			flag_reception = 0;
    			putch("\r");
    			putch("\n");
    		}
    		else
    		{
    			timeout = 10;	// Temps de temporisation entre deux état du moteur, le réglage de cette tempo permet de régler la vitesse.
    		}
    	}
    }
    En espérant que cela te convienne! @+

  14. #44
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    oki grand merci , je test ca se soir

    parce que v devoir partir

  15. #45
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    ok, y a juste une erreur, 2 fois case 1 au lieu de case1 : ... case 2:

  16. #46
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    arf , enfaite pour deja le code #include p18f2620 , j ai changé en #include pic18.h , s est bon comme ca

    par contre y a une erreur , voici l erreur :



    voila j ai essayé avec #include "usart.h" mais la sa me fait totalement plein d erreur

    voici le code de usart.h ( si sa peut resoudre le probleme )

    Code:
    // @40 MHZ
    #define SER_115200	21	// 115200 Bauds
    
    
    
    /* Init USART with VALEURBRG Bauds*/
    extern void InitUSART(char VALEURBRG);
    
    /* get one byte from serial*/
    extern unsigned char getch(void);
    
    /* get one byte from serial with error indication*/
    extern unsigned char getchR(void);
    
    /* non blocking get one byte from serial*/
    extern char getch_nb(void); 
    
    /* send one byte to serial*/
    extern void putch(char byte);
    /* send string to serial*/
    extern void put_string(const unsigned char * text);
    /* send char hex*/
    extern void tx_hex_byte(unsigned char val);
    /*conversion ascii*/
    char conv_ascii(unsigned char val);
    /*send char decimal*/
    void tx_dec_byte(unsigned char val);

  17. #47
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    voilà une version corrigée!
    Mais si tu utilises C18 pourquoi tu n'utilises pas ses propres bibliothèques aussi!

    Code:
    // On inclus les fichiers nécessaires au programme
    #include <P18F2620.h>
    #include "usart.h"
    #include <string.h>
    #include <stdio.h>
    
    // On configure l'oscillateur
    #pragma config OSC=XT
    #pragma config DEBUG=OFF
    
    // Défintion des variables globales
    volatile int timeout = 10;
    volatile int pas_moteur1 = 1;
    volatile int pas_moteur2 = 1;
    volatile unsigned char buffer_reception;
    
    unsigned step_moteur[9] = {0x00, 0x08 ,0x09 ,0x01 ,0x05 ,0x04 ,0x06, 0x02, 0x0A}	// différents états des commandes du moteur
    
    
    #pragma interrupt isr_high
    void 
    isr_high(void)
    {
    	if ( INTCONbits.TMR0IF )	// interruption du au timer 0
    	{
    		INTCONbits.TMR0IF = 0;
    		WriteTimer0(0xEC77);
    		if( timeout != 0 ) timeout--;
    	}
    	if ( PIR1bits.RCIF )		// interruption du à une réception sur la RS232
    	{
    		buffer_reception = getch();
    		flag_reception = 1;
    		PIR1bits.RCIF = 0;
    	}
    	return;
    }
    
    #pragma interruptlow isr_low
    void 
    isr_low(void)
    {
    }
    
    // Fonction de gestion des moteurs
    void moteur (int cote, int sens)
    {
    /*
    cote :
    	- 1 : moteur de droite
    	- 2 : moteur de gauche
    sens :
    	- 0 : moteur à l'arrêt
    	- 1 : moteur tourne dans le sens horaire
    	- 2 : moteur tourne dans le sens anti-horaire
    */
    	if (cote == 1)	// moteur de droite
    	{
    		switch(sens)
    		{
    			case 0:
    				// on n'alimente pas le moteur
    				LATB = (LATB&0xF0) | step_moteur[0];
    				break;
    			
    			case 1:
    				// on fait avancer le moteur d'un 1/2 pas
    				pas_moteur1 = (pas_moteur1 == 8)? pas_moteur1 = 1 : ++pas_moteur1;
    				LATB = (LATB&0xF0) | step_moteur[pas_moteur1];
    				break;
    			
    			case 2:
    				// on fait reculer le moteur d'un 1/2 pas
    				pas_moteur1 = (pas_moteur1 == 1)? pas_moteur1 = 8 : --pas_moteur1;
    				LATB = (LATB&0xF0) | step_moteur[pas_moteur1];
    				break;
    			
    			default :
    				break;
    		}
    	}
    	else			// moteur de gauche
    	{
    		switch(sens)
    		{
    			case 0:
    				// on n'alimente pas le moteur
    				LATC = (LATC&0xF0) | step_moteur[0];
    				break;
    			
    			case 1:
    				// on fait avancer le moteur d'un 1/2 pas
    				pas_moteur2 = (pas_moteur2 == 8)? pas_moteur2 = 1 : ++pas_moteur2;
    				LATC = (LATC&0xF0) | step_moteur[pas_moteur2];
    				break;
    			
    			case 2:
    				// on fait reculer le moteur d'un 1/2 pas
    				pas_moteur2 = (pas_moteur2 == 1)? pas_moteur2 = 8 : --pas_moteur2;
    				LATC = (LATC&0xF0) | step_moteur[pas_moteur2];
    				break;
    			
    			default :
    				break;
    		}
    	}
    }
    
    
    // Programme principal
    void main (void)
    {
    	unsigned char ordre;
    
    // Paramètrage du PIC
    	OSCCONbits.IDLEN = 0x00;
    
    	RCONbits.IPEN = 1;			// Interrupt Priority Enable
    	INTCON = 0xE0;				// On active les interruptions et l'interruption du Timer0
    	INTCON2 = 0x04;				// On active l'interruption de réception de l'UART
    	INTCON3 = 0x00;
    	PIE1 = 0x20;				// Intérruption du Timer0 en priorité haute
    	IPR1 = 0x20;				// Intérruption de l'UART en priorité haute
    
    	PORTA = 0x00;				// le port A en sortie
    	PORTB = 0x00;				// le port B en sortie
    	PORTC = 0x80;				// le port C en sortie, sauf RC7 (RX de l'uart)
    
    
    	OpenTimer0(
    		TIMER_INT_ON	&
    		T0_16BIT		&
    		T0_SOURCE_INT	&
    		T0_PS_1_1);
    	
    	WriteTimer0(0xEC77);
    
    	ordre = 0x53;				// le robot est stoppé au démarrage
    	timeout = 10;
    
    	while(1)
    	{
    		while( (timeout != 0) && !(flag_reception) );
    		if (flag_reception)
    		{
    			if( buffer_reception == (0x41 | 0x44 | 0x47 | 0x52 | 0x53) ) ordre = buffer_reception;
    			putch("\r");
    			putch("\n");
    		}
    		switch(ordre)
    		{
    			case 0x41:
    				/* avance :
    				 * le moteur droit avance
    				 * le moteur gauche avance
    				 */
    				if(flag_reception)
    				{
    					putch("A");
    					putch("V");
    					putch("A");
    					putch("N");
    					putch("C");
    					putch("E");
    				}
    				moteur(1,1);
    				moteur(2,1);
    				break;
    			
    			case 0x44:
    				/* droite :
    				 * le moteur droit avance
    				 * le moteur gauche recule
    				 */
    				if(flag_reception)
    				{
    					putch("D");
    					putch("R");
    					putch("O");
    					putch("I");
    					putch("T");
    					putch("E");
    				}
    				moteur(1,1);
    				moteur(2,2);
    				break;
    			
    			case 0x47:
    				/* gauche :
    				 * le moteur droit recule
    				 * le moteur gauche avance
    				 */
    					putch("G");
    					putch("A");
    					putch("U");
    					putch("C");
    					putch("H");
    					putch("E");
    				moteur(1,2);
    				moteur(2,1);
    				break;
    			
    			case 0x52:
    				/* recule :
    				 * le moteur droit recule
    				 * le moteur gauche recule
    				 */
    					putch("R");
    					putch("E");
    					putch("C");
    					putch("U");
    					putch("L");
    					putch("E");
    				moteur(1,2);
    				moteur(2,2);
    				break;
    			
    			case 0x53:
    				/* stoppé :
    				 * le moteur droit à l'arrêt
    				 * le moteur gauche à l'arrêt
    				 */
    					putch("S");
    					putch("T");
    					putch("O");
    					putch("P");
    					putch("P");
    					putch("E");
    				moteur(1,0);
    				moteur(2,0);
    				break;
    			
    			default:
    				break;
    		}
    		if (flag_reception)
    		{
    			flag_reception = 0;
    			putch("\r");
    			putch("\n");
    		}
    		else
    		{
    			timeout = 10;	// Temps de temporisation entre deux état du moteur, le réglage de cette tempo permet de régler la vitesse.
    		}
    	}
    }
    Enfin essayes avec ça! @+

  18. #48
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    re bonjour

    enfaite voila la bibliotheque que j utilise ,

    il se nomme Hi Tech Picc-18 Toolsuite

    le microchip C18 Toolsuite , enfaite il fonctionne pas , y a un fichié manquant

    pour sa depuis le debut , on m a dit d utilisé cette bibliotheque ...

    a propos du code , sa ne marche tj pas , plein d erreur

    mais par contre y a vraiment pas moyen d envoié les info sur le pc a partir de mon code de base ??? parce que j en suis tres connaissant pour le travail que tu fais et je t en remercie bcp mais c est vrai que je comprend pas grand chose au code, sa allere tellement compliqué

    donc voila chez pas si tu sais me le faire sur le code de base de moi que j avais , parce que deja la y aura pas le probleme pour compilé puis sa m aidera bcp + a expliqué

    voila dit moi quoi

  19. #49
    invitee0bbe70d

    Re : Pic18F2620 - usart - Rs232 - ascii

    Bonjour,

    Il me semble que tu confonds les compilateurs...
    Le fichier source que tu as montré est fait pour le compilateur C18 de Microchip mais d'après les messages d'erreurs que tu montres, tu essayes de le compiler avec le compilateur Hitech...et cela ne marchera jamais.
    La syntaxe à utiliser dans les fichiers diffère d'un compilateur à l'autre.

    Peux-tu vérifier si tu as installé le compilateur C18 de Microchip ?
    Tu lances MPLAB, tu charges ton projet et ensuite :
    Project > Select Language Toolsuite >
    Si tu vois Microchip C18 Toolsuite dans la case [Active Toolsuite] c'est que tu as le compilateur correspondant au fichier que tu montres dans les posts précédents. Si tu as un autre compilateur dans cette case (HITECH...) essaye de changer en Microchip C18 Toolsuite. Si tu vois des croix rouges en face des fichiers xxxx.EXE c'est que le compilateur C18 Microchip n'est PAS installé.
    Il te suffit de le télécharger gratuitement ici : www.microchip.com/C18 (version student) et de l'installer.
    Lors de l'installation coche TOUTES les cases cela installera tous les chemins par défaut et t'évitera des problèmes.
    Si tu as des messages d'erreurs poste les on pourra les résoudre

  20. #50
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    re tout le monde ,

    oki v voir sa

    mais de toute facon , le programme m allere bcp trop compliqué pour a expliqué... , je sais que xtrem a fait un bon boulot mais si on me pose une question sur une declaration ou quoique se soit , v etre paumé ...

    donc pour sa que je voulais savoir si y avais ou pas moyen de renvoié l information a l ordinateur avec mon code a moi ???

    parce que comme ca , sa marche les touches ( merci Xtrem ) mais le revoie de l information ne fonctionne pas

    Code:
    #include <pic18.h>
    #include  <stdio.h> 
    #include <stdlib.h>
    #include "delay.h"
    #include "lcd.h"
    #include "usart.h"
    
    __CONFIG(1, HS&IESODIS&FCMDIS);
    __CONFIG(2, BORDIS&PWRTEN&WDTDIS );
    __CONFIG(3, PBANDIS);
    __CONFIG(4, LVPDIS&XINSTDIS&STVRDIS&LPT1DIS);
    __CONFIG(5, UNPROTECT);
    __CONFIG(6, WRTEN);
    
    #define S1 RA0
    #define S2 RA1
    #define S3 RA2
    #define S4 RA3
    
    #define OUTA RB3 
    #define OUTB RB2 
    #define OUTC RB1 
    #define OUTD RB0 
    
    
    #define OUTE RC0
    #define OUTF RC1
    #define OUTG RC2
    #define OUTH RC3
    
    int x=10;
    char ordre;
    
    const unsigned char *ordre_avancer = "le robot avance\0";
    const unsigned char *ordre_droite = "le robot tourne a droite\0";
    const unsigned char *ordre_gauche = "le robot tourne a gauche\0";
    const unsigned char *ordre_reculer = "le robot recule\0";
    const unsigned char *ordre_arreter = "le robot s'arrete\0";
    
    void control_moteur (char ordre)
    {
    switch (ordre)
    {
    case 0x41:
    
    // avance : règles tes sorties pour avancer
    OUTA=1, OUTB=0, OUTC=0, OUTD=0;
    OUTE=1, OUTF=0, OUTG=0, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=1, OUTB=0, OUTC=0, OUTD=1;
     OUTE=1, OUTF=0, OUTG=0, OUTH=1;
     
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=1;
     OUTE=0, OUTF=0, OUTG=0, OUTH=1;
      
    
     delay_ms(x);
     
     OUTA=0, OUTB=1, OUTC=0, OUTD=1;
     OUTE=0, OUTF=1, OUTG=0, OUTH=1;
     
    
     delay_ms(x);
    
     OUTA=0, OUTB=1, OUTC=0, OUTD=0;
     OUTE=0, OUTF=1, OUTG=0, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=0, OUTB=1, OUTC=1, OUTD=0;
     OUTE=0, OUTF=1, OUTG=1, OUTH=0;
     
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=1, OUTD=0;
     OUTE=0, OUTF=0, OUTG=1, OUTH=0;
      
    
     delay_ms(x);
     
     OUTA=1, OUTB=0, OUTC=1, OUTD=0;
     OUTE=1, OUTF=0, OUTG=1, OUTH=0;
     
    
     delay_ms(x);
    break;
    
    case 0x44:
    // droite : règles tes sorties pour tourner à droite
    OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=1, OUTF=0, OUTG=0, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=1, OUTF=0, OUTG=0, OUTH=1;
     
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=0, OUTF=0, OUTG=0, OUTH=1;
      
    
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=0, OUTF=1, OUTG=0, OUTH=1;
     
    
     delay_ms(x);
    
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=0, OUTF=1, OUTG=0, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=0, OUTF=1, OUTG=1, OUTH=0;
     
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=0, OUTF=0, OUTG=1, OUTH=0;
      
    
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=0;
     OUTE=1, OUTF=0, OUTG=1, OUTH=0;
     
    
     delay_ms(x);
    break;
    
    case 0x47:
    // gauche : règles tes sorties pour tourner à gauche
    OUTA=1, OUTB=0, OUTC=0, OUTD=0;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=1, OUTB=0, OUTC=0, OUTD=1;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
     
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=1;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
      
    
     delay_ms(x);
     
     OUTA=0, OUTB=1, OUTC=0, OUTD=1;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
     
    
     delay_ms(x);
    
     OUTA=0, OUTB=1, OUTC=0, OUTD=0;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=0, OUTB=1, OUTC=1, OUTD=0;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
     
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=1, OUTD=0;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
      
    
     delay_ms(x);
     
     OUTA=1, OUTB=0, OUTC=1, OUTD=0;
     OUTE=0, OUTF=0, OUTG=0, OUTH=0;
     
    
     delay_ms(x);
    break;
    
    case 0x52:
    // recule : règles tes sorties pour reculer
    OUTA=1, OUTB=0, OUTC=1, OUTD=0;
     OUTE=1, OUTF=0, OUTG=1, OUTH=0;
    	
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=1, OUTD=0;
     OUTE=0, OUTF=0, OUTG=1, OUTH=0;
     
     delay_ms(x);
     
     OUTA=0, OUTB=1, OUTC=1, OUTD=0;
     OUTE=0, OUTF=1, OUTG=1, OUTH=0;
      
    
     delay_ms(x);
     
     OUTA=0, OUTB=1, OUTC=0, OUTD=0;
     OUTE=0, OUTF=1, OUTG=0, OUTH=0;
     
    
     delay_ms(x);
    
     OUTA=0, OUTB=1, OUTC=0, OUTD=1;
     OUTE=0, OUTF=1, OUTG=0, OUTH=1;
    	
     delay_ms(x);
     
     OUTA=0, OUTB=0, OUTC=0, OUTD=1;
     OUTE=0, OUTF=0, OUTG=0, OUTH=1;
     
     delay_ms(x);
     
     OUTA=1, OUTB=0, OUTC=0, OUTD=1;
     OUTE=1, OUTF=0, OUTG=0, OUTH=1;
      
    
     delay_ms(x);
     
     OUTA=1, OUTB=0, OUTC=0, OUTD=0;
     OUTE=1, OUTF=0, OUTG=0, OUTH=0;
     
    
     delay_ms(x);
    break;
    
    
    case 0x53:
    // stop : règles tes sorties pour ne plus bouger
    OUTA=0, OUTB=0, OUTC=0, OUTD=0;
    OUTE=0, OUTF=0, OUTG=0, OUTH=0;
    break;
    
    default:
      break;
    
    }
    }
    
    void main ()  
    {
    char buffer_ordre;
    
     ADCON1=0x07;
     TRISA= 0b00000000;
     TRISB= 0b00000000;
     TRISC= 0b10000000;
    
    InitUSART (129);
    RC4=0;
    RC5=1;
    
    
    ordre = 0x53; // le robot est à l'arrêt
    
    lcd_init ();
    lcd_clear ();
    
    while (1)
    {
    
    // 1- on essaie de lire un ordre
    buffer_ordre = getch_nb();
    // cette fonction va renvoyer soit l'ordre soit 0!
    
    if ((buffer_ordre == 0x41) || (buffer_ordre == 0x44) || (buffer_ordre == 0x47) || (buffer_ordre == 0x52) || (buffer_ordre == 0x53))
    {
     ordre = buffer_ordre;
     switch(ordre)
     {
     case 0x41:
      put_string(ordre_avancer);
      break;
    
     case 0x44:
      put_string(ordre_droite);
      break;
    
     case 0x47:
      put_string(ordre_gauche);
      break;
    
     case 0x52:
      put_string(ordre_reculer);
      break;
    
     case 0x53:
      put_string(ordre_arreter);
      break;
    
    default:
      break;
    
     }
    }
    
     control_moteur(ordre);
    }}

  21. #51
    invite067d8d6c

    Re : Pic18F2620 - usart - Rs232 - ascii

    Salut,

    donc là tes touches fonctionnent?? à ce moment là, tu remplaces le
    putstring()
    par
    putch("L");
    putch("e");
    putch(" ");
    putch("r");
    putch("o");
    putch("b");
    ......

    en fait tu envoies caractère par caractère!
    PS :
    Avais-tu changer cette ligne dans usart.h, dans la fonction putch()
    //while(!TRMT);
    en
    while(!TRMT);

    Si tu ne l'as pas fait, il serait judicieux d'essayer avant de renvoyer caractère pas caractère!

    @+

  22. #52
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    re bonjour a tous , excusé moi de ce retard , mais j ai eu un probleme avec mon ordi , donc voila la cause du probleme

    donc voila , j ai testé en laissant :

    Code:
    ordre = buffer_ordre;
     switch(ordre)
     {
     case 0x41:
      put_string(ordre_avancer);
      break;
    
     case 0x44:
      put_string(ordre_droite);
      break;
    
     case 0x47:
      put_string(ordre_gauche);
      break;
    
     case 0x52:
      put_string(ordre_reculer);
      break;
    
     case 0x53:
      put_string(ordre_arreter);
      break;
    sa marche mais pas tout a fait correctement

    enfaite l erreur que l envoie fonctionnait pas etait du a cause de ma carte émetteur , la patte Rx du port rs232 etait desoudé , donc logique que sa s envoyait plus

    donc voila ce que sa me fait pour te donné une idée , apres sa sera nickel

    donc voila , tu vois que parfois , la phrase ne s envoie pas completement... ou faut appuié plusieur fois sur la touche donc voila


  23. #53
    invite960f35e5

    Re : Pic18F2620 - usart - Rs232 - ascii

    voila en meme temp , voulais savoir si mon ordinogramme etait bien ou pas


Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Stéréogramme en ASCII
    Par invitee58f5773 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/06/2007, 11h00
  2. utilisation PIC18F2620
    Par invite9b9d0eb8 dans le forum Électronique
    Réponses: 0
    Dernier message: 22/11/2006, 09h07
  3. ascii to décimal
    Par invite3c59dc04 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 30/05/2006, 22h35
  4. [Pic18F2620]Configuration du Timer
    Par invitef0dd4a99 dans le forum Électronique
    Réponses: 0
    Dernier message: 03/05/2005, 20h00
  5. Caractère ASCII sur Trame RS232
    Par JP dans le forum Électronique
    Réponses: 6
    Dernier message: 04/09/2003, 01h38
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...