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



Teraz jest 8 cze 2026, o 17:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 28 ] 
Autor Wiadomość
PostNapisane: 9 lut 2014, o 17:27 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Witam,

To jest mój pierwszy post i na pewno nie ostatni. Jestem początkującym w dziedzinie programowanie AVR. W tym przypadku posiadam ATmega328P.

Do rzeczy. Problem tyczy się RTC DS1307. Po obejrzeniu poradnika Pana Mirka, który dotyczy RTC'ków napisałem kod programu, który miałby wystawiać na wyjściu SQW mojego DS'a 1 Hz i podłączyłem diodę, która mała " mrugać " z taką częstotliwością. Jednak okazuje się, że dioda pali się cały czas. Linie SCL i SDA oraz SQW podciągnięte są do VCC rezystorkami 4.7k. Wydaje mi się, że po prostu nie ma komunikacji z tym układem. Korzystam z bibliotek do transmisji I2C/TWI z blue book'a Pana Mirka.

Prosiłbym o pomoc w rozwiązaniu problemu. Zamieszczam kod programu, schemat podłączenia RTC do uP oraz podłączenie na płytce stykowej.

Układ ten miałby w późniejszym stadium posłużyć do obliczania pozycji słońca.

pozdrawiam

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



ObrazekObrazekObrazek
ObrazekObrazekObrazek


Nie mam pojęcia czy układ w obecnej chwili odpowiada czy nie ... czy dało się do niego coś wgrać czy też nie ....

Zamieszczam jeszcze dodatkowo opis rejestru kontrolnego z DS'a. ktoś chciałby mi pomóc dojść do rozwiązania tego problemu ?

Obrazek



Ostatnio edytowano 9 lut 2014, o 19:53 przez Dolot, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 18:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

jedyne co na razie zauważyłem to
podłączenie diody bez rezystora ograniczającego prąd
lepiej go dodać nie wiadomo jak długo DS to wytrzyma .:)

Nie jestem na sto procent pewien ale na wyjściu SQW
dostajesz chyba częstotliwość 512Hz a wtedy
nie zauważysz migania diody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 18:16 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

No tak rezystora nie ma bo to było włączone tylko i wyłącznie na czas zrobienia zdjęcia ;)

Zaba napisał(a):
Nie jestem na sto procent pewien ale na wyjściu SQW
dostajesz chyba częstotliwość 512Hz a wtedy
nie zauważysz migania diody


Nie wydaje mi się ... Jeżeli SQWE ustawione jest na 1 to i RS1 i RS0 na 0 to na wyjściu SQW powinien być 1 Hz. Chyba że coś źle zrozumiałem z noty katalogowej tego DS'a.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 18:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Jeśli sprawdzałeś w DS-ie to widocznie się mylę
dość dawno to czytałem i nie tak dokładnie ja
tylko korzystałem z możliwości kalibracji a tam 512 mi wystarczało



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

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

O ile się nie mylę to popełniłem błąd w 17 wierszu kodu .... zdefiniowanie funkcji a nie jej deklaracja za chwilę sprawdzę :)

------------------------ [ Dodano po: 24 minutach ]

niestety nadal nie działa ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 21:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Podłącz do procka diodę LED i migaj nią w pętli while. Będzie wiadomo czy program wchodzi do while czy może zawiesza się gdzieś podczas komunikacji i nie konfiguruje DS-a.



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

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

jacekk232 napisał(a):
Podłącz do procka diodę LED i migaj nią w pętli while. Będzie wiadomo czy program wchodzi do while czy może zawiesza się gdzieś podczas komunikacji i nie konfiguruje DS-a.


Done ... dioda mryga ... program wchodzi do pętli ... to co to może oznaczać ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 21:40 
Offline
Nowy

Dołączył(a): 29 lip 2013
Posty: 9
Lokalizacja: Łódź
Pomógł: 1

Witam.
Jak ja walczyłem z tym układem który także nie chciał migać z 1Hz.
Myślę ,że musisz jeszcze w inicjalizacji tego układu ustawić bit7 o nazwie CH w adresie 00h.

pozdrawiam robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 21:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Bit CH w rejestrze 0x00 musisz ustawić na 0 dopiero wtedy ruszy oscylator.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2014, o 21:56 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Moja funckja inicjalizująca wygląda obecnie następująco:

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


dioda mrugnęła tylko raz i na tym koniec ... wydaję mi się że to chyba nie najlepiej :P


poprawka .... moja błędny adres TWI_write_buf(DS1307_ADDR_Z, 0x07, 1, &CH) już naprawiam

------------------------ [ Dodano po: 3 minutach ]

Działa dziękuję bardzo za pomoc koledzy :)

Tematu proszę nie zamykać, ponieważ mogę mieć kolejne pytania :)

pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 16:02 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Witam,

Kolejna część zmagań z moim zegarkiem na DS1307.

Tym razem mam problem z odczytem danych z DS'a.

Poniżej przedstawiam program napisany w oparciu o poradnik Pana Mirka.

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



Układ generuje 1 Hz, jednak nie wyświetla mi się nic na wyświetlaczu, tylko te kropki które znajdują się po inicie LCD. Wydaje mi się że problem jest w tym momencie:

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

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


dioda, którą migam w tej pętli while działa .... dlatego uważam że coś jest nie tak z tym if'em nie wiem czy są złe deklaracje flagi INT0. Nie mogę do tego dojść.

Jeżeli ktoś jest chętny pomóc zapraszam :)
pozdrawiam

------------------------ [ Dodano po: 11 minutach ]

uP nie reaguje w ogóle na to zbocze narastające tak mi się wydaję ... liczę na jakieś podopowiedzi :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 17:48 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Problem rozwiązany nie spojrzałem w notę katalogową ATmegi 328P i tam rejestrem odpowiedzialnym za flagi jest EIFCR a nie MCUCR. Mój błąd :)

dalej będę aktualizował swój program do momentu aż będzie wyświetlał pozycję słońca.

pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 18:42 
Offline
Użytkownik

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

Dolot napisał(a):
Problem rozwiązany nie spojrzałem w notę katalogową ATmegi 328P i tam rejestrem odpowiedzialnym za flagi jest EIFCR a nie MCUCR. Mój błąd :)

dalej będę aktualizował swój program do momentu aż będzie wyświetlał pozycję słońca.

pozdrawiam

A jak będziesz obliczał pozycję słońca?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 19:48 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

pozycję słońca mam obliczoną w excelu dla konkretnego dnia np 1 dnia w roku (wzorcową ) odczytaną co 15 min i to wrzucam w tablicę, następnie obliczam różnicę pomiędzy najwyższym punktem każdego dnia a dniem wzorcowym(1 w roku). i dalej do każdej pozycji wzorcowego dnia dodaję różnicę jaka wyszła dla danego dnia i to będzie wysokość z na jakiej znajduje się. Zrobiłem obliczenia tak a nie inaczej, ponieważ dokładność 5 stopni w zupełności mi wystarczy... to ma być tylko prosty projekt na układy mikroprocesorowe nic więcej mi nie potrzeba. Trochę to skomplikowane ale ciężko to wytłumaczyć pisząc jak skończę excela to może zapodam i na pewno jak skończę program również zapodam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lut 2014, o 19:53 
Offline
Użytkownik

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

Mniej więcej rozumiem. Dzięki

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 08:49 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Witam,

Mam pytanko. W jaki sposób mogę zrealizować zliczanie impulsów na wejściu INT0 z tego mojego DS1307. Ponieważ chciałbym aby układ co 15 min wyświetlał coś na wyświetlaczu. Na pewno muszę wykorzystać tutaj timer 0. Tylko, że przerwania są wyłączone i wykorzystuje tutaj flagi INTF0 oraz INTF1. Jak mogę tego dokonać ? ktoś ma jakiś pomysł ?


pozdrawiam



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

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

A co ile odczytujesz czas z DSa

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

No bo po co Ci liczyć przerwania skoro w RTC masz dokładny czas?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 09:25 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Czas jest odczytywany jeżeli na wejściu INT0 pojawi się zbocze narastające z wyjścia SQW DS'a ( pętla poniżej ):

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


Dlatego właśnie pytam jak to można zrealizować ( może ktoś ma jakiś pomysł ) , bo jestem kompletnie początkującym i nie za bardzo ogarniam :(

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

i właśnie chciałbym docelowo żeby nie wyświetlał daty, a właśnie aktualną pozycję słońca obliczoną co 15 min.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 09:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Może tak po get_datetime:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2014, o 09:51 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

A nie prościej po prostu pobierać minuty z DS'a i wykonywać kod gdy minuta równa się 0, 15, 30 ,45

No i nixie mnie ubiegł :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2014, o 10:55 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Witam,

posiadam sobie taką funkcje, która będzie sobie wykonywać takie działanko jak jest w niej zawarte.... które posłuży mi za wskaźnik do tablicy itd itd na razie jest to mało istotne.

Chodzi o to że wywala mi błąd w tej funkcji akurat.... w miejscach pogrubionych. te błędy to:

main.c:181:2: warning: statement with no effect [-Wunused-value] oraz main.c:182:3: warning: assignment makes integer from pointer without a cast [enabled by default]

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


program zegarka:

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: 12 lut 2014, o 11:34 
Offline
Użytkownik

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

Tyle, że chyba zapomniałeś pogrubić... :-(
A przynajmniej u mnie się nic pogrubionego nie wyświetla

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2014, o 12:03 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

MirkoT napisał(a):
Tyle, że chyba zapomniałeś pogrubić... :-(
A przynajmniej u mnie się nic pogrubionego nie wyświetla

Dolot napisał(a):
Witam,

posiadam sobie taką funkcje, która będzie sobie wykonywać takie działanko jak jest w niej zawarte.... które posłuży mi za wskaźnik do tablicy itd itd na razie jest to mało istotne.

Chodzi o to że wywala mi błąd w tej funkcji akurat.... w miejscach pogrubionych. te błędy to:

błąd 1 ->>>>>> main.c:181:2: warning: statement with no effect [-Wunused-value] oraz błąd 2 ->>>>> main.c:182:3: warning: assignment makes integer from pointer without a cast [enabled by default]

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


program zegarka:

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


Wysłane z mojego Nexus 4 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2014, o 12:04 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Poprawiłem :) przepraszam moje nie do patrzenie

Wysłane z mojego Nexus 4 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2014, o 14:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2014, o 13:00 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

Witam mam mały problem z wyświetlaniem, ponieważ wyświetlają mi się takie głupoty :

Obrazek


a powinno wyświetlać się mniej więcej tak, że e = 6,7 natomiast a = -35,0 .... i na dodatek nie wiem skąd ta 4 na końcu :O

Obrazek

poniżej przedstawiam pętlę while mojego programu :

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


dodatkowo wrzucam zmienne zadeklarowane

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


oraz tablice bo może być tak, że coś w typach pokałapućkało mi się:

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


dane z tablicy _azymut są z zakresu od -600 do 600
dane z tablicy n_azymut są z zakresu od -300 do 0
dane z tablicy _elewacja są z zakresu od -500 do 300
dane z tablicy n_elewacja są z zakresu od -10 do 400


przykład wyświetlania jest jak z blue book'a ... dziele sobie liczbę elewacja przez 10 wyświetlam część dziesiętną, a resztę z dzielenia zapisuję do cz_u i wyświetlam no ale coś nie wychodzi .... :(

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


proszę o pomoc :)

pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2014, o 13:57 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

Jak masz liczbę 365 i chcesz mieć 36.5 to dzielenie całkowite 365/10 da 36, a reszta z dzielenia 365%10 da 5. Jak wcześniej dodatkowo dzieliłeś 365/10%10 to miałbyś wynik 36.6, bo 365/10 daje 36 i reszta z dzielenia to 6.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lut 2014, o 14:19 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 27
Pomógł: 0

A dziekuje bardzo :) bede wieczorem w domu to dam znać czy poskutkowało :) pozdrswiam :)

Wysłane z mojego Nexus 4 przy użyciu Tapatalka



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

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