Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-01-2010, 17:56   #1
Utone
Senior Member
 
L'Avatar di Utone
 
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 20:15.
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 20:57   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 21:23   #3
Utone
Senior Member
 
L'Avatar di Utone
 
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]
ecc....
solo che in c non ho neanche il comando in...
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 21:36   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Un arduino? Si programma in una specia di Java mi pare

Ultima modifica di ndakota : 26-01-2010 alle 21:41.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 21:48   #5
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Utone Guarda i messaggi
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]
ecc....
solo che in c non ho neanche il comando in...
Ciao, io non conosco il python ma penso di intuire il problema. Penso non dovrebbe essere troppo difficile ricrearlo in C, visto che usi lettere singole come "indice" per l'array (parlo sempre i termini C-eschi ) Potresti usare il valore ascii equivalente come indice nell'array dove tieni le "bitmap" dei vari caratteri (immagino che tutti i numeretti siano i valori di acceso/spento da dare ai led), quindi per trovare l'indice dato il carattere ti basterebbe fare
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
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 21:50   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Utone Guarda i messaggi
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]
ecc....
solo che in c non ho neanche il comando in...
Quelli non sono dizionari, ma liste, e per simulare l'in in C ti basta scorrerle e controllare elemento per elemento.
__________________
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2010, 22:08   #7
Utone
Senior Member
 
L'Avatar di Utone
 
Iscritto dal: Jun 2007
Messaggi: 1805
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Un arduino? Si programma in una specia di Java mi pare
è fattibile un programma del genere in Java? Io non ho mai programmato..
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:
Originariamente inviato da Z80Fan Guarda i messaggi
Ciao, io non conosco il python ma penso di intuire il problema. Penso non dovrebbe essere troppo difficile ricrearlo in C, visto che usi lettere singole come "indice" per l'array (parlo sempre i termini C-eschi ) Potresti usare il valore ascii equivalente come indice nell'array dove tieni le "bitmap" dei vari caratteri (immagino che tutti i numeretti siano i valori di acceso/spento da dare ai led), quindi per trovare l'indice dato il carattere ti basterebbe fare
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
Per prima cosa ti ringrazio molto per la disponibilità..
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 ( parentesi graffe??) di lunghezza fissa avrei 6 spazi vuoti di troppo giusto?

Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Quelli non sono dizionari, ma liste, e per simulare l'in in C ti basta scorrerle e controllare elemento per elemento.
lo so che sono liste queste infatti ho scritto che era solo la prima implementezione (che è più vicina al C). Il codice "finale" l'ho linkato..
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 22:17.
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 08:22   #8
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 15:07   #9
Utone
Senior Member
 
L'Avatar di Utone
 
Iscritto dal: Jun 2007
Messaggi: 1805
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Solo un appunto: i dizionari li puoi dichiarare in maniera più elegante.
Per esempio??
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 17:06   #10
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 17:43   #11
Utone
Senior Member
 
L'Avatar di Utone
 
Iscritto dal: Jun 2007
Messaggi: 1805
Ah capito... ma è solo questione di forma.. non cambia niente giusto?
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 19:09   #12
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 20:08   #13
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Utone Guarda i messaggi
Per prima cosa ti ringrazio molto per la disponibilità..
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 ( parentesi graffe??) di lunghezza fissa avrei 6 spazi vuoti di troppo giusto?
Esattamente, avresti una riga tipo
...
{ ... } /* 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
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 27-01-2010, 22:01   #14
Utone
Senior Member
 
L'Avatar di Utone
 
Iscritto dal: Jun 2007
Messaggi: 1805
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
E' anche più veloce. Soprattutto con wpython.
ah! Allora modificherò la sintassi..grazie mille.

Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Esattamente, avresti una riga tipo
...
{ ... } /* 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
Mmm.. ma cosi non va bene perchè avrei troppo spazio bianco...
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 22:30.
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2010, 19:22   #15
Utone
Senior Member
 
L'Avatar di Utone
 
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ì?
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2010, 19:26   #16
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Utone Guarda i messaggi
Mmm.. ma cosi non va bene perchè avrei troppo spazio bianco...
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?
Le matrici o vettori dichiarati staticamente (come questi) non possono avere dimensioni variabili, solo quelli dinamici, ma non si possono usare in ambito embedded. Cmq non è un problema per la visualizzazione: fai un ciclo che invia i dati di una lettera solo finchè non trova uno zero.
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ò diventa un problema se hai una quantità di memoria limitata, dove lo spreco di tutti i byte per tenere gli zero è notevole (beh, bisogna vedere quanti spazi vuoti rimangono effettivamente).
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.
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2010, 19:30   #17
Utone
Senior Member
 
L'Avatar di Utone
 
Iscritto dal: Jun 2007
Messaggi: 1805
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Le matrici o vettori dichiarati staticamente (come questi) non possono avere dimensioni variabili, solo quelli dinamici, ma non si possono usare in ambito embedded. Cmq non è un problema per la visualizzazione: fai un ciclo che invia i dati di una lettera solo finchè non trova uno zero.
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ò diventa un problema se hai una quantità di memoria limitata, dove lo spreco di tutti i byte per tenere gli zero è notevole (beh, bisogna vedere quanti spazi vuoti rimangono effettivamente).
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.
Per il pic chiedo più info al prof... al max ne facciamo comprare uno più potente...quello che abbiamo noi dovrebbe avere oltre alla rom anche una eeprom interna..
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
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2010, 19:57   #18
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Utone Guarda i messaggi
Per il pic chiedo più info al prof... al max ne facciamo comprare uno più potente...quello che abbiamo noi dovrebbe avere oltre alla rom anche una eeprom interna..
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
Per lo spazio possiamo fare un if che se il carattere passato è uno spazio noi inviamo quattro spazi altrimenti cerchiamo nella tabella. Per lo spaziamento dei caratteri è lo stesso: dopo il while che ho scritto io ci metti un invio di uno zero. Per il pic, penso che serva solo la rom, poichè la eeprom viene usata solo per i dati che devono venir modificati dal pic, queste matrici sono compilate direttamente nel codice del programma. E poi le eeprom sono veramente piccole, tipo 128 byte o poco + perchè servono proprio per memorizzare dati di configurazione ecc... Cmq questa tabella ti occupa intorno ai 800 byte quindi non dovrebbero esserci problemi di spazio, a meno che il pic non sia veramente minuscolo e il programma non sia esageratamente grande.
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2010, 20:04   #19
Utone
Senior Member
 
L'Avatar di Utone
 
Iscritto dal: Jun 2007
Messaggi: 1805
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Per lo spazio possiamo fare un if che se il carattere passato è uno spazio noi inviamo quattro spazi altrimenti cerchiamo nella tabella. Per lo spaziamento dei caratteri è lo stesso: dopo il while che ho scritto io ci metti un invio di uno zero. Per il pic, penso che serva solo la rom, poichè la eeprom viene usata solo per i dati che devono venir modificati dal pic, queste matrici sono compilate direttamente nel codice del programma. E poi le eeprom sono veramente piccole, tipo 128 byte o poco + perchè servono proprio per memorizzare dati di configurazione ecc... Cmq questa tabella ti occupa intorno ai 800 byte quindi non dovrebbero esserci problemi di spazio, a meno che il pic non sia veramente minuscolo e il programma non sia esageratamente grande.
Non credo ci siano problemi di memoria...
Quote:
PIC = Peripheral Interface Controller (Controllore di periferiche programmabile)
Il PIC16F877 ha 8k di flash memory (area programma), 368 byte di ram e 256 byte di e2prom. Tutte le istruzioni, ad eccezione di quelle di salto, che ne utilizzano 2, utilizzano 1 ciclo macchina che corrisponde a 4 periodi di clock. Il PIC16F877 può lavorare con un clock compreso da 0 a 20 Mhz, può avere fino a 14 sorgenti diverse di interrupt (da periferiche interne e/o esterne) ed è possibile annidare fino ad 8 chiamate a subroutine in quanto lo Stack ha una profondità pari a 8.
Ha un architettura RISC che significa : Reduced Instruction Set Computing, cioè elaborazione con insieme di istruzioni ridotto.
Le istruzioni sono quindi solo poche decine, sono eseguite molto velocemente e non serve un clock molto elevato per un efficiente funzionamento ( dai 4-8 MHz per i tipi più semplici, fino a 33-50 MHz per i tipi più evoluti)
Supporta la ICSP : In Serial Circuit Programmino cioè la possibilità di programmarlo senza togliere il chip dalla scheda, con un apposito cavetto.

Elenco delle periferiche contenute nel PIC16F877
  • 3 Timer (Timer0 8 bit, Timer1 16 bit e Timer2 8 bit)
  • 2 moduli CCP capture, compare e pwm
  • 8 adc a 10 bit
  • porta seriale sincrona e i2c
  • porta di comunicazione parallela (PSP)
  • porta seriale asincrona (usart)
  • diversi pin di i/o distribuiti su 5 porte (Porta, Portb, Portc, Portd, Porte)
più o meno per la traduzione in C ci sono.. ora devo cambiare i cicli FOR in WHILE e cambiare la sintassi..
Il più dopo è capire come interfacciarlo con l'esterno senza usare la seriale..
Utone è offline   Rispondi citando il messaggio o parte di esso
Old 28-01-2010, 20:10   #20
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da Utone Guarda i messaggi
ora devo cambiare i cicli FOR in WHILE e cambiare la sintassi..
Perchè? esistono i for anche in C
Quote:
Originariamente inviato da Utone Guarda i messaggi
Il più dopo è capire come interfacciarlo con l'esterno senza usare la seriale..
Come vorresti interfacciarlo? attraverso parallela, i2c, bluetooth ?
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
CoopVoce lancia le sue prime offerte 5G:...
Rivoluzione The Elder Scrolls Online: un...
Lo strapotere cinese è evidente c...
GeForce RTX 6000: niente SUPER e attesa ...
Anche gli Stati Uniti puntano il dito co...
È cinese la prima (enorme) pala e...
A Pechino è record di giorni con ...
Lenovo al CES 2026: Qira, IA ambientale ...
Le sette startup italiane che ridefinisc...
Philips Hue SpatialAware: la configurazi...
Sport & Lifestyle: performance, dati...
Le novità HP al CES 2026 tra AI P...
Gigabyte propone OLED per tutti con lumi...
Musk contro OpenAI, la guerra arriva in ...
Nuovi desktop e laptop ASUS: la sicurezz...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v