- Messaggi: 353
- Ringraziamenti ricevuti 8
Tastiera a matrice
- elpablito
- Platino Utente
-
Less
Di più
10 Anni 1 Mese fa #11
da elpablito
Risposta da elpablito al topic Tastiera a matrice
In quella settimana che ho giocato con il pic o letto quella differenza che però non ricordo, ma credo che nel caso specifico poco gli importi, correggimi se sbaglio, a lui serve leggere la porta per di più dopo un ritardo di anti rimbalzo, quindi dopo un ulteriore serie di cicli della CPU.
Vediamo di fargli scrivere la routine
Paolo
Vediamo di fargli scrivere la routine
Paolo
Si prega Accesso o Crea un account a partecipare alla conversazione.
- elpablito
- Platino Utente
-
Less
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
10 Anni 1 Mese fa #12
da elpablito
Risposta da elpablito al topic Tastiera a matrice
questa sera faccio c.... non importa
TRISB= 0b11110000; // Imposto PORTB RB0..RB3 Colonne -> in uscta
Correggetemi se sbaglio, ci sarà un
PortB = 0b11110000; // colonne a zero
delay(1ms)
Pippo = PortB // salvi la porta
TRISB = 0b00001111; //inverti entrate e uscite
PortB = Pippo
Delay (10us)
Poldo = PortB
i due zeri di pippo e poldo ti danno le coordinate x e y
Scrivi correttamente le istruzioni e vedrai che te la cavi
Domani ti cerco una routin completa e te la mando se vuoi ma non per il PiC.
Comunque c'e li nascosto Alfa75 digli che metta in bella il tutto.
Paolo
TRISB= 0b11110000; // Imposto PORTB RB0..RB3 Colonne -> in uscta
Correggetemi se sbaglio, ci sarà un
PortB = 0b11110000; // colonne a zero
delay(1ms)
Pippo = PortB // salvi la porta
TRISB = 0b00001111; //inverti entrate e uscite
PortB = Pippo
Delay (10us)
Poldo = PortB
i due zeri di pippo e poldo ti danno le coordinate x e y
Scrivi correttamente le istruzioni e vedrai che te la cavi
Domani ti cerco una routin completa e te la mando se vuoi ma non per il PiC.
Comunque c'e li nascosto Alfa75 digli che metta in bella il tutto.
Paolo
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Guido
- Autore della discussione
- Platino Utente
-
Less
Di più
- Messaggi: 583
- Ringraziamenti ricevuti 1
10 Anni 1 Mese fa #13
da Guido
Risposta da Guido al topic Tastiera a matrice
Ciao, ho provato a scrivere un codice, purtroppo non posso provarlo dopo il default, mplab mi segnala due errori,per cortesia come posso ovviare?
Tastierino a matrice.c:82: error: (981) pointer required
Tastierino a matrice.c:82: error: (981) pointer required
(908) exit status = 1
make[2]: *** [build/default/production/Tastierino a matrice.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
Code:
#include <xc.h>
#include "PIC18F4550_config.h"
#define LCD_DEFAULT
#include "LCD_44780.h"
#include "LCD_44780.c"
#include "delay.h"
#include "delay.c"
#define colonna1 0b00000001//PORTBbits.RB0
#define colonna2 0b00000010//PORTBbits.RB1
#define colonna3 0b00000100//PORTBbits.RB2
#define colonna4 0b00001000//PORTBbits.RB3
#define riga1 PORTBbits.RB4
#define riga2 PORTBbits.RB5
#define riga3 PORTBbits.RB6
#define riga4 PORTBbits.RB7
unsigned int i;
// Variabile per la lettura delle colonne.
unsigned char col;
//*************************************
// Prototipo di funzione
//*************************************
void board_initialization (void) {
// Imposto PORTA tutti ingressi
LATA = 0x00;
TRISA = 0xFF;
LATB = 0x00;
// Imposto RB4..RB7 Righe -> 0 Uscita
TRISB= 0b00001111;// Imposto RB0..RB3 Colonne -> 1 Ingresso
PORTB= 0b00001111;
// Imposto PORTC tutti ingressi, RC1 come output
LATC = 0x00;
TRISC = 0b11111101;
// Imposto PORTD tutte uscite, RD0 come ingresso
LATD = 0x00;
TRISD = 0b00000001;
// Imposto PORTE tutti ingressi
LATE = 0x00;
TRISE = 0xFF;
}//void board_initialization (void)
// Programma principale
//*************************************
int main (void){
// Abilita i resistori di pull-up sulla PORTB
INTCON2bits.RBPU = 0x00;
board_initialization ();
// Inizializzo il display LCD con quarzo a 20MHz
LCD_initialize (20);
LCD_backlight (TURN_ON_LED_LCD);
//Questa funzione scrive il messaggio da visualizzare sulla prima riga.
LCD_write_message ("Hello World 1");
while (1) {
col = PORTB;
// Maschera per i bit d'interesse
//col = col & 0x0F;
switch (col) {
case colonna4:
riga4 = 0x1;
LCD_goto_line(2); //Questa funzione permette di posizionare il cursore sulla seconda riga.
LCD_write_char (68); //Scrive un carattere sul display.
break;
case colonna3:
riga4 = 0x1;
LCD_goto_line(2); //Questa funzione permette di posizionare il cursore sulla seconda riga.
LCD_write_char (70); //Scrive un carattere sul display.
default:
* // Il pulsante è aperto, non visualizzo nulla.
LCD_goto_line(2);
LCD_write_message (" ");
}//switch
}//while
}//main
Tastierino a matrice.c:82: error: (981) pointer required
Tastierino a matrice.c:82: error: (981) pointer required
(908) exit status = 1
make[2]: *** [build/default/production/Tastierino a matrice.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
Si prega Accesso o Crea un account a partecipare alla conversazione.
- elpablito
- Platino Utente
-
Less
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
10 Anni 1 Mese fa #14
da elpablito
Risposta da elpablito al topic Tastiera a matrice
se hai pull-up sulla porta devi lavorare con gli 0 non con gli 1 ti mando un codice che avevo fatto per un aggegio e fatto in un altro modo però è ancora la stessa zuppa . prova a decifrarlo, non è difficile, in caso mi domandi, poi lo porti sul pic.
/******************* TASTIERA **************************************
* TASTIERA 3 COLONNE 4 RIGHE connessa come segue: *
* R1 = PTBD_PTBD4 C1 = PTBD_PTBD0 *
* R2 = PTBD_PTBD5 C2 = PTBD_PTBD1 *
* R3 = PTBD_PTBD5 C3 = PTBD_PTBD2 *
* R4 = PTBD_PTBD7 *
*********************************************************************/
byte colMask[] =
{ 0b11111110,
0b11111101,
0b11111011
};
byte num_col = 0;
byte rigaMask[] =
{ 0b00010000,
0b00100000,
0b01000000,
0b10000000
};
byte num_riga = 0;
byte key_pressed ;
byte key_ok;
const byte key[] = {"147c2580369eabdf"};
void read_key(void){
key_ok = 0;
do{
for (num_col=0; num_col<3; num_col++) // a 0 una colonna alla volta
{
PTBD = 0xFF; // tutte le colonne a 1
PTBD &= colMask[num_col]; // a zero la colonna attuale
for (num_riga=0; num_riga<4; num_riga++) // Scansione righe
{
if (!(PTBD & rigaMask[num_riga])) // Riga trovata a 0
{
volte=5; // ritardo antirimbalzo
while(volte>0){}; // finchè non scade il tempo
if (!(PTBD & rigaMask[num_riga])) //Se la mask ancora OK
{
while((PTBD | 0x0F)!=0xFF); // finchè non toglie dito
key_pressed=num_riga+(4*num_col); // n. pulsante premuto
key_ok=1; // è stato premuto un pulsante
k2=key[key_pressed]; // Valore del pulsante premuto
}
}
} // fine scansione righe
} // fine scansione colonne
}while(key_ok == 0); // finchè non trova un tasto
}
/******************* TASTIERA **************************************
* TASTIERA 3 COLONNE 4 RIGHE connessa come segue: *
* R1 = PTBD_PTBD4 C1 = PTBD_PTBD0 *
* R2 = PTBD_PTBD5 C2 = PTBD_PTBD1 *
* R3 = PTBD_PTBD5 C3 = PTBD_PTBD2 *
* R4 = PTBD_PTBD7 *
*********************************************************************/
byte colMask[] =
{ 0b11111110,
0b11111101,
0b11111011
};
byte num_col = 0;
byte rigaMask[] =
{ 0b00010000,
0b00100000,
0b01000000,
0b10000000
};
byte num_riga = 0;
byte key_pressed ;
byte key_ok;
const byte key[] = {"147c2580369eabdf"};
void read_key(void){
key_ok = 0;
do{
for (num_col=0; num_col<3; num_col++) // a 0 una colonna alla volta
{
PTBD = 0xFF; // tutte le colonne a 1
PTBD &= colMask[num_col]; // a zero la colonna attuale
for (num_riga=0; num_riga<4; num_riga++) // Scansione righe
{
if (!(PTBD & rigaMask[num_riga])) // Riga trovata a 0
{
volte=5; // ritardo antirimbalzo
while(volte>0){}; // finchè non scade il tempo
if (!(PTBD & rigaMask[num_riga])) //Se la mask ancora OK
{
while((PTBD | 0x0F)!=0xFF); // finchè non toglie dito
key_pressed=num_riga+(4*num_col); // n. pulsante premuto
key_ok=1; // è stato premuto un pulsante
k2=key[key_pressed]; // Valore del pulsante premuto
}
}
} // fine scansione righe
} // fine scansione colonne
}while(key_ok == 0); // finchè non trova un tasto
}
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Guido
- Autore della discussione
- Platino Utente
-
Less
Di più
- Messaggi: 583
- Ringraziamenti ricevuti 1
10 Anni 1 Mese fa #15
da Guido
Risposta da Guido al topic Tastiera a matrice
Ringrazio tutti, si ho sbagliato a inizializzare le colonne, ho corretto cosi:
#define colonna1 0b11111110//PORTBbits.RB0
#define colonna2 0b11111101//PORTBbits.RB1
#define colonna3 0b11111011//PORTBbits.RB2
#define colonna4 0b11110111//PORTBbits.RB3
#define riga1 PORTBbits.RB4
#define riga2 PORTBbits.RB5
#define riga3 PORTBbits.RB6
#define riga4 PORTBbits.RB7
#define colonna1 0b11111110//PORTBbits.RB0
#define colonna2 0b11111101//PORTBbits.RB1
#define colonna3 0b11111011//PORTBbits.RB2
#define colonna4 0b11110111//PORTBbits.RB3
#define riga1 PORTBbits.RB4
#define riga2 PORTBbits.RB5
#define riga3 PORTBbits.RB6
#define riga4 PORTBbits.RB7
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, Matteo Garia, doc83
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti