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



Teraz jest 20 cze 2026, o 19:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 46 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 16 lis 2014, o 20:43 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Cytuj:
A według mnie to właśnie w ob_i_wy lub w przerwaniu masz coś skopane. Stawiam bardziej na funkcję ;-)


Funkcję ob_i_wy(...) zamieściłem w całości powyżej. Uważam że też jest prosta, i nie powinna stwarzać takich problemów Używałem jej w tej formie w moim wcześniejszym projekcie przy odczycie z PCFa nie stwarzała żadnych problemów, jednak tam odczytywałem PCFa bezpośrednio To znaczy na odczyt i konwersję każdej wartości pamięci miałem właśnie oddzielną funkcję. Gdybyś mógł na nią spojrzeć. Może zauważysz coś czego sam nie dostrzegam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2014, o 21:13 
Offline
Moderator
Avatar użytkownika

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

Jarosław J napisał(a):
Zrobiłem to w pętli głównej bo tak jest przejrzyściej według mnie niż na te osiem czy dziesięć linijek miałbym tworzyć funkcję.


Powtórzę tylko za kolegą MirkoT ..... niestety takie podejście, (uwierz mi nie pisze tego żeby ci dogryźć bo widzę że się uczysz i szukasz drogi) ... ale niestety to podejście to MASKARA nad masakrami ...

jak tylko dojdziesz do kolejnego etapu programowania to zobaczysz że FUNKCJE to PODSTAWA PODSTAW w C, dlatego od razu słuchaj tych rad które podaje MirkoT bo dobrze prawi

tak samo jak odpalanie tego MILION razy na sekundę - toż samo to stwarza ci już dziesiątki problemów bo nie panujesz nad tym co robisz. Określaj sobie CO I ILE MA TRWAĆ lub CO ILE MA SIĘ WYKONYWAĆ

jak tworzysz funkcję to nadawaj jej nazwę, która coś mówi nie oszczędzaj słów typu

ob_i_wo() .... co to jest ? równie dobrze można by napisać krócej: o_i_w() ... albo jeszcze krócej oiw() albo jeszcze o() .... jak myślisz do czego to prowadzi ? nie dość że sam się w tym gubisz to pokazujesz kod podczas zadawania pytania który jest KOMPLETNIE nieczytelny. Po to pokazuję w Bluegooku podejście gdy tworzę funkcje czy do uarta czy do LCD itp - pisz więcej np:

odbierz_i_wyslij()

nie wiem czy akurat to ma robić twoja funkcja ale podaję ci przykład jak podejść do nadawania nazw - czy to nie byłoby czytelniejsze ? jak myślisz ? szczególnie dla osób którym zadajesz pytanie ....

Jarosław J napisał(a):
Przykłąd MirkoT nie zadziała ponieważ jak już napisałem zmienne mam tylko przez krótką chwilę Jakiekolwiek opóźnienie np delayem, od razu je zeruje i na wyświetlacz trafia 0000.

Gwarantuję ci że zadziała - tylko ty najpierw zrobiłeś błąd jeśli chodzi o sam sposób wyświetlania - a teraz próbujesz robić coś dalej i tak brniesz w kolejne dziesiątki błędów ? po co ? po co .... po co pisać w ogóle dalej kod jeśli nie przetestowałeś sobie POD KAŻDYM względem wyświetlania - a widać że kompletnie tego nie zrobiłeś jak na razie ...

więc moja porada - odłóż na chwilę ten kod na bok

załóż nowy projekt testowy

i stwórz w pętli głównej (Uwaga!) Timer programowy i za jego pomocą zmieniaj dane na wyświetlaczu co sekundę i sprawdź jak się zachowuje wyświetlanie - jeśli źle - to schodzisz o poziom niżej do swojego piekła i naprawiasz wyświetlanie rozumiesz ?

to KOMPLETNIE nie ma NIC wspólnego z tym czy ty umiesz jakieś tam dane przepisać z unii czy nie ... zrozum kompletnie nic ...

więc trzeba zrobić w tył zwrot i taką drogą iść dalej ...

obejrzeć też poradnik z bloga o pułapkach programowych:
http://mirekk36.blogspot.com/2014/04/pu ... ednej.html

_________________
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: 16 lis 2014, o 21:19 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Dzięki Mirku! Poświecę dzisiejszy wieczór na ustalenie tego wszystkiego, cofnę się jak mi doradziłeś i zacznę od pewnego momentu od nowa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2014, o 21:23 
Offline
Moderator
Avatar użytkownika

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

Jarosław J napisał(a):
i zacznę od pewnego momentu od nowa.

Tutaj na tym etapie sprawdzania przyjrzyj się przykładowi z BB multipleksowania ale też koniecznie rzuć proszę okiem na rozdział "Wstęp do systemów czasu rzeczywistego" żeby zobaczyć co to znaczy odpalać timerki programowe i robić kilka rzeczy naraz w pętli głównej - każda w swoim czasie i na pewno nie milion razy na sekundę bo to cię właśnie gubi wbrew pozorom - to uproszczenie, jak je nazwałeś.

_________________
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: 16 lis 2014, o 21:27 
Offline
Użytkownik

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

Jarosław J napisał(a):
Oto zawartość pliku d_led.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie bardzo wiem po co robisz takie kombinacje alpejskie no ale może jest w tym jakiś sens.
No to zobaczmy. Przypuśćmy że jest 17:21:35
Wtedy do swojej funkcji przekazujesz 1721, 35, 0, 3
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

co dzieje się w funkcji
pierwszy if się wykona bo znak == 0
a w tym ifie else bo liczba_dw>999
otrzymamy cyfra1=1
Następny if się nie wykona bo liczba_dw>999
za to wykona się else i co otrzymamy?
cyfra2=liczba1/100
tylko pytanie ile wynosi liczba1?
Bo jakoś nie widzę do tej pory żebyś przypisywał jej jakąś wartość.
A ponieważ to zmienna lokalna to mamy jakąś wartość losową.
To chyba tu już jakiś babol się wkrada?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2014, o 21:35 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Przeglądnę sobie to jeszcze raz. Przekonaliście mnie Opiszę jak należy.
Funkcja ob_i_wy znaczy oblicz i wyświetl Kiedyś walczyłem z tym i musiałem tę zmienną liczba1 zdefiniować żeby móc przeprowadzić jakieś działanie dzielenia w dalszej części kodu. Postaram się ułożyć to wszystko, wrócić i Was zaskoczyć :) (choć wolałbym nie wracać :))



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lis 2014, o 21:39 
Offline
Użytkownik

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

A my wolelibyśmy, żebyś wrócił!
I swoją wiedzą dzielił się z innymi i starał się pomagać
mimo, że tak jak np. ja i inni Koledzy na forum.
Choć ja to akurat wiedzę mam maluteńką...

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2014, o 18:35 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

No i wracam. Skończyłem dziś systematyzowanie kodu Teraz plik main wygląda tak:

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


natomiast wyczyszczony plik do obsługi LCD wygląda tak:

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


Trochę jednak rozjechało formatowanie. Niestety nic - dosłownie nic nie zmieniło się w działaniu programu Nadal wyświetla godzinę na tle słabiej żarzących się zer.

Zauważam nadal jeszcze takie zjawisko:

Jeżeli w pętli głównej do funkcji wyświetlającej wpiszę na przykład takie wyrażenie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wszystko wyświetla się pięknie.
Tak samo wszystko działa, jeśli wyświetlę zmienną jako argument, której nadam wcześniej jakąś wartość.

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


Kiedy poszedłem o krok dalej i przy pomocy takiego kodu w pętli głównej :

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


Chciałem tym osiągnąć to, żeby względnie wolno, tak aby dało się zauważyć jak zmienia się wartość licznika, widoczne były kolejne cyfry na wyświetlaczu.
Niestety to co zobaczyłem to tylko cyfrę 0001 Tak jakby utknęło na delayu. Ale nic. Usunąłem delaya Pomyślałem, że najwyżej będę widział tylko najwolniej zmieniającą się pierwszą cyfrę na wyświetlaczu.
Zobaczyłem jednak liczbę 0088 ze słabiej świecącym się segmentem "E" Tak więc wyciągam wniosek, że liczenie odbywa się. Jednak wiem, że uint_16_t potrafi zliczyć więcej niż do 99 (co sugeruje wynik) wiec ponownie wprowadziłem opóźnienie tym razem _delay_ms (10); Tym razem wyświetliły mi się trzy zera od lewej i na miejscu jedności cyfra 2 nałożona z cyfrą 1 Taka litera d z segmentem a. Wrodzona dociekliwość zmusiła mnie do zwiększenia opóźnienia, jednak większej wartości _delay_ms_ (50 dał mi stały nie zmieniający się wynik 0001.

Choć funkcja delay_ms() jest raczej niezawodna, postanowiłem za radą kolegów powołać przerwanie od przepełnienia licznika. Korzystając z mkAVRCalculator, i z zakładki AVR Timer Calculator postanowiłem skorzystać z przerwania od timera 1 w trybie normal jak wynika z tablicy z Wówczas będę miał przerwanie co 10 ms co przy ciągłym dodawaniu będzie dało mi możliwość zaobserwowania zmian nawet tej najszybciej zmieniającej się cyfry.

Obrazek


Więc w main'ie zrobiłem to tak:

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


Wynikiem jest, zmieniająca się z częstotliwością 100 hz cyfra "0" na przemian z "1"

Nie wiem co jest powodem takiego zachowania

Wyświetla mi prawidłowo zmienne stałe więc program do LCD (musi być) raczej jest OK.
Nie zwiększa mi prawidłowo zmiennych w pętli ani przerwaniem ani delay'em

Jakie wnioski z tego wyciągać. Co mi radzicie jeszcze sprawdzić
Jeśli to obsługa wyświetlacza LED, to o czym zapomniałem. Nie mam zupełnie pomysłów
i brakuje już mi nerwów. Programy nie są obszerne, napisałem je wydaje mi się że przejrzyście więc
bardzo proszę rzućcie na nie okiem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2014, o 19:07 
Offline
Użytkownik

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

Możesz jeszcze przypomnieć na jakim to jest procesorze?

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

A, wyrzuć do testów wszystkie includy których w tych początkowych testach
nie potrzebujesz. np 1wire, eeprom, ir... itd.
Zostaw tylko to co niezbędne na tym etapie

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2014, o 19:11 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Atmega 32 taktowana zewnętrznym rezonatorem 16 MHz

Wywaliłem wszystko co zbędne - bez żadnych zmian.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2014, o 19:30 
Offline
Użytkownik

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

Jeszcze jedno pytanie (bo nie pamiętam czy już pytałem wcześniej).
Czy masz niebieską książkę Mirka?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2014, o 19:38 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

tak w stopce mojej jest napisane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2014, o 22:01 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Hej Poradziłem sobie z problemem poprzez wyłączenie Timera2 Nie wiecie może dla czego nie mogę go uruchomić? Może komunikacja TWI go wykorzystuje choć przejrzałem bibliotekę i nie widzę. Na razie wyłączam, ale przydałby mi się bardzo, wiec jeśli wiecie co to za konflikt to dajcie znać.

Dodam tylko, że ustawienie preskalera nic nie zmienia dopiero jak zezwolę na przerwania od przepełnienia to takie rzeczy się dzieją.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2014, o 23:06 
Offline
Moderator
Avatar użytkownika

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

Jarek - mówię ci ;) przemyśl ten zapis:

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


;) oj przemyśl - jak zobaczysz o co chodzi to się sam uśmiejesz :D

------------------------ [ Dodano po: 1 minucie ]

o jo jooooj - i nie tylko ten zapis - ..... robisz babole trudne do wyłapania bo to jak dysleksja wygląda ;) nie obraź się ale strasznie czeskie błędy popełniasz - więc skup się na tym co jest nie tak w tym zapisie - dojdź do tego sam - to ZROZUMIESZ a jak podpowiem to ZAPOMNISZ i po czasie znowu będziesz to robił


Autor postu otrzymał pochwałę

_________________
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: 19 lis 2014, o 23:28 
Offline
Użytkownik

Dołączył(a): 01 sty 2013
Posty: 169
Pomógł: 0

Kurde aż przekląłem... A i uśmiałem się też. Gdybyś był obok, nie zdziwiłbym się gdybyś mnie niebieską i zieloną książką zdzielił przez łeb. Pozostaje mi tylko zwalić winę na zmęczenie. Po oczywistej poprawce, wszystko śmiga. Ja już szukałem podobnych tematów i na bliźniaczej stronie wyszło, że ktoś miał skopaną atmegę. Już wymieniłem ją na nową i to samo. Nie wiem skąd wziąłem ten zapis, ale na pewno bezmyślnie skopiowałem i wkleiłem. Aż sam jestem ciekaw skąd. Wielkie dzięki Zapis preskalera też poprawiłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2014, o 23:38 
Offline
Moderator
Avatar użytkownika

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

;)

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 46 ]  Przejdź na stronę Poprzednia strona  1, 2

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