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



Teraz jest 22 mar 2026, o 20:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 38 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 18 mar 2013, o 17:18 
Offline
Moderator
Avatar użytkownika

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

Nie odbierz mnie źle - wcale nie chodziło mi o to że np czepiasz się bibliotek albo nie .... po prostu głośno sobie myślę i podpowiadam.

Ale ok .... DDRC nie trzeba ustawiać bo bit załączający I2C TWEN robi to automatycznie


Skoro masz 1Hz na wyjściu PCF'a to znaczy że zegarek sobie tyka radośnie

Rozumiem że linie SDA i SCL tzn ich poziomy obserwujesz oscylem a nie miernikiem ? bo miernikiem mógłbyś nie zauważyć transmisji..

może jeszcze być kwestia źle ustawionego adresu I2C dla PCF'a ja używam w zestawie

#define PCF8583_ADDR 0xA2

ale jeśli na oscylu nie widzisz żadnej aktywności na SCL i SDA to dziwne - bardzo dziwne - nie mniej jednak to może świadczyć nadal o sprzętowym problemie na I2C

sprawdź czy nie wiesza ci się to na operacjach typu:

while ( !(TWCR & (1<<TWINT)));

w funkcjach: TWI_read(), TWI_write() itp .... zwykłym debugerem jednodiodowym - bo jeśli się na nich wiesza czyli pętla działa w nieskończoność to znaczy już ponad wszelką wątpliwość że masz problem na linii I2C albo zły adres i nie ma potwierdzenia

no ale musiałby być widoczny przebieg chociaż na SCL bo to master generuje przecież

_________________
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: 18 mar 2013, o 20:26 
Offline
Użytkownik

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

Dzięki Mirku za wskazówki. W pętli głównej wiesza mi się - nie przechodzi program za tę linijkę:

TWI_read_buf( PCF8583_ADDR, 0x01, 4, bufor );

Za tą linijką nic nie pokazuje Tak jakby się tutaj zawieszało.

Sądzę, że może to świadczyć o tym, że w tej funkcji "COŚ" oczekuje na odpowiedź a jej nie dostaje. nie wiem, czy dobrze dedukuję.

Zrobiłem jeszcze jedno doświadczenie zamiast co sekundę odczytywać to wkleiłem i co sekundę zapisuję

TWI_write_buf( PCF8583_ADDR, 0x01, 4, bufor );

I tutaj na oscyloskopie widzę wyraźnie transmisję nadawania

Nie wiem ile rzeczywiście się zapisuje, ale to może świadczyć, że coś jest z adresem. Chociaż powinienem widzieć przebieg przy odbieraniu nawet jeśli adresy by nie trafiały. Ech Nie wiem co dalej.

Nie wiem też dalej czy ta wartość i2cSetBitrate(); jako 100 jest odpowiednia. Może tu się krztusi?

------------------------ [ Dodano po: 30 minutach ]

Ech Poszło bezproblemowo na adresie A0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 mar 2013, o 21:01 
Offline
Moderator
Avatar użytkownika

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

ale się uwziąłeś na tą funkcję i2cSetBitrate() ;) .... daj spokój - no bo powtarzam ci że bez niej w ogóle miałbyś kichę. A co do 100 czy nie 100 ..... to akurat jak poczytasz - hmmm gdziekolwiek na temat I2C to zobaczysz, że podstawowa i można powiedzieć najwolniejsza prędkość dla standardowych i starych układów I2C to 100kHz i tyle przecież ustawiasz. Ja rozumiem gdybyś ustawiał 200kHz albo 400kHz ... to można byłoby mieć słuszne obawy .... no ale jak mówię otwórz byle PDF byle scalaka I2C i poczytaj na początku z jaką prędkością na I2C on pracuje ... to wszystko ci się wyjaśni. Więc nie ten trop

ale dalej - wyżej napisałem ci żebyś sprawdził głębiej gdzie się zawiesza - przecież masz dostęp do wnętrza funkcji TWI_write_buf() ..... to właśnie ona składa się z tych mniejszych o których wspomniałem wyżej więc trzeba wchodzić w matrixa ;) czyli coraz głębiej ale i tak na końcu dojdziesz pewnie do momentu na który zwróciłem uwagę a to oznacza że błąd też będzie związany z tym co mówiłem wcześniej ....

i pewnie jak go odkryjesz - to będzie zaskoczenie że taka prozaiczna przyczyna była ....

- coś na liniach SDA lub SCL
- coś nie tak z adresem układu docelowego

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

aaa... no dopiero teraz zobaczyłem że poszło - ale masz odpowiedź ;) dokładnie jak wyżej pisałem

_________________
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: 23 mar 2013, o 21:12 
Offline
Użytkownik

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

Miał Mirek rację, że będę chciał coraz więcej i więcej.
Zdecydowałem się na obsługę swojego zegara pilotem RC5.
O dziwo obsługa pilota pięknie się "przyjęła" w moim programie, przy pomocy przycisków zmieniam na razie wartość zmiennej odpowiadającej za wyświetlanie godziny i temperatury. Wszystko działa natychmiastowo, bez żadnych opóźnień, jestem bardzo pozytywnie zaskoczony.

Ale zrodziło się następne pytanie, bo chciałem wykorzystać jeden przycisk, do wejścia w menu, gdzie będę mógł ustawić godzinę i zapisać do PCFa.

W funkcję MAIN wpisał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.


Pierwsze dwa warunki działają, ale jak widzicie, ostatni warunek wywołuje funkcję o nazwie menu1 do której nic nie wysyłam, i która nic nie zwraca. W tej funkcji chcę na początku ustawić dolne segmenty wszystkich wyświetlaczy a potem wpisać cyframi godzinę i minuty a przy wyjściu wysłać to poleceniem TWI_write_buf (PCF8583_ADDR,0x01,4,bufor); do PCFa.
Jednak przy naciśnięciu przycisku na pilocie funkcja nie zostaje wywołana Sama funkcja 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.


znajduje się w pliku menu.c, zadeklarowana jest w pliku menu.h
plik menu.h zainkludowany jest w pliku main.c.
Według mojego przekonania, po naciśnięciu przycisku o adresie "24" (samo wywołanie innego działania przyciskiem 24 działa) powinna zostać wywołana funkcja menu1 i powinna wejść w nieskończoną pętlę while(1). Jednak tak się nie dzieje. Próbowałem ustawić jakąś pułapkę - działanie i wychodzi na to, że funkcja nie jest wywoływana. Jestem przekonany, że jest to znów jakaś moja nieuwaga, czytałem rozdział FUNKCJE*** w niebieskiej książce, nie natrafiłem na wskazówkę, może to chwilowe zamroczenie i późna godzina.... dla tego proszę spójrzcie fachowym okiem na te krótkie kody.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2013, o 10:18 
Offline
Użytkownik

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

Jeśli przy użyciu biblioteki IR_UNI z II książki rejestruję funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.





a potem na przykład wchodzę w menu i potrzebuję innego działania dla tych samych przycisków pilota to nie mogę ponownie zarejestrować nowej funkcji z innymi przypisanymi działaniami?
Nie mogę też bezpośrednio odczytać wartości command?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2013, o 11:10 
Offline
Moderator
Avatar użytkownika

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

No właśnie tę super właściwość - czyli możliwość rejestracji "w locie" różnych funkcji do obsługi klawiszy , w zależności od kontekstu programu - pokazuję w poradniku VIDEO na temat SNAKE ;)

http://mirekk36.blogspot.com/2012/12/ws ... a-bez.html

nie dość że tak można , to to jest własnie jedna z największych zalet takiego podejścia do programowania.

Po co bezpośrednio odczytywać command - jeśli np wchodzisz sobie w menu uprzednio rejestrując nową obsługę klawiszy na potrzeby tegoż menu - i masz cmd czy tam command przekazany pięknie jako argument do tej funkcji.
Potem opuszczasz MENU i z powrotem rejestrujesz poprzednią funkcję obsługi klawiszy ;) .... mam nadzieję że dostrzegasz tę ogromną zaletę callbacków i ich rejestracji

_________________
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 maja 2013, o 08:59 
Offline
Użytkownik

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

Hej I znów utknąłem.

Chcę zrealizować funkcję o nazwie beep, której zadaniem będzie ustawianie stanu wysokiego na jednym z portów w cyklicznych odstępach czasu.
Używam piezo z generatorem, a chcę uzyskać kilkukrotne "piknięcia"


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

gdzie pierwszy argument określa ilość piknięć
drugi długość trwania piknięcia
a trzeci przerwę między piknięciami.
Zrobiłem taką funkcję:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W przerwaniu zaś, wykorzystuję to w ten sposób


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


Wszystko wydaje mi się przejrzyste, jednak nie działa. Za każdym wywołaniem nie ustawia mi stanu wysokiego.
Może ktoś pomoże? Dla pewności wklejam jeszcze deklaracje zmiennych i funkcji

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


w pliku nagłówkowym
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: 20 maja 2013, o 11:38 
Offline
Użytkownik

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

Już sobie poradziłem Problemem była zbyt wcześnie przepisana wartość.

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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 38 ]  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 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