gabri-z Inserita: 31 dicembre 2015 Segnala Inserita: 31 dicembre 2015 Questo PICcino e' capace di pilotare direttamente il trasformatore ?
dott.cicala Inserita: 31 dicembre 2015 Autore Segnala Inserita: 31 dicembre 2015 certo che sì....è un trasformatorino - ino - ino .....audio 300+300 ohm/600ohm da 20mW....in pratica 7x9mm Buon Anno!
dott.cicala Inserita: 31 dicembre 2015 Autore Segnala Inserita: 31 dicembre 2015 Come funziona....ultimo intervento fino all'anno prossimo...credo....L'alimentazione è prelevata dalla linea telefonica e la corrente assorbita non supera mai 1mA...ho infatti eliminato l'unico led previsto...perché assorbiva più di tutto il resto.D1 limita a 3,3V l'alimentazione e grazie a C2 il circuito rimane alimentato anche durante la generazione degli impulsi da parte del telefono.Il pic al suo interno ha il Fixed Voltage Reference.....che alimenta, guarda caso, anche l'oscillatore interno e quindi per l'alimentazione basta una tensione compresa fra 2,8V e 5,2V.D4 limita a 15V la tensione prelevata dalla linea che, in caso di cornetta agganciata è di circa 48Vcc e in presenza dello squillo raggiunge i 150Vca 25Hz.Il partitore formato da R6-R5-R4 esplica una duplice funzione:1) fornisce gli impulsi della composizione al pic attraverso RA4 i quali sono limitati a 3,3V dallo zener D22) fornisce il segnale di ON HOOK , cioè cornetta alzata, al PIC via RA2. Infatti quando la cornetta è alzata la tensione di linea scende sotto i 7V e quindi, grazie al partitore, su RA2 sarà presente uno zero logico.Quando RA2 è basso, il pic si aspetta di ricevere entro un tempo, gli impulsi di composizione, altrimenti se ne torna in sleep. Non appena riconosce una cifra attraverso gli impulsi ricevuti, da RA0-RA1 viene generato il bi-tono corrispondente che, passando dal filtro P.B. composto da R2-C7-R3, viene applicato all'avvolgimento a 300ohm di T1 e quindi iniettato sulla linea tramite l'avvolgimento a 600ohm.Quando il pic è in sleep....consuma talmente poco che non sono riuscito ad effettuare una misura precisa.....Buona Fine...
gabri-z Inserita: 31 dicembre 2015 Segnala Inserita: 31 dicembre 2015 (modificato) Quando il pic è in sleep....consuma talmente poco che non sono riuscito ad effettuare una misura precisa.....Dott' , guarda che qualche settimana fa , in una discussione (forse quella con i LED..LED ..etc di kim , e spero che non mi spari se sbaglio ) , era presentato uno strumentino ino ino , che misurava anche 2 nA ; forse fa il Tuo caso . Buona Fine !!! Modificato: 31 dicembre 2015 da gabri-z
dott.cicala Inserita: 31 dicembre 2015 Autore Segnala Inserita: 31 dicembre 2015 (modificato) che misurava anche 2 nASì l'ho visto...ma mi stava antipatico il tizio del video..... ...e poi che mi importa misurare i nA....ho strumenti che arrivano al pA e anche per misurare i pC..... Modificato: 31 dicembre 2015 da dott.cicala
gabri-z Inserita: 31 dicembre 2015 Segnala Inserita: 31 dicembre 2015 Sì l'ho visto...ma mi stava antipatico il tizio del video..... . Si ? vuol dire che hai premuto PLAY , io no .
dott.cicala Inserita: 5 gennaio 2016 Autore Segnala Inserita: 5 gennaio 2016 (modificato) Nuovo anno.....nuovo Pulse-DTMF encoder ovviamente con il 12F1572 Si è reso necessario modificare il circuito perché, in presenza dello squillo di chiamata, ai capi della linea telefonica, è presente un segnale a 25Hz con ampiezza tale da provocare l'intervento dello zener e ciò sovraccaricava inutilmente la linea stessa.Quindi l'ho eliminato e con un bel NMOS da 800V in case IPAK abbinato ad un TL431 ho realizzato un interruttore elettronico che si attiva solo quando la tensione ai capi della linea scende a 14V circa, cioè quando la cornetta è alzata. Già che c'ero, ho aggiunto un altro TL431 per rilevare gli impulsi di composizione.Viste le modifiche elettriche, è stato necessario rivisitare il firmware...ovviamente.- Il pic non rimane più in sleep ma si spegne completamente.- Sfrutto la funzione PWRT (power up timer) e genero un ulteriore ritardo software a seguito dell'alimentazione del pic- Conto i fronti di discesa degli impulsi per identificare la cifra selezionata- Genero un ritardo ritorno disco in funzione del numero identificato- Genero qualche segnalazione tramite led che nello schema non ho riportato L'unico limite che non sono riuscito a superare è la generazione dei caratteri alfanumerici ...perché non ho idea di come comporli col disco Il codice è venuto così: //****************************************************************************** // Project : Pulse to DTMF Converter - quarzeless // Author : S.T. 4 my old phone // Date : 04/01/2016 // MCU : PIC12F1572 - INT.OSC. 8MHz // Compiler: MikroC PRO for PIC V6.6.2 //****************************************************************************** //****** TAGs ****************************************************************** // Inputs sbit Ipulse at RA3_BIT; // Outputs sbit Led2 at RA2_BIT; sbit Led4 at RA4_BIT; sbit Led5 at RA5_BIT; // Stat long int dly0=0; unsigned int Dc1=0, Dc2=0, dly1=0, dly2=0, dly3=0, dlx=0, dly=50, blink=0; unsigned short int n=0, num=0; bit OnHook, rdy, chk_pulse, tx_pulses; //****************************************************************************** // FREQUENZE DTMF //****************************************************************************** /* +--- +-------------------+ +-------------------------+ | Hz |1209|1336|1477|1633| | PITCH | f. richieste Hz | +----+----+----+----+----+----+ +-------------------------+ | Y1 |697 | 1 | 2 | 3 | A | 716 | 716 | 697 | Y1 | +----+----+----+----+----+----+ +-------------------------+ | Y2 |770 | 4 | 5 | 6 | B | 650 | 650 | 770 | Y2 | +----+----+----+----+----+----+ +-------------------------+ | Y3 |852 | 7 | 8 | 9 | C | 587 | 587 | 852 | Y3 | +----+----+----+----+----+----+ +-------------------------+ | Y4 |941 | * | 0 | # | D | 531 | 531 | 941 | Y4 | +----+----+----+----+----+----+ +-------------------------+ | | X1 | X2 | X3 | X4 | | 413 | 1209 | X1 | +----+----+----+----+--- + +-------------------------+ 413 373 338 305 | 373 | 1336 | X2 | +-------------------------+ | 338 | 1477 | X3 | +-------------------------+ | 305 | 1633 | X4 | +-------------------------+ */ unsigned int X0=0, X1=413, X2=373, X3=338, X4=305; unsigned int Y0=0, Y1=716, Y2=650, Y3=587, Y4=531; //****************************************************************************** // Blink sub //****************************************************************************** void blk() { if(rdy &!INTCON.TMR0IE) { if(blink<4000)blink++; if(blink>=4000) { Led4=~Led4; blink=0; } } if(rdy &INTCON.TMR0IE) { Led4=1; } if(!rdy &!INTCON.TMR0IE) { Led4=0; } } //****************************************************************************** // On Hook Off Hook CTRL //****************************************************************************** void Hook() { if(OnHook &! rdy) { dly0++; if(dly0>=35000) { dly1=0; dly2=0; dly3=0; tx_pulses=0; TMR0=1; INTCON.TMR0IF=0; IOCAP.IOCAP3=0; IOCAP.IOCAN3=1; IOCAF.IOCAF3=0; INTCON.GIE =1; rdy=1; } } if(!OnHook & rdy) { dly0--; if(dly0<1) { n=0; num=0; dly1=0; dly2=0; dly3=0; tx_pulses=0; TMR0=1; INTCON.TMR0IF=0; INTCON.TMR0IE=0; IOCAP.IOCAP3=0; IOCAP.IOCAN3=0; INTCON.GIE =0; rdy=0; } } } //****************************************************************************** // Pulses Counter //****************************************************************************** void P_counter() { if(IOCAF.IOCAF3 &!Ipulse) { n++; TMR0=1; dly1=0; dly2=0; dly3=0; dly=(50*n)+50; INTCON.TMR0IE=1; IOCAF.IOCAF3=0; } if(n>10)n=0; if(tx_pulses &n<=10) { num=n; } Led5=tx_pulses; } //****************************************************************************** // Main program //****************************************************************************** void main() { //****************************************************************************** // Registro configurazione Oscillatore //****************************************************************************** OSCCON = 0b01110010; // Int Osc 8MHz 4xPLL OFF /* bit 6543 1111 = 16 MHz HF 1110 = 8 MHz or 32 MHz HF 1101 = 4MHz HF 1100 = 2MHz HF 1011 = 1MHz HF 1010 = 500 kHz HF 1001 = 250 kHz HF 1000 = 125 kHz HF 0111 = 500 kHz MF (default upon Reset) 0110 = 250 kHz MF 0101 = 125 kHz MF 0100 = 62.5 kHz MF 0011 = 31.25 kHz HF 0010 = 31.25 kHz MF 000x = 31kHz LF */ OSCTUNE = 0b00000000; // 0b00000000 - factory-calibrated frequency // 0b00011111 - max frequency // 0b00100000 - min frequency //****************************************************************************** // Registri configurazione PORT[A] //****************************************************************************** WPUA = 0b00000000; // Resistenze Pull Up disattivate SLRCONA = 0b00000000; // Slew Rate non limitato INLVLA = 0b00001000; // Ctrl.Ingressi 0=TTL-1=Scmitt Triggered ODCONA = 0b00000000; // Ctrl. Outputs 0=Totem Pole-1=Open Drain APFCON = 0b00000000; // Alternate Pin Function TRISA = 0b11001000; // RA0-RA1-RA2-RA4-RA5=OUT - RA3=INPUT LATA = 0b00000000; // PORT[A] Latch register ANSELA = 0b00000000; // Ingressi Anaogici //****************************************************************************** // OPTION REGISTER //****************************************************************************** OPTION_REG.B0 =1; // Prescaler Rate Sel bit 000| 1:2 OPTION_REG.B1 =0; // Prescaler Rate Sel bit 001| 1:4 OPTION_REG.B2 =1; // Prescaler Rate Sel bit 010| 1:8 // 011| 1:16 // 100| 1:32 // 101| 1:64 // 110| 1:128 // 111| 1:256 OPTION_REG.PSA =0; // Prescaler Assign. bit: 0= TMR0 assigned // 1= TMR0 not assigned OPTION_REG.TMR0SE =0; // TMR0 Source Edge Sel bit: 1 = Inc. H to L T0CKI pin // 0 = Inc. L to H T0CKI pin OPTION_REG.TMR0CS =0; // TMR0 Clk Source Sel bit: 1= on T0CKI pin // 0= cycle clk (FOSC/4) OPTION_REG.INTEDG =0; // Interrupt Edge Sel bit: 1= rising edge INT pin // 0= falling edge INT pin OPTION_REG.B7 =0; // WPUEN: Weak Pull-Up Enable bit // 1 = All weak pull-ups disabled (except MCLR) // 0 = Weak pull-ups enabled by individual WPUx //****************************************************************************** // INTCON REGISTER //****************************************************************************** INTCON.IOCIF =0; // Read Only Interrupt-on-Change Flag bit // 1 = The interrupt-on-change pins has changed state // 0 = interrupt-on-change pins - state not changed INTCON.INTF =0; // External Interrupt Flag bit // 1 = The INT external interrupt occurred // 0 = The INT external interrupt did not occur INTCON.TMR0IF =0; // TMR= Overflow Interrupt Flag bit // 1 = TMR0 register has overflowed // 0 = TMR0 register did not overflow INTCON.IOCIE =0; // Interrupt-on-Change Enable bit // 1 = Enables the interrupt-on-change // 0 = Disables the interrupt-on-change INTCON.INTE =0; // External Interrupt Enable bit // 1 = Enables the INT external interrupt // 0 = Disables the INT external interrupt INTCON.TMR0IE =0; // TMR0 Overflow Interrupt Enable bit // 1 = Enables the Timer0 interrupt // 0 = Disables the Timer0 interrupt INTCON.PEIE =0; // Peripheral Interrupt Enable bit(2) // must be set to enable any peripheral interrupt // 1 = Enables all active peripheral interrupts // 0 = Disables all peripheral interrupts INTCON.GIE =1; // Global Interrupt Enable bit // 1 = Enables all active interrupts // 0 = Disables all interrupts //****************************************************************************** // Registri configurazione INTERRUPTS //****************************************************************************** PIE1 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 1 PIE2 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 2 PIE3 = 0b00000000; // PERIPHERAL INTERRUPT ENABLE REGISTER 3 PIR1 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 1 PIR2 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 2 PIR3 = 0b00000000; // PERIPHERAL INTERRUPT REQUEST REGISTER 3 IOCAP = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] POS.EDGE REGISTER IOCAN = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] NEG.EDGE REGISTER IOCAF = 0b00000000; // INTERRUPT-ON-CHANGE PORT[A] FLAG REGISTER //****************************************************************************** // Registri configurazione 16-BIT PWM MODULE //****************************************************************************** //----RA1 - PWM1 --------------------------------------------------------------- PWM1CON = 0b11000000; // module en, output en, norm pol, standard m. PWM1CLKCON= 0b01010001; // HFINTOSC clock, Prescaler /32 PWM1PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM1PH = 0x3FF; // PWM PHASE COUNT REGISTER //----RA0 - PWM2 --------------------------------------------------------------- PWM2CON = 0b11000000; // module en, output en, norm pol, standard m. PWM2CLKCON= 0b01010001; // HFINTOSC clock, Prescaler /32 PWM2PR = 0x3FF; // PWM PERIOD COUNT REGISTER PWM2PH = 0x3FF; // PWM PHASE COUNT REGISTER //----PWM MIRROR REGISTERS ----------------------------------------------------- PWMLD = 0x000; // PWM LOAD SIMULTANEOUSLY REGISTER //****************************************************************************** OnHook=1; INTCON.TMR0IE=1; //############################################################################## // Main Loop //############################################################################## while(1) { //**** On Hook Hook(); //**** Segnalazioni led blk(); //**** Conteggio Impulsi P_counter(); //****************************************************************************** // Selezione cifra //****************************************************************************** switch (num){ case 0: Dc1=Y0; Dc2=X0; break; case 1: Dc1=Y1; Dc2=X1; break; case 2: Dc1=Y1; Dc2=X2; break; case 3: Dc1=Y1; Dc2=X3; break; case 4: Dc1=Y2; Dc2=X1; break; case 5: Dc1=Y2; Dc2=X2; break; case 6: Dc1=Y2; Dc2=X3; break; case 7: Dc1=Y3; Dc2=X1; break; case 8: Dc1=Y3; Dc2=X2; break; case 9: Dc1=Y3; Dc2=X3; break; case 10: Dc1=Y4; Dc2=X2; break; } //****************************************************************************** // Buffer PWM1-PWM2 //****************************************************************************** if(tx_pulses)PWMLD=0x3; if(!tx_pulses & PWM1CON.B5) { n=0; num=0; Dc1=0; Dc2=0; PWMLD=0x3; INTCON.TMR0IE=0; } //****************************************************************************** // Comando PWM1-PWM2 //****************************************************************************** PWM1PR = Dc1; // PWM PERIOD COUNT REGISTER PWM1PH = Dc1; // PWM PHASE COUNT REGISTER PWM1DC = Dc1/2; // RA0 OUT PWM[2] PWM2PR = Dc2; // PWM PERIOD COUNT REGISTER PWM2PH = Dc2; // PWM PHASE COUNT REGISTER PWM2DC = Dc2/2; // RA1 OUT PWM[1] } } //****************************************************************************** //############################################################################## // Interrupt Routine //############################################################################## void interrupt(){ if(dly1<2000) { dly1++; TMR0=1; INTCON.TMR0IF=0; } //****************************************************************************** // Tempo massimo riconoscimento singolo numero //****************************************************************************** if(n>0) { dly2++; } if((dly2>=dly)&!tx_pulses) { tx_pulses=n>0; dly2=0; dly3=0; } //****************************************************************************** // Tempo massimo emissione toni //****************************************************************************** if(tx_pulses & dly3<150)dly3++; if(dly3>=150) { dly1=0; dly2=0; dly3=0; tx_pulses=0; TMR0=1; INTCON.TMR0IF=0; } //****************************************************************************** // Timeout //****************************************************************************** if(dly1>=2000) { dly1=0; dly2=0; dly3=0; tx_pulses=0; TMR0=1; INTCON.TMR0IF=0; INTCON.TMR0IE=0; OnHook=0; } } Rimane ancora un bel po' di spazio E con questo......ho concluso! Modificato: 5 gennaio 2016 da dott.cicala
sorecaro Inserita: 5 gennaio 2016 Segnala Inserita: 5 gennaio 2016 Dopo aver seguito questa discussione con molta attenzione non mi resta che dire una cosa, ottimo lavoro.
dott.cicala Inserita: 5 gennaio 2016 Autore Segnala Inserita: 5 gennaio 2016 (modificato) ....grazie ....stavo penzando.....ci sono ancora un sacco di periferiche e funzioni in questo piccolo integratino che si potrebbero esplorare.....ma le vacanze son finite! Modificato: 5 gennaio 2016 da dott.cicala
sorecaro Inserita: 5 gennaio 2016 Segnala Inserita: 5 gennaio 2016 Dott.cicala visto che mi hai messo la pulce nell'orecchio, le altre periferiche cerco di esplorare io
Livio Orsini Inserita: 5 gennaio 2016 Segnala Inserita: 5 gennaio 2016 poi magari screvete un tutorial a 4 mani, sarebbe una bella iniziativa.
dott.cicala Inserita: 5 gennaio 2016 Autore Segnala Inserita: 5 gennaio 2016 Riassunto delle puntate precedenti Fino ad ora, di questo pic-cino sono state usate le periferiche evidenziate in figuraSi potrebbe sfruttare un pin libero....ed entrare nel mondo della EEPROM con i suoi registri....e aggiungere la funzione dirichiamata ultimo numero selezionato.A tale scopo, sarà necessario predisporre di una variabile adeguataunsigned short int mem[10]={0,0,0,0,0,0,0,0,0,0};che sarà composta da un ARRAY di 10 elementi, ognuno di essi inizializzato a zero, di tipo unsigned short int cioè un intero corto senza segno. Servirà un indice per indicizzare l'arrayunsigned short int m=0e quindi scrivere tutto ciò che serve per riempire l'array con le cifre dell'ultimo numero chiamato//****************************************************************************** // Ultimo numero memorizzato //****************************************************************************** void LstNum() { ... ... ... mem[m]=num; }Chi si offre volontario?PS.nell'ultimo schema R3 vale 27K e non 10K
dott.cicala Inserita: 5 gennaio 2016 Autore Segnala Inserita: 5 gennaio 2016 (modificato) ....nell'attesa che si palesi il volontario, mi è stato chiesto di chiarire come si fa a controllare un fronte di salita o di discesa.Ci sono almeno 2 modi.Ammettiamo che il fronte da controllare sia quello di salita e che si presenti su RA3.Si potrebbe agire alla vecchia maniera, tramite un bit di appoggio:rising_edge = PORTA.B3 &! dummy; //rising edge è il fronte di salita e dura 1 instruction cycle dummy = PORTA.B3;Oppure scegliere la via più comoda, sfruttando i registri IOCAP - IOCAN - IOCAF IOCAP = 0b00000100; // INTERRUPT-ON-CHANGE PORT[A] POS.EDGE REGISTER IOCAN = 0b00000100; // INTERRUPT-ON-CHANGE PORT[A] NEG.EDGE REGISTERmettendo a 1 il bit 3 di IOCAP viene abilitato il controllo del fronte di salita di RA3mettendo a 1 il bit 3 di IOCAN viene abilitato il controllo del fronte di discesa di RA3Ovviamente è possibile controllare tutti e due i fronti....con le dovute cautele. Non appena il fronte si verifica, in IOCAF il bit 3 verrà settato e rimarrà in tale stato in attesa che il programma utente lo resetti.Ammettiamo di voler controllare il fronte di discesa su RA3IOCAP.IOCAP3=0; IOCAP.IOCAN3=1;e quindi if(IOCAF.IOCAF3) { n++; // incremento n IOCAF.IOCAF3=0; // resetto il flag generato dal fronte su RA3 }Se poi nel registo INTCON ci fosse questa situazione INTCON.GIE =1; // Global Interrupt Enable bit // 1 = Enables all active interrupts // 0 = Disables all interrupts INTCON.IOCIE =1; // Interrupt-on-Change Enable bit // 1 = Enables the interrupt-on-change // 0 = Disables the interrupt-on-changeallora, al riconoscimento del fronte, si genererebbe una richiesta di INTERRUPT ed il flag INTCON.IOCIF verrebbe posto a 1.Non è comunque necessario ricorrere ad un interrupt per controllare un fronte in quanto IOCAF viene scritto anche se I0CIE=0 al primo fronte rilevato.Se ne deduce che se è necessario reagire ad entrambi i fronti, dopo aver acquisito il fronte di salita (ad esempio) è necessario azzerare IOCAF prima che si verifichi il fronte di discesa....altrimenti lo si perde. Modificato: 5 gennaio 2016 da dott.cicala
dott.cicala Inserita: 6 gennaio 2016 Autore Segnala Inserita: 6 gennaio 2016 (modificato) Circuito che genera due differenti segnalazioni acustiche con frequenza e durata diverse, sul fronte di salita e di discesa di RA1...... per auto...//****************************************************************************** // Project : 2 tone buzzer // Author : S.T. // Date : 05/01/2016 // MCU : PIC12F1572 - INT.OSC. 8MHz // Compiler: MikroC PRO for PIC V6.6.2 //****************************************************************************** //****** TAGs ****************************************************************** // Inputs sbit In1 at RA1_BIT; // Stat bit RisingEdge, FallingEdge, app, latch; //****************************************************************************** // Main program //****************************************************************************** void main() { //****************************************************************************** // Registro configurazione Oscillatore //****************************************************************************** OSCCON = 0b01110010; // Int Osc 8MHz 4xPLL OFF //****************************************************************************** // Registri configurazione PORT[A] //****************************************************************************** INLVLA = 0b11111110; // Ctrl.Ingressi 0=TTL-1=Scmitt Triggered ODCONA = 0b00000000; // Ctrl. Outputs 0=Totem Pole-1=Open Drain TRISA = 0b11111110; // RA0=OUT - RA1-RA2-RA3-RA4-RA5=INPUT Sound_Init(&PORTA,0); //############################################################################## // Main Loop //############################################################################## while(1) { // RA1 - Genero fronte di salita RisingEdge =In1 &!app; app =In1; // RA1 - Genero fronte di discesa latch = (In1|latch)&!FallingEdge; FallingEdge = !In1 & latch; // RA0 - Comando buzzer if(RisingEdge) Sound_Play(1000,500); //tono acuto 0.5s if(FallingEdge)Sound_Play(440,1000); //tono grave 1s } } Modificato: 6 gennaio 2016 da dott.cicala
gabri-z Inserita: 6 gennaio 2016 Segnala Inserita: 6 gennaio 2016 (modificato) .. per auto...Patent pending ? Modificato: 6 gennaio 2016 da gabri-z
dott.cicala Inserita: 28 marzo 2016 Autore Segnala Inserita: 28 marzo 2016 Questa volta....parliamo del DAC Che cosa possiamo fare con un misero DAC a 5 Bit ? Un traccia curve! Per realizzare un traccia curve col quale visualizzare le curve caratteristiche di diodi, bjt, fet e mosfet, scr, triac ecc ecc è necessario prima di tutto generare due segnali specifici: Uno a dente di sega e uno a gradini E' necessario inoltre che siano sincronizzati tra loro, Per ogni dente di sega generato deve corrispondere un gradino. Tutto ciò lo si potrebbe realizzare con qualche operazionale e almeno un contatore binario oppure...con un unico 12F1572. Per generare il dente di sega, si sfrutterà uno dei tre PWM disponibili, mentre per il segnale a gradini, il DAC, ma si potrebbe fare anche viceversa. Ed ecco il risultato Sembra che i due segnali non siano perfettamente sincronizzati, ma ciò dipende solamente dal fotografo.. Ed ecco la struttura interna del DAC disponibile nel 12F1572
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora