|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
[Python->Pic] Controllo seriale di un display 100x7
Ciao a tutti,
io e altri 3 ragazzi stiamo sviluppando (per la tesina) un programma per controllare un tabellone a led (costruito precedentemente da altri ragazzi ) via seriale. Questo tabellone è composto da 100 colonne da 7 led. Ci sono 7 pic di cui uno master e sei slave. Per visualizzare una schermata il pic master bisogno di ricevere 100byte in modo da settare una colonna alla volta. Il programma in Python è quasi concluso, l 'ho uppato qui (se mi dite che posso lo allego anche sul forum tanto è 5k) ma il problema è che il tabellone in questo modo ha sempre bisogno di un pc. L'obiettivo della tesina era di fare un hardware che faccia il lavoro del programma in python. Inferfacciabile via seriale (solo per settare la scritta e eventuale scorrimento), e magari o bluetooth o modulo gsm. Esiste qualcosa programmabile in Python o in qualche altro linguaggio in grado di fare questo? Altri consigli? Far fare questo lavoro ad un Pic sembra troppo complicato. Andrebbe completamente riscritto il codice. PS: Nel programma in Python c'è anche un simulatore del tabellone per visualizzare il risultato. Ultima modifica di Utone : 31-01-2010 alle 19:15. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Mi sa che dovrete riscrivervi il programmino in C.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
Cavolo... qualche idea di come farlo?
Nel python abbiamo usato il dizionario, in C dovremmo usare le matrici e fare un if ogni carattere giusto? Per esempio la prima implementazione era questa: Codice:
A=[[124,18,17,18,124,0],"A"] T=[[1,1,127,1,1,0],"T"] U=[[63,64,64,64,63,0],"U"] C=[[62,65,65,65,34,0],"C"] S=[[38,73,73,73,50,0],"S"] spazio=[[0,0,0,0,0,0]," "] testo=raw_input("Testo") for x in testo: if x in A: L=L+A[0] if x in T: L=L+T[0] solo che in c non ho neanche il comando in... |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() int indice = (int) carattere; o anche (penso, non sono sicuro): int indice = (int)('A'); e forse anche lettere[ (int)('A') ]; Poi crei una matrice fatta così: int lettere[128][7] = { {0,0,0,0,0,0,0}, //ascii 0 {0,0,0,0,0,0,0}, //ascii 1 {0,0,0,0,0,0,0}, //ascii 2 ... {124,18,17,18,124,0,0}, //ascii 65 ( 'A' ) ... }; Dove 128 sono il numero di caratteri ascii e 7 le righe di ogni carattere Non dovrebbe essere troppo difficile visto che hai già dovuto creare una tabella di questo genere, al massimo dovrai riempire quei caratteri che non ti servivano prima. Cmq se vuoi posso aiutarti nella traduzione ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#7 | |||
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
Quote:
il costo più o meno?? edit- Ho letto che si programma in Processing o Wiring. Qualcuno li conosce? Per il prezzo ho visto che parte da 20€ ma quello con il bluetooth viene 80€!! Quote:
![]() io con il C ho poca esperienza... ho programmato solo il pic 16f877... Io gli mando una colonna alla volta.. Tipo la "I" è un 127,0. Se creo una matrice che ha dentro liste ( ![]() Quote:
Ne trascrivo qui un pezzo per far capire.. Codice:
def leggiLettere(): lett={} #MAIUSCOLE lett ['A'] = [124,18,17,18,124,0] lett ['B'] = [127,73,73,73,54,0] lett ['C'] = [62,65,65,65,34,0] lett ['D'] = [127,65,65,34,28,0] lett ['E'] = [127,73,73,73,65,0] lett ['F'] = [127,65,65,34,28,0] lett ['G'] = [62,65,73,73,57,0] lett ['H'] = [127,8,8,8,127,0] lett ['I'] = [127,0] eccccccc return lett def aggiornaTkDisplay(): #scrive i 100 byte sul display for i in colonne: tkDisp.write(chr(i)) #scrive sul simulatore #ser.write(chr(i)) #scrive sulla seriale def scriviColonne(s): cnt=0 for z in s: #mi serve per contare quanti byte vado a variare for x in lettere[z]: cnt= cnt+1 pos=(100-cnt)/2 for c in s: #attraverso la stringa for n in lettere[c]: #ricavo i valori dei vari carattere colonne[pos] = n #scrivo i valori nella lista pos+=1 def scrivi(): cancella() testo=entry.get() #prendo il testo dal tkinter scriviColonne(testo) aggiornaTkDisplay() colonne = [0]*100 lettere = leggiLettere() Ultima modifica di Utone : 26-01-2010 alle 21:17. |
|||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ieri non riuscivo a scaricare il sorgente. Comunque Z80Fan ti ha indicato una buona strada per riscrivere il tuo codice in C.
Solo un appunto: i dizionari li puoi dichiarare in maniera più elegante. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Codice:
lett = {'A' : [124,18,17,18,124,0], 'B' : [127,73,73,73,54,0]}
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
Ah capito... ma è solo questione di forma.. non cambia niente giusto?
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E' anche più veloce. Soprattutto con wpython.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
... { ... } /* H */ {127,0,0,0,0,0,0}, /* I */ { ... } /* J */ ... Si, si usano le parentesi graffe in C per inizializzare vettori/matrici. Cmq più che "matrice che ha dentro liste" direi che è un vettore di vettori ![]() |
|
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
ah! Allora modificherò la sintassi..grazie mille.
Quote:
Poi ci sono altri caratteri più lungo come ad esempio la W. I vettori che contengono questi valori non possono avere lunghezza variabile? Tipo: {127,0} /* I */ ... {...,...,...,...,...,...,...} /* W*/ Altra domanda: Una volta riscritto tutto il programma in C lo carichiamo sui pic (a scuola dovremmo avere il 16F877). Ma dopo posso interfacciarlo con bluetooth o modulo gsm? Ultima modifica di Utone : 27-01-2010 alle 21:30. |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
Ho cambiato la struttura delle matrici delle lettere e l'ho resa simile ai vettori in Così sarà più facile la trascrizione... qui il nuovo codice.. se non riuscite a scaricare lo uppo da qualche altra parte..
Che dici cdimauro? va bene così? |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
esempio: Codice:
void invia( char lettera ) { int i=0; while( matriceSimboli[ (int)lettera][i] != 0 ) //matriceSimboli sarà una variabile globale { invia_alla_seriale( matriceSimboli[ (int)lettera][i] ); i++; } } Per la seconda domanda, bisogna vedere come funziona il C del pic. Sicuramente la casa madre avrà dato delle librerie da includere in cui ci sono tutte le funzioni necessarie. Purtroppo non ti so dire altro perchè non ho mai programmato in C per i pic (probabilmente lo facciamo quest'anno), quindi ti posso dare consigli sul linguaggio più che altro. |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
Quote:
Per il problema degli zeri.. dopo ci sarebbe il problema degli spazi. Lo spazio invia 4 zeri.. e un altra cosa... ogni lettera in fondo ha uno zero per spaziarsi dalla lettera successiva.. Per gli zeri |
|
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
|
|
![]() |
![]() |
![]() |
#19 | ||
Senior Member
Iscritto dal: Jun 2007
Messaggi: 1805
|
Quote:
Quote:
Il più dopo è capire come interfacciarlo con l'esterno senza usare la seriale.. |
||
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() Come vorresti interfacciarlo? attraverso parallela, i2c, bluetooth ? |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:17.