Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Commenti che generano errori

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Commenti che generano errori

Messaggioda Foto Utenteemacar » 11 ago 2014, 11:11

Buongiorno,
sono sicuro che la mia domanda sia stupidissima ma vorrei togliermi il dubbio. Sto facendo un po' di esercizio e vorrei vedere un led aumentare e diminuire la luminosità tramite PWM. Sto utilizzando il Pierin.
Ho scritto il codice (che dovrebbe funzionare, devo solo caricarlo sul Pierin) ma mi succede una cosa strana. Il codice così come lo posto funziona ma, se aggiungo dopo la parentesi graffa finale (quella di chiusura del main) il seguente commento:
Codice: Seleziona tutto
// fine main

mi restituisce errore di compilazione. Levandolo funziona
Codice: Seleziona tutto
// File di definizione dei registri del micro.
#include "p18f47j53.h"

// File di configurazione dei fuses
#include "configurazione.h"   

// Mappatura delle interrupt
#include "mappa_int.h"

// Header del main
#include "main.h"


//------------------------------------------------------------------------------
// Variabili globali
//------------------------------------------------------------------------------
#pragma udata

//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt ad ALTA priorità
//------------------------------------------------------------------------------
#pragma code
#pragma interrupt highPriorityInterrupt
void highPriorityInterrupt()
{
  // Verifica quale flag ha causato l' interrupt
  // Esegui la parte di codice di servizio dell' interrupt
  // Azzera il flag che ha causato l' interrupt
  // ...
}

//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt a BASSA priorità
//------------------------------------------------------------------------------
#pragma interruptlow lowPriorityInterrupt
void lowPriorityInterrupt()
{
    
}

//------------------------------------------------------------------------------
// Prototipi delle funzioni
//------------------------------------------------------------------------------
#pragma code


//------------------------------------------------------------------------------
// Funzioni
//------------------------------------------------------------------------------
#pragma code


//------------------------------------------------------------------------------
// MAIN FUNCTION
//------------------------------------------------------------------------------
void main(void)
{
   // Variabile usata per creare un conteggio fittizio di pausa
   int i;
   // Periodo del segnale PWM
   unsigned char period;
   // Duty Cycle
   int duty_cycle = 0;
 
  // -------- Inizializzazione delle periferiche --------
   // Imposto PORTB tutti ingressi ed RB1 come uscita
   LATB = 0x00;
   TRISB = 0b00000000;


  // -------- Attivazione delle periferiche --------
 
  // Imposto una frequenza di 20KHz
   period = 249;
 
  // PR2 (2 perché relativo al timer 2) viene settato col periodo
  PR2 = period;
 
  // Setto il duty cicle
   CCPR4L = duty_cycle;
   
   //Modulo CCP4 settato in modalita' PWM con ultimi due bit meno significativi a 0
   CCP4CON = 0b00001100;
   
   // Attivszione timer2 con pre e post scaler a 1   
   T2CON = 0b00000100;

   
   
  // -------- Ciclo infinito di funzionamento --------
  for(;;)
  {
      // Aggiorno il duty cicle
      CCPR4L = duty_cycle;
      // Incremento il dutycycle
      duty_cycle++;
      // Controllo che non sia maggiore di 2^10
      if (duty_cycle > 1023) {
         duty_cycle =0;
      }
      // Pausa
      for (i=0; i<1000; i++) {
      }
  }// Fine for
}


P.S. visto che ci siamo c'è un modo per utilizzare in uscita il LED su port D, invece di utilizzare l'uscita esterna su port B?
Grazie in anticipo,
Emanuele
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[2] Re: Commenti che generano errori

Messaggioda Foto UtenteWALTERmwp » 11 ago 2014, 12:43

Ciao Foto Utenteemacar, ho provato ad eseguire la compilazione (e link) ma non restituisce nessun errore.
Ho "preso" il tuo codice e, semplicemente, inserito come file "main.c" in una directory ottenuta duplicando quella di "base_pierin" ( ... tanto per avere un riferimento comune ... ) aggiungendovi il commento finale dopo la chiusura dell'ultima parentesi.
Potrebbero esserci dei caratteri che non "vedi", come hai "editato" il tuo sorgente ?
(ambiente di riferimento: MPLAB IDE v8.92)

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

0
voti

[3] Re: Commenti che generano errori

Messaggioda Foto Utenteemacar » 11 ago 2014, 14:12

Ciao WALTERmwp,
ho dimenticato di evidenziare che anche io ho usato il file "base_pierin" di cui ho modificato solo il main.c ed anche io uso MPLAB IDE v8.92.
Altre volte ho fatto il copia-incolla di parti di codice in alto ma, dopo la tua risposta, ho proprio scritto da tastiera il commento e mi restituisce l'errore seguente:
Codice: Seleziona tutto
----------------------------------------------------------------------
Debug build of project `D:\Emanuele\ProgettiPIC\PWM\PWM.mcp' started.
Language tool versions: mpasmwin.exe v5.54, mplink.exe v5.00, mcc18.exe v3.47, mplib.exe v5.00
Preprocessor symbol `__DEBUG' is defined.
Mon Aug 11 14:11:03 2014
----------------------------------------------------------------------
Make: The target "D:\Emanuele\ProgettiPIC\PWM\output\main.o" is out of date.
Executing: "C:\Program Files (x86)\Microchip\mplabc18\v3.47\bin\mcc18.exe" -p=18F47J53 "main.c" -fo=".\output\main.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
D:\Emanuele\ProgettiPIC\PWM\main.c:105:Error: syntax error
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `D:\Emanuele\ProgettiPIC\PWM\PWM.mcp' failed.
Language tool versions: mpasmwin.exe v5.54, mplink.exe v5.00, mcc18.exe v3.47, mplib.exe v5.00
Preprocessor symbol `__DEBUG' is defined.
Mon Aug 11 14:11:04 2014
----------------------------------------------------------------------
BUILD FAILED

Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[4] Re: Commenti che generano errori

Messaggioda Foto UtenteWALTERmwp » 11 ago 2014, 14:41

Facciamo in modo da introdurre meno "variabili" possibili ed avere più riferimenti comuni utilizzando le risorse note e disponibili.
Partendo dal progetto "base_pierin" (del quale devi disporre come immacolato), come suggerisce Foto UtenteTardoFreak nel suo articolo, salvane una copia come nuovo progetto.
Poi copi il codice sorgente che hai inserito nel Post [1] (perché è esattamente quello che in modo pedestre ho preso io) e lo sovrascrivi a quello del "main.c" presente nella directory del nuovo progetto.
Fatto ciò compili; se non ci sono errori aggiungi, in fondo, il commento che hai segnalato e poi compili di nuovo.
"Vediamo" cosa accade.

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

0
voti

[5] Re: Commenti che generano errori

Messaggioda Foto Utenteemacar » 11 ago 2014, 14:58

Lo so che mi starai prendendo per pazzo però anche se partivo dal file base ho rifatto esattamente ciò che mi hai chiesto ho compilato e, senza commento, funzionava. Aggiungo il commento, scritto a mano e non funziona..
Non è importantissimo perché per compilarlo lo tolgo e risolvo il problema; vorrei capirlo più che altro per curiosità. Non vorrei che ci sia qualche errore nella gestione della PWM di cui non mi sono accorto.
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[6] Re: Commenti che generano errori

Messaggioda Foto UtenteWALTERmwp » 11 ago 2014, 16:07

Non mi permetterei, se non funziona un motivo c'è.
Parto anche dal presupposto che tu non abbia modificato impostazioni, nell'IDE, che indirettamente (?) potrebbero condizionare compiler e linker.
Se hai fatto quello che ti ho suggerito nel Post [4] ed il risultato è ancora negativo pubblica le ultime righe del codice (con il commento) così come sono.

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

0
voti

[7] Re: Commenti che generano errori

Messaggioda Foto Utenteemacar » 11 ago 2014, 20:35

Questo non funziona
Codice: Seleziona tutto
// File di definizione dei registri del micro.
#include "p18f47j53.h"

// File di configurazione dei fuses
#include "configurazione.h"   

// Mappatura delle interrupt
#include "mappa_int.h"

// Header del main
#include "main.h"


//------------------------------------------------------------------------------
// Variabili globali
//------------------------------------------------------------------------------
#pragma udata

//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt ad ALTA priorità
//------------------------------------------------------------------------------
#pragma code
#pragma interrupt highPriorityInterrupt
void highPriorityInterrupt()
{
  // Verifica quale flag ha causato l' interrupt
  // Esegui la parte di codice di servizio dell' interrupt
  // Azzera il flag che ha causato l' interrupt
  // ...
}

//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt a BASSA priorità
//------------------------------------------------------------------------------
#pragma interruptlow lowPriorityInterrupt
void lowPriorityInterrupt()
{
     
}

//------------------------------------------------------------------------------
// Prototipi delle funzioni
//------------------------------------------------------------------------------
#pragma code


//------------------------------------------------------------------------------
// Funzioni
//------------------------------------------------------------------------------
#pragma code


//------------------------------------------------------------------------------
// MAIN FUNCTION
//------------------------------------------------------------------------------
void main(void)
{
   // Variabile usata per creare un conteggio fittizio di pausa
   int i;
   // Periodo del segnale PWM
   unsigned char period;
   // Duty Cycle
   int duty_cycle = 0;
 
  // -------- Inizializzazione delle periferiche --------
   // Imposto PORTB tutti ingressi ed RB1 come uscita
   LATB = 0x00;
   TRISB = 0b00000000;


  // -------- Attivazione delle periferiche --------
 
  // Imposto una frequenza di 20KHz
   period = 249;
 
  // PR2 (2 perché relativo al timer 2) viene settato col periodo
  PR2 = period;
 
  // Setto il duty cicle
   CCPR4L = duty_cycle;
   
   //Modulo CCP4 settato in modalita' PWM con ultimi due bit meno significativi a 0
   CCP4CON = 0b00001100;
   
   // Attivszione timer2 con pre e post scaler a 1   
   T2CON = 0b00000100;

   
   
  // -------- Ciclo infinito di funzionamento --------
  for(;;)
  {
      // Aggiorno il duty cicle
      CCPR4L = duty_cycle;
      // Incremento il dutycycle
      duty_cycle++;
      // Controllo che non sia maggiore di 2^10
      if (duty_cycle > 1023) {
         duty_cycle =0;
      }
      // Pausa
      for (i=0; i<1000; i++) {
      }
  }// Fine for
} // Fine main

Questo funziona
Codice: Seleziona tutto
// File di definizione dei registri del micro.
#include "p18f47j53.h"

// File di configurazione dei fuses
#include "configurazione.h"   

// Mappatura delle interrupt
#include "mappa_int.h"

// Header del main
#include "main.h"


//------------------------------------------------------------------------------
// Variabili globali
//------------------------------------------------------------------------------
#pragma udata

//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt ad ALTA priorità
//------------------------------------------------------------------------------
#pragma code
#pragma interrupt highPriorityInterrupt
void highPriorityInterrupt()
{
  // Verifica quale flag ha causato l' interrupt
  // Esegui la parte di codice di servizio dell' interrupt
  // Azzera il flag che ha causato l' interrupt
  // ...
}

//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt a BASSA priorità
//------------------------------------------------------------------------------
#pragma interruptlow lowPriorityInterrupt
void lowPriorityInterrupt()
{
     
}

//------------------------------------------------------------------------------
// Prototipi delle funzioni
//------------------------------------------------------------------------------
#pragma code


//------------------------------------------------------------------------------
// Funzioni
//------------------------------------------------------------------------------
#pragma code


//------------------------------------------------------------------------------
// MAIN FUNCTION
//------------------------------------------------------------------------------
void main(void)
{
   // Variabile usata per creare un conteggio fittizio di pausa
   int i;
   // Periodo del segnale PWM
   unsigned char period;
   // Duty Cycle
   int duty_cycle = 0;
 
  // -------- Inizializzazione delle periferiche --------
   // Imposto PORTB tutti ingressi ed RB1 come uscita
   LATB = 0x00;
   TRISB = 0b00000000;


  // -------- Attivazione delle periferiche --------
 
  // Imposto una frequenza di 20KHz
   period = 249;
 
  // PR2 (2 perché relativo al timer 2) viene settato col periodo
  PR2 = period;
 
  // Setto il duty cicle
   CCPR4L = duty_cycle;
   
   //Modulo CCP4 settato in modalita' PWM con ultimi due bit meno significativi a 0
   CCP4CON = 0b00001100;
   
   // Attivszione timer2 con pre e post scaler a 1   
   T2CON = 0b00000100;

   
   
  // -------- Ciclo infinito di funzionamento --------
  for(;;)
  {
      // Aggiorno il duty cicle
      CCPR4L = duty_cycle;
      // Incremento il dutycycle
      duty_cycle++;
      // Controllo che non sia maggiore di 2^10
      if (duty_cycle > 1023) {
         duty_cycle =0;
      }
      // Pausa
      for (i=0; i<1000; i++) {
      }
  }// Fine for
}
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[8] Re: Commenti che generano errori

Messaggioda Foto UtenteWALTERmwp » 11 ago 2014, 22:11

Ho fatto alcune prove prendendo il codice sorgente direttamente dal tuo ultimo Post ed ho ottenuto il tuo stesso risultato.
La prima cosa che mi viene in mente è che ci possa essere un (o più) carattere non visualizzabile che l'interprete non può gestire, infatti l'errore è proprio sull'ultima riga.
Facciamo un'altra prova: potresti allegare direttamente, nel prossimo Post, i due files "main.c", così come sono e vengono presi in carico dal compilatore ?

Saluti

p.s.
non è necessario; ho verificato che effettivamente l'inserimento di un commento sull'ultima riga è, apparentemente, causa d'errore si sintassi per il compilatore.
Se si esclude un "baco" a questo livello si può indagare per cercare la causa.
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8985
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[9] Re: Commenti che generano errori

Messaggioda Foto Utenteemacar » 12 ago 2014, 7:42

Si infatti ho aperto il file direttamente con il blocco note per vedere se ci fossero caratteri particolari ma niente..
Mi consola che non sia successo solo a me almeno.
Grazie mille per la pazienza.
P.S. il codice per la PWM è corretto vero? Considerando che il PIC in questione non contempla la PWM su portD non c'è modo per avere l'uscita li giusto?
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[10] Re: Commenti che generano errori

Messaggioda Foto Utenteemacar » 12 ago 2014, 9:16

Approfitto per farti una domanda Foto UtenteWALTERmwp. Ho provato il codice sul Pierin ed il LED non da segni di vita. In effetti non ho ben capito come fa il microcontrollore a capire quale pin di uscita utilizzare per il PWM. Io ho scritto che PORTB venga utilizzata come uscita ma poi come gli dico in quale pin darmi il segnale PWM? Ho un modo per fare qualche verifica col debugger software? Visualizzare PORT B non dovrebbe avere senso visto che l'uscita non è in termini di bit 0 e 1 ma è in termini di frazioni crescenti a step di 1024.
Emanuele
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti