Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 08 marzo 10, 15:37   #21 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Anzi, meglio ancora e più efficiente:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; i < MAXPAGLIONI+1; mask = mask << 1, i++) 
	        if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:37   #22 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
per il case 6 infatti mettevo un if
il fatto che non siano potenze di 2 in realtà è perchè per alquni tasti uso un solo bit acceso per altri anche 2
ad esempio
case 1 (0b00000001)
case 2 (0b00000010)
case 4 (0b00000100)
...
case 3 (0b00000011) da quì non sono più potenze di 2

uso questo modo per non usare pin eccessivi.

grazie dell'aiuto, appena ho un po di tempo butto giù il codice completo

ciao
lol21
I tasti quanti sono? Li hai messi in matrice?
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:40   #23 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da frank Visualizza messaggio
Anzi, meglio ancora e più efficiente:

Codice:
// MAXPAGLIONI e' il numero massimo di paglioni
int mask, i;
if (PORTA) 
        for (mask=1, i=1; i < MAXPAGLIONI+1; mask = mask << 1, i++) 
            if (PORTA & mask) break;
// al termine del ciclo, i contiene il numero del paglione colpito
Ci sono le eccezioni in alcuni casi (vedi 3, 5 etc)
i < MAXPAGLIONI+1; è inefficiente. Fai una somma ad ogni ciclo.
piuttosto:
i <= MAXPAGLIONI;
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:46   #24 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da illez Visualizza messaggio
Ci sono le eccezioni in alcuni casi (vedi 3, 5 etc)
i < MAXPAGLIONI+1; è inefficiente. Fai una somma ad ogni ciclo.
piuttosto:
i <= MAXPAGLIONI;
Ancora meglio, grazie.
Per le eccezioni, come scrivevo non ho capito se è ammessa la possibilità di più bit accesi oppure no.
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 15:48   #25 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da frank Visualizza messaggio
Ancora meglio, grazie.
Per le eccezioni, come scrivevo non ho capito se è ammessa la possibilità di più bit accesi oppure no.
Si, guardati il codice nella prima pagina. C'è diversi casi.
Alla fine un case non è così inefficiente come potrebbe sembrare.

Purché venga scritto UNA volta e non 4 come ho visto
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 08 marzo 10, 20:20   #26 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
alura...
nelle gare di tiro con l'arco funziona così: si hanno x paglioni. su ogni paglione ci sono 4 arcieri con un bersaglio l'uno. ogni paglione è contrassegnato da un numero che visti dalla linea di tiro va aumentando da sinistra a destra.
ogni bersaglio è contrassegnato dalla lettera A o B o C o D. a ogni arciere viene dato un cartellino da attaccare alla faretra con scritto il numero del paglione seguito dalla lettera del bersaglio dove tira
ogni gara noi diamo degli score che sono dei fogli tabella doppia entrata dove vengono segnate le 3 freccie tirate ad ogni volee.
per comodità nelle classifiche viene usato un web-based sistem chiamato ianseo (scaricabile gratuitamente) che propone le classifiche da proiettare.

ora il problema: ogni 10 volee vi è una pausa, in questa pausa gli addetti alla gara (noi) prendiamo tutti gli score e li scriviamo manualmente nel programma.

ora la possibile soluzione:
dei terminali (uno per paglione) che abbiano pochi tasti: 1-2-3-4-5-6-7-8-9-10-M(0)-A-B-C-D-canc
quando accendiamo i palmari con dentro il pic, noi addetti ai lavori scegliamo il paglione a cui viene associato il palmare (da quì il primo switch) e clicchiamo A per confermare (uscire dal primo ciclo while PORTA != 17)
poi inizia la gara, a ogni volee arrivano gli arcieri e uno incaricato scrive in questo modo:
clicca A e gli viene proposto sull'LCD: "Bersaglio: "n° paglione seguito da A e sotto inserisce il valore delle freccie, sbaglia a inserire il valore, schiaccia il pulsante canc (6) e reinserisce il valore
poi preme B e fa le stesse cose, poi C e poi D
quando tornano a tirare laddetto alla console schiaccia un pulsante sull'interfaccia in visual basic che invia il segnale 1 e legge i dati sul paglione 1, poi invia 2 e riceve i dati del paglione 2, ecc.. (while Soft_UART_Read(&error) != paglione)

detto così è complicato, ma non credo che a livelli di programmazione con librerie già messe a disposizione del programma non ci fossero molti intoppi

comunque grazie fin'ora

ciao
lol21
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 20:41   #27 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
quando accendiamo i palmari con dentro il pic, noi addetti ai lavori scegliamo il paglione a cui viene associato il palmare (da quì il primo switch) e clicchiamo A per confermare (uscire dal primo ciclo while PORTA != 17)
poi inizia la gara, a ogni volee arrivano gli arcieri e uno incaricato scrive in questo modo:
clicca A e gli viene proposto sull'LCD: "Bersaglio: "n° paglione seguito da A e sotto inserisce il valore delle freccie, sbaglia a inserire il valore, schiaccia il pulsante canc (6) e reinserisce il valore
poi preme B e fa le stesse cose, poi C e poi D
quando tornano a tirare laddetto alla console schiaccia un pulsante sull'interfaccia in visual basic che invia il segnale 1 e legge i dati sul paglione 1, poi invia 2 e riceve i dati del paglione 2, ecc..
Non si capisce molto. Ciascun tasto è collegato a una linea di input del PIC?
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 08 marzo 10, 20:50   #28 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
si, sono tutti collegati a una porta a del pic, i pin però non sono sufficienti e siccome devo utilizzare le porte b per l'LCD e le USART allora ho deciso che alcuni pulsanti sono collegati a 2 pin, in questo modo quando il bottone viene premuto il pic riceve 2 bit della porta a accesa e a seconda di quali bit sono accesi sceglie il valore
lol21 non è collegato   Rispondi citando
Vecchio 08 marzo 10, 22:17   #29 (permalink)  Top
User
 
L'avatar di frank
 
Data registr.: 29-11-2002
Residenza: Mountain View, CA
Messaggi: 4.390
Citazione:
Originalmente inviato da lol21 Visualizza messaggio
si, sono tutti collegati a una porta a del pic, i pin però non sono sufficienti e siccome devo utilizzare le porte b per l'LCD e le USART allora ho deciso che alcuni pulsanti sono collegati a 2 pin, in questo modo quando il bottone viene premuto il pic riceve 2 bit della porta a accesa e a seconda di quali bit sono accesi sceglie il valore
Mmmh e lavorare a matrice come qualcuno suggeriva?
__________________
The number you dialed is imaginary. Please rotate your phone 90 degrees and redial.
frank non è collegato   Rispondi citando
Vecchio 09 marzo 10, 00:03   #30 (permalink)  Top
User
 
L'avatar di lol21
 
Data registr.: 16-11-2008
Residenza: Riva del Garda - TN
Messaggi: 429
alla fine ho risolto con l'array.
mi consolo sul fatto che avevo ragione: le variabili le registra sulla RAM
tanto che se gli dicevo
Codice:
int val[128];
mi dava insufficienza di RAM allora mi sono fatto furbo e ho fatto così:
Codice:
int *val;
     void init_var() {
           val[1] = 1;
           val[2] =2;
           val[4] = 3;
           val[8] = 4;
           val[16] = 5;
           val[32] = 6;
           val[64] = 7;
           val[128] = 8;
           val[3] = 9;
           val[5] = 10;
           val[9] = 0;
           val[6] = 0;
     }

ho finito il codice e sono rimasto in 2024 kb
ora sono felice ma il lavoro non è finito, mi manca l'interfaccia in VB che invia i dati a PHP. e poi devo finire la scheda, spero tutto vada bene.

Grazie a tutti dell'aiuto, mi avete aperto nuovi orizzonti

ciao
lol21
lol21 non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
alimentatore insufficiente??? molale81 Batterie e Caricabatterie 2 10 aprile 09 00:35



Tutti gli orari sono GMT +2. Adesso sono le 00:43.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002