Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 24 lip 2025, o 13:40


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
    Autor Wiadomość
    PostNapisane: 6 sty 2013, o 14:41 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Witam!

    Męczę mały problem i nie mogę dojść o co chodzi. Otóż chce wykonać przełącznik do odbiornika rc który poprzez wykrycie odpowiedniej długości sygnału będzie mi załączał lub wyłączał urządzenie. Oto mój kod
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    w czym może tkwić problem? procesor to attiny13 taktowany wew oscylatorem 9,6 MHz



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 21 cze 2012
    Posty: 171
    Pomógł: 5

    Witam,
    możesz kolego opisać na czym polega twój problem oraz jaki sygnał podajesz na wejście INT0 ??

    Pozdrawiam
    R.L.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:20 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Problem polega na tym, że nie działa funkcja ustawienia stanu wysokiego na PB3. Podaje sygnał o częstotliwości ok 50hz i o czasie trwania 1 impulsu od około 1ms do 2ms czyli sygnał pwm



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:23 
    Offline
    Użytkownik

    Dołączył(a): 27 gru 2012
    Posty: 159
    Pomógł: 3

    Cytuj:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    wytłumacz mi jak to ma według Ciebie zadziałać.
    PinB1 to jak rozumiem w aTinny jest do IC0? Nie chce mi się teraz tego sprawdzać, ale po kodize tak wnioskuje. Może warto by było go podciągnąć do VCC. Podejrzewam że chciałeś to zrobić ale coś Ci nie wyszło bo zastosowałaś bardzo trudny do odczytu zapis :
    Cytuj:
    PORTB = 0b00000100;

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:34 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    masz racje, mój błąd zamieniłem na
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    aczkolwiek problem nie jest w dalszym ciągu rozwiazany



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:43 
    Offline
    Użytkownik

    Dołączył(a): 27 gru 2012
    Posty: 159
    Pomógł: 3

    To pobaw się jeszcze w przerwaniu zewnętrznym. Zauważ że stan wysoki na porcie powoduje wyzerowanie licznika natomiast stan niski spowoduje obliczenie czasu trwania ale nie zerujesz licznika.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 21 cze 2012
    Posty: 171
    Pomógł: 5

    Witam,
    nie widzę w kodzie załączenia przerwań globalnych sei();

    Pozdrawiam
    R.L.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 15:58 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    wrzucam kod po poprawkach lecz w dalszym ciągu nic się nie dzieje.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Zauważyłem ze procesor jest Tiny13A czy może mieć to znaczenie? Po podciągnięciu zasilania do pinu wejściowego jest dziwne napięcie w granicach 1.5V.

    staneq napisał(a):
    To pobaw się jeszcze w przerwaniu zewnętrznym. Zauważ że stan wysoki na porcie powoduje wyzerowanie licznika natomiast stan niski spowoduje obliczenie czasu trwania ale nie zerujesz licznika.


    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    A nie jest to zerowanie licznika?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 16:07 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 21 cze 2012
    Posty: 171
    Pomógł: 5

    Witam,
    to może inaczej, małymi kroczami. Najpierw sprawdź czy w ogóle generują ci się przerwania zew. np. zapalając diodę. Później sprawdź timer.

    Pozdrawiam
    R.L.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 16:51 
    Offline
    Użytkownik

    Dołączył(a): 27 gru 2012
    Posty: 159
    Pomógł: 3

    KBCH napisał(a):

    staneq napisał(a):
    To pobaw się jeszcze w przerwaniu zewnętrznym. Zauważ że stan wysoki na porcie powoduje wyzerowanie licznika natomiast stan niski spowoduje obliczenie czasu trwania ale nie zerujesz licznika.


    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    A nie jest to zerowanie licznika?


    Jest ale tylko w pewnych warunkach. Jeżeli tak ma być tzn że nie zrozumiałem o co Ci chodzi.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 16:55 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Ja jestem noga z programowania dlatego pytam tylko, jestem wdzięczny za wszystkie sugestie i podpowiedzi.
    Jak Twoim zdaniem powinno to wyglądać?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 17:28 
    Offline
    Użytkownik

    Dołączył(a): 27 gru 2012
    Posty: 159
    Pomógł: 3

    Nie wiem dokładnie co chcesz uzyskać. Czytam i czytam ale nie potrafię tego zrozumieć.
    Zrozumiałem tylko że masz mierzyć czas impulsu (jak mniemam z kodu w stanie niskim) i ustawić 1 na pinie wyjściowym jeżeli długość ta będzie mieścić się w przedziale <800;1350) w przeciwnym razie ustawić na 0
    Jakbyś mógł napisać to tak jasno jak się tylko da i być może jakiś algorytm (jeśli masz a jeśli nie to napisz go sobie to Ci znacznie ułatwi sprawę)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 17:45 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Well, I'm no Servo expert, but...

    If the RC receiver channel is for driving a servo then the signal is likely a series of pulses.

    A pulse occurs about once every 20 mSec.

    The width of the high time of the pulse is about 1 to 2 mSec.

    A pulse width of 1.5 mSec generally positions the servo to the middle of its full range of travel, (e.g. 90 degrees for a 0 to 180 degree range servo).

    One could use the micro to read in the pulses and measure their width.

    If the pulse width is < 1.25 mSec, (Full left rudder = about 1.0 mSec), then turn On the lights.

    If the pulse width is > 1.75 mSec, (Full right rudder = 2 mSec), then turn Off the lights.

    If the micro has nothing else to do then it could read the pulse width in the Main Loop.

    If the micro has other things to do then one could use interrupts to time the pulse.



    z tego co wywnioskowałem to impuls trwa od 1ms do 2 z przerwą co około 20ms czyli wynika z tego ze gdy jest stan 1 to nic się nie dzieje gdy jest 0 licznik ten wewnętrzny zlicza te 20ms + licznik zewnetrzny który zlicza długość tego impulsu



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 19:24 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    No dobra napisałem coś takowego i... Nie działa;)
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Zapwne pomyliłem nazwę któregoś z rejestrów ale nie wiem którego. Prosze o pomoc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 20:00 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    staneq napisał(a):
    Nie wiem dokładnie co chcesz uzyskać. Czytam i czytam ale nie potrafię tego zrozumieć.
    Zrozumiałem tylko że masz mierzyć czas impulsu (jak mniemam z kodu w stanie niskim) i ustawić 1 na pinie wyjściowym jeżeli długość ta będzie mieścić się w przedziale <800;1350) w przeciwnym razie ustawić na 0
    Jakbyś mógł napisać to tak jasno jak się tylko da i być może jakiś algorytm (jeśli masz a jeśli nie to napisz go sobie to Ci znacznie ułatwi sprawę)


    Ja też już wcześniej obserwowałem ten temat ale też przyznam że nie rozumiałem za bardzo o co chodzi więc się nie odzywałem. Teraz z końcówki widzę że chodzi chyba o badanie czasu impulsu jako do serwo. OK już jaśniej ...

    no ale o co chodzi w ostatnim poście ??? :(

    Panowie jak podajecie jakiś kod - to nie piszcie proszę:

    "I NIE DZIAŁA"

    skąd ja czy ktoś może wiedzieć co koledze nie działa ??? no tak nie można opisywać problemu - jest sobie odpalone przerwanie CTC, ma migać dioda. To co to znaczy NIE DZIAŁA ? jaki jest efekt ? dioda miga? nie miga, świeci ale słabiej? przerwanie nie działa? jakiś błąd w kompilatorze ??? no bo tracimy tylko troszkę czas :(

    ważne jest aby dobrze zadać pytanie - to wtedy szybciej można udzielić odpowiedzi. Tyle że autor zwykle wiedząc wszystko o swoich założeniach , schemacie itp zakłada że inni też to skądś wiedzą .... tylko ciekawe skąd?

    no i teraz jakie jest pytanie w ogóle - ??? proszę bardziej sprecyzować temat - wtedy jeśli będę w stanie to postaram się pomóc ok ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 20:09 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Okej, na wstępie przepraszam.

    Problem jest następujący, założyłem sobie, że zrobię włącznik PWM który po dostaniu określonej długości impulsu ustawi na pinie PB3 stan 0 lub 1. Niestety nie ustawia się stan 1 (bo 0 cały czas panuje), w czasie kompilacji nie ma błędu wiec zacząłem szukać problemu małymi kroczkami jak doradził jeden z kolegów. Napisałem przerwanie CTC dioda niestety nie miga



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 20:20 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    a to teraz rozumiem więcej a porada oczywiście była bardzo cenna jak widać ;) bo można sobie pisać wielki program ale co z tego jak jeden z mniejszych bloczków jak przerwanie nie działa ;) no to trza szukać błędu - w kodzie

    nota PDF w łapki i do roboty ;)

    .... no ale jak się popatrzy do PDF'a to szybko się okaże że ten kod wyżej jest poprawnie napisany jeśli chodzi o odpalenie tego przerwania. Niestety SZKOLNY błąd - a prawie w KAŻDYM swoim poradniku VIDEO pokazuję jak ja zaczynam sobie pisać szkielet programu - przypomnę tutaj ale chyba po raz ostatni ;) nie mówiąc że i w pierwszej książce to wałkuję na jej samym początku

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    a kolega co ? ..... widzi różnicę ? bo to właśnie pewnie przez ten NIBY drobny szczegół jak to kolega napisał NIE DZIAŁA - bo rzeczywiście - tak kolega chciał pisząc swój kod żeby nie działało


    Autor postu otrzymał pochwałę

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 sty 2013, o 20:39 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Faktycznie po dodaniu pętli nieskończonej PB3 zmienia stan:) no to teraz przyjrzę się mojemu początkowemu programowi.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 sty 2013, o 22:38 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Czy mógłbym prosić o pomoc w analizie pewnego kodu który znalazłem
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    konkretnie chodzi mi o część
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Moja interpretacja jest taka ze timer0 dodaje do zmiennej length wartość 255 co czas zgodny z cyklem zegara czyli 1.2MHz poniewaz nie widzę na razie prescalera.
    Gdy stan wejściowy na pinie PB0 j== 1 zmienna length jest zerowana rejestr TCNT0 jest zerowany i prescaler ustawiany jest na 64 czyli zlicza co 18750Hz i zaczynany jest pomiar długości tego impulsu. Następnie gdy na pinie PB0 pojawi się stan niski zatrzymywany jest timer0. I teraz mój dylemat, jeśli TCNT0 jest > od 32 to zmienna new= 0 a jak TNCT0 jest< od 32 to zmienna new=1.Następnie jeśli new ==1 i toggle==1 to toggle=0, beeping=1 w przeciwnym razie gdy togle!=1 toggle=1 a beeping=0.

    Moje pytania to:
    1.czy prawidłowo interpretuje kod?
    2.skąd się wzięła wartość 32 i jest ona wyznacznikiem do porównania TCNT0?
    3.Wiem ze zmienna toggle służy do zmiany stanu ale jak skoro nie jest użyta w żadnej innej funkcji.
    4.co daje nam dodawanie do zmiennej length wartości 255?

    Z góry wybaczcie ze zadaje pewnie banalne pytania lecz jak mówiłem jestem noga z programowania i uważam ze lepiej sie zapytać niż nauczyć się jakiś złych nawyków



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 sty 2013, o 10:19 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    1. Nie. Timer0 jest zatrzymany. Dopiero po zmianie stanu na PB0 jest uruchomiony.
    2. 32 wynika z czasu 1,7ms (czas na początku pliku inny niż w komentarzu dalej). ( 1 / ( 1,2MHz/64 ) )*32
    3. toogle to zmienna pomocnicza i jest używana w ISR (PCINT0_vect).
    4. po pierwszym wciśnięciu timer ciągle działa i co 13,6ms się przepełnia generując sygnał przerwania. Biorąc po uwagę liczby 3000 i 255 to po 12 takich przerwaniach za pierwszym razem (za drugim będzie inaczej bo length nie jest zerowane) ustawiona zostanie flaga beeping

    Jeśli nie chcesz się uczyć złych nawyków to wywal cały ten kod do kosza bo:
    -rejestry ustawiane są w beznadziejny sposób (liczby dziesiętne, nie używane nazwy bitów w rejestrach)
    -beeping nie jest z modyfikatorem volatile
    -jak będziesz chciał coś zmienić to czekają cię powtórne obliczenia

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 sty 2013, o 22:56 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Ponownie borykam się z problemem gdyż tym razem postanowiłem sprawdzić przerwania zewnętrzne. Zadanie jest proste za pomocą przerwań zewnętrznych zliczmy impulsy, jesli jest ich jakaś tam ilość to zmienia stan na innej nóżce. W moim wypadku wyzwolenie odbywa się przy zboczu narastającym. Impulsy generuje przez ne555 f=ok1Hz. Podłączyłem PB0 rezystorem 30k masę i podaje impulsy. Problem jest taki, że nie liczy mi tyle ile chce impulsów, zlicza ich zdecydowanie za dużo i za każdym razem inną ilość. Przedstawiam kod, w czym może tkwić problem? Dodam jeszcze ze procesor to atmega8
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 sty 2013, o 11:14 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    1. Używając w kodzie bit_is_set(PINB,PB0) odchodzisz od tego co sam robisz na początku definiując wejścia i wyjścia. Lepiej tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    2. Nie wiem też po co właściwie tak robisz. Zauważ, że jak ustawisz coś na porcie (PORTx) to jak chcesz natychmiast odczytać ten stan (PINx) to musisz odczekać jedną instrukcję np. nop
    3. Jeśli chodzi o dostęp do zmiennych volatile, które są większe niż 8 bitów to nie należy tego robić jak masz w kodzie, ponieważ długa zmienna nie zostanie odczytana w jednym takcie zegara tylko zajmie to więcej czasu, a przerwanie może zostać zgłoszone w trakcie tego odczytu, zmieni wartość zmiennej, ale odczyt może być błędny. Przykładowo masz liczbę 16 bitową 0x00FF. Podczas odczytu celem porównania do rejestrów trafi przykładowo najpierw 0x00 potem przerwanie zwiększy liczbę o 1. Liczba ma wartość 0x0100 i w kolejnym odczycie do drugiego rejestru trafi 0x00. Co będzie skutkowało błędem, bo porównasz liczbę 0x0000 zamiast 0x00FF lub 0x0100, a powiedzmy, że sprawdzałeś warunek if (liczba>2), który tym razem pomimo, że prawdziwy, będzie uznany za fałszywy.
    Poprawnie w kodzie należy tak zrobić:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 sty 2013, o 20:03 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Oczywiście wkradł się mój błąd ponieważ przerwanie jest od sygnału podanego na PD2 a nie od PB0 gdyż jest to wyjście. Stąd pewnie wynikają twoje wątpliwości. Co do dostępu, spróbuje zmienić i zobaczymy co z tego wyjdzie. Powinno być tak
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 sty 2013, o 20:06 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Znowu ja, tym razem chce wzbogacić swoją wunkcję o licznik impulsów w danym czasie. Dlatego Timer1 odlicza mi czas 1s a przerwania zewnętrzne te właśnie impulsy. Założenie jest takie ze jeśli jest mniej niż 5 impulsów ustawia mi sie stan 1(choć i tak tam jest ale to nie ważne) a jak wiecej to ustawia sie stan 0. Niestety nie ustawia się stan 0 pomimo wiekszej ilości impulsów. Problem wynika z tego ze nie wiem jak dokońca to zapisać, jeśli ktoś mógłby mnie naprowadzić byłbym wdzięczny
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    tzn układ działa aczkolwiek połowicznie po resecie jesli podam liczbę wiekszą niż 5 impulsów na sekundę dioda nie gaśnie natomiast po resecie jesli podam wiesza liczbe niz 5 impulsów dioda gaśnie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 sty 2013, o 21:42 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Sprawdź w takiej kolejności:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    jak OCR1A jest równe 0 to program od razu po odblokowaniu przerwania wejdzie w tą procedurę, a tam wyłączasz inne przerwanie (INT0, ale w paskudny sposób) i nie zliczasz już impulsów.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2013, o 12:33 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Czyli jak rozumiem muszę użyć nie trybu CTC a Normal i przerwania od przepełnienia? W jaki inny sposób mogę wyłączyć INT0? zadeklarować funkcje do wyłączania?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2013, o 13:36 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Ok, dzięki Antystatyczny, poprawię kod. A co do pierwszej części mojego pytania mam racje, że trzeba ustawić w tryb normal oraz przerwanie od przepełnienia?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2013, o 14:18 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    O to chodzi, że nie bardzo kumam którą linijkę mam zmienić. Chodzi o ponowne włączenie licznika int0 o ile mniemam ale w której linijce mogę go włączyć?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 sty 2013, o 14:34 
    Offline
    Użytkownik

    Dołączył(a): 30 gru 2012
    Posty: 49
    Pomógł: 0

    Niestety zmiana kolejności nie wiele dała gdyż objawy są te same co wcześniej czyli po resecie jeśli jest wiecej niż 5 to dioda zgaśnie, znowu reset jeśli mniej to nie. Jak dioda zgaśnie i podam mniej niż 5 to nie zaświeci się ponownie. Wybaczcie ze was tak męczę ale sam raczej nie dojdę w czym jest błąd gdyż słaby zemnie programista



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 32 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO