Pages: 1 [2] 3   Go Down
Author Topic: Due 328 in stand alone per aggiungere un display  (Read 1251 times)
0 Members and 1 Guest are viewing this topic.
Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@menniti perchè sprecare tutti quei pin per la matrice quando potresti controllare 5 0 6 tasti con un pin analogico?
basta fare una scala di resistenze (più precise sono e meglio è ) e di pulsanti e leggere da analog read .
tipo così:

Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 26
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La mia idea era proprio quella di ricostruire un LCD seriale visto quel che costano.... ma in effetti... con 16-17 euro ne hai uno finito smiley
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

gli lcd seriali sono un pò più incasinati da gestire perchè sullo stesso canale trasmetti sia il testo da mostrare, sia i comandi per il display, però sono comodissimi da usare perchè in pratica è semplice convertire l'output del serial monitor in output per l'lcd e poi si usano 2 pin che altrimenti non verrebbero usati, liberandone altri.
Logged

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

@ Leo: infatti studierò a partire dal tuo firmware smiley-lol

@menniti perchè sprecare tutti quei pin per la matrice quando potresti controllare 5 0 6 tasti con un pin analogico?
basta fare una scala di resistenze (più precise sono e meglio è ) e di pulsanti e leggere da analog read .
tipo così:

Questa è un'idea molto interessante, potrei poi arrivare ad usare un micro più piccolo visto che risparmio 7 pin. La tolleranza delle resistenze comunque mi obbligherebbe ad accettare un range di valori per ogni tasto, quindi inutile prevedere roba a 0,5-1-2%.

Stavo anche pensando al fatto che in realtà NON ho un "invio", ma potrei "leggere" il 3° tasto della sequenza impostandolo p.es. su 0, cioè premo FF0 o 0F0 o 000 per impostare i due valori iniziali ed "accettarli" con lo 0 finale

@ ratto: se non avessi la necessità di interagire lo prenderei fatto, nel mio caso lo "costruisco" perché mi serve leggere la tastiera.

Ho trovato su Internet "MCP23017-E/SP I/O expander i2c 16 bit", a che cosa dovrebbe servire? se non sbaglio sul canale I2C le varie periferiche si collegano in parallelo
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

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@menniti se lo fai con pochi tasti (fino a 5) puoi usare anche le resistenze comuni e non quelle di precisione, i range sono abbastanza ampii e riconoscibili e potresti sfruttare addirittura la pressione di 2 tasti contemporanei.
c'è anche una libreria per gestirli:
http://www.arduino.cc/playground/Code/AnalogButtons
Logged

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

Se leggi 2 caratteri alla volta in teoria il 3° carattere non ti serve neanche. Potresti dare per scontato che l'utente abbia inserito correttamente. Oppure fare un check prima di uscire dalla maschera per verificare che sia tutto a posto chiedendo 0/1 all'utente per annula/conferma.
Io scorro invece con un tasto e l'altro lo uso per la conferma, scorrendo sui valori da impostare automaticamente (che poi uso questo sistema solo per la data/ora, poi interpreto i 2 pulsanti sempre come OK/ANNULLA o SI/NO).

Cmq il protocollo è l'ultimo dei problemi. La rete di resistenze è invece una soluzione intelligente che è molto usata. A me non era venuta a mente, anche se lo shield LCD che comprai tempo fa con un micro-joystick usava proprio questa soluzione per leggere 5 valori (le 4 direzioni + la pressione dell'astina) con un solo pin, attaccato ad un interrupt e memorizzando le letture in un buffer.
Logged


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

@menniti se lo fai con pochi tasti (fino a 5) puoi usare anche le resistenze comuni e non quelle di precisione, i range sono abbastanza ampii e riconoscibili e potresti sfruttare addirittura la pressione di 2 tasti contemporanei.
c'è anche una libreria per gestirli:
http://www.arduino.cc/playground/Code/AnalogButtons

Beh, i tasti sono 16 e non si scappa, ma la matrice della tastiera è di 8 punti, quindi combacia proprio con l'immagine che hai postato, o meglio, quelli sono 7, devo aggiungere un range; distanziando abbastanza i valori delle R non penso ci siano particolari problemi. Sul PG mi pare che spieghi ( smiley-sweat) che bisogna mettere una R da 100K verso massa, ma comunque sia sempre un banale partitore è,.

@ Leo: hai perfettamente ragione, non prevedo un "backspace" per cui se sbaglio, sbaglio e basta, ripeto la procedura, quindi posso effettivamente interpretare il secondo valore come valore+INVIO; poi se funziona tutto posso sempre pensare al terzo tasto per il backspace o per l'INVIO.
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

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@menniti con il portexpander che hai trovato potresti fare qualcosa del genere:
http://blog.littlebirdelectronics.com/arduino-i2c-mcp-23017-lcd-interface
Logged

Marche
Offline Offline
Edison Member
*
Karma: 32
Posts: 2263
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Anche lo shift register CD4021 può essere una soluzione, si comanda con 3 pin e legge otto ingressi
http://www.arduino.cc/en/Tutorial/ShiftIn
Logged

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

@menniti con il portexpander che hai trovato potresti fare qualcosa del genere:
http://blog.littlebirdelectronics.com/arduino-i2c-mcp-23017-lcd-interface
in pratica questo farebbe le veci del tiny84 di Leo?

Anche lo shift register CD4021 può essere una soluzione, si comanda con 3 pin e legge otto ingressi
http://www.arduino.cc/en/Tutorial/ShiftIn
Sì, tutte soluzioni valide, ma io non devo risparmiare pin, almeno in questa fase, devo far dialogare due 328 tramite tx/rx, Leo lo ha fatto con I2C, lui dice che è facile trasformare il suo firmware per il funzionamento seriale, ma se avessi qualche link con un esempio specifico....proverò.
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

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il 23017  un portexpander i2c, non è intelligete come il tiny, ma  ti permetterebbe di avere tutti i pin che servon o per l'lcd e 4 io da usare a piacimento (tasti?) e di dialogare con arduino con 2 fili.
Logged

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

il 23017  un portexpander i2c, non è intelligete come il tiny, ma  ti permetterebbe di avere tutti i pin che servon o per l'lcd e 4 io da usare a piacimento (tasti?) e di dialogare con arduino con 2 fili.
Cioè potrei pilotare l'LCD direttamente con lo sketch di Arduino usando questo PE come interfaccia I2C<->LCD? Risolverei il pilotaggio dell'LCD senza diover programmare un secondo chip? In ogni caso ho bisogno di 8 pin per gestire la tastiera e qui non posso usare il trucchetto dell'in analogico.
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
Online Online
Brattain Member
*****
Karma: 313
Posts: 21655
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora fai una bella cosa: usa un 328 intero per gestire l'LCD e la tastierina, tot. 15 pin quindi i 14 digitali + 1 analogico.
E poi comunichi con l'altro 328 usando l'I2C.

Così separi l'I/O dalla CPU.
Logged


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

Allora fai una bella cosa: usa un 328 intero per gestire l'LCD e la tastierina, tot. 15 pin quindi i 14 digitali + 1 analogico.
E poi comunichi con l'altro 328 usando l'I2C.

Così separi l'I/O dalla CPU.
Aaaaaaaah! <<andò vai? - a vedé quo vadis - e che vor dì - ando vai? - me stai a pija per culo?, t'oo chiesto prima io smiley-twist (TriRussa)»
La soluzione che mi stai suggerendo (328+display+tastieraHex) è quella che ho scelto ma:
il 328 "originale" dispone (e non posso fare diversamente smiley-cry) solo dei pin tx/rx, nel senso che sono usati pure, ma mi lasciano la possibilità di dialogare col serial monitor e quindi anche con un eventuale altro 328. Quindi l'unica speranza che ho è quella di poter far parlare tra loro due micro incrociando tx-rx e rx-tx; i pin I2C sono superimpegnati, se li tocco va tutto a putt e mi incriminano per favoreggiamento della prostituzione  smiley-zipper
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
Online Online
Brattain Member
*****
Karma: 313
Posts: 21655
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, già. Sì.
Ma il discorso non cambia, che sia I2C o seriale, sempre 2 linee usi.
Relativamente all'adattamento del mio codice, invece di TinyWireS.begin metterai Serial.begin, per TinyWireS.available metterai Serial.available... e risolvi velocemente.
Logged


Pages: 1 [2] 3   Go Up
Jump to: