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



Teraz jest 12 lis 2024, o 20:27


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 1 gość


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