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 w 2025? 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 30 kwi 2025, o 06:14


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
    Autor Wiadomość
    PostNapisane: 26 lut 2017, o 12:34 
    Offline
    Nowy

    Dołączył(a): 14 sty 2017
    Posty: 2
    Pomógł: 0

    Witam,

    Mam problem z timerem 1, aby lepiej zrozumieć, co się dzieje podłączyłem pod port A zestaw diod.
    Do portu A stale przypisywana jest wartość rejestru TCNT1H, taktowanie procesora to 1MHz.

    Diody powinny niezbyt szybko zliczać w systemie binarnym, tymczasem nie świecą w ogóle...
    Najciekawszy jest fakt, że po zamianie z TCNT1H na TCNT1L, wszystko działa (szybciej, ale to oczywiste),
    jeżeli zamiast TCNT1H wpiszę (TCNT1>>8), działa tak, jak powinno.. powolne zliczanie w bin..
    Sprawdzałem adres w bibliotece i wszystko w porządku z TCNT1H, 0x2D.. napisałem ten sam program w ASM i ciągle to samo..
    Próbowałem na innym procesorze.. to samo.. Debugowanie? Również to samo.. symulator pokazuje dokładnie tak, jak jest..
    nie mam pojęcia, czemu to nie działa.. chyba czegoś jeszcze nie wiem o procesorach AVR...

    A góry dziękuję za wszelkie odpowiedzi, kod źródłowy w C zamieszczam poniżej.

    Kod:
    #include<avr/io.h>

    int main()
    {
    DDRA|=0xFF;        //Cały PORTA jest wyjściowy
    //PORTA|=0x02;    //To nie istotne..

    TCCR1B|=0x05;     //Timer 1 ustawiony na preskaler 1024


    for(;;){
       PORTA=TCNT1H; //W nieskończonej pętli następuje przepisanie wartości TCNT1H do PORTA
    }

    //PORTA&=0xFD;    //Nie istotne..
    return 0;}



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 lut 2017, o 15:54 
    Offline
    Użytkownik

    Dołączył(a): 26 mar 2014
    Posty: 34
    Pomógł: 11

    PDF Atmega8, rozdział 16-bit Timer/Counter1, podrozdział Accessing 16-bit registers:
    Obrazek

    Czyli odczytując TCNT1H najpierw musisz dokonać odczytu rejestru TCNT1L.

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


    Lub tak jak napisałeś wyżej, używając przesunięcia bitowego.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 18:37 
    Offline
    Nowy

    Dołączył(a): 14 sty 2017
    Posty: 2
    Pomógł: 0

    Dziękuję bardzo, już wiem, przeczytałem opis T/C1 i jeżeli ktoś ma taki sam problem, niech wie że kiedy odczytujemy wartość dolnej części TCNT1, jego górna część jest natychmiast przepisywana do bufora, aby uniknąć kolejnego cyklu zegara, a co za tym idzie zmiany wartości TCNT1 spowodowane pracą licznika. Aby poprawnie odczytać TCNT1H, musimy odczytać TCNT1L.

    Dziękuję za podpowiedzi, temat uznaję za zamknięty.



    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: 3 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 15 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