Newsgroup: it.hobby.elettronica.digitale
Titolo: Usare un pin del micro per programmarne un'altro

Salve, vorrei fare un programmatore di micro .. usando a mia volta un micro 
+ grosso.
Devo usare uno dei pin in modo da portarlo a 1 per N microsecondi, poi a 
zero per N microsecondi ecc ..
Il problema č che le temporizzazioni sono proprio critiche: qualche 
microsecondo č poco!
Per fare questo pensavo di introdurre dei ritardi con dei nop(). Perň questo 
mi diventa un problema se in futuro cambio oscillatore, oppure intervengono 
degli interrupt.
In questi casi qual'č la miglior soluzione?
grazie 

In questi casi qual'è la miglior soluzione?
Dipende, in genere si usamo dei NOP per gestire le temporizzazioni solo se i
tempi sono critici e in quella fase ovviamente si debbono disabilitare gli
interrupt.
Per esempio in applicazioni dove si debbono usare sincronismi video si può fare
così e la cosa funziona.
In altri casi puoi pensare di gestire la cosa usando un timer, però devi
considerare che sia il polling che l'interrupt comportano un numero di cilcli di
clock in più e spesso questo non è accettabile
Inoltre se devi gestire altri interrupt in concorrenza la cosa si complica
perchè i µC di fascia medio-bassa non gestiscono la priorità degli interrupt.
Se il µC non ce la fa, allora bisogna pensare a soluzioni hardware, da un paio
di IC fino a delle logiche programmabili che gestiscano il tutto, dipende dalle
caratteristiche dell'oggetto che si deve ottenere.
--
ciao
  Stefano

 microsecondo č poco!
Se hai una porta SPI abbastanza versatile, puoi configurarla in modo da 
avere come tempo di bit x us, cosě da poter usare il segnare MOSI per avere 
i tuoi delay.
Supponi che usi un tempo di bit di 10us, inviando (ad esempio)
11000010
hai
20us alto, 40us basso, 10us alto, 10us basso
Alcune spi puoi configurarle con word da 16bit, se poi hai anche un fifo i 
tempi sono ancora piů rilassati.
In ogni caso dovresti scrivere un dato ogni 8*Nus (o comunque per il minimo 
comune multiplo).
-- 
  Filippo

> Se il 湣 non ce la fa, allora bisogna pensare a soluzioni hardware
E' possibile sfruttare il modulo PWM o l'I2c in qualche modo "furbo" ?
Intendo dire .. magari settando opportunamente la periferica PWM riesco a 
creare il mio segnale in uscita, o sbaglio? 

creare il mio segnale in uscita, o sbaglio? 
Mah, con il PWM gestisci solo un duty cycle, e le istruzioni per cambiarlo
probabilmente richieserebbero più tempo che la gestione diretta degli I/O.
L'I2C è un protocollo abbastanza sofisticato e non si presta a queste cose.
Usando l'SPI in modo particolare, come ti hanno già consigliato, si può fare
qualcosa ma se sono situazioni time-critical la CPU deve avere sempre il
controllo della situazione, perchè hai comunque delle latenze piccole.
Io proverei prima con i NOP e poi se ci sono problemi cercherei delle
alternative.
--
ciao
  Stefano

 In questi casi qual'č la miglior soluzione?
Se gli intervalli sono dello stesso ordine di grandezza del tempo di
esecuzione di una singola istruzione, bisogna per forza usare i nop (magari
parametrizzandone il numero in base alla frequenza di clock e disattivando
gli interrupt). Altrimenti osserva con una busy wait il valore di un timer
che si incrementa alla frequenza di clock; qualsiasi processore serio ne ha
almeno uno.
-- 
emboliaschizoide.splinder.com

 degli interrupt.
a parte l' oscillatore, hai un'altra base dei tempi a bordo ?
saluti
-- 
  lowcost

> a parte l' oscillatore, hai un'altra base dei tempi a bordo ?
no, nessuna altra base tempi 

 intervengono degli interrupt.
Innanzitutto dovresti però dirci quale micro vorresti programmare, perchè le 
interfacce di comunicazione sono + di una, anche se in genere si utilizza 
una seriale sincrona/bidirezionale a 2 fili.
In genere la comunicazione bidirezionale è utile per verificare l'effettiva 
corretta programmazione.
Se intendi programmare un pic, ti posso dire che a scopo di curiosità e per 
verificare se effettivamente poteva funzionare, tempo fa ho voluto testare 
questo 
http://www.circuitcellar.com/flash2002/Honorable/M285-abstract.htm
 
,ed effettivamente funziona.