lelerelele Inserito: 14 marzo 2012 Segnala Inserito: 14 marzo 2012 forse non sono più capace di leggere i datasheets, quindi chiedo aiuto. -------------------------------------------------------------------- per farmi le ossa sui microcontrollori ho realizzato un convertitore flyback con il 12f615. e fin qua tutto bene. ora sto provando lo stesso microcontrollore, 12f615, con ECCP, allo scopo di creare un convertitore forward push-pull. uso la suite CCS per il programma in C, e simulo via software il suo funzionamento con MPLAB e con Real pic simulator. con mplab la simulazione sembra funzionare, ed ho l'uscita modulata pwm attiva a livello basso, ma in effetti mi da solo le due uscite complementari, e non sono riuscito in alcun modo ad ottenere le altre, quindi non riesco in alcun modo ad ottenere il DeadTymeDelay,. con la simulazione real pic simulator, mi da una sola uscita, quella del PWM, e tutte le altre uscite sono basse. ma non è finita, se programmo il micro, sulle sue uscite ho solo il pin PWM che commuta, e nessun'altra, come la suimulazione real pic.! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ per concludere ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ quindi ho eliminato dal codice, tutti i controlli che non interessano direttamente ECCP, portate tutti i pin come uscite, ed ho usato l'iniezione diretta nei registri CCP1CON,PWM1CON, APFCON. ed il risultato non cambia. se qualcuno ha qualche idea in merito può tornarmi utile. allego sorgente in C con impostazioni micro. #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOPROTECT //Code not protected from reading #FUSES IOSC8 //INTOSC speed 8MHz #FUSES NOMCLR //Master Clear pin used for I/O #FUSES NOBROWNOUT // brownout reset #FUSES NOPUT // Power Up Timer #device adc=10 #use delay(clock=8000000) #USE FIXED_IO(a_outputs=PIN_A0,PIN_A1,PIN_A2,PIN_A4,PIN_A5) //***************PORTE e COSTANTI******************* const unsigned int8 IngressoSogliaTensione= AN1_ANALOG ;//PIN_GP1;; //valore analogico di lettura tensione di uscita const unsigned int8 OffsetIngressoSogliaTensione=125;//valore sottratto alla tensione ingresso per spostare in su la soglia const unsigned int8 SensibilitaIngressoSogliaTensione=4;//divisore applicato alla tensione letta in ingresso const unsigned int8 IngressoSogliaTensioneAlimentazione= AN3_ANALOG;// PIN_GP4; //valore analogico di lettura tensione di alimentazione int PotnzaMassimo=200; //livello massimo di conduzione. int PotnzaMinimo=2; //livello minimo di conduzione. //UscitaPwm P1A sul PIN_GP2 pin5 //UscitaPwm P1B sul PIN_GP0 pin7 //*****************variabili*************** unsigned int16 SoftStart=0; //valore che viene incrementato per raggiungee la massima potenza int1 TensioneBassa=0; //quando va a zero la tensione di alimentazione è sotto alla soglia necessaria unsigned int TempoCiclo=60;// 0.5 usec a ciclo;//tempo dela durata del ciclo const unsigned int16 RitardoLetturaIngressoTensioneAlimentazione=200; //numero cicli prima di leggere la tensione di alimentazione unsigned int16 RitardoLetturaIngressoTensioneAlimentazionValore=1; //con 0 non parte const unsigned int16 SogliaTensioneAlimentazione=390; //livello di tensione di spegnimento uscita. const unsigned int16 RitardoIncrementoSoftStart=1; unsigned int16 RitardoIncrementoSoftStartValore=0;//decrementa fino a zero,quando aumenta softstasrt void SetupAvvio(void) { /* enable_interrupts(INT_AD); enable_interrupts(GLOBAL); setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(sAN1|sAN3); set_adc_channel(IngressoSogliaTensione); setup_vref(VREF_HIGH); */ setup_timer_1( T1_INTERNAL |T1_DIV_BY_1); setup_timer_2(T2_DIV_BY_1,TempoCiclo,1); set_tris_a(0b00000); //1 input 0 output #byte CCPP1CONvar =getenv("SFR:CCP1con") ; CCPP1CONvar=0b10001111;// imposta tipo pwm, bit5-6 imposta tempo duty, bit1 uscita #byte PWM1CONvar =getenv("SFR:PWM1con") ; PWM1CONvar=0b00000011;//imposta il deadbanddelay #byte APFCONvar =getenv("SFR:APFcon") ; APFCONvar=0b1001; //imposta quale uscita abilitata pr pwm set_pwm1_duty( Tempociclo/2); //setup_ccp1( CCP_PWM_HALF_BRIDGE|CCP_PWM_L_H,10); }
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