- Messaggi: 1010
- Ringraziamenti ricevuti 107
Problema tasto BT1 freedom 2
12 Anni 7 Mesi fa #6
da Berardi
Risposta da Berardi al topic Re: Problema tasto BT1 freedom 2
no di errori non ne da anche perchè ho modificato una libreria scaricata e l'ho adattata per la libreria di mauro.
void delay_ms (int value)
{
DelayMs (value);
}
dove DelayMs è un'altra procedura descritta nel file di delay che ho scaricato da un altro sito.
non so se mi sono spiegato bene
void delay_ms (int value)
{
DelayMs (value);
}
dove DelayMs è un'altra procedura descritta nel file di delay che ho scaricato da un altro sito.
non so se mi sono spiegato bene
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Berardi
- Autore della discussione
- Visitatori
12 Anni 7 Mesi fa #7
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
Risposta da Pinna al topic Re: Problema tasto BT1 freedom 2
tanto per capire meglio, includi anche LCD_44780.LIB? Se così fosse, come ti ho detto, all'interno di questa è presente il delay.h originale di Mauro. Inoltre hai verificato se effettivamente i ritardi avvengono? Io vorrei mettermi possibilmente nelle tue condizioni di lavoro, in modo da riprodurre fedelmente quello che ti succede...
Chi vola vale, chi vale vola, chi non vola è un vile
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Moderator
Riduci
Di più
12 Anni 7 Mesi fa #8
da Berardi
Risposta da Berardi al topic Re: Problema tasto BT1 freedom 2
si includo anche la libreria.ti posto il mio delay. si cmq i ritardi avvengono.
/*
* Delay functions
* See delay.h for details
*
* Make sure this code is compiled with full optimization!!!
*/
#include "delay.h"
void DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
#if XTAL_FREQ > 2MHZ
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
#endif
}
unsigned char delay_quartz_frequency_value = 20;
//************************************************************
// delay_ms function implementation
//************************************************************
void delay_ms (int value)
{
DelayMs (value);
}
//************************************************************
// setQuartz function implementation
//************************************************************
void setQuartz (unsigned char frequency) {
delay_quartz_frequency_value = frequency;
}
/*
* Delay functions
* See delay.h for details
*
* Make sure this code is compiled with full optimization!!!
*/
#include "delay.h"
void DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
#if XTAL_FREQ > 2MHZ
unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
#endif
}
unsigned char delay_quartz_frequency_value = 20;
//************************************************************
// delay_ms function implementation
//************************************************************
void delay_ms (int value)
{
DelayMs (value);
}
//************************************************************
// setQuartz function implementation
//************************************************************
void setQuartz (unsigned char frequency) {
delay_quartz_frequency_value = frequency;
}
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Berardi
- Autore della discussione
- Visitatori
12 Anni 7 Mesi fa #9
da Berardi
Risposta da Berardi al topic Re: Problema tasto BT1 freedom 2
questo è il mio delay.h
/*
* Delay functions for HI-TECH C on the PIC
*
* Functions available:
* DelayUs(x) Delay specified number of microseconds
* DelayMs(x) Delay specified number of milliseconds
*
* Note that there are range limits: x must not exceed 255 - for xtal
* frequencies > 12MHz the range for DelayUs is even smaller.
* To use DelayUs it is only necessary to include this file; to use
* DelayMs you must include delay.c in your project.
*
*/
/* Set the crystal frequency in the CPP predefined symbols list in
HPDPIC, or on the PICC commmand line, e.g.
picc -DXTAL_FREQ=4MHZ
or
picc -DXTAL_FREQ=100KHZ
Note that this is the crystal frequency, the CPU clock is
divided by 4.
* MAKE SURE this code is compiled with full optimization!!!
*/
#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif
#define MHZ *1000L /* number of kHz in a MHz */
#define KHZ *1 /* number of kHz in a kHz */
#if XTAL_FREQ >= 12MHZ
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif
extern void DelayMs(unsigned char);
/*
* Delay functions for HI-TECH C on the PIC
*
* Functions available:
* DelayUs(x) Delay specified number of microseconds
* DelayMs(x) Delay specified number of milliseconds
*
* Note that there are range limits: x must not exceed 255 - for xtal
* frequencies > 12MHz the range for DelayUs is even smaller.
* To use DelayUs it is only necessary to include this file; to use
* DelayMs you must include delay.c in your project.
*
*/
/* Set the crystal frequency in the CPP predefined symbols list in
HPDPIC, or on the PICC commmand line, e.g.
picc -DXTAL_FREQ=4MHZ
or
picc -DXTAL_FREQ=100KHZ
Note that this is the crystal frequency, the CPU clock is
divided by 4.
* MAKE SURE this code is compiled with full optimization!!!
*/
#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif
#define MHZ *1000L /* number of kHz in a MHz */
#define KHZ *1 /* number of kHz in a kHz */
#if XTAL_FREQ >= 12MHZ
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else
#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif
extern void DelayMs(unsigned char);
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Berardi
- Autore della discussione
- Visitatori
12 Anni 7 Mesi fa - 12 Anni 7 Mesi fa #10
da Pinna
Chi vola vale, chi vale vola, chi non vola è un vile
Risposta da Pinna al topic Re: Problema tasto BT1 freedom 2
Allora... ci ho lavorato sopra un'oretta e ti dico esattamente cosa ho fatto e come (credo) ho risolto. Parto dal presupposto che tu voglia premere SOLO il BT1 per leggere sul display il tempo previsto (se sbaglio correggimi):
per la gestione del ritardo ho utilizzato le librerie di Mauro ( per cui ho lavorato solo in millisecondi) e ho utilizzato la freedom II per testare il tuo programma. Una volta caricato l'hex, ho staccato il programmatore, ho spento e riacceso l'alimentatore e subito sono apparse le scritte "Tempo previsto" e " PIOGGIA" sulle due righe. Premendo BT1 si accendeva il led corrispondente a RB5 mentre premendo BT2, BT3 e BT4 si accendeva il led corrispondente a RB4. Isolando alcune parti del programma, ho capito che l'istruzione che manda tutto in pallino è ADCON1=0b00000000. Se tu, invece di usare AN2 e AN3, usi AN0 e AN1 come ingressi analogici, ed imposti ADCON1=0b00000101 vedrai, all'accensione, la lettura della temp. e pressione ed alla pressione di BT1 le scritte "Tempo previsto" e "PIOGGIA" (io leggo così perchè non ho i sensori, ho solo quello per la temperatura ma non lo ho abilitato). Gli altri pulsanti puliscono il display e poi si ritorna come all'accensione. Spero di essere stato chiaro, se hai dubbi chiedi pure. Domani sera dovrei essere un pò più libero ed, in caso di bisogno, potrò aiutarti meglio
per la gestione del ritardo ho utilizzato le librerie di Mauro ( per cui ho lavorato solo in millisecondi) e ho utilizzato la freedom II per testare il tuo programma. Una volta caricato l'hex, ho staccato il programmatore, ho spento e riacceso l'alimentatore e subito sono apparse le scritte "Tempo previsto" e " PIOGGIA" sulle due righe. Premendo BT1 si accendeva il led corrispondente a RB5 mentre premendo BT2, BT3 e BT4 si accendeva il led corrispondente a RB4. Isolando alcune parti del programma, ho capito che l'istruzione che manda tutto in pallino è ADCON1=0b00000000. Se tu, invece di usare AN2 e AN3, usi AN0 e AN1 come ingressi analogici, ed imposti ADCON1=0b00000101 vedrai, all'accensione, la lettura della temp. e pressione ed alla pressione di BT1 le scritte "Tempo previsto" e "PIOGGIA" (io leggo così perchè non ho i sensori, ho solo quello per la temperatura ma non lo ho abilitato). Gli altri pulsanti puliscono il display e poi si ritorna come all'accensione. Spero di essere stato chiaro, se hai dubbi chiedi pure. Domani sera dovrei essere un pò più libero ed, in caso di bisogno, potrò aiutarti meglio
Chi vola vale, chi vale vola, chi non vola è un vile
Ultima Modifica 12 Anni 7 Mesi fa da Pinna.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pinna
- Moderator
Riduci
Di più
- Messaggi: 1010
- Ringraziamenti ricevuti 107
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.