Pages: [1] 2 3   Go Down
Author Topic: Due 328 in stand alone per aggiungere un display  (Read 1764 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12687
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nel mio circuito il 328 usa tutti i suoi pin per il lavoro che deve svolgere; tramite i seriali vedo sul monitor il menu, faccio le scelte, leggo i risultati, fin qui tutto ok. Stavo pensando di usare un display (16x2 o anche 20x4 se necessario) al posto del monitor seriale, ma naturalmente non ho pin sul primo 328, vorrei quindi usare un secondo 328 (come base di partenza per le prove, ma potrebbe poi essere qualcosa di più piccolo) per gestire il solo display. Mi date indicazioni per il dialogo tra le due mcu? possibilmente qualche link da studiare (anche in inglese se non c'è altro  smiley-sweat). Aggiungo che in realtà anche i due pin tx/rx del primo 328 sono usati, ma ho una tempistica per la quale, nel momento in cui mi serve il menu non vengono usati, non posso fare la stessa cosa con altri 8 per gestire il display (a proposito, leggevo che si potrebbe pilotare l'LCD con 4 bit invece che 8, sarebbe utile per risparmiane sulla seconda mcu, altre info? finora non ho MAI usato display)
Logged


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

Io le ho vari LCD e occupo al massimo 6pin DB7-DB4 , E, R/W
il problema secondo me è prendere i dati da seriale e visualizzarli...
potresti per ogni riga mettere una stringa e fai una lettura seriale con una condizione numerica per cui passi un numero 244 e visualizzi ciò che ti viene inviato dalla seriale nella prima riga per
243 visualizzi nella seconda e via dicendo.....
Logged

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

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

Usa un Attiny84: ha i piedini sufficienti per gestire l'LCD in modalità 4 bit. Comunichi con l'Atmega328 via I2C (2 soli pin), fai un piccolo protocollo di comunicazione fra i 2.
Se vuoi tutto il codice, posso spedirti sia il firmware dell'Attiny84 sia quello dell'Atmega328 così vedi come ho risolto.
Logged


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

Salve, ci sono molti modi per usare un display lcd soltanto che non saprei cosa consigliarti visto che dici di aver occupato tutti i pin. Ad esempio se usi i pin analogici 4 e 5 per gestire qualcosa tramite protocollo I2C potresti aggiungerci nello stesso bus un
port expander PCF8574 per controllare direttamente il display senza usare un altro atmega ( http://ardugonic.blogspot.com/2010/07/controlling-lcd-display-via-i2c-bus.html ).
A proposito se usi un altro atmega dovrai farlo comunicare con il primo in qualche maniera quindi o con la seriale o con il bus I2C.
Se decidi di usare un altro atmega a questo punto puoi anche comandare il display anche tramite uno shift register 74hc595 con la libreria shiftlcd usando solo tre pin ( http://cjparish.blogspot.com/2010/01/controlling-lcd-display-with-shift.html ) Questo metodo lo uso sempre e funziona molto bene, in pratica con soli tre pin si comanda l'lcd; ora ti voglio mettere la pulce nell'orecchio: chissà se si potrà usare anche con un attiny....
Buone prove e spero di esserti stato di auito
Ciao

Edit
Ammazza, ma anche la mattina state attivi? Mentre scrivevo questo post già 2 messaggi...  smiley
Non è una critica, anzi....
Logged

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

Hai posta.
Logged


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

Ammazza, ma anche la mattina state attivi? Mentre scrivevo questo post già 2 messaggi...  smiley
Beh, mi sono alzato alle 5:20 e sono entrato a lavoro alle 6:00. Diciamo che sono già operativo da un bel po'  smiley-razz
Logged


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

Grazie a tutti!!! (@ Leo: ricevuta smiley-lol)
Provo a riepilogare:
la soluzione di ratto è troppo complicata, ho un codice niente male, non posso infilarci dentro troppa roba.
Soluzione I2C: mi andrebbe benissimo il tiny84 ma i pin A5-A6 (ragioniamo in termini Arduino) del 328 sono occupati e attivi, quindi mi sa che non posso usarli per comunicare. Secondo Bud Pelletta potrei usare un PCF8574, ma il tiny per me sarebbe uguale, inoltre ce l'ho.
Soluzione seriale: come detto dispongo periodicamente dei due pin PD0-PD1 per inviare dati al monitor seriale, vorrei quindi poter usare questi soli due pin per uscire su un display, posso adottare qualsiasi soluzione hardware, ma anche qui un tiny85+HC595 o un tiny84 da solo sono la stessa cosa.
Quindi la domanda secca è:
Posso usare tx/rx per comunicare con un attiny/atmega che mi piloterà il display? In questo caso mi basterà sostituire i tipici comandi della scrittura seriale con quelli della scrittura LCD per vedere il menu dull'LCD?
Tenete presente che questo è solo il problema base  smiley-sweat visto che dovrò implementare una tastiera tipo esadecimale (che spero esista smiley-eek-blue) per poter fornire al 328 le scelte di menu (0÷5) ed i valori in esadecimale (00-FF).
Che dite, è dura? Il circuito funziona tranquillamente col monitor seriale, ora implemento lo schema per sganciarlo dall'IDE ed usare HypoTerminal, pensavo proprio di liberarmi del PC, e creare lo standalone PURO.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9901
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la soluzione di ratto è troppo complicata, ho un codice niente male, non posso infilarci dentro troppa roba.

Usa un display LCD seriale.
Logged

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

M ai pin A4/A5 sono usati per altro, non per comunicare con un altro dispositivo I2C, giusto?

Cmq puoi usare RX/TX, il procedimento è lo stesso che usare l'I2C con l'unico limite che la comunicazione è "diretta" e non condivisibile. Poi puoi adattare i miei firmware per comunicare fra Tiny e Mega, cambia solo il modo di come invii/ricevi i dati.

PS:
nel firmware che ti ho spedito, quello relativo al 328, c'è anche una parte di acquisizione di numeri usando 2 soli pulsantini (scorrimento e selezione). Lì mi fermo a 0-9 ,ma nulla vieta di allargare il range a 0-F con poche righe di codice.
Logged


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

la soluzione di ratto è troppo complicata, ho un codice niente male, non posso infilarci dentro troppa roba.

Usa un display LCD seriale.
Un LCD seriale emula in tutto e per tutto il monitor dell'IDE? Se è così sarebbe comodissimo, ma mi resterebbe il problema della gestione della tastiera, in ogni caso mi devo interfacciare ad un altro chip, giusto?
I pin A4/A5 (prima ho sbagliato smiley-red) servono per altro, sì, sono segnali di programmazione, ciò significa che potrei contestualmente usarli per l'I2C senza che mi disturbino il circuito?
L'idea dei due tasti la vedo scomoda, considerando che devo inserire due-tre valori in hex starei lì troppo tempo, se non riesco a fare una cosa seria non vale la pena, tanto vale restare sul PC.
In poche parole all'avvio della procedura il display mi mostra un menu (0÷5), inserisco il numero di scelta, il menu mi dà conferma e mi dice di procedere; premo un pulsante sul circuito ed il display mi mostra 2-3 valori in hex e quindi mi chiede di inserire i nuovi valori, p.es. 00 (INVIO) - FF (INVIO) - 0F(INVIO). Il display mi dà conferma dell'accettazione dei nuovi valori e la procedura finisce.
Attualmente uso la tastiera del PC ed il monitor seriale dell'IDE, a breve elimino il monitor seriale a favore di HypoTerminal, vorrei implementare come opzione un tastierino + LCD "interattivi"
Logged


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

Se i pin non li usi per l'I2C credo che poi darebbero noia quando usati per comunicare.
Un display seriale significa che ha alloggiato un micro (alle volte anche un Atmega168 SMD) che replica ciò che fa il mio firmware per l'Attiny84, ossia converte i segnali RX/TX o I2C in classici comandi per un display parallelo.
Logged


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

Se i pin non li usi per l'I2C credo che poi darebbero noia quando usati per comunicare.
Un display seriale significa che ha alloggiato un micro (alle volte anche un Atmega168 SMD) che replica ciò che fa il mio firmware per l'Attiny84, ossia converte i segnali RX/TX o I2C in classici comandi per un display parallelo.
Quindi mi andrebbe bene solo per mostrare dati, visto che non mi resterebbe più nulla per interfacciare la tastiera. Niente, l'unica è capire se e come posso usare i due pin seriali per colloquiare con un altro micro che piloti il display e la tastiera; in pratica dovrei riuscire a fare ciò che tu hai fatto con i due pin dell'I2C, ma usando i due pin seriali. Pelletta lo suggeriva ma non mi ha dato altri elementi.
La cosa dovrebbe essere fattibile: il monitor seriale mi permette di ricevere ed inviare dati inseriti con la testiera colloquiando solo con tx/rx del micro, quindi dovrei usare un altro micro+display+tastiera come se fosse un monitor seriale.
Logged


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

Esatto. Basta connettere RX/TX, cioè incrociare i canali in modo che quando l'Atmega1 trasmette l'Atmega2 riceve e viceversa. Poi piloti la tastierina ed il display con l'Atmega2 e spedisci i dati da e per l'Atmega1.
Logged


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

Esatto. Basta connettere RX/TX, cioè incrociare i canali in modo che quando l'Atmega1 trasmette l'Atmega2 riceve e viceversa. Poi piloti la tastierina ed il display con l'Atmega2 e spedisci i dati da e per l'Atmega1.
e che ci vuole? smiley-eek-blue  smiley-red
Ok, allora devo separare le due cose altrimenti entro in una jungla da cui non uscirò che cadavere smiley-cry
Nei prox giorni spero di finire con HypoTerminal.
Passo due: metto in piedi atmega (per iniziare)+LCD + due tastini per imparare la tecnica di interattività con LCD
Passo tre: sostituisco i tastini con un tastierino esadecimale (intanto ho visto che è una semplice matrice 4x4)
Passo finale: faccio colloquiare i due micro
Se non trapasso prima per vecchiaia; naturalmente faccio un po' di prove con il tuo firmware e con ciò che c'è sul PlayGround
Logged


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

Ma hai già tanta roba pronta nei miei firmware, di che ti lamenti?  smiley-wink
PS: sì, un tastierino si riduce ad una matrice di tasti, quindi con 8 pin sei a posto. 6 pin li usi per il display (modalità 4 bit), 1 pin per un eventuale transistor per staccare la retroilluminazione (consigliato! solo quella porta via in media sui 240/250 mA, ossia 100 volte quello che consuma il resto del display!), 2 pinx per RX/TX. Alla fine consumi tutti i 14 pin digitali del 328 più 3 pin analogici. Ce la dovresti fare.
Logged


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