Il ciclo rimane dentro la funzione interrupt

Sto sviluppando un programma da inserire nel microcontrollore ATMega 2560, in poche parole si tratta di comandare un motore passo passo con una pwm generata dal micro e allo stesso tempo devo comunicare tramite una porta seriale i vari comandi del motore. Ho creato la PWM con il timer0 usando anche l'interrupt. Per crearla ho agito direttamente sui registri del micro. Una volta aggiunto questo programma ad un altro programma con all'interno la comunicazione seriale, quest'ultima però ha smesso di funzionare. Funziona tutto tranne la seriale. Ho fatto un po' di test e ho notato che non esce mai dalla funzione isr sia della pwm che della seriale. Ho provato anche a disabilitare gli interrupt ma rimane dentro ancora. Potrebbe esserci un conflitto con le allocazioni di memoria?
Ho provato a commentare i vari settaggi sui registri della pwm (praticamente ho tolto la pwm) e la seriale riprende a funzionare. Con la seriale mando blocchi da 4 byte (uno per volta) e non mi legge neanche il primo. Per la seriale ho usato le funzioni di default di arduino (serial.h).

'''
if(Serial.available( )>=nBytes)
{
if(Serial.read( )==HEADER) // Header is detected
{
in1=Serial.read( ); // Regiter value is read
in2=Serial.read( ); // MSB value is stored
in3=Serial.read( ); // LSB value is stored

        val=in2*256+in3;
        
        switch(in1)
        {
            case USBIN: if(!UI.page){   sendUSB(DEVRDY,0);      USBmode( ); } else  sendUSB(DEVBSY,val);    break;
            default:    sendUSB(DEVBSY,val);                break;
        }
    }  
}

'''
questo è dove io leggo il dato, nBytes vale 4.

Timer0.setWGM(MODE02);
  Timer0.setCOM(COMNPO,COMTOG);
  Timer0.setDIV(CLK3);      //ero CLK3
  Timer0.setOCR(200,0);
  Timer0.enableINT(INTOCB);

 }
 
ISR (TIMER0_COMPB_vect){
  passo = passo + 1;
  if (passo > 200){
      Timer0.setDIV(CLKOFF);
  }
}

qui invece sono le varie funzioni per la pwm, le prime servono per settare i registri del micro. quando tolgo questa parte di programma la seriale funziona, quando l'ha aggiunto la seriale smette di funzionare.

:warning:
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato.
Grazie.

A quanto detto da UKHeliBob aggiungo ...

... come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Detto questo, come richiesto al punto 7 del succitato regolamento, per favore edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione e sistemato il codice come indicato, nel rispetto del regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.