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



Teraz jest 25 sty 2026, o 16:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 5 sie 2014, o 20:53 
Offline
Użytkownik

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

Witam

od kilku godzin wałczę z ogarnięciem DS1307 podłączanego do ATB i już brak mi pomysłów. Układzik podłączony według noty do SDL i SDA podłączone rezystory 4.7kOhm do VCC, SQW do PD2 na ATB. Sprawdziłem analizatorem stanów logicznych i na pinie SQW co sekundę następuje sygnał także zegarek działa. Jednak na wyświetlaczu przy próbie pobrania godziny widnieje 132:132:132. Kod częściowo z BB z rozdziału o PCF oraz częściowo od jednego z kolegów z forum, który również walczył z DS1307.

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



Jeśli chodzi o podłączenia na samej ATB to tak: zworki z SDL i SDA ściagniete a SDL i SDA podłączone bezpośrednio do PC0 i PC1
Co najciekawsze ten sam DS podłączony do arduino działa bez zarzutu, wszystko pieknie jest pobierane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2014, o 22:44 
Offline
Użytkownik

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

Jedyne co mi przychodzi do głowy to może zamienione sda i scl, ( adres 208 i 209 ) Ja korzystałem tak samo z funkcji do i2c z BB tylko że programowego i2c, u mnie odczyt z zegarka wygląda tak:
Kod:
ISR(INT0_vect)
{
   
   //odczyt z rtc
   i2c_START();
   i2cPutbyte(WRITE_ADR);
   i2cPutbyte(0);//odczyt od zerowego adresu ( sekunty)
   i2c_REP_START();
   i2cPutbyte(READ_ADR);
   rtc.sekundy = bcd2dec(i2cGetbyte(ACK));//sekundy
   rtc.minuty = bcd2dec(i2cGetbyte(ACK));//minuty
   rtc.godziny = bcd2dec(i2cGetbyte(ACK));//godzina
   rtc.dni_tygodnia = i2cGetbyte(NACK);//dni tygodnia
   rtc.dni_tygodnia = rtc.dni_tygodnia & 0x07;
   //maskujemy tylko trzy bity od 0 do 7
   i2c_STOP();
   czekaj_na_odczyt = 0;

Spróbuj pojedynczo odczytywać np: tylko sekundy? Powodzenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 06:25 
Offline
Użytkownik

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

Przy próbie zmiany sdl i sda z ekranu znika wszystko także wnioskuje że połączenia są ok. Tak jakby zegarek nie działał a wartości pobierał gdzieś indziej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 07:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

Takie pytanie poczatkujacego .... * bo dopiero "pozeram I2C" :)

Tutaj probujesz pobrac z dwoch roznych adresow ? Nie ma to jakis skutkow ubocznych ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Bo tak naprawde jesli dziala na Arduino to musi dzialac na AVR :) Ja wlasnie wczoraj mialem przeprawe z odczytem z zegarka z ATB :) okazalo sie ze zrobilem typo w adresie ... :/ zeby to rozwiazac malymi krokami skupilem sie na odczytaniu jednej wartosci ;) i to pomoglo znalezc problem :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 08:06 
Offline
Użytkownik

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

Wisz co też mnie to ciekawiło bo tak jak pisałem kod pochodzi od jednego z użytkowników forum, ale na próbę wyrzuciłem ten pierwszy adres i nic się nie zmieniło.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 08:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

A sprobuj tak:

+ Odczyt z urzadzenia o adresie 0xD0
+ Odczyt z pamieci o adresie 0xD1

** Ehhh porady poczatkujacego :) Z noty mozna wyczytac ....

Cytuj:
Slave Transmitter Mode (Read Mode): The first byte is received and handled as in the slave receiver
mode. However, in this mode, the direction bit will indicate that the transfer direction is reversed. The
DS1307 transmits serial data on SDA while the serial clock is input on SCL. START and STOP
conditions are recognized as the beginning and end of a serial transfer (see Figure 5). The slave
address byte is the first byte received after the START condition is generated by the master. The slave
address byte contains the 7-bit DS1307 address, which is 1101000, followed by the direction bit (R/W),
which is 1 for a read.


Wiec ja to rozumialbym ze adres do odczytu to 1101000 , a dodatkowo dochodzi bit* mowiacy czy to odczyt czy zapis czyli dla odczytu 1. Wiec powstaje 11010001 czyli hex 0xD1

Wiec pod tym adresem musisz byc w stanie odczytac wartosci ;)


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 08:48 
Offline
Użytkownik

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

No i tak było zrobione definicja do odczytu jest:

#define DS1307_ADDR_O 0xD1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 08:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

* Wiesz nie chce Ci marnowac czasu ;) tak jak pisalem "UWAGA : probuje pomagac poczatkujacy" :)

No to powiedzmy ze adres mamy ogarniety i nie tam jest problem. To moze po kolei ...

Zamiast ustawiac czas sprobuj po prostu odczytac sekundy ? i czy to zadziala ?


A takie pytanie ... ;) a dziala Ci ta dioda ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 09:01 
Offline
Użytkownik

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

Tak dioda działa ładnie, testowane także analizatorem stanów logicznych i sygnał przerwania jest równo co 1 sek.

Jak wrócę do domu sprawdzę jeszcze czy cokolwiek się zapisuje do DS spróbuję wyłączyć sygnał SQW. Wedy będzie wiadomo czy cokolwiek się wysyła.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sie 2014, o 16:28 
Offline
Użytkownik

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

Tak wiec zapis do pamięci działa bez zarzutu, pod zmienną ctrl podstawiłem same 0 i wykonując:
TWI_write_buf( DS1307_ADDR_Z, 0x07, 1, &ctrl );

W efekcie zegar przestał podawać sygnał na wyjściu SQW. To oznacza że zapis działa jednak jest problem z odczytem ciągle.

EUREKA!!!

Okazało się że odczyt też należy wykonywać za pomocą adresu 0xD0 <ściana> Ciekawi mnie tylko dlaczego gdy zabraknie prądu a nie mam połączonej bateri to godzina nie jest zapamiętywana a wszystko jest zerowane



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2014, o 08:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 448
Lokalizacja: DKL
Pomógł: 53

Wilu88 napisał(a):
Ciekawi mnie tylko dlaczego gdy zabraknie prądu a nie mam połączonej bateri to godzina nie jest zapamiętywana a wszystko jest zerowane
Sam sobie odpowiedziałeś, bateria służy do podtrzymywania rejestrów i pracy RTC podczas braku zasialania. Bez niej zawsze rejestry w układzie będą zerowane.


Autor postu otrzymał pochwałę

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sie 2014, o 11:17 
Offline
Użytkownik

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

OK dzięki za potwierdzenie tezy :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sie 2014, o 22:18 
Offline
Nowy

Dołączył(a): 02 maja 2014
Posty: 4
Pomógł: 1

Wilu88 napisał(a):
Okazało się że odczyt też należy wykonywać za pomocą adresu 0xD0 <ściana>


A to dlatego, że Mirek nam życie ułatwił i w swoich funkcjach do I2C zaszył inkrementowanie adresu układu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Też z tym walczyłem i byłem bardzo dumny z siebie, że jako totalnie początkujący z AVR sam do tego doszedłem :D

Mój pierwszy post na forum Atnela. Cześć, TomDzik jestem :)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 sie 2014, o 10:20 
Offline
Użytkownik

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

No widzisz nawet tego nie zauważyłem że przy zapisie w bibliotece sam zwiększany jest adres :P



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 8 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO