Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Przerwanie na RB0 w 16f628 problem

14 Lut 2008 19:32 769 2
  • Poziom 13  
    Witam robie obrotomierz na pic16f628 + czujnik halla. Chciałem do tego wykorzystać przerwanie z rb0 ale pinie cały czas jest stan niski(linia podłłączona przez rezystor 10k do zasilania). Pisałem juz kiedyś programy z przerwaniami na rb0 ale na 16f84, czy jest jakaś różnica? Jak zmierzyłęm multimetrem to między rb0 i gdn jest 40ohm ,wydaje mi sie że nie powinno tak być kiedy jest ustawione przerwanie od rb0. Prosze o pomoc
    Program w mikroC wyświetla na wyświetlaczu ilość przerwań
    Code:

    int a,liczba,cnt,obr;
    unsigned char t,s,d,j,dt, z1;
    void podziel (unsigned int liczba) //liczba do podzielenia
    {
    dt=0;
    t=0; //
    s=0; // zmienne globalne (tysiace, setki, dziesatki, jednosci)
    d=0; //
    j=0; //
    while (liczba>=10000)
    {
    liczba=liczba-10000;
    dt++;
    };
    while (liczba>=1000)
    {
    liczba=liczba-1000;
    t++;
    };
    while (liczba>=100)
    {
    liczba=liczba-100;
    s++;
    };
    while (liczba>=10)
    {
    liczba=liczba-10;
    d++;
    }
    j=liczba;
    }

    char table[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

    void interrupt() {

       if (INTCON.T0IF) {
        cnt++;
        TMR0 = 96;
        INTCON.T0IF = 0;
      }
      if (INTCON.INTF) {
      obr++;
      INTCON.INTF = 0;
      }
    }

    void main() {
    trisa = 255;
    trisb = 255;

    cnt=0;
    OPTION_REG = 0x84;
    TMR0 = 96;
    INTCON = 0xb0;
    obr = 0;
      Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTB,2,1,3);       // Initialize LCD connected to PORTB
      Lcd_Custom_Cmd(LCD_CLEAR);       // Clear display
      Lcd_Custom_Cmd(LCD_CURSOR_OFF);
       Lcd_Custom_Out(1,1,"obroty:");
       while(1) {
       if(cnt >= 200) {
       obr=obr*60;
       podziel (obr);
       z1= table[t];
       LCD_Custom_chr(1,8,z1);
       z1= table[s];
       LCD_Custom_chr(1,9,z1);
       z1= table[d];
       LCD_Custom_chr(1,10,z1);
       z1= table[j];
       LCD_Custom_chr(1,11,z1);
       cnt =0;
       obr =0;
       }
       }
    }
  • Pomocny post
    Poziom 25  
    pikachu1986 napisał:
    Jak zmierzyłęm multimetrem to między rb0 i gdn jest 40ohm ,wydaje mi sie że nie powinno tak być kiedy jest ustawione przerwanie od rb0.

    Chyba nie mierzyles rezystancji wlaczonego mikrokontrolera?!

    Gdy TRISB==255 oraz masz pullup do plusa - nie ma bata - nie moze byc tam 0V. Chyba, ze knoci cos Twoj czujnik Halla (moze caly czas wystawia stan niski?)

    BF
  • Poziom 13  
    Niestety zmierzyłem rezystancje na włączonym procku, dopiero pozniej sobie zdalem sprawe że tak nie wolno:) naszczęście nic sie nie stało . Problem faktycznie był po stronie czujnika ,cały czas dawał mase i nie reagował na magnes . Odblokował sie dopiero jak ręcznie na linie na chwile dałem napięcie przez rezystor 1k. Teraz już jest ok ,dzięki za odpowiedź pozdrawiam