Pages: 1 [2] 3 4 ... 11   Go Down
Author Topic: Controllare stato dei pin  (Read 7725 times)
0 Members and 1 Guest are viewing this topic.
Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non l'ho testato ma ho una domanda. Perché usi un integer quando i registri sono ad 8 bit, quindi gestibili con un semplice tipo byte?
hai ragione. Addirittura potrei non usare la variabile rimanda così da risparmiare anche 1 byte di ram smiley-lol piuttosto credo di aver fatto un errore sullo shift del bit. Funziona per le prime 8 porte ma poi correggo solo che non so se è più utile fare una cosa del tipo
Code:
Rimanda = (rimanda == 0) ? 0:rimanda/rimanda;
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sono arrivato troppo tardi; vedo se mi metto al lavoro pure io tanto per fare qualcosa..
non ho  visto  bene, @sl hai fatto una funziona da mettere drettamente nello sketch?
Logged


Offline Offline
Sr. Member
****
Karma: 2
Posts: 328
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Code:
Rimanda = (rimanda == 0) ? 0:rimanda/rimanda;

si è molto meglio..., però scrivilo così:
Code:
rimanda= (rimanda==0)?0:1;
così risparmi una divisione.. smiley-wink
Logged

Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sono arrivato troppo tardi; vedo se mi metto al lavoro pure io tanto per fare qualcosa..
non ho  visto  bene, @sl hai fatto una funziona da mettere drettamente nello sketch?

si ma puoi anche metterla in un file a parte e chiamarla "libreria"  smiley-lol solo che mettere una libreria per una funzione mi pare brutto,sarebbe carino se si facesse qualche altra funzione e si ingloba il tutto, allora avrebbe senso  smiley


Code:
Rimanda = (rimanda == 0) ? 0:rimanda/rimanda;

si è molto meglio..., però scrivilo così:
Code:
rimanda= (rimanda==0)?0:1;
così risparmi una divisione.. smiley-wink
vero, le cose più faicili non mi vengono mai  smiley-lol

ok allora il codice diventa
Code:
boolean whatWritten(int pin) {
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
       
return ((*portInputRegister(port) & bit) == 0) ? 0:1;
}
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Taranto, Puglia
Offline Offline
God Member
*****
Karma: 1
Posts: 758
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si ma puoi anche metterla in un file a parte e chiamarla "libreria"  smiley-lol solo che mettere una libreria per una funzione mi pare brutto,sarebbe carino se si facesse qualche altra funzione e si ingloba il tutto, allora avrebbe senso  smiley
cavolo  smiley-mr-green
io pensavo di fae così:
chiamo funzione e li dico il pin in questione
la funzione fa quel ch deve
il return sarà di due valori se è possibile ovvero sia la direzione del pin che il suo valore (alto o basso), altrimenti una funzine in piu
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21657
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Difatti una libreria per una funzione di 3 righe di codice è assurdo  smiley-yell smiley-yell

Logged


Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si ma puoi anche metterla in un file a parte e chiamarla "libreria"  smiley-lol solo che mettere una libreria per una funzione mi pare brutto,sarebbe carino se si facesse qualche altra funzione e si ingloba il tutto, allora avrebbe senso  smiley
cavolo  smiley-mr-green
io pensavo di fae così:
chiamo funzione e li dico il pin in questione
la funzione fa quel ch deve
il return sarà di due valori se è possibile ovvero sia la direzione del pin che il suo valore (alto o basso), altrimenti una funzine in piu
è fattibile.

Code:
int digitalRead(uint8_t pin)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);

if (port == NOT_A_PIN) return LOW;

// If the pin that support PWM output, we need to turn it off
// before getting a digital reading.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

if (*portInputRegister(port) & bit) return HIGH;
return LOW;
}
questa è la funzione di digitalRead che è la stessa che ho ripreso io in pratica
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11994
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io avevo chiesto qualcosa che mi permettesse di interrogare (INPUT/OUTPUT-->H/L), a mio piacere:
- un pin, indicando linea e numero (sto pensando in generale a chip ATMEL), es D7, B4, ecc
- una linea di pin (PORT) indicando la sola lettera della linea
- tutte le linee di PIN indicando una sorta di "*".

Il risultato deve essere caricato in una variabile nel primo caso (I o OH o OL)
Nel secondo è terzo caso deve andare in un array

Sia il secondo che il terzo caso vengono eseguiti SOLO che la pinature del micro selezionato prevede la/e linea/e di pin, quindi deve interrogare il core attivo.

Allora basta una funzione o serve una lib, piccola che sia?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io avevo chiesto qualcosa che mi permettesse di interrogare (INPUT/OUTPUT-->H/L), a mio piacere:
- un pin, indicando linea e numero (sto pensando in generale a chip ATMEL), es D7, B4, ecc
- una linea di pin (PORT) indicando la sola lettera della linea
- tutte le linee di PIN indicando una sorta di "*".

Il risultato deve essere caricato in una variabile nel primo caso (I o OH o OL)
Nel secondo è terzo caso deve andare in un array

Sia il secondo che il terzo caso vengono eseguiti SOLO che la pinature del micro selezionato prevede la/e linea/e di pin, quindi deve interrogare il core attivo.

Allora basta una funzione o serve una lib, piccola che sia?

avevo capito dovesse essere una cosa destinata al solo arduino, quindi mi sono messo per quello (ed ora che vedo meglio in effetti fastava fare un digitalRead() sulla porta di cui si voleva sapere lo stato e potrebbe andche funzionare).

comunque sinceramente non capisco l'utilità di tutto ciò, capisco solo se bisogna capire se un pin è output/input high o low potrebbe tornare utile ma sapere tutti i pin in una volta sola sinceramente non ne vedo l'utilità
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Offline Offline
Sr. Member
****
Karma: 2
Posts: 328
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Allora basta una funzione o serve una lib, piccola che sia?

be le funzioni cominciano già a crescere di numero e forse una piccola libreria avrebbe senso..
però prima una considerazione: vale sul serio la pena sprecare così tante risorse hardware con l'array e con tutte quelle funzioni quando basta che ad ogni cambio d'uso e di stato del pin si aggiorni una variabile? smiley-roll

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21657
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

comunque sinceramente non capisco l'utilità di tutto ciò, capisco solo se bisogna capire se un pin è output/input high o low potrebbe tornare utile ma sapere tutti i pin in una volta sola sinceramente non ne vedo l'utilità
Sinceramente trovo poco utile anche sapere lo stato di 1 pin: siccome i pin non cambiano di stato da soli ma solo dietro esplicito comando dato da codice (pinMode), è facile sapere in che stato siano... non trovate?  smiley-wink
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11994
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Beh ragazzi, voi avete lanciato l'idea e voi state facendo marcia indietro. Leo, non è da te ragionare in termini del tipo "quello che ho da sapere lo so", altrimenti non avresti fatto tanto per il Forum, ad iniziare dalla Guida sugli ATtiny smiley-wink
Io non ho in mente niente, ma pensavo che se stessi testando un bel sistemone di sensori ed attuatori sfruttando tutte le porte di un 644, mi piacerebbe moltissimo poter premete un pulsante ed attivare un interrupt che mi mandi tutta la situazione attuale sul serial monitor mentre l'aggeggio continua a funzionare.
Non vi garba l'idea? lasciate perdere, vuol dire che se mai dovessi trovare un po' di tempo mi ci metterò io, alla fine non mi pare che sia troppo oltre la mia portata, vi farò lavorare lo stesso (osereste non aiutarmi? smiley-twist) e mi piglio il merito di aver scritto una LIB smiley-money
Però imparate anche una cosa (a quelli che si sono lanciati...), la tecnica dell'<armiamoci e partite!> non è mai stata una cosa elegante; quindi in futuro non tirate fuori idee ed ideuzze nella speranza che poi altri le realizzino smiley-wink
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21657
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Premetto che ho partecipato marginalmente alla discussione, solo per dare pareri o criticare, quindi c'entro poco con lo sviluppo o non sviluppo della cosa.
Comunque non ragionavo in termini del tipo "non capisco a che serve, ergo non mi piace/la reputo inutile"  smiley-razz: ho soppesato l'utilità della cosa raffrontata al costo per metterla in pratica, ed ho valutato che è farla "universale" costa molto più di quel che offre o se realizzata per una specifica architettura oppure ancora mirata ad un uso specifico.

Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11994
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Premetto che ho partecipato marginalmente alla discussione, solo per dare pareri o criticare, quindi c'entro poco con lo sviluppo o non sviluppo della cosa.
Comunque non ragionavo in termini del tipo "non capisco a che serve, ergo non mi piace/la reputo inutile"  smiley-razz: ho soppesato l'utilità della cosa raffrontata al costo per metterla in pratica, ed ho valutato che è farla "universale" costa molto più di quel che offre o se realizzata per una specifica architettura oppure ancora mirata ad un uso specifico.
infatti tu hai preso legnate marginali smiley-evil
Toglimi una curiosità: posto che il comando DDRx fornisce tutte le info relative a IN/OUT e PORTx invece quelle relative a H/L, è davvero così complicato stabilire quante linee data ha il micro i questiore e ciclare questi due comandi per fornire un risultato?
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Beh ragazzi, voi avete lanciato l'idea e voi state facendo marcia indietro. Leo, non è da te ragionare in termini del tipo "quello che ho da sapere lo so", altrimenti non avresti fatto tanto per il Forum, ad iniziare dalla Guida sugli ATtiny smiley-wink
Io non ho in mente niente, ma pensavo che se stessi testando un bel sistemone di sensori ed attuatori sfruttando tutte le porte di un 644, mi piacerebbe moltissimo poter premete un pulsante ed attivare un interrupt che mi mandi tutta la situazione attuale sul serial monitor mentre l'aggeggio continua a funzionare.
Non vi garba l'idea? lasciate perdere, vuol dire che se mai dovessi trovare un po' di tempo mi ci metterò io, alla fine non mi pare che sia troppo oltre la mia portata, vi farò lavorare lo stesso (osereste non aiutarmi? smiley-twist) e mi piglio il merito di aver scritto una LIB smiley-money
Però imparate anche una cosa (a quelli che si sono lanciati...), la tecnica dell'<armiamoci e partite!> non è mai stata una cosa elegante; quindi in futuro non tirate fuori idee ed ideuzze nella speranza che poi altri le realizzino smiley-wink
.....ora potreste anche essere così gentili e scrivere una piccola lib con cui si possa interrogare lo stato di un QUALSIASI PIN del micro (prevedete le porte da A a D), di una qualsiasi "linea" (0-7A,B,C,D) o dell'intero gruppo di linee? Ve la cavate con poco e rendete un bel servizio al Forum. Chi se la prende la responsabilità? O devo al solito mettermi io mentre voi state a divertirvi? smiley-twist
chi è che ha dato l'idea?  smiley-lol


comunque non ho detto che mi ritiro, se c'è da fare faccio volentieri il problema è che da oggi avrò meno tempo a causa di un'altro progetto (anzi un progetto ed un apprendimento) in quanto la IMU sta girando per la città in mano al mio postino  smiley-kiss

la cosa su cui però vorrei prestare più attenzione è il fatto che scrivere una libreria per un comando simile diventa solo uno spreco di spazio (in termini di flash anche) in quanto comunque viene inclusa nel codice.

in più se vuoi riavere lo stato di tutte le porte, una volta che hai una funzione che ti legge lo stato di una porta, ti basta fare un ciclo di for e mettere i risultati in un array, lo dico perchè credo sia un metodo più efficiente rispetto all'implementarlo nella funzione in quanto nella funzione verrebbe comunque dichiarato l'array e fatto il ciclo (o comunque vi sarebbe un if ma occupa spazio) e quindi poco efficiente.

spero tu capisca ciò che intendo.

fare una funzione che oltre a leggere lo stato dei pin legge anche se sono input output te la faccio volentieri  smiley-wink ma solo per in pin  smiley-lol (eeeeh c'è crisi smiley-razz )
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Pages: 1 [2] 3 4 ... 11   Go Up
Jump to: