- Messaggi: 1222
- Ringraziamenti ricevuti 104
Delay in XC8 MplabX
11 Anni 4 Mesi fa #6
da StefA
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.
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
- Moderator
Riduci
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
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.
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.
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
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 12
- Ringraziamenti ricevuti 2
11 Anni 4 Mesi fa - 11 Anni 4 Mesi fa #9
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic Delay in XC8 MplabX
cerchiamo di rispondere con ordine...
Nel primo esempio, se compila, dopo dovrebbe anche funzionare, non ti resta che collegare il led e vedere se va.
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..
Ste
in altri casi è capitato, potrebbe anche darsi.Forse un bug del programma che corregge gli errori(può essere?)
Nel primo esempio, se compila, dopo dovrebbe anche funzionare, non ti resta che collegare il led e vedere se va.
dove hai letto questa funzione?_delay(L); //la delay viene eseguita ma non capisco L cosa indica
la libreria di Mauro che funziona per C18 e XC8.Voi che metodo usate su mplabx per la delay?
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.Allora utilizzando le delay descitte da Stefa come porro ricavare gli effettivi millisecondi ?
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..
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
- Moderator
Riduci
Di più
- Messaggi: 1222
- Ringraziamenti ricevuti 104
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.
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
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 12
- Ringraziamenti ricevuti 2
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024