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



Teraz jest 16 lis 2024, o 06:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 20 paź 2012, o 19:07 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

Witam

Mam taki pytanie o sens flagi int0_flag z przerwania INT0, z przykładu RTC z niebieskiej książki.

Mianowicie, chciałem sobie dołożyć do zegarka setne części sekundy. Podokładałem odpowiednie zmienne, no i coś mi nie grało, bo sekundy leciały w porządku a setne części wskoczyły na 50 i koniec.

W końcu po małej zabawie z tym zmieniłem if (int0_flag ) na if (1), i setne sekundy zaczęły mi się ładnie pojawiać na LCD.

Co więcej gdy zakomentowałem przerwanie ISR( INT0_vect ) i wyciągnąłem przewód z wyjścia INT PCF-a, to układ mi równie ładnie zliczał czas wraz z setnymi. Więc tutaj jest moje pytanie, jaki ma sens stosowanie tego przerwania oraz tej flagi skoro bez nich działa dobrze, a z przerwaniem i flagą setne części zatrzymują się na wartości 50 (resztę tj.minuty zlicza OK) .

Mirek napisał w swojej książce że wyjście INT warto podłączać, ze względu na obsługę innych wyświetlaczy, no OK, tylko jak wtedy to obsłużyć żeby dobrze wyświetlało setne części sekundy?

Poniżej najważniejszy kawałek kodu programu, w tej wersji działa tak, że setne wyświetla cały czas na 50. Dużymi literami zaznaczyłem te modyfikacje(+ oczywiście odpięcie wyj INT), żeby działało OK

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



Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2012, o 19:29 
Offline
Moderator
Avatar użytkownika

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

No dokładnie o to chodzi - jak widzisz sam doszedłeś. Jak ktoś robi zwykły zegarek to na co mu setne sekundy ?

Wtedy INT się przydaje bo można ładnie synchronizować.... A do stopera to z drugiej strony aż szkoda wykorzystywać RTC (ale to moim zdaniem) można go zrobić równie dobrze na samym procku bez żadnego RTC w czym kłopot ?

Zatem rozumiesz chyba, że moje porady dotyczyły zwykłego zegarka a nie zabaw w stopery ;) bo jak mówię - stoper to ja bym bez żadnego RTC robił ... a wolę zdecydowanie zmniejszyć ilość odczytów na I2C

druga rzecz - nawet jeśli wykorzystywać przerwanie - to przykład przerwania INTx i do tego ustawianie w nim TYLKO flagi - to tylko panie kolego dydaktyczny przykład jak można wykorzystywać przerwania - co to są flagi itp ...

więc często powtarzam, żeby nie traktować kodów z książki jako wytycznych do końca życia - to ma nauczyć podstaw - a bardziej zaawansowane rzecz są i będą dalej ...

zatem wracając do przerwania INT - nawet wcale nie trzeba włączać przerwania aby ustawiać tą flagę - można równie dobrze w tej pętli sprawdzać flagę sprzętową od INTx i ją ręcznie zerować, wtedy mniej miejsca we Flashu stracisz i w pamięci RAM nie musisz flagi zakładać, np dla ATmega32:

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


widzisz jaka oszczędność ? tak też można ;)

_________________
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: 20 paź 2012, o 20:30 
Offline
Moderator
Avatar użytkownika

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

Gwyn - niestety nie zrozumiałem w ogóle tego niuansu tzn co miałeś na myśli.

_________________
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: 20 paź 2012, o 20:38 
Offline
Moderator
Avatar użytkownika

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

A ok - niestety - to nie żadna reguła - czasem ze zmęczenia mi się coś plącze - i dlatego rzeczywiście (widzę teraz dopiero) - że to Antystatyczny pisał o stoperze .... więc to po prostu najczystsza pomyłka z mojej strony .... ale i tak cały post nie traci sensu

------------------------ [ Dodano po: kilkunastu sekundach ]

Antystatyczny napisał(a):
Przepraszam, że stworzyłem zamieszanie... Autor watku dorobił sobie do zegarka obsługę setnych częsci sekundy, co skojarzyło mi się ze stoperem i stąd to wszystko...


Nie nie - spokojnie to moje niedopatrzenie i wina - więc przepraszam.

_________________
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: 21 paź 2012, o 14:53 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

W zasadzie to mirek36 i Antystatyczny dobrze odgadnęli moje intencje bo właśnie chciałem zrobić stoper :)

Tak więc dzięki za wyjaśnienie.

Jeszcze jedno:
Antystatyczny napisał(a):
W przypadku, gdy chcesz zbudować stoper, korzystniej jest odczytywać z częstotliwością np. 100kHz (to jest max częstotliwość dla PCF8583) jego zawartości.


Czyli chodzi Ci o to, żeby tak skonfigurować inne przerwanie w Atmedze, żeby działało z częstotliwością 100kHz? Pytam bo ta częstotliwość skojarzyła mi się z funkcją i2cSetBitrate(), ale to raczej nie o to chodzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2012, o 15:09 
Offline
Moderator
Avatar użytkownika

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

i2cSetBitrate() służy Tylko i Wyłącznie do ustawiania prędkości komunikacji na magistrali I2C .....

_________________
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: 21 paź 2012, o 22:07 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

OK OK, wszystko jasne.

Zaciekawiła mnie jeszcze jedna rzecz, gdy w transmisji USART nie ustawimy prędkości, to po prostu nie będzie komunikacji, tutaj gdy wywalę całkowicie funkcję i2cSetBitrate(), to transmisja nadal chodzi.

Czyżby ten układ miał jakąś standardową częstotliwość gdy mu jej nie podamy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2012, o 22:21 
Offline
Moderator
Avatar użytkownika

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

I2C nie jest tak wrażliwe na ustawianie prędkości. To że układ może działać na 100kHz to nie oznacza że nie zadziała jak transmisja pójdzie np nawet na 5kHz ;) .... ale na pewno może nie zadziałać gdy ustawisz na 400kHz

więc np gdy masz taktowanie procka 8MHz to z domyślnych ustawień rejestrów (bez tej funkcji) ustawi się taka prędkość że będzie hulać - ale jak dasz taktowanie np zewn. kwarcem 16MHz - to już QNIEC - bo się prędkość zwiększy np mocno ponad 100kHz i ten RTC nie wydoli. Rozumiesz ? Ale np gdybyś działał z jakimś innym układem na I2C i on byłby zdolny gadać na 400kHz albo i więcej to też pewnie by działała komunikacja

to o to chodzi w I2C

_________________
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: 1 lis 2012, o 17:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Czy idzie ustawić sobie wg własnego upodobania częstotliwość generowania przerwania przez PCF8583? Poczytałem datasheet i w rejestrach nie ma o tym mowy. Chciałbym, żeby zamiast co sekundę było np. co 0.1 sekundy. Da się?

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2012, o 17:44 
Offline
Moderator
Avatar użytkownika

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

w tym się nie da ale w innych się da - tyle że nie tyle ile by ci się podobało - a zgodnie z propozycją producenta opisaną w PDF, np PCF8563 ? zdaje się

_________________
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: 1 lis 2012, o 17:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Mirek, to dlaczego piszesz w książce (strona 281), cytuję:

"W domyślnej konfiguracji, ustawienia pozwalają na to, aby był generowany sygnał przerwania na wyjściu INT co sekundę oraz (...)".

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2012, o 17:58 
Offline
Moderator
Avatar użytkownika

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

.... no i co dalej po

"oraz (...)" ? ;)

bo wyjście INT może być zależne od alarmu timera itp

_________________
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: 5 lis 2012, o 21:57 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Można też tak go skonfigurować, że wcale przerwania nie generuje. A domyślnie znaczy... po włączeniu zasilania.

_________________
Jestem początkujący i moje porady mogą być błędne



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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