06 luglio 07, 22:20 | #41 (permalink) Top | |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
All'inizio del ciclo di main carichi il timer0 (con prescaler /128) a 99d e azzeri il bit T0IF; il timer scatterà dopo 20 mS. Nel frattempo leggi i convertitori ed i tasti; se vedi che facendo tutto quello che devi fare rischi di superare i 20mS, dividi le operazioni in due: ad ogni giro di main fai una volta la lettura dei convertitori e la volta dopo la lettura dei tasti. Alla fine di ogni ciclo aspetti che il T0IF vada ad uno, il che segnala che sono passati i 20mS; ricarichi il timer a 99d, azzeri T0IF e generi gli otto impulsi usando il timer1 a 16 bit con risoluzione 1uS: azzeri il bit TMR1IF e carichi il timer con 65535-il valore in uS del ritardo che vuoi ottenere, setti il bit di uscita e aspetti che TMR1IF vada ad 1: nel caso peggiore hai un errore di 2 uS; quando hai finito di inviare i dati di ogni canale riprendi il loop principale e ti ritroverai ad aspettare il timer0 che segnala la fine dei 20mS... e così via. Alla prossima puntata (se ci sarà) come trasformare questa struttura in una macchina a stati. Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. | |
06 luglio 07, 23:14 | #42 (permalink) Top | |
User Data registr.: 29-05-2006 Residenza: Catania
Messaggi: 2.933
| Citazione:
Il fatto è che non ho mai utilizzato interrupts software, ma ho usato sempre e solo quelli hardware provenienti dall'esterno del PIC... Grazie per le dritte!!
__________________ Il filo attaccato all'antenna non mente mai....Troppo vento, si torna a casa.... I miei circuiti elettronici autocostruiti: Postbruciatore per ventole intubate ; Circuito luci per aeromodello-elimodello ; Rallenta servo con protezione da corto circuito | |
07 luglio 07, 00:18 | #43 (permalink) Top |
User Data registr.: 11-10-2004 Residenza: out of Verona
Messaggi: 573
|
OT ON il tempo è sempre tiranno... se: - la topa non me la dà nel weekend - se non si incastra qualche impianto dove lavoro - se non trovo altro da fare vedo di buttare giù due righe... magra consolazione OT OFF |
07 luglio 07, 09:04 | #44 (permalink) Top | |
User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. | |
07 luglio 07, 15:03 | #45 (permalink) Top |
User Data registr.: 11-10-2004 Residenza: out of Verona
Messaggi: 573
|
Della serie la pappa pronta... MANCA SOLO LA CONFIGURAZIONE DEL TIMER E IL CALCOLO TON/TOFF #define MAXCH 8 // tx channels #define SIMU 1 // for simulator IDE #define TXON 0 // transmit High #define TXOFF 1 // transmit Low #define TXSYNC 3 // transmit Sync #define TXPIN PORTB.F0 // out pin #define TICK 96 // definition time #define FRAMELEN 18000 // 18 mS frame len unsigned int Channels[MAXCH] ; // stick position unsigned int TOnCh[MAXCH] ; // for calc unsigned int TOffCh[MAXCH] ; // for calc unsigned int TOnChTX[MAXCH] ; // for tx unsigned int TOffChTX[MAXCH] ; // for tx unsigned char Ch,i,t ; unsigned char RadioMenu=0 ; // radio menu unsigned char LastButton=0 ; unsigned int TOn,TOff,SyncAD,SyncTX,Duration ; unsigned int Counter=0 ; unsigned char State=TXON ; // tx pin status //TX interrupt // 17 uS min duration // 32 uS max duration (8Ch) void interrupt() { if (INTCON.TMR0IF) { Counter++; switch (State) { case TXON : if (Counter<TOn) TXPIN=1 ; else { Counter=0 ; State=TXOFF ; ** break ; case TXOFF : if (Counter<TOn) TXPIN=0 ; else { Counter=0 ; if (Ch==MAXCH) State=TXSYNC ; else { Ch++ ; TOn=TOnChTX[Ch] ; // for efficency TOff=TOffChTX[Ch] ; State=TXON ; ** ** break ; case TXSYNC : if (Counter<SyncTX) TXPIN=0 ; else { Counter=0 ; // protected TX data no memcpy o for cicle for efficency TOnChTX[0]=TOnCh[0] ; TOffChTX[0]=TOffCh[0] ; TOnChTX[1]=TOnCh[1] ; TOffChTX[1]=TOffCh[1] ; TOnChTX[2]=TOnCh[2] ; TOffChTX[2]=TOffCh[2] ; TOnChTX[3]=TOnCh[3] ; TOffChTX[3]=TOffCh[3] ; TOnChTX[4]=TOnCh[4] ; TOffChTX[4]=TOffCh[4] ; TOnChTX[5]=TOnCh[5] ; TOffChTX[5]=TOffCh[5] ; TOnChTX[6]=TOnCh[6] ; TOffChTX[6]=TOffCh[6] ; TOnChTX[7]=TOnCh[7] ; TOffChTX[7]=TOffCh[7] ; Ch=0 ; // next frame TOn=TOnChTX[0] ; TOff=TOffChTX[0] ; State=TXON ; SyncTX=Sync ; ** break ; ** TMR0 = TICK; // INTCON.TMR0F = 0; ** INTCON = 0x20; ** // init hardware card void InitHW(void) { TRISB=0x00 ; TRISA=0xFF ; // set analog input... Lcd_Init(&PORT; Lcd_Cmd(Lcd_Clear) ; ** // init interrupts void InitInt(void) { TMR0=TICK ; // set interrupt time INTCON = 0x20; // enable interrupt ** // read n channels and calc TOn/TOff void ReadADC(void) { int Ad ; Duration=0 ; for (i=0;I<MAXCH;i++) { Ad=Adc_Read(Ch); Channels[i]=Ad ; Ad+=1000 ; // min 1 mS TOffCh[i]=Ad ; // NEGATIVE! TOnCh[i]=2023-Ad ; Duration+=2000 ; ** SyncAD=FRAMELEN-Duration ; ** // read keyboard unsigned char ReadButton(void) { LastButton=0 ; return LastButton ; ** // display informations on LCD void Display(void) { ** //------------------------------------------------------------------------------ void main(void) { InitHW() ; ReadADC() ; memcpy(&TOnChTX,&TOnCh,sizeof(TOnCh)) ; memcpy(&TOffChTX,&TOffCh,sizeof(TOffCh)) ; SyncTX=Sync ; Ch=0 ; TOn=TOnChTX[Ch] ; TOff=TOffChTX[Ch] ; InitInt() ; for (;;) { switch (ReadButton()) // act for button pressed { case 0 : // no key pressed break ; ** Display() ; ReadADC() ; ** ** |
07 luglio 07, 23:41 | #47 (permalink) Top |
UserPlus |
Mannaggia non pensavo di destare tutto questo interesse ...bravi ragazzi ..avanti cosi'
__________________ C'e' chi vola con l'elettronica e chi fa volare l'elettronica ... entrambi volano. ________________________________________________ ProtoMax proudly present: ProtoMeter 2 32bit ARM core + ZigBee Radio all in one Telemetry system ... Next on this forum |
Bookmarks |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Costruzione F3j | zedona | Aeromodellismo Progettazione e Costruzione | 138 | 01 aprile 08 14:10 |
trasformare un vecchio radiocomando rc in disuso in un radiocomando per simulatori rc | maxpresident | Simulatori | 2 | 09 giugno 07 17:53 |
radiocomando G3 con Reflex o radiocomando esky... | squalofly | Simulatori | 2 | 07 gennaio 06 18:19 |
quindi.. PURCHE SIA OMOLOGATo... | sozi | Elimodellismo Principianti | 6 | 22 novembre 05 16:44 |
costruzione | jnfarin | Aeromodellismo | 3 | 07 novembre 01 13:40 |