[ nikolapirot @ 18.08.2012. 16:30 ] @
Pravim frekfrenciometar do 50Mhz sa tajmerom 1 kao brojacem i tajmerom 0 koji meri vreme. Problem je u tome sto kad prodje 1 sekunda i kada prikaze vrednost ona ispadne neka bezveze. Na primer za 1khz pokaze 2430Hz, za 10khz prikaze 24319hz, za 100hz prikaze 240Hz. Simulaciju vrsim u proteusu.
Code:

sbit LCD_RS at RA0_bit;
sbit LCD_EN at RA1_bit;
sbit LCD_D7 at RB4_bit;
sbit LCD_D6 at RB3_bit;
sbit LCD_D5 at RB2_bit;
sbit LCD_D4 at RB1_bit;
sbit LCD_RS_Direction at TRISA0_bit;
sbit LCD_EN_Direction at TRISA1_bit;
sbit LCD_D7_Direction at TRISB4_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D4_Direction at TRISB1_bit;

 long unsigned inc=0,frek=0,broj=0;

char TMR[20]="0";
  void interrupt(void)
{

   if(INTCON.T0IF)
   {

    inc++;
    INTCON.T0IF=0;
   }
   if(PIR1.TMR1IF)
   {
     broj++;
     PIR1.TMR1IF=0;
     
    }

}


void main() {
     INTCON=0b10110000     ;
     OPTION_REG=0b10000000;
     TMR1L=0;
     TMR1H=0;
    LCD_Init();
   LCD_Cmd(_LCD_Cursor_Off);
  Delay_Ms(100);
   PIR1.TMR1IF=0;
   PIE1.TMR1IE=1;
   T1CON=0b00000110;
     INTCON.PEIE=1;
     INTCON.GIE=1;
    T1CON.TMR1ON=1;
    INTCON.T0IF=0;
     for(;;)
     {
          if(inc==1953)
          {
          INTCON.GIE=0;
         T1CON.TMR1ON=0;
          frek=(TMR1H<<8)+TMR1L+(65535*broj);
          LongToStr(frek,TMR);
          LCD_Out(1,1,TMR);
          broj=0;
           TMR1L=0;
     TMR1H=0;
          T1CON.TMR1ON=1;
          INTCON.GIE=1;
          inc=0;
         }
     }
     




Gde gresim i sta da promenim da bi proradio program. Inace kontroler je 16f628a i koristim interni clock koji je 4Mhz. Hvala unapred
[ goran_68 @ 18.08.2012. 18:30 ] @
Interni oscilator ti nije dobar za takvo merenje. Za proveru mozes recimo posle:

if(inc==1953)
{


da toglujes neki pin cisto da vidis koliko ti traje merenje ali da budem iskren ni u kodu ne vidim odakle ovolika razlika.
[ nikolapirot @ 19.08.2012. 12:21 ] @
Vec sam proverio, tacno jedna sekunda kolko mi i treba. Pokusao sam i sa internim i sa eksternim isto je. A u data sheet-u pise da je preciznost internog takta +-1%.
[ goran_68 @ 19.08.2012. 17:02 ] @
Proveri ove izraze:

frek=(TMR1H<<8)+TMR1L+(65535*broj);
LongToStr(frek,TMR);

mozes i koristeci simulator samo umesto TMR1H i TMR1L stavi neke unsigned char konstante. Ja nemam ME kompajler.

Drga stvar koju mozes da uradis je da dovedes 1KHz signal i ispises nakon jedne sekunde TMR1H i TMR1L.
[ nikolapirot @ 20.08.2012. 02:25 ] @
Sa int na TMR1H nista ne dobijam. E sad sam isao step by step animaciju u proteusu sa sve osciloskopom, stavio sam frekfrenciju na 10Hz, kako bih lakse pratio signale i posmatrao sam kako se sada menja TMR1H. Step je isao na svaki puls ulaznog signala i gle cuda. Na svaki step koji dodje na ulaz, za rastuci signal timer1 broji 2 puta a za svaki opadajuci broji 1. Tako da za jedan inpuls on broji 3puta. Da li je ovo do proteusa i da li bi ovo radilo kada bih ga napravio ovako?
[ rsinisa @ 20.08.2012. 08:54 ] @
Ja sam nekoliko puta isto imao problema sa simulacijom u PROTEUS-u, iako mi je program izgledao sasvim u redu. OK, rekoh, problem u simulatoru, napraviću ja uredjaj i to će da radi. Medjutim, kako je radilo u PROTEUS-u, tako je radilo i na pravom hardveru. Ne kažem da je simulator idealna stvar, ali šanse da su se zeznuli oko TMR1 su jako jako male. Problem je, najverovatnije, u tvom programu.

Pozdrav.
Sinisha
[ goran_68 @ 20.08.2012. 09:47 ] @
RS i EN linije su ti na RA0 i RA1, ocigledno da LCD radi u PROTEUSU iako te pinove MCU-a nisi postavio kao digitalne CMCON = 0x07; Simulator moze da gresi ali mislim da mozes vrlo brzo da proveris matematiku koju sam ti prethodno predlozio.
[ bogdan.kecman @ 20.08.2012. 13:09 ] @
Citat:
rsinisa:Ne kažem da je simulator idealna stvar, ali šanse da su se zeznuli oko TMR1 su jako jako male.


posebno sa 628A koji je implementiran jako dobro!!

@OP, da li si gledao warninge u ISIS-u kada si terao simulaciju? Obicno ti tamo da mnogo korisnih podataka. Mogao si i da zakacis ovde dsn fajl (ne vidim da si ga okacio) ili bar png ili pdf da vidimo kako si to spojio
[ nikolapirot @ 20.08.2012. 17:58 ] @
Evo svega sto sam napravio, jos ulaz nisam formirao bas kao sto treba nego sam stavio direktno na RB6 puls. Program je konfigurisan za interni clock.
http://www.2shared.com/file/ZA0XltBY/Projekat.html