Rabulea Sergiu Postat Februarie 4, 2012 Partajează Postat Februarie 4, 2012 Am nevoie de putin ajutor de la cei care au mai lucrat cu mikrobasic. Doresc sa-mi fac un turometru cu PIC16f876 si un display 2x16. Proiectul l-am inceput in mikrobasic for pic. Problema apare la citirea frecventei cu modulul CCP din microcontroler, de la care nu primesc rezultate precise si constante pentru o frecventa de intrare constanta. Pocesorul lucreaza cu un quartz de 20MHz, iar frecventa mazima ce o poate masura pe intrarea CCP1 este deocamdata de aproximativ 400Hz. Va rog daca se poate sa ma indrumati pe drumul cel bun. program test876dim LCD_RS as sbit at RB5_bit LCD_EN as sbit at RB4_bit LCD_D7 as sbit at RB3_bit LCD_D6 as sbit at RB2_bit LCD_D5 as sbit at RB1_bit LCD_D4 as sbit at RB0_bitdim LCD_RS_Direction as sbit at TRISB5_bit LCD_EN_Direction as sbit at TRISB4_bit LCD_D7_Direction as sbit at TRISB3_bit LCD_D6_Direction as sbit at TRISB2_bit LCD_D5_Direction as sbit at TRISB1_bit LCD_D4_Direction as sbit at TRISB0_bitdim acumulator as longword absolute $20dim timerExtend as word absolute $22dim ccp1lo as byte absolute $20dim ccp1hi as byte absolute $21dim rezultatintermediar as floatdim rezultat as longworddim acumulator_old as longworddim text as string[10]dim text1 as string[10]dim textlong as string[23]dim flags as bytesub procedure interruptif pir1.tmr1if = 1 thentimerExtend = timerExtend + 1pir1.tmr1if = 0end ifif pir1.ccp1if = 1 thenccp1lo = ccpr1lccp1hi = ccpr1hrezultat = acumulator - acumulator_oldacumulator_old = acumulatorflags.0 = 1pir1.ccp1if = 0end ifend submain:trisb = 0trisc = 4portc = 0portb = 0T1CON = 1CCP1CON = 6tmr1l = 0tmr1h = 0ccpr1l = 0ccpr1h = 0pie1 = 1intcon = 192lcd_initLCD_cmd (_LCD_CURSOR_OFF)pwm2_init (1500)pwm2_set_duty (127)PWM2_Start()afisare:if flags.0 = 1 thenrezultatintermediar = rezultatrezultatintermediar = rezultatintermediar * 0.002rezultatintermediar = 1 / rezultatintermediarrezultatintermediar = rezultatintermediar * 10000flags.0 = 0end iflongwordtostr (rezultat, text)longwordtostr (acumulator_old, text1)floattostr (rezultatintermediar, textlong)Lcd_out (1, 1, text)Lcd_out (2, 2, text1)lcd_out_cp (" ")goto afisareend. P.S. Pana acum am lucrat cu Proton picbasic, dar sunt nevoit sa trec la alt compilator deoarece Protonul nu suporta dsPIC. Am facut acelasi program si in Proton iar frecventa mazima masurata cu precizie este de aprox. 40Khz. Multumesc anticipat. Link spre comentariu
volhov Postat Februarie 4, 2012 Partajează Postat Februarie 4, 2012 Te poti inspira de aici: http://www.mikroe.com/forum/viewtopic.p ... 5&start=15 Succes! Link spre comentariu
Rabulea Sergiu Postat Februarie 11, 2012 Autor Partajează Postat Februarie 11, 2012 Mercie volhov dar nu este ceea ce cautam. Eu vroiam un turometru de precizie mai buna la turatii mici precum si la cele mari. Prin programul ce l-am facut, am extins TIMER1 la 32biti, permitandu-mi citirea turatiilor mai mici. Pana la urma am gasit nenorocita de problema, era aici: ccpr1h = 0pie1 = 1intcon = 192pie1 trbuia 5, pentru a imi permite si intreruperile de la CCP. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum