Avrei necessità che il programma commutasse autonomamente un pin settato come input per eseguire una serie di istruzioni che verrebbero fatte premendo ugualmente un pulsante, l'istruzione come riportato nel "port manipolation" non lo consente.
pablos:
Avrei necessità che il programma commutasse autonomamente un pin settato come input per eseguire una serie di istruzioni che verrebbero fatte premendo ugualmente un pulsante, l'istruzione come riportato nel "port manipolation" non lo consente.
Per cambiare stato ad un pin questo deve essere settato come Output, se è un input non puoi farlo, e mi pare una cosa logica
Ovviamente nulla vieta di cambiare la direzione del pin dinamicamente durante l'esecuzione del programma compatibilmente con le condizioni hardware, ovvero non è detto che un pin utilizzato come input si possa settare come output senza fare danni.
se è un input non puoi farlo, e mi pare una cosa logica
Concordo, è logico, ma quel registro diventa 1 quando l’input passa a 1, qualcosa nel core ci va a scrivere, perchè se tengo il pulsante chiuso e leggo il registro 8 bit PINC è =32, pensavo magari ci fosse qualcosa di più profondo a livello assembler.
Cambiare in corsa il pinmode, si ci avevo pensato, ma non conosco l’hardware o meglio non sono tenuto a conoscerlo, so solo che quel pin è usato come output.
pablos:
Concordo, è logico, ma quel registro diventa 1 quando l'input passa a 1, qualcosa nel core ci va a scrivere, perchè se tengo il pulsante chiuso e leggo il registro 8 bit PINC è =32, pensavo magari ci fosse qualcosa di più profondo a livello assembler.
Ti sfugge il fatto che il pin è legato a due registri, PORTx per la scrittura e PINx per la lettura, sono due cose diverse e scrivendo su PORTx non puoi cambiare PINx e non puoi scrivere su PINx perché è un registro di sola lettura.
Sto usando da molto il PINx e il PORTx e mi trovo molto bene, nelle ultime versioni degli sketch non ho mai più usato il digitalwrite, digitalread e il pinmode uso solo i registri
pablos:
Mi sa che è sfuggito qualcosa a te di quello che ho scritto
I casi sono due, o non capito quello che vuoi fare oppure tu non hai capito quello che ti ho detto.
Se ho compreso correttamente il tuo problema è che vuoi simulare un input scrivendo su un pin, bene questo non è possibile farlo perché il registro di input è diverso da quello di output, scrivendo sul secondo non cambi lo stato del primo, non puoi nemmeno scrivere direttamente sul registro di input perché è solo in lettura.
leo72:
Ad esser sinceri, se setti ad 1 un pin tramite PORTx quando quel pin è settato come input da DDx, ne attivi la pull-up interna.
Si, ma non scrivi su PINx 1, ovvio che se l’input è flottante va a 1 logico per effetto della pull up, però se poi la disattivi non hai alcuna certezza sullo stato logico che va ad assumere il pin di input flottante.
astrobeed:
Si, ma non scrivi su PINx 1, ovvio che se l’input è flottante va a 1 logico per effetto della pull up, però se poi la disattivi non hai alcuna certezza sullo stato logico che va ad assumere il pin di input flottante.
Si +/- questo, non voglio scrivere su un pin ma nel registro, cioè analizzando i passaggi logici
dall'esterno del chip metto a 1 un input (pin 32)
leggendo il reg PINC vediamo il valore 32 o meglio il bit 5 di quel registro assume val 1
mi avrebbe fatto comodo ingannare il chip dall'interno, ma se non è possibile carico i valori di PINx in un altra var e manipolo quella, poi il codice interpreterà il dovuto, grazie lo stesso