[RISOLTO] - controllo in contemporanea di più pin di arduino (uno, mega,...)

Progetti Arduino
Leonardo220
Messaggi: 58
Iscritto il: gio 4 mar 2021, 21:32

Re: controllo in contemporanea di più pin di arduino (uno, mega,...)

Messaggio da Leonardo220 »

apollokid ha scritto: mer 14 apr 2021, 9:16
pgv ha scritto: mer 14 apr 2021, 7:36 Comunque, come vedete il controllo degli ingressi/uscite di una MCU ATMEL e' complicato, e quindi ecco perche' Arduino ci ha provvisti di comode funzioni che si occupano di tutta la "urocrazia" per noi (a costo di una certa lentezza).
Ma infatti era per quello che avevo fatto la prima domanda: serve veramente tutta questa precisione? E se serve bisogna anche valutare quanto.
Se posso dare un mio piccolo suggerimento a Leonardo (poi magari mi dici che l'hai già letto tutto), investi qualche euro in un libro come "Arduino. Progetti e soluzioni" della Oreily o in un altro libro "mattoni" analogo.
Non dico che ci siano le risposte a tutto, ma trovi sicuramente affrontati tutti i temi dai più più semplici (per un informatico parte del libro è una passeggiata) ai più tecnici e complicati come quello dell'uso dei registri per quelle rare situazioni dove serve davvero spremere al massimo l'hardware.
Non serve studiarlo tutto a memoria, basta leggerlo tutto e farsi l'idea così l'idea di cosa è possibile fare e come, e poi quando serve una cosa si approfondisce quello specifico argomento.
Io almeno ho fatto così prima di iniziare.
Ci stavo pensando, ma l'acquisto di uno di questi manuali viene ostacolato dal fatto che temo sempre per il fatto che in un futuro non molto lontano possano diventare obsoleti... Qualche libro sui microcontrollori li ho comunque comprati, e dando una letturina li ho trovati anche interessanti... però non includevano questo argomento :(
Leonardo220
Messaggi: 58
Iscritto il: gio 4 mar 2021, 21:32

Re: controllo in contemporanea di più pin di arduino (uno, mega,...)

Messaggio da Leonardo220 »

pgv ha scritto: mer 14 apr 2021, 7:36 E bisogna che io smetta di rispondere quando sono stanco... In ATMEL, ci sono (piu' di, ma soprattuto) tre registri legati ad una Porta di Ingresso Uscita: DDRx (x = A, B, C,...) i cui bit determinano la direzione di ciascun pin "fisico" (un bit a "1" seleziona il pin come uscita), PORTx scrivendo nel quale si modificano i livelli in uscita per i pin dichiarati come uscite (non solo, ma quasi... se scriviamo un "1" in un bit di PORTx che e' stato dichiarato come INGRESSO nel corrispondente bit di DDRx, in realta' attiviamo il pull-up interno del pin! E per disattivare il pull-up occorre scrivere uno "0" PRIMA di dichiarare il pin come uscita in DDRx) e che e' scrivibile ma anche leggibile (permette di rileggere quel che e' gia' scritto nelle uscite) e PINx che serve per leggere i livelli dei pin dichiarati come ingressi (MA, attenzione, se ci SCRIVIAMO un "1" in una qualche posizione la cosa ha l'effetto di INVERTIRE il bit corrispondente nel registro PORTx, con tutte le possibili conseguenze!). Quindi, per tutte le operazioni di SCRITTURA dei pin di USCITA vanno usati i registri PORTX, mentre per le operazioni di LETTURA dei pin di INGRESSO bisogna utilizzare i registri PINx e non PORTx come ho erroneamente scritto piu' sopra in un momento di follia...

Comunque, come vedete il controllo degli ingressi/uscite di una MCU ATMEL e' complicato, e quindi ecco perche' Arduino ci ha provvisti di comode funzioni che si occupano di tutta la "urocrazia" per noi (a costo di una certa lentezza).
Grazie per le risposte, sono veramente molto complete. Comprendo cosa significa essere sotto gli effetti della stanchezza, nessun problema per qualche errore se dopo viene corretto :)
La questione di DDRx, Portx e PINx mi hanno ricordato la soluzione letta in passato, e infatti era piuttosto complessa da utilizzare, anche se offrono la possibilità di gestire dinamicamente la funzione dei pin in modo molto rapido...
Rispondi