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



Teraz jest 28 mar 2024, o 14:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 23 gru 2018, o 03:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2013
Posty: 62
Pomógł: 0

Witam, szukam sposobu na obliczenie czasu który upłyną między dwoma odczytami z RTC no i nie idzie :P
nie chcieli byście zerknąć gdzie tak mocno zbłądziłem?
chyba że odpowiedz jest w którejś z książek, to mam je ze sobą

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


mniejwięcej pewnie widać o co mi chodziło
w strukturze rtc przechowywany jest pierwszy odczyt a w rtc_new następny no i zależy na ich odjęciu



Ostatnio edytowano 23 gru 2018, o 20:05 przez tomasz1987, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2018, o 10:45 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 99
Lokalizacja: Piła
Pomógł: 4

A gdybyś powołał dwie dodatkowe zmienne zamieniając sekundy, minuty, godziny czasu pierwszego i później drugiego to łatwiej odejmować. Miałem podobny problem tutaj topic21286.html spójrz może coś Ci się nasunie na myśl.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2018, o 11:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2013
Posty: 62
Pomógł: 0

Wczoraj jak zamknąłem oczy
Wpadłem na to że problemem jest sposób w jaki są przechowywane zmienne
A to że formatuje wyjście jak wyrzucam to na rs232 tylko mi to maskuje
Jeszcze nie miałem czasu tego sprawdzić ale może między karpiem a uszkami



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2018, o 11:17 
Offline
Użytkownik

Dołączył(a): 22 kwi 2017
Posty: 99
Lokalizacja: Piła
Pomógł: 4

Po odjęciu wyjdą Ci sekundy ale można sobie zmienić na godziny, minuty a na pewno łatwiej operować na takich dodatkowych zmiennych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2018, o 14:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2013
Posty: 62
Pomógł: 0

ok to tak
liczby w tej struktuże sa przechowywane jako BCD
więc dodając te dane w takiej postaci nie zawsze uzyskamy poprawny wynik :P
dla przykładu 02.02.00
kiedy zsumujemy wyjdzie nam 4
ale jak sumujemy 10.10.00 to wyjdzie 32
więc dodałem funkcję bcd2dec
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no i wyszło 20


tak to jest jak się robi coś o 2 w nocy jak się powinno spać

wesołych świąt :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 gru 2018, o 18:48 
Offline
Użytkownik

Dołączył(a): 13 lis 2013
Posty: 168
Lokalizacja: Szczecin
Pomógł: 1

Witam.
Popraw babola w tytule bo kłuje w oczy :shock:
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 gru 2018, o 10:45 
Offline
Użytkownik

Dołączył(a): 07 gru 2013
Posty: 90
Pomógł: 6

Witam nie wiem czy do końca Ciebie zrozumiałem - chcesz obliczyć jaki czas upłynął np pomiędzy jednym zdarzeniem o czasie np 02:00:00 a drugim zdarzeniem powiedzmy o 11:55:00. Jeśli nie zależy ci na sekundach to ja bym zrobił to tak: odczytujesz z rtc -> przerabiasz do "dec" i zamieniasz godziny + minuty na jedną zmienna:

czas_u16=(( godziny * 60) +minuty);

z drugim czasem robisz dokładnie to samo a później zwykłe odejmowanie i masz czas jaki upłynął. Wyświetlenie wyniku:

godziny=czas_u16/60; minuty=czas_u16%60;

Do wyświetlania czasu zegarka, czy do wyświetlania w menu, lub czasu który upłynął - używasz tylko jednej funkcji.Jeśli chciałbyś liczyć czas z sekundami to trochę trudniej gdyż musiał byś użyć uint32, albo sekundy liczyć oddzielnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 gru 2018, o 11:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2013
Posty: 62
Pomógł: 0

Dzięki za podpowiedź
Ale wolę dodawać i odejmowaćna uint8 jak mnożyć na uint16
Taką loszkę napisałem


Sorki ale taka tylko kopię mam

Obrazek

Tak tak wiem milion bcd2dec
Jak będę miał zrobię sobie nowy kontener z wartościami w uint8



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 gru 2018, o 12:22 
Offline
Moderator
Avatar użytkownika

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

tomasz1987 napisał(a):
Taką loszkę napisałem

No rzeczywiście masakra, po jaki gwint miliard razy wykonujesz bcd2dec() ? Zamiast RAZ wczytać do zmiennych i skonwertować z BCD na DEC i wtedy porobić obliczenia.

_________________
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: 24 gru 2018, o 12:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2013
Posty: 62
Pomógł: 0

Nie ma to jak edytować posta kiedy ktoś pisze następnego :P

Tak wszystko wiem pisałem na szybko żeby sprawdzić czy działa



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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