logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Funkcja do 8051 prosta. Zliczanie sygnałów z kontaktronu.

ostryas 04 Gru 2006 15:27 1366 5
REKLAMA
  • #1 3293430
    ostryas
    Poziom 13  
    Posty: 121
    Pomógł: 2
    Ocena: 12
    Witam. Jak napisać w C funcję która zlicza mi sygnały z kontaktronu. Chodzi o to że kontaktron w pewnym momencie zaczyna się " poruszac"
    po okręgu i w jednym miejscu jest magnes. I ma się to zliczać. Tylko cały bajer w tym żeby uwzględnić czas np 0.5 minuty na przejście kontaktronu,a powyżej 0.5 minuty funkcja się "zerowała". Pozdrawiam
  • REKLAMA
  • #2 3293481
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    
    #include "8051.h"
    #define 500ms 0x2000  //np: 2000 to jest 500ms
    unsigned int licznik,Czas_Minal;
    
    void przerwanieINT0 (void) interrupt 0 using 1
    {
    licznik++;
    Delay(); //jakieś opoźnienie bo uP może być za szybki do tego          poruszjącego się koła
    }
    
    void przerwanieTR0 (void) interrupt 1
    {TH0=TL0=0;
      if(Czas_Minal<500ms){Czas_Minal++}else Czas_Minal=0;
    }
    .
    .
    .
    while(1)
    {
     if (Czas_minal){licznik=0;}
    }


    Przykładowo dla '51. Oczywiście trzeba jeszcze skonfigurowac parę rzeczy :)
  • REKLAMA
  • #3 3293531
    ostryas
    Poziom 13  
    Posty: 121
    Pomógł: 2
    Ocena: 12
    Tylko koło porusza się ze zmienną prędkością więc jak dobrać opóźnienie??
  • REKLAMA
  • Pomocny post
    #4 3293552
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Chodzi tylko o to, że jak kontaktron jest załączony to uP jak jest na tyle szybki to będzie to zliczał (chyba, że ustawi się reakcje na zbocze opadające ale wtedy mogą być problemy z zakłóceniem,drganiem). Jak wiemy z jaką min i max prędkością koło będzie się poruszać to możemy wybrać na początek np: średni czas opoźnienia na poziomie 180st obrotu koła.
  • REKLAMA
  • #5 3293596
    ostryas
    Poziom 13  
    Posty: 121
    Pomógł: 2
    Ocena: 12
    DZieki wielkie!!! Pozdrawiam
  • #6 3293822
    Bigfoot
    Poziom 25  
    Posty: 982
    Pomógł: 74
    Ocena: 13
    Z calym szacunkiem ale umieszcenie funkcji delay() w przerwaniu nie jest eleganckie. Dodatkowo wykrywac trzeba zbocze a nie poziom bo gdy kolo kreci sie bardzo wolno zliczonych zostanie kilka impulsow a jesli stenie akurat w pozycji kontraktonu to program bedzie myslal, ze caly czas sie kreci. Najlepiej meic oczywiscie sprzetowo wyeliminowane drgania by nie zliczane byly 'drgajace styki'.

    BF
REKLAMA