Sari la conținut
ELFORUM - Forumul electronistilor

Turometru in mikrobasic


Rabulea Sergiu

Postări Recomandate

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
  • Răspunsuri 2
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Rabulea Sergiu

    2

  • volhov

    1

Zile populare

Top autori în acest subiect

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 = 192
pie1 trbuia 5, pentru a imi permite si intreruperile de la CCP.
Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări