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



Teraz jest 14 lut 2026, o 23:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 12 maja 2013, o 00:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

Witam, mam problem z funkcją zamiany liczby dziesiętnej na bcd dla zegara RTC. Chodzi o to że funkcja zwraca inne wartości niż te które wyliczyłem na kalkulatorze. Dla zmiennej dzien od 0 do 9 zwraca poprawnie ale jesli wpisze 10 i więcej zwraca nie to co powinna, przykładowo wpisalem 12 a dostaję 0 a powinienem 18. Jeśli w pliku main.c utworzę zmienna tego samego typu np uint8_t dni i przypiszę jej wartość zmiennej dzien to program działa poprawnie.

Zmienna dzien na której program nie chce działać jest wpisana w pliku uart.h jako extern volatile uint8_t dzien; oraz w pliku uart.c jako volatile uint8_t dzien;
Służy do odbierania dnia przez uart. Odbierana jest poprawnie, ponieważ echo z pliku main dociera prawidłowe.

Proszę o jakąś radę bo nie wiem co robić, przestudiowałem rozdział o widoczności zmiennych ale niczego sie nie doszukałem bo wydaje mi się że mam dobrze.

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 05:41 
Offline
Moderator
Avatar użytkownika

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

popelniasz DWA BLEDY

1. piszesz że funkcja źle dzizała a nawet nie pochyliles sie nad ym zeby przeanalizowac jak ona dziala i to twoj pierwszy blad

2. nawet nie chce ci sie jej przetestowac i to drugi twoj powazny blad


a z tych dwoch bledow na dodatek szybko wyciagasz wnioski ze u ciebie jest wszystko ok , ty wszystko robisz dobrze tylko pewnie funkcja zostala zle napisana. Eeeeeh

co za problem wpisac sobie do takiej funkcji liczbe 12 i wyslac do terminala zeby sprawdzic czy przyleci ci 18 czy nie ?????? a zdziwilbys sie pewnie ze w terminalu bedzie OK. Ale taki prosty test pokazalby ci dobitnie ze w takim razie robisz babola u siebie w kodzie lub zalozeniach.

Tylko pewnie pomyslales .... a po co mam pokazywac kod i pisac o co chodzi w nim .... skoro na PEWNO WSZYSTKO JA robie dobrze a to funkcja jest zepsuta.

reasumujac na drugi raz zmien troche podejscie i postaraj zapytac sie co ja robie zle wklejajac jakis fragment kodu..... tutaj np miesca gdzie poslugujesz sie ta funkcja. Ja juz nawet czuje gdzie babola robisz ale nie bede zgadywal.

_________________
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: 12 maja 2013, o 13:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

Nie wiem czemu, ale za każdym razem mam wrażenie że dostaję opierdziel jak bym tylko siedział nic nie robił i czekał na gotowe... Od tygodnia siedzę nad książką i różnymi kodami staram się ogarnąć uart i nawet mi to wyszło. Nie było lekko to prawda i sie nieźle napociłem ale już działa. Teraz próbuję innego kawałka kodu i tak samo ślęczę nad tym do 2 czasem 3 nad ranem (jak nie wierzysz zajrzyj na czat) i staram się coś stworzyć. Wiem że robię błędy i o to w tym chodzi bo sie dzięki temu nauczę jak je naprawiać ale teraz już nie mam pomysłów.

Nie twierdzę że funkcja jest źle napisana bo do tej pory działała bezbłędnie i tak samo działa dobrze jak zrobię nową zmienną. Przeanalizowałem ja kilka razy i też wiem jak działa. Wiem że gdzieś zrobiłem byka ale nie potrafię go odszukać i stąd ten temat. Książka narazie też mi nie pomogła bo widocznie coś rozumiem nie tak. Problem starałem się opisać na tyle jasno żeby było wiadomo o co chodzi. Oczywiście kod mogę zamieścić ale jest on trochę porozrzucany i większość znajduje się w Twoich bibliotekach, a sam prosiłeś żeby ich nie umieszczać na forum.

Co do moich dwóch błędów to niestety nie masz racji, funkcję ogarniam, a bez testów bym tu nie pisał ;)

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 14:16 
Offline
Moderator
Avatar użytkownika

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

dexter ZADEN opierdziel .... ale wskazowki jak szukac ... nie mam zamiaru nikogo opierdzielac .... ale jak mnie ktos zna to wie ze gdy robi odkrycie ze nie dziala cos co musi dzialac i dziala setkom ludzi to nie dziw sie ze tak pisze

tak na prawde to staram sie tez nauczyc troszke zadawac pytania na forum ale tez jak szukac bledow czyli najpierw u siebie .... dlaczego tak ???? z prostego powodu bo ja sam szukam zawsze u siebie ... i to mi pomaga .... mysle ze innym i tobie tez to moze pomoc ...

------------------------ [ Dodano po: 2 minutach ]

a jesli juz sam wiesz ze zrobiles gdzies moze blad to dlaczego kodu nie pokazesz i go nie opiszesz .... przeciez to umozliwiloby znacznie szybsza pomoc na forum rozumiesz ?

------------------------ [ Dodano po: 9 minutach ]

i nie dziw sie ze pisalem te dwa punkty tylko spojrz na swoj tytul watku i to co wyzej teraz napisales ze przeanalizowales funkcje i ze ona niby dziala jak teraz piszesz

ale mniejsza z tym ja bym ci chetnie pomogl tylko jak? skoro ty sie zapierasz nogami i rekami i kodu ani kawalka nie pokazujesz :( z tego samego powodu pewnie i inni nie sa w stanie pomoc

a ja dobrze rozumiem ze niraz czlowiek sie kreci w miejscu i nie moze nawet prostego bledu dostrzec (tez tak mam czasem) ale kurcze panowie jak wy sie bedziecie obrazac na tym forum ze ktos prosi o schemat czy chociaz fragment kodu to ja nie wiem

_________________
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: 12 maja 2013, o 15:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

Luzik, nie obrażam się, poprostu źle się zrozumieliśmy.

poniżej plik main.c uprzedzam że to wersja robocza i może być troszkę pokręcona
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tutaj moja modyfikacja pliku mkuart.h dopisalem funkcje odbierania stringa oraz wyciągania danych z możliwością wylączenia tej drugiej. Poniżej wpis na początku biblioteki dodany zaraz pod
#ifndef MKUART_H_
#define MKUART_H_

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


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


Teraz plik mkuart.c Na początku pod definicją bufora cyklicznego dodałem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Teraz podsumowanie, nie uzywam narazie TWI, staram się przygotować dane do RTC. Teraz tak, jeśli zmienna mies ma wartość od 0 do 9 to wszystko ok ale jeśli więcej to dostaję dziwne rzeczy, próby robiłem ze zmienną dzien i niestety to samo.

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 16:34 
Offline
Moderator
Avatar użytkownika

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

ok to tak na razie na szybko ci cos podpowiem , zamiast przerabiac mis funkcja atoi() wez tu zaloz pulapke i wyslij sobie na uart co masz w tym wskazniku gdy dajesz z terminala 0-9 a potem powyzej 9 , to ci juz cos podpowie.

_________________
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: 12 maja 2013, o 17:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

No to mnie teraz zaskoczyłeś :D Do 9 jest ok powyżej mam 1. Muszę tu pokombinować ;)
Wcześniej jakoś nie podawałem miesięcy powyżej 9 i wszystko śmigało dopiero jak przeskoczyłem na dni to zauważyłem kłopot, ale nie podejrzewałem odbierania... Dziękuję za naprowadzenie, zabieram się za poprawki ;)

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 19:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

Obmyślam, obmyślam i do niczego sensownego nie doszedłem...

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



I teraz mam miesiąc w tablicy charów rozbity na komórki. Problem w tym że komórek może być 2 lub 1 w zależności od odebranej liczby. Jak powinien wyglądać algorytm żeby nie wpisywał śmieci do miesięcy?

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 19:24 
Offline
Moderator
Avatar użytkownika

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

No to teraz nadszedł czas żebyś wyjaśnił mi co tu robisz ?

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


a jak dobrze mi wyjaśnisz to i sam sobie przy okazji COŚ wyjaśnisz ;) ..... aaaa i przy okazji będziesz wiedział dlaczego ci twój kod nie działa....

_________________
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: 12 maja 2013, o 19:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

W tym miejscu wyciągam, z odebranego łańcucha poszczególne cyfry miesięcy i wpisuję do innej tablicy charów.
Dzięki temu mogę zmienną typu int uzupełnić np tak mies=(buf_str[0]-48)*10+(buf_str[1]-48) ale to zadziała tylko dla dwucyfrowej liczby

Anty, nie mogę zmienić formatu odbieranej daty.

Kurcze ja już tu czegoś nie rozumiem, jak wpisałem teraz mies=atoi(wsk) to mam normalną cyfrę, 12 czy wieksza i działa dla wszystkich zarówno jednocyfrowych jak i dwu. To czemu wcześniej takie dziwadła wychodziły?

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 20:35 
Offline
Moderator
Avatar użytkownika

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

dexter napisał(a):
W tym miejscu wyciągam, z odebranego łańcucha poszczególne cyfry miesięcy i wpisuję do innej tablicy charów.
Dzięki temu mogę zmienną typu int uzupełnić np tak mies=(buf_str[0]-48)*10+(buf_str[1]-48) ale to zadziała tylko dla dwucyfrowej liczby


ale ty widzę nadal nie rozumiesz albo piszesz o czymś innym ....

takie operacje to TYLKO w C++ , PHP, JAVA itp .... to nie są stringi

czyli reasumując nie do końca poćwiczyłeś działania z tablicami i wskaźnikami - (C-stringami)

bo takie coś

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


panie kochany - UWAŻAJ teraz i pomyśl:

KOPIUJE CI TYLKO JEDEN ZNAK (BAJT) SPOD ADRESU WSK .... DO KOMÓRKI TABLICY BUF_STR O INDEKSIE I

rozumiesz ? a tobie się wydaje że to tak jak w C++ ;) - teraz jaśniej ?

_________________
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: 12 maja 2013, o 20:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

No to ja wiem że jeden znak :D dlatego poniżej tego mam *wsk++; i leci następny znak do następnej komórki.

Wpisałem mies=atoi(wsk) i w rezultacie dostaję miesiąc własnie tak jak potrzebuję w jednej zmiennej. Nie wiem co ja wcześniej pokręciłem :P pewnie z przesuwaniem bitów.


Mam teraz pytanie odnośnie PCF8583, tam w rejestrze siedzi dzień tygodnia i miesiąc w takiej formie 000 dzien 0 dziesiątki miesiecy 0000 jedności i teraz mam zmienną miesiąc która jest równa np 12. To czy muszę ją rozdzielać na osobne dziesiątki i osobne jedności? i dopiero potem konwertować do BCD i łączyć w jedną zmienną? Bo jak sprawdzałem to 12 po konwersji na BCD daje mi 00001100 a to nie tak jak w opisie pcfa.

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 21:47 
Offline
Moderator
Avatar użytkownika

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

dexter napisał(a):
Bo jak sprawdzałem to 12 po konwersji na BCD daje mi 00001100


eeeeeh panie kolego - czyli dawaj znowu apiać wracamy do początku - ..... a pisałeś że zrozumiałeś i przeanalizowałeś działanie tych funkcji ..... po czym na końcu znowu że konwersja 12 do BCD daje ci to co wyżej napisałeś .... i to jeszcze piszesz że się nie zgadza z tym co w PCF ma być - pewnie że się nie zgadza - tylko żebyś ty przez chwilę zastanowił się skąd bierzesz takie liczby 00001100 - niby po konwersji ;) bo ja tu żadnej konwersji nie widzę ;)

na prawdę zrozum - konwersja BCD jest prosta jak DRUT - co ona oznacza dla np liczby 12 ?

że cyfrę po lewej wrzucasz do lewej (starszej) połówki bajtu, a cyfrę po prawej do prawej (młodszej) połówki bajtu a więc musisz mieć tak:

12 ---> BCD ---> 0b00010010

więc nie mów że coś ci daje inaczej bo to tylko oznacza jedno - znowu coś totalnie krębasisz ;) ale ja już nie wiem co

_________________
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: 12 maja 2013, o 22:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lut 2013
Posty: 126
Lokalizacja: Turbia
Pomógł: 0

Znalazłem babola :D wszystkiemu winna była pętla, z założenia miała przejść raz i stop ale przez pomyłkę ten stop zakomentowałem, przez co robiło mi ciągle to samo i kasowało wynik... Eh tak to jest jak sie pisze do 3 rano :P

Narazie dziękuję za pomoc, jak coś jeszcze nie zadziała to na pewno będę pisał :D

_________________
Zestaw ATB 1.04
Niebieska książka
Zielona książka



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

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