Vai al contenuto
PLC Forum


PWM con 16F876A - usando il modulo integrato...


Simons

Messaggi consigliati

piccoli sprazzi di tempo che mi concedo per riorganizzare le forse e la mente

X simon :

in mplab hai la possibilita' di debuggare col simulatore che ti permette di contare il tempo tra un'istruzione e l'altra , di sommarle ect

Livio avra' ottenuto la sua formula dalla tua , godendo delle proprieta matematiche , o sbaglio? dry.gif

Link al commento
Condividi su altri siti


purtroppo ho provato a debuggare con mplab, ma per come è fatto il circuito, il debugger va in errore visto che ho resistenze di pullup e altri integrati collegati al pic...

ah mi era venuto un dubbio... non è che per caso c'è un limite per il quale non si può più settare il timer ad un certo valore? tipo un valore massimo o un valore minimo..

è un'ipotesi unsure.gif

Link al commento
Condividi su altri siti

Il software lo puoi simulare, per debug, senza aver collegato nessun HW. Se metti un break point proprio sull'istruzione che segue l'interrupt ti da il tempo macchina trascorso tra due interrupt.

Per debuggare In Circuit è necessario avere liberi i pins RB6 e RB7, gli stessi che tiservono per programmare In Circuit il pic.

Link al commento
Condividi su altri siti

Livio Orsini+12/10/2007, 15:54--> (Livio Orsini @ 12/10/2007, 15:54)

i pin rb6 e rb7 sono impegnati con resistenze di pullup e buffer esterni.

per la simulazione via software non ci avevo pensato.. pensavo fosse solo il debug hardware.

Ma una volta che con la simulazione ho visto che ci sono 8 microsecondi in più che me ne faccio?

non capisco come lo sfrutto a mio vantaggio blink.gif

Link al commento
Condividi su altri siti

Ma una volta che con la simulazione ho visto che ci sono 8 microsecondi in più che me ne faccio?

Cosa ne fai tu non lo so, io andrei a vedere dove perde gli 8us! Il simulatore ti permette di verificare, volendo, ogni singola istruzione. Tra l'altro in simulazione ti sganci dal quarzo, il computo del tempo è eseguito in base al numero di istruzioni eseguite moltiplicato per il clock teorico.

Comunque se ci sono 8 us in più, la ragione ci deve essere e le cause non sono poi molte:

- strumento di misura starato

- misura non eseguita correttamente

- programmazione del timer non corretta

- introduzione di un ritardo da parte del programma

Link al commento
Condividi su altri siti

Livio Orsini+12/10/2007, 18:27--> (Livio Orsini @ 12/10/2007, 18:27)
ciao Livio. Torno a rompere con questa storia del timer. Mi scuso ma ne ho fatta una causa di vita o di morte mad.gif Ho provato a fare il debug con MPLAB scrivendo un semplicissimo programma con solamente un interrupt: sorgente di asd.c:
#include "asd.h"
#int_TIMER0
TIMER0_isr()
{
set_timer0(81);
}



void main()
{


   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(global);
   set_timer0(81);
while(1)
{
#asm
NOP
#endasm
}
sorgente di asd.h
#include <16F876A.h>
#device adc=8
#use delay(clock=20000000)
#fuses NOWDT,HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

ho impostato un breakpoint all'istruzione set_timer0(81); e ho aperto lo stopwatch di MPLAB. Poi ho fatto play e il tempo risultate è..... 42.2 microsecondi!!!!!! contro i 35 dichiarati nell'.!!

non so più dove sbattere la testa wallbash.gif

sad.gif

Link al commento
Condividi su altri siti

Scusa la domanda banale, ma la misura con lo stopwatch l'hai fatta una sola volta (la prima), o la ripeti più volte di seguito? Perchè normalmete il primo interrupt è più lungo perchè ha dei tempi morti per l'inizializzazione, poi tutti i seguenti sono costanti ed hanno un tempo corretto.

Se il tuo extra tempo è alla prima interruzzione sembrerebbe normale, se invece alo hai anche alle successive allora non saprei proprio che dirti.

Link al commento
Condividi su altri siti

Livio Orsini+16/10/2007, 11:55--> (Livio Orsini @ 16/10/2007, 11:55)

la misura con lo stopwatch l'ho fatta dopo il primo interrupt certo.. Però pur ripetendo il conteggio dopo il primo, (riazzerando lo swatch ovviamente) torna sempre un tempo sballato. 42.2us...

non so più cosa inventarmi davvero...

Il sorgente che ti ho postato è corretto?

L'avresti fatto anche te in quel modo?

sad.gif grazie dell'aiuto comunque! smile.gif

Link al commento
Condividi su altri siti

Sul sorgente non ho individuato errori, ma io sono sempre un poco distratto.

Prova a fare più test senza azzerare lo stopwathc.

Poi prova a campbiare il timer usando timer1 e partendo da tempi più lunghi, dell'ordine dei 10ms, verificandone la correttezza, poi prova a ridurre il tempo a piccoli step verifandone sempre la rispondenza.

Sinceramente non saprei cos'altro consigliarti se non scrivere il tutto in asm.

Link al commento
Condividi su altri siti

  • 4 weeks later...
Livio Orsini+13/11/2007, 12:42--> (Livio Orsini @ 13/11/2007, 12:42)

purtroppo ho gettato la spugna almeno per ora..

ho altri tipi di problemi più importanti sad.gif .. e preferirei risolvere quelli prima sad.gif

Grazie dell'interessamento comunque smile.gif

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...