Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

pic16F877A + senzor smt160

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
bluepatch



Založen: Mar 21, 2010
Příspěvky: 25
Bydliště: Ledeč nad Sázavou/Brno

PříspěvekZaslal: út únor 01 2011, 14:03    Předmět: pic16F877A + senzor smt160 Citovat

Zdravim, jelikoz nikdo nevedel jak na to pouzit ten capture, tak sem se rozhodl zmerit stridu timerem v preruseni. Nastala vsak chyba a meri mi to radove blbe a chybu nevidim. Pri pokojove teplote mi displej ukazuje teplotu kolem 50°C. Poradte nekdo prosim..uz sem probdel druhy vecer:))

kód:

float one=0;
float zero=0;
float duty=0;
float teplota=0;
char *strtemp[6];
int i;

void interrupt() {

    T2CON.TMR2ON = 1;
for (i=0; i<10; i++) {
    while (portd.f0==1) {};       // začátek měření se začátkem pulsu
    while (portd.f0==0) {};

    TMR2=0;

    while (portd.f0==1) {};       //konec nuly

    zero=TMR2;                //ulozi delku nuly
    TMR2=0;
    while (portd.f0==0) {};       //mereni jednicky

    one=TMR2;                //ulozi jednicku
    duty+=(zero/(one+zero));

    }
    T2CON.TMR2ON = 0;
    TMR2=0;
    duty=duty/10;                     // prumer z deseti mereni
    teplota=(duty-0.32)/0.0047;
    PIR1.TMR1IF = 0;   // vymaze priznak preruseni

}//interrupt

void nastaveni()
{
    PORTA = 0;
    PORTB = 0;
    CMCON  = 0x07;
    TRISA = 0;
    TRISB = 0;
    TRISD = 1;
  //  OPTION_REG = 0b0000111;
    PIE1 = 0b00000000;
  //  TMR0 = 235;

    PORTB.F0 = 1;
    PORTD = 0;
  T1Con.TMR1CS     = 0; // Timer1 Clock Source Select bit, 0 = Internal clock (FOSC/4)
  T1Con.NOT_T1SYNC = 1; // Do not synchronize external clock input
  T1Con.T1CKPS1    = 1; // 1:8 prescaler  , TMR 1 overflow every 1.9 Hz (= 500 ms timebase)
  T1Con.T1CKPS0    = 1; //
  T1Con.T1OSCEN    = 0; // LP Oscillator Enable Control bit
  T1Con.TMR1ON     = 1; // Timer 1 enabled
  PIE1.TMR1IE      = 1; // TMR1 Overflow Interrupt Enable bit

  TMR1H = 0;
  TMR1L = 0;
  PIR1.TMR1IF = 0;  // clear timer 1 interrupt flag
 
    T2CON = 0b00000001;
    Lcd_Init(&PORTB);
}

void main()
{
   nastaveni();
   Lcd_Cmd(LCD_CLEAR);                //  send command to LCD "clear display"
   LCD_Cmd(LCD_CURSOR_OFF);           //  send command cursor off
   LCD_Out(1,1,"Inicializace...");
   delay_ms(1000);
   INTCON = 0b11000000;
 //  PWM1_Init(5000);
 //  PWM1_Start();
   Lcd_Cmd(LCD_CLEAR);
   LCD_Out(1,1,"Temp:");
   LCD_Chr(1,15,223);
   LCD_Out(1,16,"C");
 //  PWM1_Change_Duty(50);
   while(1)
   {
     FloattoStr(teplota,strtemp);
     LCD_Cmd(LCD_CURSOR_OFF);
     LCD_Chr(1,8,47);
     LCD_Chr(1,9,strtemp[0]);
     LCD_Chr(1,10,strtemp[1]);
     LCD_Chr(1,11,strtemp[2]);
     LCD_Chr(1,12,strtemp[3]);
     LCD_Chr(1,13,strtemp[4]);
     LCD_Chr(1,14,strtemp[5]);
     
   }//end while(1)

}// END Main
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: út únor 01 2011, 15:32    Předmět: Citovat

Darmo sa snažíš, CAPTURE funguje iba s TIMER1. To som ti už raz napísal Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bluepatch



Založen: Mar 21, 2010
Příspěvky: 25
Bydliště: Ledeč nad Sázavou/Brno

PříspěvekZaslal: út únor 01 2011, 20:16    Předmět: re Citovat

no dobre, tak kdyz to ted merim timerem bez capture..jen pouze dobu trvani log 1 a log 0, tak proc to zas nefunguje?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: út únor 01 2011, 20:40    Předmět: Citovat

kód:
duty+=(zero/(one+zero));

Myslím že má být
kód:
duty+=(one/(one+zero));
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bluepatch



Založen: Mar 21, 2010
Příspěvky: 25
Bydliště: Ledeč nad Sázavou/Brno

PříspěvekZaslal: út únor 01 2011, 22:02    Předmět: re Citovat

to jsem zkousel..meri to skoro stejne, akorat kdyz ho zahreju, tak teplota pada, takze to mam asi dobre
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: út únor 01 2011, 22:58    Předmět: Citovat

TMR2 tam je načo? akosi mi to uniká.
Koľko bitový prevod chceš dosiahnuť?
Akú fr. má PIC?
S CAPTURE je to najjednoduchsie.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bluepatch



Založen: Mar 21, 2010
Příspěvky: 25
Bydliště: Ledeč nad Sázavou/Brno

PříspěvekZaslal: út únor 01 2011, 23:21    Předmět: re Citovat

tmr2 v tomto pripade meri sirku nuly a jednicky a capture se ted vubec nepouziva..jede mi to na 8mhz. melo by to byt vlastne uplne jedno..protoze beru pomer nuly ku celymu pulzu a ten pomer bude vzdy stejny..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: st únor 02 2011, 0:00    Předmět: Citovat

Však to vidím. Len prichádzaš o presnosť. Takýto prevodník bude horší ako 7bitov, pritom s CAPTURE sa to dá vpohode urobiť na 10 a viac. A merania sú nezávislé na sw, a najmä použitie C-čka v tomto prípade je úplne nafigu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: st únor 02 2011, 8:32    Předmět: Citovat

citace:
Pri pokojove teplote mi displej ukazuje teplotu kolem 50°C.

protoze beru pomer nuly ku celymu pulzu a ten pomer bude vzdy stejny..

Jak jsem psal, duty cycle se počítá jako poměr kladného pulsu k periodě.. Potom ti vyjde místo 50 stupňů asi 27.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: st únor 02 2011, 8:52    Předmět: Citovat

http://en.wikipedia.org/wiki/Duty_cycle

Presnejší výsledok by sa získal merať najskôr "1"..odloziť "one".
Potom merať periodu.
Nenulovať!! TMR2 a odmerať spolu "onepluszero". Tu by mohol nastať prípad že v TMR2 je menšie číslo ako "one"...potom by sa k "onepluszero" cislo 256.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: st únor 02 2011, 9:21    Předmět: Citovat

S PIC nedělám, ale:

Nepřetéká ti timer2?
Nevidím u něho žádný předdělič.
Měl by umět počítat do cca 800 us.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: st únor 02 2011, 9:43    Předmět: Citovat

AB1 napsal(a):
citace:
Pri pokojove teplote mi displej ukazuje teplotu kolem 50°C.

protoze beru pomer nuly ku celymu pulzu a ten pomer bude vzdy stejny..

Jak jsem psal, duty cycle se počítá jako poměr kladného pulsu k periodě.. Potom ti vyjde místo 50 stupňů asi 27.

Když on v tom programu nule říká one a jedničce říká zero. Rolling Eyes
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: st únor 02 2011, 11:18    Předmět: Citovat

Opravdu, teprve teď to vidím.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: st únor 02 2011, 20:16    Předmět: Citovat

Preddeličku má nastavenú s krokom 2us (T2CON = 0b00000001; )- čo by mohlo stačiť ak by kalkuloval s pretečením TMR2. Aj v tom najpomalšom obvode stačí 1000us na periódu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
bluepatch



Založen: Mar 21, 2010
Příspěvky: 25
Bydliště: Ledeč nad Sázavou/Brno

PříspěvekZaslal: ne únor 06 2011, 20:22    Předmět: vyreseno Citovat

Diky vsem za radu..nakonec jsem prisel na to co jsem delal spatne a rozchodil jsem ten capture.. je to presnejsi, tak na tenhle zpusob kaslu..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.18 sekund