Pokrewne
menu      Zasilacz impulsowy - co ogranicza napiecie zasilajace ?
menu      Rezystor ograniczenia prądowego w zasilaczu impulsowym (indukcyjność) - jaki?, gdzie kupić?
menu      Impulsowe zasilanie 3W luxeona z akumulatorka żelowego 12V 4,5Ah
menu      Zasilacze impulsowe wtyczkowe 12V 1A lib 1,5A
menu      enkoder obrotowo impulsowy (szukam układu)
menu      wlaczanie/wylaczanie zasilaczy impulsowych triakiem
menu      zsilacz impulsowy do przetwornicy 12->230??
menu      rownolegle podlaczenie dwoch zasilaczy impulsowych??
menu      Elektrolity do zasilacza impulsowego KRAKÓW
menu      Uniwersalny zasilacz impulsowy z atestem
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • audipoznan.keep.pl
  • bascom i rozpoznawanie szerokosci impulsu





    Marek S - 04-04-2007 15:45
    bascom i rozpoznawanie szerokosci impulsu
      Witam
    chce zrobić prosty dekoder który będzie rozpoznawał szerokość impulsu od 1 s
    do 2ms . W zależności od szerokości będzie na pinie 1 lub 0 . Szerokość
    podzielona na jedna lub 2 strefy 1 do 1,5 = 0 i 1,5 do 2 ms . Czas pomiaru
    jakieś 0,25 s .Chciałbym to zrobić na ATTiny 12
    Marek S





    Grzegorz Kurczyk - 04-04-2007 17:45

      Użytkownik Marek S napisał:
    > Witam
    > chce zrobić prosty dekoder który będzie rozpoznawał szerokość impulsu od 1 s
    > do 2ms . W zależności od szerokości będzie na pinie 1 lub 0 . Szerokość
    > podzielona na jedna lub 2 strefy 1 do 1,5 = 0 i 1,5 do 2 ms . Czas pomiaru
    > jakieś 0,25 s .Chciałbym to zrobić na ATTiny 12

    Witam
    Widzę tu jakieś zastosowania modelarskie ;-)
    Nie znam Bascoma, ale można skorzystać tu z licznika TIMER0.
    Ustawić preskaler na taktowanie licznika sygnałem o częstotliwości ok
    100kHz (T~10us). Poczekać na narastające zbocze impulsu (można w
    przerwaniu INT0), odczytać i zapamiętać TCNT0. Poczekać na opadające
    zbocze impulsu, odczytać TCNT0 i odjąć poprzednią wartość. Masz w ten
    sposób pomiar czasu impulsu z dokładnością do 10us (co daje 100 kroków w
    przedziale od 1..2ms)

    Pozdrawiam
    Grzegorz




    Konop - 04-04-2007 19:45

      > chce zrobić prosty dekoder który będzie rozpoznawał szerokość impulsu od 1
    > s do 2ms . W zależności od szerokości będzie na pinie 1 lub 0 . Szerokość
    > podzielona na jedna lub 2 strefy 1 do 1,5 = 0 i 1,5 do 2 ms . Czas pomiaru
    > jakieś 0,25 s .Chciałbym to zrobić na ATTiny 12

    Z jakiego źródła pochodzą te sygnały 0 i 1?? Jak bardzo są dokładne?? Ja
    proponuję zmienić ich szerokość, żeby mieć pewną tolerancję: powiedzmy od 1
    do 1,25ms to 0, od 1,75 do 2ms to 1. Teraz robisz tak:
    -zauważasz początek impulsu (np. przerwaniem)
    - czekasz jakies 1,5ms i sprawdzasz, czy dalej jest impuls - jak tak, to
    znaczy że jest to "1", jak nie, to "0".
    Jest to najrpstszy sposób realizacji tego zagadnienia, ale może wystarczy
    :).... . Oczekiwanie możesz zrobić na timerze albo waitms / waitus <- nie
    potrzeba dużej dokładności... Jeśli nie zmienisz tych stref, to będzie
    problem, bo np. 1,499ms to 0 a 1,501ms to juz 1, czyli musisz zmierzyc czas
    z rozdzielczoscia 0,002ms... w moim rozwiazaniu wystarczy Ci rozdzielczosc
    pomiaru rzedu 0,5ms.

    Pozdrawiam
    Konop




    Marek S - 04-04-2007 19:45

      witam
    tak to ma być przełącznik modelarski . Niestety znam trochę bascoma ale jak
    widzę to na tym procku nie bardzo wiem jak to napisać
    Marek S





    Marek S - 04-04-2007 20:45

      Witam
    nie wiem jak uruchomić timer0 z pinu PB3, nie mogę zadeklarować żadnej
    zmiennej tak żeby zmienić stan wyjścia 0 lub 1 chyba to wszystko co na razie
    nie wiem
    Marek S

    'projekt przelacznika na at tiny 12
    'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
    $regfile = "at12def.dat"
    $crystal = 2000000
    Config Pinb.3 = Input
    Config Pinb.2 = Output
    Config Timer0 = Timer , Prescale = 256 'wartosc
    pocztkowa timer0 244 to daje 1,53 sek
    Enable Timer0
    Enable Interrupts
    Timer0 = 244
    Waitms 150




    jarek - 04-04-2007 22:45

     
    Użytkownik "Marek S" <samochodzik2@op.pl> napisał w wiadomości
    news:ev0ra8$icf$1@nemesis.news.tpi.pl...
    > Witam
    > nie wiem jak uruchomić timer0 z pinu PB3, nie mogę zadeklarować żadnej
    > zmiennej tak żeby zmienić stan wyjścia 0 lub 1 chyba to wszystko co na
    > razie
    > nie wiem
    > Marek S
    >
    >
    > 'projekt przelacznika na at tiny 12
    > 'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
    > $regfile = "at12def.dat"
    > $crystal = 2000000
    > Config Pinb.3 = Input
    > Config Pinb.2 = Output
    > Config Timer0 = Timer , Prescale = 256 'wartosc
    > pocztkowa timer0 244 to daje 1,53 sek
    > Enable Timer0
    > Enable Interrupts
    > Timer0 = 244
    > Waitms 150

    Uruchomic mozna go tak

    If pind.3 = 1 Then 'jeżeli impuls wywola 1 na pinie to
    start timer0 'wystartuje timer0
    end if

    --
    Pozdrawiam Jarek O.
    jarek54129(małpa)poczta.fm




    jarek - 04-04-2007 23:45

     
    Użytkownik "Marek S" <samochodzik2@op.pl> napisał w wiadomości

    > 'tu nie wiem jak
    > napisac procedure sprawdzenia
    > 'czy pojawil sie
    > nastepny impuls i zmiany
    > 'stanu wyjscia

    Ja bym to zrobil na watchdog-u... jezeli w czasie watch doga nie pojawi sie
    drugi impuls znaczy sie ze trwal krocej niz 1,5s i program sie zresetuje
    wystawiajac przy tym 0 jezeli pojawil sie drugi impuls to wystawi 1 i
    wyzeruje watchdog-a

    --
    Pozdrawiam Jarek O.
    jarek54129(małpa)poczta.fm




    Marek S - 04-04-2007 23:45

      Witam
    na razie tyle wypociłem gdyby to był inny procesor może było by mi łatwiej .
    Attiny w bascomie nie przyjmuje deklaracji zmiennych pomocniczych
    Marek S
    'projekt przelacznika na at tiny 12
    'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
    'program powinien wystartowac timer0 i odliczyc 1,5 ms poczekac
    'czy pojawi sie nastepny impuls jak sie pojawi to podac na wyjscie 1 jak nie
    to 0
    '$sim
    $regfile = "at12def.dat"
    $crystal = 2000000
    Config Pinb.3 = Input
    Config Pinb.2 = Output
    Config Int0 = Rising 'wyzwolenie
    timera0 z zbocza narastajacego
    Config Timer0 = Timer , Prescale = 256 'wartosc
    pocztkowa timer0 216 co przerwanie wystepuje co 150 ms
    Do
    On Timer0 Alias Pinb.3
    Enable Interrupts
    Timer0 = 244
    'tu nie wiem jak
    napisac procedure sprawdzenia
    'czy pojawil sie
    nastepny impuls i zmiany
    'stanu wyjscia
    Waitms 150

    Disable Timer0
    Timer0 = 0
    Loop




    Marek S - 05-04-2007 00:45

      Witam
    na razie to na dziś wymordowałem :( ale jakby dobrać wartości czasu
    przerwania to może by można zastosować np. układ pracujący na 2 pinach czyli
    jeśli impuls jest od 1-1,2 ms to 0 od 1,2 do 1,4 ms to 1 np. pin 2 ,a
    powyżej to na pin 4 czyli 2 pozycje wyjść .
    Marek S

    'projekt przelacznika na at tiny 12
    'wejscie PB3 wyjscie PB2 oscylator 2 MHz wewnetrzny
    'program powinien wystartowac timer0 i odliczyc 1,5 ms poczekac
    'czy pojawi sie nastepny impuls jak sie pojawi to podac na wyjscie 1 jak nie
    to 0
    $sim
    $regfile = "at12def.dat"
    $crystal = 2000000
    Config Pinb.3 = Input
    Config Pinb.2 = Output
    Config Int0 = Rising 'wyzwolenie
    timera0 z zbocza narastajacego
    Config Timer0 = Timer , Prescale = 256 'wartosc
    pocztkowa timer0 216 co przerwanie wystepuje co 10 us
    Do
    On Timer0 Alias Pinb.3
    Enable Interrupts
    Timer0 = 244
    'tu nie wiem jak
    napisac procedure sprawdzenia
    'czy pojawil sie
    nastepny impuls i czy dobra jest procedura zmiany
    'wyjscia

    If Timer0 = 122 Then Set Pinb.2
    Waitms 10
    'If Timer0 = 200 Then Reset Pinb.2
    Waitms 50
    Disable Timer0
    Timer0 = 0
    Loop
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • konstruktor.keep.pl
  • Design by flankerds.com