Witajcie
W akcie desperacji postanowiłem zapytać na forum...;p
A więc, sprawa wygląda tak. Dopiero od niedawna zacząłem swoją przygodę z mikrokontrolerami. Na dobry początek wyposażyłem się w książki panów M. Kardasia oraz T. Francuza.
Chciałem zbudować zegarek w oparciu o Atmega8 i DS1307.
Zajrzałem więc do odpowiednich rozdziałów. Naczytałem się o interfejsie TWI. Następnie chciałem zabrać się za dogadanie z DS'em.
Tak więc potrzebowałem funkcji startu
Korzystając z dobrodziejstwa pierwszej książki wykorzystałem
I tutaj pojawił mi się pierwszy problem, którego nie mogę zrozumieć.
Pierwsza linijka spoko, ustawiamy wszystkie potrzebne bity.
Ale za to druga ;(
Nie bardzo wiem, jak ugryźć ten temat.
Jak czytać ten zapis? Od środka?
Najpierw znowu ustawiam 1 na bicie TWINT rejestru TWCR, tyle, że tym razem za pomocą maski? Tak więc, chwile wcześniej ustawiłem tam 1, więc iloczyn logiczny da też 1. I na końcu negujemy cały rejestr. Czyli ostatecznie bity chwile wcześniej ustawione zostaną wyzerowane?
(To by sie trochę zgadzało z tym co wyczytałem w książce Pana Francuza, że TWINT należy kasować programowo).
Ale przecież pętla skończy się kiedy na wszystkich bitach będzie 1?
Dobrze to rozumiem?
Zdaje sobie sprawę, że pewnie jest to banalna sprawa, ale jakoś nie potrafiłem nigdzie znaleźć jasnej odpowiedzi.
W akcie desperacji postanowiłem zapytać na forum...;p
A więc, sprawa wygląda tak. Dopiero od niedawna zacząłem swoją przygodę z mikrokontrolerami. Na dobry początek wyposażyłem się w książki panów M. Kardasia oraz T. Francuza.
Chciałem zbudować zegarek w oparciu o Atmega8 i DS1307.
Zajrzałem więc do odpowiednich rozdziałów. Naczytałem się o interfejsie TWI. Następnie chciałem zabrać się za dogadanie z DS'em.
Tak więc potrzebowałem funkcji startu
Korzystając z dobrodziejstwa pierwszej książki wykorzystałem
I2C_Start(void)
{
TWCR = (1<<TWINT ) | (1<<TWSTA) | (1<<TWEN);
while(!(TWCR&(1<<TWINT)));
}
I tutaj pojawił mi się pierwszy problem, którego nie mogę zrozumieć.
Pierwsza linijka spoko, ustawiamy wszystkie potrzebne bity.
Ale za to druga ;(
Nie bardzo wiem, jak ugryźć ten temat.
Jak czytać ten zapis? Od środka?
Najpierw znowu ustawiam 1 na bicie TWINT rejestru TWCR, tyle, że tym razem za pomocą maski? Tak więc, chwile wcześniej ustawiłem tam 1, więc iloczyn logiczny da też 1. I na końcu negujemy cały rejestr. Czyli ostatecznie bity chwile wcześniej ustawione zostaną wyzerowane?
(To by sie trochę zgadzało z tym co wyczytałem w książce Pana Francuza, że TWINT należy kasować programowo).
Ale przecież pętla skończy się kiedy na wszystkich bitach będzie 1?
Dobrze to rozumiem?
Zdaje sobie sprawę, że pewnie jest to banalna sprawa, ale jakoś nie potrafiłem nigdzie znaleźć jasnej odpowiedzi.