Delay in XC8 MplabX

11 Anni 4 Mesi fa #6 da StefA
Risposta da StefA al topic Delay in XC8 MplabX

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 4 Mesi fa #7 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Delay in XC8 MplabX
ammetto di aver avuto qualche problema quando ho provato ad usare il delay integrato in XC8.
Secondo la user guide devi includere l'header file definire la costante per la frequenza del cristallo e usare le relative macros.

...facendo in quel modo ho avuto errori, probabilmente quelli che hai tu.
Non ho investigato o cercato di far funzionare il tutto visto che ho scritto anche io una piccola libreria, che per tempi di 500ms e' piu' che idonea
...senza pretese di far funzionare un sistema GPS.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
11 Anni 4 Mesi fa #8 da Slaker
Risposta da Slaker al topic Delay in XC8 MplabX
Grazie a Stefa e Mauro per le gentili risposte, spiego i problemi che ho ancora ma quasi risolti perchè il programma viene compilato ma la delay che mi ha consigliato Stefa viene evidenziata di rosso. Forse un bug del programma che corregge gli errori(può essere?).
Ora posto il codice un breve codice cosi da capire:

#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 20000000

void main(void) {
PORTD = 0;
TRISD = 0b11111110;

while (1) {
PORTDbits.RD0 = 1;
Delay10KTCYx(2000); // la delay viene segnata come errore ma compila

PORTDbits.RD0 =0;
Delay10KTCYx(2000); //la delay viene segnata come errore ma la compila
}



Ho trovato anche quest'altro modo:


void main(void) {
PORTD = 0;
TRISD = 0b11111110;

while (1) {
PORTDbits.RD0 = 1;
_delay(L); //la delay viene eseguita ma non capisco L cosa indica e non

PORTDbits.RD0 =0;
_delay(3000L); //la delay viene eseguita ma non capisco L cosa indica
}
}

Voi che metodo usate su mplabx per la delay?
Allora utilizzando le delay descitte da Stefa come porro ricavare gli effettivi millisecondi ?

Spero che questo sia di aiuto anche ad altri del sito, cosi da aiutarci a vicenda.
Mi siete davvero di aiuto.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Slaker
  • Avatar di Slaker
  • New Member
  • New Member
Di più
11 Anni 4 Mesi fa - 11 Anni 4 Mesi fa #9 da StefA
Risposta da StefA al topic Delay in XC8 MplabX
cerchiamo di rispondere con ordine...

Forse un bug del programma che corregge gli errori(può essere?)

in altri casi è capitato, potrebbe anche darsi.

Nel primo esempio, se compila, dopo dovrebbe anche funzionare, non ti resta che collegare il led e vedere se va.

_delay(L); //la delay viene eseguita ma non capisco L cosa indica

dove hai letto questa funzione?

Voi che metodo usate su mplabx per la delay?

la libreria di Mauro che funziona per C18 e XC8.

Allora utilizzando le delay descitte da Stefa come porro ricavare gli effettivi millisecondi ?

A seconda del clock hai tempi diversi. Prendi la frequenza, calcoli il periodo facendo l'inverso, F=1/T... quindi per 20MHz hai T = 0.05 usec (microsecondi) = 50 nsec (nanosecondi),adesso va considerato che ogni ciclo macchina impiega 4 clock del quarzo, per cui hai 50 nsec * 4 = 20 nsec.
Se fai Delay1TCY(1) hai un ritardo di 20nsec (avendo un quarzo da 20MHZ)
Se fai Delay10TCY(1) hai un ritardo di 10 * 20nsec = 200nsec (avendo un quarzo da 20MHZ)
Se fai Delay10TCY(10) hai un ritardo di 10*10*20nsec = 2000nsec = 2usec (avendo un quarzo da 20MHZ)

Spero di essere stato chiaro e di non aver sbagliato qualche conto.. :P

Ste

..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Ultima Modifica 11 Anni 4 Mesi fa da StefA. Motivo: svista su un delay

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • StefA
  • Avatar di StefA
  • Moderator
  • Moderator
Di più
11 Anni 4 Mesi fa - 11 Anni 4 Mesi fa #10 da Slaker
Risposta da Slaker al topic Delay in XC8 MplabX
_delay(3000L); l'ho letto sul forum di microchip.

Il calcolo e semplice ed è tutto molto chiaro :) la formula me la ricorderò ora in avanti.

Ho risolto calcolando il ciclo con la formula e ho utilizzato questa sintassi:

Delay10KTCYx(Tempo calcolato);

Resta sottolineata di rosso però funziona , ho notato che anche in video su youtube si nota la delay sottolineata ma compilano caricano in codice e funziona tutto :) spero correggerano presto questo bug, e un ottimo ambiente di sviluppo MplabX e XC8 poi essendo ANSI C è una meraviglia.
Ultima Modifica 11 Anni 4 Mesi fa da Slaker.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Slaker
  • Avatar di Slaker
  • New Member
  • New Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login