Buongiorno , felice di essermi iscritto alla comunità. Come molti di voi , sono al inizio ma con molta voglia di imparare ...anche se a 50 anni la memoria non è più quella di 30 anni fa. Volevo gentilmente chiedere a qualcuno più bravo di me se aveva un idea di come costruire un espansione per arduino uno.
Mi spiego : una cosa che possa aumentare gli ingressi e le uscite a disposizione. Pensavo a qualcosa fatto con un 74LS138 e con dei 74LS245 da usare solo come ingressi. Per le uscite la stessa cosa ma usando i 74LS245 configurati solo come uscita. Riconosco che non ha molto senso dal momento che il 2560 ha già un sacco di ingressi uscite ...ma lo trovo interessante sotto l'aspetto didattico. Qualcuno e capace di imbastire uno schema con un “138” + 8 x 74LS245 configurati come ingressi e un altro “138” + 8 x 74LS245 configurati come uscite ? Ma sopratutto ...come si andranno a pilotare le uscite e gli ingressi ?
Grazie per l'attenzione, spero che qualcuno trovi interessante il problema , cercando in internet mi pare di capire che nessuno ha mai affrontato la questione ... e fattibile ? Grazie.
Si fa spesso con shift register, multiplexer o expander tipo MCP23017, a seconda delle necessità specifiche.
SukkoPera:
Si fa spesso con shift register, multiplexer o expander tipo MCP23017, a seconda delle necessità specifiche.
Si , sto vedendo alcuni integrati dedicati per questo tipo di lavoro ( seriale ) . Io intendevo un interfaccia parallela 8 bit . E qui faccio una domanda : risulta più vantaggioso in termini di velocità usare integrati collegati in seriale o tutto funziona più veloce con interfaccia parallela ?
Beh, mi sembra ovvio che una soluzione parallela come quella che proponi tu è sicuramente più veloce (almeno in teoria). Però è anche più laboriosa da mettere in piedi e complessa da gestire.
Direi che dipende sempre dalle necessità che si hanno. Spesso quando si usa Arduino, non si cercano performance più di tanto spinte, visto che la MCU non è certo una scheggia e il framework ci mette del suo (una digitalRead()/Write() impiega ~4 us, senza contare che il core Arduino non permette la lettura di più di un pin alla volta). Spesso l'utente di Arduino predilige la semplicità e, in quest'ottica, è difficile battere un MCP23017.
SukkoPera:
Beh, mi sembra ovvio che una soluzione parallela come quella che proponi tu è sicuramente più veloce (almeno in teoria). Però è anche più laboriosa da mettere in piedi e complessa da gestire.Direi che dipende sempre dalle necessità che si hanno. Spesso quando si usa Arduino, non si cercano performance più di tanto spinte, visto che la MCU non è certo una scheggia e il framework ci mette del suo (una digitalRead()/Write() impiega ~4 us, senza contare che il core Arduino non permette la lettura di più di un pin alla volta). Spesso l'utente di Arduino predilige la semplicità e, in quest'ottica, è difficile battere un MCP23017.
Condivido assolutamente tutto quello che scrivi. Immaginavo questo tipo di risposta. L'integrato che mi hai segnalato è fantastico ( non lo conoscevo ) , il prezzo inizialmente alto finché non si trova il venditore giusto.(lo trovato in Italia a 2 euro + 1.90 spedizione , sai inizialmente quando lo visto a 10 / 20 euro x 1 pz , mi ero spaventato ) . Quindi, ritornando al discorso I/O parallela , mi pare di capire che il problema è anche la libreria per poter dialogare con le I/O. Magari una libreria che si possa indirizzare ogni pin come si fa con quelli di arduino ...non so , sto solo ipotizzando. Ad ogni modo sei stato molto chiaro e ti ringrazio per la delucidazione. Almeno per uno scopo didattico , a me piacerebbe molto un interfaccia parallela. Cerco di buttare giù uno schema e poi pubblico, ma per come dialogare con le porte non saprei proprio...vediamo ...Grazie mille Sukko !!!
Prego, ma ora vatti a presentare nell'apposita sezione, altrimenti i moderatori si arrabiano ;).
SukkoPera:
Prego, ma ora vatti a presentare nell'apposita sezione, altrimenti i moderatori si arrabiano ;).
oppsssss...chiedo umilmente scusa ...lo faccio subito !!!!
Citi TTL della famiglia LS. Non so se non sono compatibili con Arduino o se sono una tecnologia vecchia da non usare piú nei nuovi progetti.
Usa la famiglia HT o HCT
I controller Che sono montati su Arduino sono mirati su interfacciamento seriale. L' interfaccia SPI puó lavorare con la velocitá del Clock percui a 16MHz Spedire 8 bit ci vuole 0,5µS.
Se vuoi interfacciare qualcosa in paralello devi metter dei buffer/multiplexer per avere abbastanza pin per collegare l' integrato.
Interfacciando in paralello spendi molto piú tempo in istruzioni rispetto alla velocitá maggiore ( solo 8 volte) che guadagneresti teoreticamente. Per arrivare alla velocitá massima possibile devi incominciare a programmare in assembler perché il C viene tradotto in un codice troppo lento.
Normalmente la velocitá non é un problema.
Non scrivi cosa vuoi collegare per aver bisogno di piú pin.
Ciao Uwe
uwefed:
.....
Non scrivi cosa vuoi collegare per aver bisogno di piú pin.Ciao Uwe
Ciao , grazie alla tua risposta adesso è ancora più chiaro anche sotto l'aspetto tecnico. Per la serie "LS" che dire ...sono un tecnico di vecchia data cresciuto con i circuiti stampati fatti con i bollini e trasferibili
Al momento non ho alcun progetto mio in testa , volevo solo affrontare il discorso al livello teorico e cercare di capire alcune grosse lacune del passato riguardo i micro. Come ho scritto nella presentazione , anni fa mi fu consigliato di iniziare con la costruzione di un micro basato su 8051 + eprom + ram e con il bascom come sistema di sviluppo. Quindi ho voluto iniziare da autodidatta , con un strumento difficile da capire senza una buona scuola o un buon maestro. Ero riuscito a muovere i primi passi con bascom per AVR , strumento bellissimo ma di scarso interesse pubblico. Vuoi mettere il mondo di "arduino" ??? Quindi comprai un programmatore USBASP dalla cina e una stecca di atmega48 ( non so perché avevo scelto il 48 ( sono stato un pirla ) .... Mi rendo perfettamente conto che l'elettronica nei ultimi anni e cambiata moltissimo. Me ne sono reso conto anche questa mattina quando ho smontato il mio vecchio casco virtuale vfx1 comprato nel '97 per la modica cifra di 2millioni e 700mila lire. Ho recuperato poca roba , quasi niente, elettronica di altri tempi , nulla che potesse soddisfare la voglia di nuovi esperimenti con arduino. Nemmeno la soddisfazione di un accelerometro , il casco usa un magnetometro terrestre per rilevare il nord magnetico. (so che un accelerometro costa pochi euro , ma amo il recupero e a volte mancano anche i pochi euro per comprare le cose più essenziali per sperimentare )
La tecnologia di interfaccia "seriale" che offre arduino e simili è veramente notevole. Tutte cose nuove che spero di poter sperimentare presto. Al momento sono nella fase """copia incolla esempi, collega tutto quello che trovi e sperimenta sempre di più""" Come tutti , al inizio cerco di capire il significato di ogni riga variare parametri sperimentando e cercando di capire questo meraviglioso mondo che i giovani di oggi hanno a disposizione.
Buona parte della "semplicità" di Arduino deriva dalle librerie sottostanti che nascondono l'hardware. Così si può scrivere digitalWrite(2, HIGH) sia sulla UNO che sulla Mega e il corrispondente terminale della board andrà alto... anche se fisicamente collegato a pin diversi delle diverse MCU.
Il prezzo da pagare è la lentezza, quattro o cinque microsecondi per cambiare lo stato di un solo pin sono un'enormità... se se ne vogliono cambiare otto arriviamo a 40µs.
Perdendo la compatibilità tra board diverse è però ancora possibile scrivere direttamente sui registri di I/O delle porte interne dello specifico micro... aggiornando tutti i pin in blocco in meno di 200ns.
Un' architettura interamente parallela fatta di decodifiche indirizzi e latch è sicuramente usabile, ma va ricordato che ci si trova già oltre il bus di sistema (qui inaccessibile)... in sostanza gli I/O di Arduino sono come la "vecchia" porta parallela dei PC, un ulteriore hardware di I/O esterno va comandato con subroutine scritte ad hoc (niente digitalWrite per intenderci) e non sarà mai veloce come il collegamento diretto ai segnali read/write/enable/data/addr di un vero bus parallelo di una CPU.
Le altre alternative, in ordine decrescente di velocità sono shift register (veloci se letti/scritti tramite periferica SPI interna, o sui 150µs per byte se si usa il bitbang), oppure I/O expander i2c come quello suggerito. Le velocità comunque scendono a poche migliaia di aggiornamenti al secondo o meno, una breve transazione su i2c può prendere quasi un millisecondo.
Claudio_F:
Un' architettura interamente parallela fatta di decodifiche indirizzi e latch è sicuramente usabile, ma va ricordato che ci si trova già oltre il bus di sistema (qui inaccessibile)... in sostanza gli I/O di Arduino sono come la "vecchia" porta parallela dei PC, un ulteriore hardware di I/O esterno va comandato con subroutine scritte ad hoc (niente digitalWrite per intenderci) e non sarà mai veloce come il collegamento diretto ai segnali read/write/enable/data/addr di un vero bus parallelo di una CPU.
Grazie Claudio , questo ulteriore passaggio mi ha aiutato a capire ulteriormente come stanno le cose. Grazio mille ! Commento utilissimo !