Go Down

Topic: generare una sequenza di bit a frequenza variabile (Read 6 times) previous topic - next topic

astrobeed

I due decimali sono un limite della serial.println, in realtà il numero ha tutti i decimali del caso, per vederne di più  moltiplica il valore per 10-100-1000 e poi fai la serial.println, ovviamente dovrai riposizionare mentalmente la virgola.
Esempio pratico se faccio 7/3 ottengo 2.33 se moltiplico per 1000 la variabile che contiene il risultato ottengo 2333.33


astrobeed

Come non detto, mi sono appena ricordato che basta specificare dopo la virgola il numero dei decimali desiderati, se scrivo Serial.println(a,4) e a contiene 32.12345 mi viene inviato 32.1234.

Michele Menniti

Perfetto, ora funziona bene; speriamo che troviate anche il tempo di aiutarmi col circuito esterno.
Grazie
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

astrobeed

#38
Mar 06, 2011, 04:57 pm Last Edit: Mar 06, 2011, 04:59 pm by astrobeed Reason: 1
Per il momento prendilo come schema di principio, è una cosa che ho buttato giù al volo, ma dovrebbe andare bene.
Le tre linee in ingresso se lasciate a 1 logico fanno funzionare lo ring shift register come serve a te, portando Enable a 0 logico viene bloccato sia il clock a 10 MHz che il ricircolo dei dati, ogni volta che mandi un impulso negativo sulla linea clock il valore presente su DATA viene trasferito all'interno dello shift register, attenzione che vengono negati quindi o lo prevedi da software oppure aggiungi un inverter.
Fornendo 30 impulsi sul clock carichi completamente lo shift register, è possibile variare la lunghezza del pacchetto modificando l'out per il ricircolo dati.
Gli shift register sono dei 54HC4094 (oppure 74HC4094) da 8 bit l'uno, le porte logiche sono contenute in un singolo 54HC00, l'oscillatore è del tipo quarzato ibrido, ma puoi metterci quello che ti pare.


Michele Menniti

WOW! alla faccia del "volo"!
Allora alcuni chiarimenti: per caricare lo shift con i miei 30 impulsi da Arduino, visto che devo farne passare uno per volta, mi conviene abilitare un altro pin che porto a 0 prima di ogni bit della sequenza, e che collego all'ENABLE, dopo lo porto a 1, e così via; dopo il 30mo impulso devo però bloccare il loop, non potrei mettere il code sotto SETUP invece che sotto loop? In questo modo potrei tenere ENABLE a 0 per l'intera durata del ciclo oppure funziona su fronte e quindi serve proprio l'impulso?
Con questa tipologia di schema posso decidere di variare i bit della sequenza (avendo necessità di un range 25-32) semplicemente scegliendo una delle uscite Q1 (4) ÷ Q8 (11)? Potrei usare un dip commutando un solo pin per volta verso l'OUT.
Infine, per fare alcune prove oggi, dispongo di due comunissimi cd4094, di un cd4011 (nand, anche se con pinatura delle porte leggermente diversa), di un generatore di funzioni a 10MHz (ma penso che i CMOS non reggano questa frequenza, potrei provare a 1MHz); il dubbio che ho è se questi componenti possono andar bene per una simulazione con sequenza a 16 bit (o meno) e se i livelli logici dell'Arduino vengono riconosciuti dalle porte CMOS.
Che dici?
Grazie di tutto, mi hai fatto davvero un grande regalo!
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

Go Up