Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATTiny2313 / C - Timer0 Początki

maximus22_kr 30 Oct 2015 21:20 2682 47
Testo
  • #31
    hugeone.co.uk
    Level 9  
    to zależy jak ja podłaczyłeś - anodą do Vcc czy do portu. Albo jest może podłaczona zupełnie na odwrot (tzn nigdy się nie zapali - katoda do Vcc a anoda do portu, albo anoda do GND a katoda do portu).
  • Testo
  • #32
    maximus22_kr
    Level 18  
    Zawsze podłączam do plusa na stałe, a katodą steruje. Za to jeśli umieszczę LED1_TOOGLE w przerwaniu TImer'a ( w części po cnt>500 ), to będzie migać co 1 sekundę.
    Wcześniej na tej samej płytce eksperymentowałem z delay i samym Timer'em i zmiana stanu diody działała. Wykorzystywałem te same makrodefinicje
    Code: c
    Log in, to see the code
  • Testo
  • #34
    hugeone.co.uk
    Level 9  
    szczywronek wrote:
    maximus22_kr wrote:
    Na razie największy problem dla mnie to operacje bitowe
    Ćwicz! Tu jest błąd:
    Code: c
    Log in, to see the code


    Święte słowa !! Zapmniałeś o tyldzie
  • #35
    maximus22_kr
    Level 18  
    Dziękuję, działa.
    Akurat zmiany bitów robiłem według przykładu w jednym z kursów Link

    Mam pytanie o zmienną Extern, mam pliki dht.h i dht.c
    W dht mam między innymi:
    Code: c
    Log in, to see the code


    w main.c chcę wywołać pomiar wilgotności
    Code: c
    Log in, to see the code


    a kompilator twierdzi, że zmienna humidity jest nie rozpoznana, czyli nie zadeklarowana.
  • #36
    User removed account
    User removed account  
  • #37
    BlueDraco
    MCUs specialist
    Deklaracji humidity to ja tu nie widzę.

    Warunek if( 3 == (sekundy%3)) nigdy nie będzie spełniony.
  • #38
    szczywronek
    Level 27  
    Piotrus_999 wrote:
    Nazwy parametrow [...] w tym przypadku słuza jedynie kompilatorowi do
    Do niczego ;) Deklaracja funkcji nie musi w ogóle zawierać nazw parametrów.

    Piotrus_999 wrote:
    Jeżeli napiszesz
    Code: c
    Log in, to see the code

    to będzie znaczyło że ta zmienna jest gdzieś w zadeklarowana w innym miejscu (pliku etc)
    Nie bardzo - to właśnie ta linijka będzie deklaracją zmiennej. Gdzie indziej może być jej definicja.

    W ramach kursów, lekturka na długie wieczory: http://mikrokontrolery.blogspot.com/
  • #39
    User removed account
    User removed account  
  • #40
    szczywronek
    Level 27  
    Piotrus_999 nie denerwuj się bo nie masz racji ;)

    To nie są spory definicyjne. Autor zadał pytanie związane z pojęciami definicji i deklaracji - jak chcesz objaśnić te zagadnienia jeśli dla Ciebie nie ma między nimi różnicy? Co jeśli Autor będzie próbował sam znaleźć odpowiedzi na dręczące go pytania i będzie przy tym stosował Twoją terminologię wolnej amerykanki? Bardzo łatwo jest skrzywdzić początkującego przekazując mu nieprawdziwą/nieścisłą wiedzę. W Internecie jest sporo poradników, które potem kończą się płaczem i tematami na forach "program z poradnika nie działa!?".

    Co do Twojego przykładowego kodu - niestety nie załapałem idei. Tak czy siak, to:
    Code: c
    Log in, to see the code
    nie przejdzie... tyle, że ja nigdzie nie pisałem żeby wyrzucić typy argumentów. Mam nadzieję, że "typ" i "nazwę" argumentu rozróżniasz.

    Lektura nie była dla Ciebie tylko dla Autora.
  • #41
    User removed account
    User removed account  
  • #42
    szczywronek
    Level 27  
    Ok - Autor nie pytał bezpośrednio o te dwa pojęcia - zgadzam się. Pytał natomiast o modyfikator extern, poruszył temat plików nagłówkowych i na końcu wspomniał o deklaracji zmiennej. Według mnie o wiele łatwiej jest prowadzić dyskusję na te tematy, jeśli właściwie stosuje się pojęcia definicji i deklaracji.

    Co do dalszej części - podtrzymuję swoje zdanie - nie masz racji. Proszę, przeczytaj jeszcze raz mój poprzedni post. Nigdzie nie pisałem żeby wyrzucić typy argumentów (jak dobrze wiesz - typy są potrzebne), wspominałem jedynie o nazwach. Czyli przykład: void set_PWN_duty(); nie pasuje do tego o czym piszę. Po wyrzuceniu nazw powinno być: void set_PWN_duty(uint16_t);.
  • #43
    User removed account
    User removed account  
  • #44
    maximus22_kr
    Level 18  
    Quote:
    jeżeli o to Ci chodzi to ok. Dyskusja poszła chyba za deleko na cudzym temacie :)
    Zamiast pomagać Koledze to się tu rozdrabniamy.


    Nie ma problemu, zawsze miło posłuchać ( poczytać ) mądrzejszych od siebie. Zapewne kiedyś do tej dyskusji wrócę i może będzie w niej rozwiązanie innego problemu.

    Natomiast jeśli chodzi o to
    Quote:
    Warunek if( 3 == (sekundy%3)) nigdy nie będzie spełniony.


    też mi to wyszło, jak zacząłem liczyć. Póki co zrezygnowałem z z takiego warunku i zastąpiłem go
    if( sekundy == 1)
    if( sekundy == 2)
    if( sekundy == 3)
    ...

    a zakres zmiennej sekundy w przerwaniu ograniczyłem do 5

    Jeśli chodzi o te przesunięcia bitowe, to w książce Pana Mirka jest to jednak najlepiej wyjaśnione:
    Code: c
    Log in, to see the code


    Jeśli chodzi o Extern to w tym przypadku gdyby go nie było, to i tak sprawdzenie warunku
    Code: c
    Log in, to see the code


    dzięki użyciu operatora pobierania adresu & i tak zadziała ?



    [/quote]
  • #45
    User removed account
    User removed account  
  • #46
    maximus22_kr
    Level 18  
    Dziękuję za odpowiedź. Pewnie jeszcze wiele ( śmiesznych, dziwnych ) pytań zadam.

    Jeśli chodzi o Extern to faktycznie po dodaniu w pliku main.c zmiennej
    int8_t humidity;

    błąd zniknął, kompilacja poprawna, odczyt wilgotności działa.

    Jako, że staram się zrozumieć jak to działa to:
    extern int8_t dht_gethumidity(int8_t *humidity);
    w pliku dht.h umożliwia przekazanie adresu zmiennej do zmiennej w pliku main.c
    w przypadku wywołania funkcji
    dht_gethumidity( &humidity)

    tak ja to rozumiem - może pewnie coś pokręciłem.
  • #47
    User removed account
    User removed account  
  • #48
    maximus22_kr
    Level 18  
    Mam jeszcze pytanie o maskowanie bitów

    Będę odczytywał dane z PCF8563, a on wymaga maskowania bitów po odczycie.
    Jako, że na aktualnie używanej płytce nie mam RTC PCF8563, na razie na "sucho" wymyśliłem coś takiego:
    Code: c
    Log in, to see the code


    z Bascom mam przyzwyczajenie, że maskowanie to było osobne działanie dokonywane przez konwersją, ale C można to zrobić jednej linii. Czy powyższy kod jest poprawny ?

    I jeszcze jeśli chodzi o funkcje. Na razie traktuję je, jako swego rodzaju podprogramy - jeśli wywołam jeden zaraz po drugim. to ten drugi " zaczeka" na zakończenie tego pierwszego ?
    Czyli coś takiego
    Code: c
    Log in, to see the code