Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PIC18F46K22 collegamento EUSART

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: PIC18F46K22 collegamento EUSART

Messaggioda Foto Utentespivo » 20 apr 2015, 13:31

Ciao,
Il pic18f46k22 è collegato tramite il pin 25(TX1) al RX del convertitore seriale-usb (nel mio caso il pin RB7 di un pic18f14k5) e ip pin 26(RX1) al TX del convertitore (RB5).
Ma per fortuna il problema era softwere, ora la funzione echo funziona, ho copiato e riadattato il codice in questa discussione http://www.microchip.com/forums/tm.aspx?m=647984
Non ho ben capito cosa sbagliavo va mesto funziona:
Codice: Seleziona tutto
#include <stdint.h>        /* For uint8_t definition */
#include <stdbool.h>       /* For true/false definition */
#include <usart.h>
#include "system.h"        /* System funct/params, like osc/peripheral config */
#include "user.h"          /* User funct/params, such as InitApp */

void main(void)
{
    char ch;
    TRISCbits.TRISC7 = 1; //Defining as per datasheet requirement
    TRISCbits.TRISC6 = 1; //Defining as per datasheet requirement

    ADCON0bits.ADON = 0;
    ANSELCbits.ANSC7 = 0; //0 = Digital input buffer enabled
    ANSELCbits.ANSC6 = 0; //0 = Digital input buffer enabled

// 19200 bps 8 bit + 1 stop
    Open1USART( USART_TX_INT_OFF &
            USART_RX_INT_OFF &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT &
            USART_CONT_RX &
            USART_BRGH_HIGH,
            207 );

         while (1)
         {
             while (!DataRdy1USART());
             ch = Read1USART();
             Write1USART(ch);
             while (Busy1USART());

            // putc1USART(getc1USART());
         }
}

Grazie mille.

Un ultima domanda, questo è il file interrupt.c dei template che crea mplabx
Codice: Seleziona tutto
/******************************************************************************/
/*Files to Include                                                            */
/******************************************************************************/

#if defined(__XC)
    #include <xc.h>         /* XC8 General Include File */
#elif defined(HI_TECH_C)
    #include <htc.h>        /* HiTech General Include File */
#elif defined(__18CXX)
    #include <p18cxxx.h>    /* C18 General Include File */
#endif

#if defined(__XC) || defined(HI_TECH_C)

#include <stdint.h>         /* For uint8_t definition */
#include <stdbool.h>        /* For true/false definition */

#endif

/******************************************************************************/
/* Interrupt Routines                                                         */
/******************************************************************************/

/* High-priority service */

#if defined(__XC) || defined(HI_TECH_C)
void interrupt high_isr(void)
#elif defined (__18CXX)
#pragma code high_isr=0x08
#pragma interrupt high_isr
void high_isr(void)
#else
#error "Invalid compiler selection for implemented ISR routines"
#endif

{

      /* This code stub shows general interrupt handling.  Note that these
      conditional statements are not handled within 3 seperate if blocks.
      Do not use a seperate if block for each interrupt flag to avoid run
      time errors. */

#if 0
   
      /* TODO Add High Priority interrupt routine code here. */

      /* Determine which flag generated the interrupt */
      if(<Interrupt Flag 1>)
      {
          <Interrupt Flag 1=0>; /* Clear Interrupt Flag 1 */
      }
      else if (<Interrupt Flag 2>)
      {
          <Interrupt Flag 2=0>; /* Clear Interrupt Flag 2 */
      }
      else
      {
          /* Unhandled interrupts */
      }

#endif

}

/* Low-priority interrupt routine */
#if defined(__XC) || defined(HI_TECH_C)
void low_priority interrupt low_isr(void)
#elif defined (__18CXX)
#pragma code low_isr=0x18
#pragma interruptlow low_isr
void low_isr(void)
#else
#error "Invalid compiler selection for implemented ISR routines"
#endif
{

      /* This code stub shows general interrupt handling.  Note that these
      conditional statements are not handled within 3 seperate if blocks.
      Do not use a seperate if block for each interrupt flag to avoid run
      time errors. */

#if 0

      /* TODO Add Low Priority interrupt routine code here. */

      /* Determine which flag generated the interrupt */
      if(<Interrupt Flag 1>)
      {
          <Interrupt Flag 1=0>; /* Clear Interrupt Flag 1 */
      }
      else if (<Interrupt Flag 2>)
      {
          <Interrupt Flag 2=0>; /* Clear Interrupt Flag 2 */
      }
      else
      {
          /* Unhandled interrupts */
      }

#endif

}

Io ho capito i vari #if defined variano al variare del compilatore, ma cosa fa quando legge #if 0 e chiude con #endif.
Grazie ancora Ciao Ivo
Avatar utente
Foto Utentespivo
375 1 12
Frequentatore
Frequentatore
 
Messaggi: 179
Iscritto il: 19 dic 2012, 21:29

1
voti

[12] Re: PIC18F46K22 collegamento EUSART

Messaggioda Foto UtenteWALTERmwp » 20 apr 2015, 15:01

Se così hai risolto sei comunque stato bravo.
Impieghi delle funzioni che evidentemente gestiscono coerentemente quanto ci sta "sfuggendo".
Mi sarebbe comunque piaciuto capire e trovare la causa dell'inconveniente.

spivo ha scritto:(...) ma cosa fa quando legge #if 0 e chiude con #endif.
nulla, proprio perché il valore è 0.
Infatti, se venisse processato quanto contenuto, così come si presenta, in "pre-compilazione" verrebbero generati degli errori; prova a mettere il numero 1 al posto dello 0.
Gli errori, in tal caso, sarebbero dovuti al fatto che le righe delimitate dalle direttive #if/#endif non rispondono alla sintassi del "C" ma sono riportate, così come si vedono, per fornire una indicazione, una impostazione.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6833
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[13] Re: PIC18F46K22 collegamento EUSART

Messaggioda Foto Utentespivo » 20 apr 2015, 21:28

Grazie Foto UtenteWALTERmwp,
Credo che l'errore centrasse qualcosa con gli ingressi analogici che ho dovuto disattivare.
Ora almeno ho un programma funzionante del quale partire.
Grazie ancora Ciao
Avatar utente
Foto Utentespivo
375 1 12
Frequentatore
Frequentatore
 
Messaggi: 179
Iscritto il: 19 dic 2012, 21:29

0
voti

[14] Re: PIC18F46K22 collegamento EUSART

Messaggioda Foto UtenteWALTERmwp » 20 apr 2015, 21:32

spivo ha scritto:Grazie
prego.
spivo ha scritto:Ora almeno ho un programma funzionante del quale partire.
ottimo, buona continuazione.
Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 6833
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti