Pages: [1]   Go Down
Author Topic: Leggere con Arduino una sequenza di bit  (Read 1621 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 521
Posts: 12325
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti, con il vostro aiuto ho realizzato un circuito per la generazione di sequenze di bit. Il circuito è autonomo, con un ATmega usato in stand alone.
Ora ho necessità di leggere con Arduino questa sequenza (variabile), ma prima di cimentarmi a scrivere il programma (sono un neofita!) vorrei il vostro parere in merito a:
1 - Una sequenza "ideale" fatta di 1010....(praticamente un'onda quadra) penso si possa leggere facilmente, ma quando è varia, p.es. 11000101111000, come faccio a "spiegare" ad Arduino che deve separare questi valori uguali? penso di dover calcolare il periodo e poi campionare in quel lasso di tempo.
2 - L'altro problema è questo: il mio circuito invia in continuazione una sequenza di 24 bit senza interruzione, con un clock di 10MHz, Arduino è in grado di operare a questa velocità?
Se mi date un po' di dritte, posso iniziare a cimentarmi, se poi qualche anima bella decidesse pure di abbozzare un minimo di righe, non mi offenderei smiley-red
Per chi non avesse seguito il topic precedente: il circuito generatore simula l'uscita di un apparecchio di laboratorio; il mio intento è riuscire a "scovare" determinate sequenze di 4-5 bit; finora ho costruito dei circuiti logici, ma le sequenze da cercare cambiano in continuazione ecco perché vorrei leggerle con Arduino.
Grazie.
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

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

Già era impossibile con Arduino, e comunque con qualunque altra MCU similare, generare la sequenza in modo continuo senza ricorrere ad un hardware esterno ed è ancora più impossibile acquisirla e analizzarla in tempo reale.
La tecnica da usare è l'interrupt on change, cioè viene generato un interrupt ogni volta che un ingresso digitale dotato di questa funzionalità cambia di stato, cioè passa da 0 a 1 o viceversa.
Con una frequenza di ingresso di 10 MHz abbiamo un possibile cambio di stato ogni 100 nS, questo vuol dire che il micro deve essere in grado di gestire l'interrupt e tutte le operazioni di confronto entro questo tempo.
Premesso che la potenza finale di calcolo, indipendentemente dalla soluzione utilizzata, è sicuramente molto alta cosa usare dipende da un parametro che non hai specificato.
Il confronto dei bit letti per trovare la sequenza che ti interessa è solo sul pacchetto dati (24 o più bit) corrente con un campione preimpostato oppure deve avvenire su un certo numero di campioni preacquisti al fine di trovare ripetizioni di sequenze di bit uguali contenuti nei pacchetti ?
« Last Edit: March 18, 2011, 05:33:48 am by astrobeed » Logged

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

Ciao astrobeed, grazie, immaginavo che non fosse semplice. Intanto approfitto per dirti che ho un problema residuo nell'altro mio topic, spero mi aiuterai a risolverlo, visto che hai fatto praticamente tutto tu  smiley-confuse
Spiego il problema reale: il macchinario tira fuori sequenze infinite; di volta in volta devo cercare all'interno di esse una mini-sequenza, al massimo due (raramente tre) in base al tipo di ricerca che stiamo facendo. In pratica prima di Arduino realizzavo il circuito logico riconoscitore, lo attaccavo al macchinario e lui mi segnalava ogni volta che identificava una delle minisequenze.
Ho realizzato il generatore a 24 bit per avere un range utile, il mio scopo è farmi segnalare da Arduino ogni volta che trova una di queste sequenze da 3-4-5 bit.
In definitiva il generatore mi serve "a casa" per simulare il macchinario, il lettore lo provo a casa col simulatore, lo programmo di volta in volta per le sequenze che mi servono e poi lo porto all'UNI per collegarlo al macchinario; dovrei fare in modo che mi accenda un led ogni volta che trova una sequenza, attivando un pin con un led per ogni sequenza. Ovviamente non posso pensare di memorizzare centinaia di bit e poi analizzarli, né devo memorizzare i risultati, quindi dovrebbe avvenire tutto in real time. Pensi che si possa fare qualcosa o devo rassegnarmi a continuare con i cuircuitini?
Grazie!
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

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

Ricapitolando, dal macchinario esce un flusso dati costante alla velocità di 10 mbps, lo scopo è identificare in tempo reale all'interno del flusso dati una, o più, sequenze preimpostate, quando viene trovata deve essere segnalata in un qualche modo, immagino che ti serva pure sapere quale sequenza è stata identificata tra quelle campione.
Con Arduino non ci fai nulla, al limite può essere solo l'ultimo anello della catena che ti accende i led ed eventualmente ti fa apparire un messaggio video sul pc.
Ti serve un hardware specifico che confronta il flusso dati con le sequenze, ora tocca decidere se vuoi usare logica cablata programmabile da Arduino per la ricerca della/e sequenza, strada fattibile ma complessa da realizzare, oppure fare tutto con un micro idoneo, forse ce la facciamo con un dsPIC, assistito da uno shift register a 8 bit per l'acquisizione del flusso dati.
Logged

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

WOW! ok, i miei circuitini, ai quali invio il segnale in "parallelo" mi dicono già quale sequenza è stata trovata, quindi potrei al limite collegare le uscite ad altrettanti pin di Arduino per gestire le segnalazioni e conteggiarle, così mi evito il circuito contatore con display sul cablato.
Mi tenta moltissimo questa idea del dsPic, ma purtroppo non sono attrezzato con programmatori e quant'altro; dispongo solo di 3 Arduino: 2009, UNO e Luigino, ma non credo servano a nulla.
A meno che tu non mi dica che la cosa sia fattibile con poche risorse penso che dovrò rinunciare all'idea, per il momento. smiley-cry
Ti prego, dammi speranza!  smiley
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

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

Con l'hardware a tua disposizione puoi solo "leggere" la sequenza tramite portame logico assortito, come già stai facendo, e segnalare ad Arduino quando viene trovata la sequenza, ma a meno che non vuoi contare quante volte succede in un certo arco di tempo fai prima a far accendere un led dalla logica che esegue il confronto.
Logged

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

E' quanto avevo immaginato; infatti avevo pensato di usare Arduino come contatore, forse avrò esigenza di farlo, ma questo è abbastanza banale.
Invece la tua "non" risposta sul dsPIC mi fa capire che dovrei disporre di specifica attrezzatura, e quindi per ora devo abbandonare l'idea.
Grazie di tutto, astrobeed, speriamo di risolvere l'altro problemino.
Ciao
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

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

Il problema non è l'attrezzatura, se prendi una MuIn dsPIC sopra c'è installato un bootloader seriale che ti permette di caricare i programmi senza disporre di uno specifico programmatore, se non hai un cavo USB-Seriale (TTL) puoi usare Arduino 2009 come interfaccia.
Il problema è il software, programmare i dsPIC non è semplice come Arduino, e non sono sicuro al 100% che basti un dsPIC per fare quello che ti serve, dovrei fare qualche stima sui tempi di elaborazione per dirti si o no con certezza.
Poi c'è il fattore tempo, in questo periodo sono abbastanza impegnato col lavoro e non posso realizzarti io il programma per il dsPIC.
Logged

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

Sì, tutto chiaro, non ti chiederò tanto, davvero non ne vale la pena farti perdere tanto tempo; col solo generatore ho risolto il 90% dei miei problemi, per il restante 10 basta qualche flip-flop e quanche porta logica... smiley-wink
Grazie davvero per tuto il tempo che dedichi a questo forum.  smiley
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

Pages: [1]   Go Up
Jump to: