- Messaggi: 353
- Ringraziamenti ricevuti 8
Tastiera a matrice
9 Anni 8 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Platinum Member
Riduci
Di più
9 Anni 8 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
9 Anni 8 Mesi fa #13
da Guido
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 Guido al topic Tastiera a matrice
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.
- Guido
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 583
- Ringraziamenti ricevuti 1
9 Anni 8 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.
- elpablito
- Platinum Member
Riduci
Di più
- Messaggi: 353
- Ringraziamenti ricevuti 8
9 Anni 8 Mesi 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 Accedi o Crea un account a partecipare alla conversazione.
- Guido
- Autore della discussione
- Platinum Member
Riduci
Di più
- Messaggi: 583
- Ringraziamenti ricevuti 1
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.
Login
© LaurTec 2006 - 2024