AIUTO !!!!!!!

8 Anni 11 Mesi fa #1 da Novello
AIUTO !!!!!!! è stato creato da Novello
:S :S :S

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
  • New Member
  • New Member
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
Ringraziano per il messaggio: Novello

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

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
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 :( :( :( :(

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

  • Novello
  • New Member
  • New Member
Di più
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))

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

  • Novello
  • New Member
  • New Member
Di più
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
Ringraziano per il messaggio: Novello

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

  • LucaDB66
  • 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