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



Teraz jest 29 mar 2024, o 00:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 7 maja 2019, o 09:01 
Offline
Nowy

Dołączył(a): 16 lis 2014
Posty: 3
Pomógł: 0

Witam.

Atmega328P 16MHz (częstotliwość impulsów zewnętrznych 32768 Hz 488clkCpu / 1 impuls zewnętrzny)

Mam za zadanie:
1 - zliczać impulsy zewnętrzne do pojemności 32bit,
2 - niedopuszczalne jest zgubienia jakiegokolwiek z impulsów,
3 - wartość licznika musi być spójna,
4 - dopuszczalne jest niewielkie opóźnienie zebrania danych(kilka-kilkanaście impulsów zewnętrznych, bezwzględne maksimum 32 impulsy),

Jest to (chyba) łatwe do zrealizowania.
Impulsy podawane są na na wejście TC1 który jest o pojemności 16bit (zliczanie czysto sprzętowe), w przerwaniu jego przepełnienia zwiększanie zmiennej 16 bitowej. I po sprawie.
Problem upatruję przy odczycie.
Odczyt jest wyzwalany przerwaniem zewnętrznym PCINT
Zawartość TC1 według dokumentacji poprawnie odczytuje się poprzez kolejność dostępu do dolnego i górnego bajtu.(Atomic Read przy wyłączonych przerwaniach CLI)
Ale co z pozostałą 16bit częścią licznika?
Przepełnienie TC1 może być w każdej chwili, i może się zdarzyć że przerwania TC1 i PCINT będą się "zazębiać" w różnych konfiguracjach, co będzie skutkować możliwością przekłamania wartości o całą pojemność TC1 (65535 impulsów!).
Wejście/wyjście z przerwania zawsze zajmuje pewną ilość cykli.

Czy ktoś ma przećwiczony sposób na 100% poprawny sposób działania?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2019, o 11:37 
Offline
Moderator
Avatar użytkownika

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

Może pokaż kod który do tej pory zrealizowałeś i z czym masz konkretnie problemy ?

_________________
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: 7 maja 2019, o 12:57 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

rkierzek napisał(a):
Odczyt jest wyzwalany przerwaniem zewnętrznym PCINT

A nie możesz użyć do tego celu pinu ICP1. Myślę, że to by rozwiązało Twój problem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2019, o 21:55 
Offline
Nowy

Dołączył(a): 16 lis 2014
Posty: 3
Pomógł: 0

Po pierwsze przepraszam za opóźnienie, ale nie sprawdziłem ustawień informowania o odpowiedziach.

Drugi raz po pierwsze. Bardzo dziękuję tobie mirekk36 "Szefowi Tego Całego Majdanu za kawał świetnej roboty we wszystkich Odgałęzieniach" (nie wiem gdzie jest oficjalne miejsce na oficjalne peany pochwalne)

Zacznę od andrews: ICP1 jest OK ale tylko w obrębie 16 bitów tego licznika, ale i wtedy trzeba natychmiast zatrzymać przerwania. Problemem jest pozostałe 16 bitów, przerwanie przepełnienia TC1 i przerwanie ICP1 oraz PCINT i zamieszanie które może wystąpić bo nie znany jest "timing" tych zdarzeń.

mirekk36: Kodu nie ma. Nawet jeżeli będzie uruchomiona konstrukcja sprzętowa, to nie wiem jak sprowokować/emulować taką konkretną sytuację, żeby można ją debugować. Może jakieś pomysły?
Kiedyś zrobiłem coś podobnego w Bascomie i jest zauważane takie sporadyczne zachowanie. Nie sądzę żeby był to kłopot jedynie Bascoma. Wtedy nie wziąłem pod uwagę takiej możliwości i czasem się to dzieje. Teraz ma być nowa wersja i ma być bez tego problemu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 maja 2019, o 06:41 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

rkierzek napisał(a):
ICP1 jest OK ale tylko w obrębie 16 bitów tego licznika, ale i wtedy trzeba natychmiast zatrzymać przerwania.
Niczego nie musisz zatrzymywać. W momencie wejścia do procedury obsługi przerwania mikrokontroler sam sprzętowo wyłącza wszystkie inne przerwania do momentu jej zakończenia. Jestem w tej chwili w pracy i nie mam czasu na szersze wyjaśnienia i argumentację (może wieczorem), ale rozwiązanie z ICP1 miałoby szansę zadziałać prawidłowo, tylko że:
rkierzek napisał(a):
przerwanie przepełnienia TC1 i przerwanie ICP1 oraz PCINT i zamieszanie które może wystąpić bo nie znany jest "timing" tych zdarzeń.
pisząc o ICP1 miałem na myśli, żeby użyć go alternatywnie do PCINT, a nie oprócz. Jeśli w programie musisz korzystać z innych przerwań niż Overflow i Input Capture, to może być problem.
rkierzek napisał(a):
Nawet jeżeli będzie uruchomiona konstrukcja sprzętowa, to nie wiem jak sprowokować/emulować taką konkretną sytuację, żeby można ją debugować.
Można użyć debugera wbudowanego w Atmel Studio. Myślę, że takie proste zależności można zdebugować nawet nie dysponując debugerem sprzętowym używając symulatora.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 maja 2019, o 14:24 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 230
Pomógł: 26

A gdyby tak spoglądać sobie na rejestr ICR1H
Gdy pojawi się w rejestrze "1" oznacza to że tyknęło 255 impulsów na ICP1
Wtedy do zmienne ilosc_impulsow dopisać 256 i wyzerować ICR1H
Gdy przyjedzie pora zakończyć pomiar to dodać do ilosc_impulsow ICR1L

Jeśli Twój program "wyrobi" się z tą operacją przepisywania
to spokojnie sobie liczysz i czekasz
Oczywiście to taki pomysł na gorąco ale może zadziała

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2019, o 12:03 
Offline
Nowy

Dołączył(a): 16 lis 2014
Posty: 3
Pomógł: 0

Dziękuję za podpowiedzi.
Z tą wiedzą teraz muszę przejść do etapu realizacji.
Jak nie będzie problemów to kliknę "Pomógł", a jak się pojawią, to wrócę do tematu.

Pozdrawiam serdecznie.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO