- Messaggi: 12
- Ringraziamenti ricevuti 0
AIUTO !!!!!!!
8 Anni 11 Mesi fa #1
da Novello
ciao a tutti
avrei bisogno un'aiuto
premesso che sono propio alle prime armi pertanto mi trovo in panne con un progettino che sto facendo per far pratica
vi spiego :
ho un LCD pilotato da un pic 18F67K90 dove ho gia tutto quello che mi serve per farlo scrivere preso da un prodotto che abbiamo in azienda
praticamente volevo farlo contare ( sempre per far pratica)
ho collegato due pulsanti alle porte RA1 RA2
un pin del pulsante lo collegato allo 0 volt e l'altro pin alla porta RA1
poi o messo una resistenza da 10K collegata da una parte al 3 volt e dall'altra parte alla pista che va dalla porta al pulsante
e questo e parte del programma
*/
#include "exram_Tastierina.h"
//#include "DefineType.h"
#include <string.h>
#include <memory.h>
#include <ctype.h>
//#include <icd3.h>
#include <boostc.h>
#include "..\equate.h"
//#include "exram_Tastierina.h"
/* define memory */
extern void Init_display_LCDGRAPH(void);
extern void sequential_read(void);
extern void st_datieep(void);
extern void Set_Contrast_Control_Register(unsigned char mod);
extern void VisLogo(void);
extern void LCDClear(void);
extern void ConvertValue(long val,uchar ndig,uchar posvir,char *Buf, uchar Segno, uchar type, uchar posX, uchar posY,uchar Reverse);
extern void ConvertDigit(char val,uchar posX, uchar posY,uchar Reverse);
extern void CorniceBase(void);
extern void CorniceSingolaBase(void);
extern void ClearRiga(uchar riga1,uchar riga2,uchar riga3,uchar riga4,uchar riga5,uchar riga6,uchar riga7);
extern void LCDText(char *str, char type, uchar posX, uchar posY,uchar Reverse);
//Set PIC18 configuration word
//setup chip
// PIC 18F67K90
#pragma DATA _CONFIG1H, _FOSC_HS2_1H & _PLLCFG_OFF_1H //setup external oscillator HS (high speed osc) HSPLL (high speed pll)
#pragma DATA _CONFIG1L, _RETEN_ON_1L & _XINST_OFF_1L & _SOSCSEL_DIG_1L
#pragma DATA _CONFIG2L, _PWRTEN_OFF_2L
#pragma DATA _CONFIG2H, _WDTEN_ON_2H & _WDTPS_128_2H
#pragma DATA _CONFIG3H, _MCLRE_ON_3H
#pragma DATA _CONFIG4L, _STVREN_ON_4L
#pragma DATA _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L
#pragma DATA _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
#pragma DATA _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L
#pragma DATA _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
#pragma DATA _CONFIG7L, _EBRT0_OFF_7L
#pragma DATA _CONFIG7H, _EBRTB_OFF_7H
#pragma CLOCK_FREQ 20000000 //Set clock frequency 20MHz = 20 000 000 Hz
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main (void){
// porta A
// 76543210
trisa = 0b11101111;
trisa = 0b00000000;
// porta B
// 76543210
// trisb = 0b00100000; //
trisb = 0b00000000; //
portb = 0b00000000; // port B
// porta C
// 76543210
trisc = 0b11000000; //
portc = 0b11011000; //
// porta D
// 76543210
trisd = 0b00000000; //
portd = 0b00000000; //
trise = 0b00000000; //
porte = 0b00100000; //
trisf = 0b00000000; //
portf = 0b00000000; //
Init_display_LCDGRAPH();
int marce;
marce = 0;
ConvertValue(marce ,3,0,&StringLCD[0],0,FONT8,3,12,0);
while (1) {
if (MARCIA_SU==0){
delay_ms(100);
if(MARCIA_SU==0) {
ConvertValue(marce++ ,4,0,&StringLCD[0],0,FONT8,3,12,0);
}
}
}
}
il probelma e che se metto MARCIA_SU==1 il display comincia a contare senza mai fermarsi
se lo mezzo a 0 anche se premo il pulsante non incrementa
qualcuno può spiegarmi dove sbaglio ho cosa non ho fatto
grazie
AIUTO !!!!!!! è stato creato da Novello
ciao a tutti
avrei bisogno un'aiuto
premesso che sono propio alle prime armi pertanto mi trovo in panne con un progettino che sto facendo per far pratica
vi spiego :
ho un LCD pilotato da un pic 18F67K90 dove ho gia tutto quello che mi serve per farlo scrivere preso da un prodotto che abbiamo in azienda
praticamente volevo farlo contare ( sempre per far pratica)
ho collegato due pulsanti alle porte RA1 RA2
un pin del pulsante lo collegato allo 0 volt e l'altro pin alla porta RA1
poi o messo una resistenza da 10K collegata da una parte al 3 volt e dall'altra parte alla pista che va dalla porta al pulsante
e questo e parte del programma
*/
#include "exram_Tastierina.h"
//#include "DefineType.h"
#include <string.h>
#include <memory.h>
#include <ctype.h>
//#include <icd3.h>
#include <boostc.h>
#include "..\equate.h"
//#include "exram_Tastierina.h"
/* define memory */
extern void Init_display_LCDGRAPH(void);
extern void sequential_read(void);
extern void st_datieep(void);
extern void Set_Contrast_Control_Register(unsigned char mod);
extern void VisLogo(void);
extern void LCDClear(void);
extern void ConvertValue(long val,uchar ndig,uchar posvir,char *Buf, uchar Segno, uchar type, uchar posX, uchar posY,uchar Reverse);
extern void ConvertDigit(char val,uchar posX, uchar posY,uchar Reverse);
extern void CorniceBase(void);
extern void CorniceSingolaBase(void);
extern void ClearRiga(uchar riga1,uchar riga2,uchar riga3,uchar riga4,uchar riga5,uchar riga6,uchar riga7);
extern void LCDText(char *str, char type, uchar posX, uchar posY,uchar Reverse);
//Set PIC18 configuration word
//setup chip
// PIC 18F67K90
#pragma DATA _CONFIG1H, _FOSC_HS2_1H & _PLLCFG_OFF_1H //setup external oscillator HS (high speed osc) HSPLL (high speed pll)
#pragma DATA _CONFIG1L, _RETEN_ON_1L & _XINST_OFF_1L & _SOSCSEL_DIG_1L
#pragma DATA _CONFIG2L, _PWRTEN_OFF_2L
#pragma DATA _CONFIG2H, _WDTEN_ON_2H & _WDTPS_128_2H
#pragma DATA _CONFIG3H, _MCLRE_ON_3H
#pragma DATA _CONFIG4L, _STVREN_ON_4L
#pragma DATA _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L
#pragma DATA _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
#pragma DATA _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L
#pragma DATA _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
#pragma DATA _CONFIG7L, _EBRT0_OFF_7L
#pragma DATA _CONFIG7H, _EBRTB_OFF_7H
#pragma CLOCK_FREQ 20000000 //Set clock frequency 20MHz = 20 000 000 Hz
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main (void){
// porta A
// 76543210
trisa = 0b11101111;
trisa = 0b00000000;
// porta B
// 76543210
// trisb = 0b00100000; //
trisb = 0b00000000; //
portb = 0b00000000; // port B
// porta C
// 76543210
trisc = 0b11000000; //
portc = 0b11011000; //
// porta D
// 76543210
trisd = 0b00000000; //
portd = 0b00000000; //
trise = 0b00000000; //
porte = 0b00100000; //
trisf = 0b00000000; //
portf = 0b00000000; //
Init_display_LCDGRAPH();
int marce;
marce = 0;
ConvertValue(marce ,3,0,&StringLCD[0],0,FONT8,3,12,0);
while (1) {
if (MARCIA_SU==0){
delay_ms(100);
if(MARCIA_SU==0) {
ConvertValue(marce++ ,4,0,&StringLCD[0],0,FONT8,3,12,0);
}
}
}
}
il probelma e che se metto MARCIA_SU==1 il display comincia a contare senza mai fermarsi
se lo mezzo a 0 anche se premo il pulsante non incrementa
qualcuno può spiegarmi dove sbaglio ho cosa non ho fatto
grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Novello
- Autore della discussione
- New Member
Riduci
Di più
8 Anni 11 Mesi fa #2
da alfa75
Risposta da alfa75 al topic AIUTO !!!!!!!
Ciao Novello
da quello che dici se MARCIA_SU == 1 conta a tutto spiano, il che è corretto perchè se al pin di ingresso hai messo una resistenza di pull-up ad ogni ciclo while il confronto sarà vero quindi andrà ad incrementare la variabile , ma se mettendo 0 non funziona ricontrolla bene i collegamenti del tasto
è un altra cosa che non vedo nel codice è la #define di MARCIA_SU
Saluti
Andrea
da quello che dici se MARCIA_SU == 1 conta a tutto spiano, il che è corretto perchè se al pin di ingresso hai messo una resistenza di pull-up ad ogni ciclo while il confronto sarà vero quindi andrà ad incrementare la variabile , ma se mettendo 0 non funziona ricontrolla bene i collegamenti del tasto
è un altra cosa che non vedo nel codice è la #define di MARCIA_SU
Saluti
Andrea
Ringraziano per il messaggio: Novello
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alfa75
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
8 Anni 11 Mesi fa #3
da Novello
Risposta da Novello al topic AIUTO !!!!!!!
grazie Andrea
ma i tasti li ricontrollati , anche col tester a tasto rilasciato mi da 3 volt
a tasto premuto 0 volt
il #define c'è lo in un'altro file e e messo cosi :
#define MARCIA_SU RA1
non so se e giusto ma lo provato in tanti modi tra cui
#define MARCIA_SU ( porta & 0x02)
#define MARCIA_SU (! ( porta & 0x02))
pero il risultato e lo stesso
abbiate pazienza ma sono alle prime armi
ma i tasti li ricontrollati , anche col tester a tasto rilasciato mi da 3 volt
a tasto premuto 0 volt
il #define c'è lo in un'altro file e e messo cosi :
#define MARCIA_SU RA1
non so se e giusto ma lo provato in tanti modi tra cui
#define MARCIA_SU ( porta & 0x02)
#define MARCIA_SU (! ( porta & 0x02))
pero il risultato e lo stesso
abbiate pazienza ma sono alle prime armi
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Novello
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 12
- Ringraziamenti ricevuti 0
8 Anni 11 Mesi fa #4
da Novello
Risposta da Novello al topic AIUTO !!!!!!!
rettifico
#define MARCIA_SU ( porta & 0x01)
#define MARCIA_SU (! ( porta & 0x01))
#define MARCIA_SU ( porta & 0x01)
#define MARCIA_SU (! ( porta & 0x01))
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Novello
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 12
- Ringraziamenti ricevuti 0
8 Anni 11 Mesi fa #5
da LucaDB66
Risposta da LucaDB66 al topic AIUTO !!!!!!!
Ciao Novello
A mia impressione il problema sta nel fatto che il tuo conteggio avanza con lo stato del pulsante e non sulla transizione
Mi spiego meglio
Devi implementare una gestione a stati di modo che solo quando l' ingresso del pulsante passa ad esempio da 0 a 1
il conteggio venga incrementato mentre se l' ingresso pulsante resta a 0 ad 1 in modo fisso non succeda niente.
Ti servirà quindi una variabile con lo stato precedente del tasto da confrontare con lo stato attuale , se le due
differiscono e lo stato attuale è ad 1 , vuol dire che il pulsante ha cambiato stato e c'è stata una transizione da da 0 a 1 . Solo a quel punto vai ad incrementare la variabile del conteggio .
Successivamente dovrai implementare anche un pezzo di codice per gestire l' antirimbalzo del tasto , nel senso che un normale pulsante spesso genera più transizione prima di assumere uno stato fisso .
Questo crea il problema che il conteggio a volte ti avanzerà più di una unità al colpo .
Per evitare questo problema usi sempre la tecnica che ti ho descritto di cercare la transizione o cambio di stato del pulsante ma la prendi per buona solo se campionando n° volte a distanza di qualche decina di millisecondi trovi lo stato del pulsante stabile .
Spero di esserti stato di aiuto
Ciao
A mia impressione il problema sta nel fatto che il tuo conteggio avanza con lo stato del pulsante e non sulla transizione
Mi spiego meglio
Devi implementare una gestione a stati di modo che solo quando l' ingresso del pulsante passa ad esempio da 0 a 1
il conteggio venga incrementato mentre se l' ingresso pulsante resta a 0 ad 1 in modo fisso non succeda niente.
Ti servirà quindi una variabile con lo stato precedente del tasto da confrontare con lo stato attuale , se le due
differiscono e lo stato attuale è ad 1 , vuol dire che il pulsante ha cambiato stato e c'è stata una transizione da da 0 a 1 . Solo a quel punto vai ad incrementare la variabile del conteggio .
Successivamente dovrai implementare anche un pezzo di codice per gestire l' antirimbalzo del tasto , nel senso che un normale pulsante spesso genera più transizione prima di assumere uno stato fisso .
Questo crea il problema che il conteggio a volte ti avanzerà più di una unità al colpo .
Per evitare questo problema usi sempre la tecnica che ti ho descritto di cercare la transizione o cambio di stato del pulsante ma la prendi per buona solo se campionando n° volte a distanza di qualche decina di millisecondi trovi lo stato del pulsante stabile .
Spero di esserti stato di aiuto
Ciao
Ringraziano per il messaggio: Novello
Si prega Accedi o Crea un account a partecipare alla conversazione.
- LucaDB66
- New Member
Riduci
Di più
- Messaggi: 3
- 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.