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



Teraz jest 2 gru 2024, o 21:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 35 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 20 cze 2014, o 14:36 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Cześć, to mój pierwszy projekt. Chcę zrobić sobie zegarek binarny na atmedze 8, oczywiście multipleksowany.
Chciałbym jednak, żeby po wyłączeniu nadal odmierzał on czas, tak że po ponownym podłączeniu do zasilania ciągle byłaby aktualna godzina, jak można to zrobić?
Załączam schemat.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2014, o 14:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 34
Zbananowany użytkownik

Pomógł: 2

Zegar czasu rzeczywistego - tego potrzebujesz, może być bardzo popularny PCF8583, oczywiście z zasilaniem awaryjnym w postaci baterii. Po wyłączeniu zasilania głównego, zegar dalej będzie liczył czas, włączysz znowu MCU to tylko odczytujesz czas z tego scalaka.


MXST4



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2014, o 15:29 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

nóżka nr 1 czyli reset powinna być podciągnięta do plusa zasilania przez ten rezystor R1 a u Ciebie jest do masy i cały czas będzie w stanie zerowania :) R3-R5 dałbym nieco większe np. 4,7 koma. R1-10kom. Kwarcu 1MHz to raczej nie kupisz :) dołożyłbym jeszcze kondensator elekrolityczny i ceramiczny przy samej atmedze :) wartości takie jak przy stabilizatorze. pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2014, o 15:33 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Dzięki wielkie! Trzeba jeszcze tylko pewnie zrealizować jakiś przełącznik który zasili tego PCFa w razie odłączenia zasilania głównego, przejdzie na awaryjne z baterii, tak? Rzeczywiście nie zauważyłem tego że źle podłączyłem RST. Wartości rezystorów podmienię :) To jaki kwarc będzie tu dobry, 8MHz?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 cze 2014, o 16:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 34
Zbananowany użytkownik

Pomógł: 2

Np.

Obrazek

Kwarcu tak naprawdę tutaj nie potrzebujesz, do takiego projektu wystarczy oscylator mikrokontrolera, ale jeżeli zależy Ci na kwarcu to owszem 8 MHz będzie OK.


MXST4



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2014, o 01:45 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Wielkie dzięki za pomoc! To jeszcze coś, skoro jest okazja. Czy da radę zrobić to na jednostronnym pcb czy lepiej robić na dwu? Będzie to pierwsza moja płytka, nie mam kompletnie doświadczenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2014, o 01:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Vatone napisał(a):
jakiś przełącznik który zasili tego PCFa w razie odłączenia zasilania głównego, przejdzie na awaryjne z baterii, tak?

Nie, daje się diodę. Gdy zanika zasilanie główne układ jest zasilany z baterii samoczynnie.
Zobacz notę aplikacyjną PCF8583, DS1307. Albo jeszcze lepiej zainteresuj się DS3231.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2014, o 07:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 34
Zbananowany użytkownik

Pomógł: 2

Vatone napisał(a):
Wielkie dzięki za pomoc! To jeszcze coś, skoro jest okazja. Czy da radę zrobić to na jednostronnym pcb czy lepiej robić na dwu? Będzie to pierwsza moja płytka, nie mam kompletnie doświadczenia.


Spokojnie wyrobisz się na jednostronnym PCB, najwyżej będziesz miał parę przelotek - ale to żaden problem.


MXST4



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 00:16 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Poprawiłem schemat. Wszystko wygląda tak:
Obrazek

W załączniku również schemat i płytka do otwarcia w EAGLE. Rozmieściłem też elementy na płytce PCB, jednak ułożenie ścieżek w odpowiedni sposób wydaje się dość trudnym zadaniem, szczególnie że chciałem zmieścić się w większości na jednej stronie PCB. Dlatego użyłem opcji automatycznego rozmieszczenia.
1. Rozumiem, że nie warto ufać automatycznemu rozmieszczaniu ścieżek przez program i powinienem zrobić to ręcznie?
2. Wiem na pewno że ścieżki zasilania powinny być grubsze a sygnałowe cieńsze.
3. Czy są jakieś ogólne reguły dotyczące umieszczania modułów zasilania na płytce w stosunku do innych elementów? Starałem się postawić stabilizator z dala od kwarcu do zegara, tak żeby grzejący się stabilizator nie zmieniał jego częstotliwości, chociaż podejrzewam że nie ma to wielkiego wpływu na działanie kwarcu, a i tak nie potrzebuję wielkiej dokładności.
4. W sklepie, w którym chcę zrobić zamówienie, nie ma na stanie takich diod BAT81, jaki zamiennik można zastosować? Czy większość diod się nada? Podobnie tranzystory BC327- czy BC547 jako zamiennik nada się?


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 01:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Vatone napisał(a):
1. Rozumiem, że nie warto ufać automatycznemu rozmieszczaniu ścieżek przez program i powinienem zrobić to ręcznie?

Najczęściej właśnie tak

Vatone napisał(a):
2. Wiem na pewno że ścieżki zasilania powinny być grubsze a sygnałowe cieńsze.

Zasilające najczęściej robi się grubsze. Ale oczywiście trzeba mieć świadomość jakie prądy będą tam plynąć. Jeśli są to prądy rzędu 100mA to 24 mils spokojnie wystarczy. Oczywiście można dać więcej. Sygnałowe ścieżki mogą być cieńsze. Ale jak będą grubsze to też się nic nie stanie. Tych ścierzek jest zazwyczaj więcej, bardziej się nimi kluczy, przechodzi między padami elementów, więc jak są cieńsze to jest wygodniej. Wszystko z umiarem

Cytuj:
3. Czy są jakieś ogólne reguły dotyczące umieszczania modułów zasilania na płytce w stosunku do innych elementów? Starałem się postawić stabilizator z dala od kwarcu do zegara, tak żeby grzejący się stabilizator nie zmieniał jego częstotliwości, chociaż podejrzewam że nie ma to wielkiego wpływu na działanie kwarcu, a i tak nie potrzebuję wielkiej dokładności.

Oczywiście, że są. Powstały o tym całe książki. :P Co pokazuje, że temat nie jest banalny. Np. Wyjść wzmacniaczy nie umieszcza się obok ich wejść. Kondensatory filtrujące jak najbliżej układów które filtrują. Obwody sterujące mocą w oddaleniu lub ekranowane od obwodów wejściowych itd. Nie budujesz jednak ukłądu analogowego w.cz. w którym trzeba by brać pod uwagę wiele rzeczy.
Natomiast warto kondensatory ceramiczne dawać blisko nóżek zasilania ukłądów. Kwarce jak najbliżej układów które są nimi taktowane.

Vatone napisał(a):
4. W sklepie, w którym chcę zrobić zamówienie, nie ma na stanie takich diod BAT81, jaki zamiennik można zastosować? Czy większość diod się nada? Podobnie tranzystory BC327- czy BC547 jako zamiennik nada się?

Musisz patrzeć na parametry elementów. Dioda BAT81 to dioda Schotkiego. Każda mała dioda Shotkiego się nada. A nawet przy braku diody Shotkiego zwykła krzemowa też się sprawdzi.
BC327 jest PNP a BC547 to NPN. Więc nie bardzo się nada, ale każdy inny tranzystor małej mocy PNP.
Ciężko mi zgadywać co jest dostęone u Ciebie w sklepie. Ale sprzedawca mam nadzieję jest na tyle kompetentny, że powinien wiedzieć. Choć po jego sugestii warto go sprawdzić :P Może ma BC328...
Zresztą przy takim układzie zawsze możesz odwrócić te ledy i dać tranzystory NPN (na emiter wtedy GND).
Co wiecej możesz zastosować wtedy układ scalony np. ULN2003, albo ULN2803. Wtedy nawet nie potrzebujesz rezystorów w obwodzie bazy. Oczywiście w programie też odwrotne sterowanie.

------------------------ [ Dodano po: 14 minutach ]

Aha i jeszcze dwie rzeczy.
1. Rezystory około 4,7 kohm na SDA, SCL i INT0 podciągające te linie do VCC. Magistrala I2C ich wymaga (wyjścia open collector) podobnie jak INT0.
2. Przy kwarcu w zegarku przydałby się trymer około 10-20 pf. Może być konieczność lekkiej korekcji +/- jego częstotliwości jeśli zegar będzie się spóźniał/spieszył. Bez trymera będzie trudno... Oczywiście ścieżki do tego kwarcu jak najkrótsze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 09:46 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Dzięki za kolejną rzeczową odpowiedź! Sprawdziłem jeszcze raz na stronie sklepu i na stanie są rzeczone tranzystory i diody (BAT85), nie będę chyba już pisać po północy :)
OK, podciągnę linie magistrali do VCC.
Dodam też trymer. Powinien on być podłączony do nóżki 2 mojego kwarcu i podłączony do masy, tak? Znalazłem w Internecie np coś takiego:
http://m.farnell.com/pl-PL/product.aspx ... id=9528652

Kolejna sprawa- czy doprowadzenie przerwania z RTC jest konieczne? Niestety w Atmegach przerwanie zewnętrzne jest w porcie D, który mam ustawiony jako wyjście, używam go do sterowania LEDami.
Wiem że RTC generuje przerwanie równo co sekundę, i taki sygnał może uruchomić np. funkcję pobrania czasu z magistrali. Ale można chyba równie dobrze generować sobie przerwanie wewnętrzne co sekundę i w ten sposób uaktualniać czas? Jest to co prawda mniej eleganckie, ale działać powinno?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 12:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Gdybyś zastosował RTC typu DS1307 to diody by nie były potrzebne. Bo ten układ ma je wbudowane w siebie. Podłącza się od razu baterię do niego. Poza tym ma "przyjemniej" rozłożone rejestry. Ale PCF ma z kolei rejestr od setnych części sekundy, co czasem się może przydać. Zawsze coś za coś. ;)

Tak trymer będzie dobry. Wiele zależy od rezonatora. Czasem trzeba jeszcze na drugiej nodze dać do masy kilka pF. Ale to już doświadczalnie, zawsze można dolutować nawet do ścieżek po stronie druku.

Użycie przerwania generowanego przez RTC nie jest konieczne. Ale znacznie upraszcza obsługę RTC. Oczywiście, że możesz generować np. Timerem w Atmedze przerwania co sekundę (tak naprawdę będą to przerwania co około sekundę), czy np. co pół sekundy (wtedy nie będzie ryzyka, że odczyt ominie jakąś sekundę). Możesz nawet generować przerwanie np. 110 razy na sekundę i odczytywać wspomniane wyżej setne części sekund.
Natomiast dobrze jest dać w obwód wyjścia INT przy RTC diodę LED z rezystorem do VCC. Wtedy będziesz widział czy układ RTC pracuje w sposób niezależny od jego komunikacji z MCU. To się przydaje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2014, o 21:54 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Wykonałem projekt PCB. Prosiłbym o wskazanie błędów i ewentualne wskazówki. :)
W załączniku płytka w formacie .brd do EAGLE.
Podgląd pcb:
Obrazek


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 00:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Mam kilka sugestii:
1. Użyj poligonu masy. Odpadnie sporo ścieżek
2. Jeśli płyka nie będzie robiona w firmie (metalizacja otworów) to może być ciężko ją lutować. (Lutowanie elementów po obu stronach) Przykładowo z elektrolitami może być problem. Podobnie przy stosowaniu podstawek pod układy.
3. Ścieżka do elektrolitu na wejściu 7805 jest za cienka. Ogólnie przeprojektuj ten fragment.
4. Rezonator zegarkowy będzie raczej w mniejszej obudowie, chyba że masz taki jak naniosłeś na PCB

------------------------ [ Dodano po: 6 minutach ]

To jest PCB które ostatnio robiłem.
Nie szkodzi, że SMD. Chodzi o zasadę. Zobacz o ile prościej jest układ 7805 zrobiony.
A elementy przewlekane lutowane są tylko na jednej stronie.

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 00:42 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

1. OK! Tak zrobię. Czyli po prostu usuwam wszystkie ścieżki GND, robię poligon masy i wtedy GND mi się samo ładnie połączy? Na warstwie TOP też wykonać taki poligon? Tam są tylko dwie bardzo krótkie ścieżki GND.
2. Będę wykonywał płytkę w domu metodą "żelazkową". Mam nadzieję że sobie poradzę.
3. Poprawię.
4. No właśnie, wiem o tym, będę miał mniejszy ten kwarc (cienki, wyższy) nie potrafię jednak znaleźć odpowiedniej obudowy w bibliotekach EAGLE. Szukam pod XTAL i mam tylko taki. Podpowiesz gdzie jest inny kwarc?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 01:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Vatone napisał(a):
Będę wykonywał płytkę w domu metodą "żelazkową". Mam nadzieję że sobie poradzę.

No właśnie, dlatego unikaj stosowania nóżek elementów jako przejściówek z jednej strony na drugą.
W takiej sytuacji lepiej jest robić przejściówki niezależnie od elementów.

Vatone napisał(a):
Podpowiesz gdzie jest inny kwarc?

Biblioteka Crystal -> TC26H albo TC26V (poziomo/pionowo)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 14:28 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Poprawiłem, dodałem poligon. Czy to nadaje się do trawienia?
Obrazek



Ostatnio edytowano 23 cze 2014, o 15:03 przez Vatone, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 14:59 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Nie nadaje się bo nie masz połączonych pinów GNd jeśli dobrze widzę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 15:04 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Dosłownie 5 minut temu to poprawiłem, zedytowałem obrazek, zobacz teraz. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 16:26 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Pisząc zwora będę miał na myśli warstwę TOP.
Ten duży rezystor czy to raczej dławik co idzie do pinu zdaje się 20 powinieneś przesunąć bardziej w prawo i pozbędziesz się dwóch zworek czerwonych co idą warstwą TOP od pinów 15 i 16.
Gniazdo zasilania wystaje poza płytkę.
Od pinu nr 11 idzie rezystor, po co pod nim zwora ?
Nie można się pozbyć zwór tych koło diod ? Wystarczy puścić ścieżki od góry każdego słupka. Zapodaj pliki .sch i .brd z eagla to coś trochę poprawię po swojemu i Ci zapodam.

Jeszcze zauważyłem ohydne zwarcie na stabilizatorze. Wszystkie piny LM'a są zwarte ze sobą.

Jeśli to wytrawisz to tą płytkę wyrzucisz. Bo się nie nadaje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 16:41 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

OK, zapodaję pliki eagla. Z góry dzięki!
Zwora pod rezystorem idącym z pinu 11 jest po to aby poligony masy połączyły się w jeden. Choć faktycznie możnaby było zrobić to po prostu przesuwając ścieżkę.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 17:34 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Nie wiem co za elementy zastosowałeś, ale dla mnie są one jakieś mocno dziwne.
Poza tym coś zmieniałeś na płytce poza schematem bo:

Obrazek

Według mnie płytka mogła by wyglądać mniej więcej tak jak w załączniku. Z pewnością nie jest idealnie, ale według mnie w ciągu 10 minut nic lepszego nie da się wydusić.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 21:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 05 sie 2013
Posty: 1154
Lokalizacja: Lublin / Kraków
Pomógł: 72

Jest lepiej moim zdaniem. Ale ja bym to zrobił nieco inaczej. Pomyśl czy pionowe ustawienie MCU nie będzie lepsze....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2014, o 23:33 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Panowie, dziękuję ogromnie za okazaną pomoc, dużo się dowiedziałem z tego tematu i przeglądając forum.
Oczywiście płytkę da się wykonać na pewno dużo lepiej, ale jako że jest to mój pierwszy projekcik to sukcesem będzie dla mnie jeśli uda się go w ogóle pomyślnie uruchomić. Moim celem nie jest tu zaprojektowanie idelnej profesjonalnej płytki, a po prostu poprawnej, która będzie działać. Oczywiście z kolejnymi projektami na pewno będę wchodził coraz głębiej w szczegóły techniczne i niuanse.
Teraz tak naprawdę zastanawiam się czy w ogóle drukować warstwę TOP dla tych kilku przejściówek czy po prostu połączyć to zworką na płytce.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 cze 2014, o 06:09 
Offline
Użytkownik

Dołączył(a): 29 lis 2012
Posty: 1074
Lokalizacja: Sochaczew
Pomógł: 21

Prosiłem Cię byś podał płytki w formatach eagle żeby poprawić je tak byś nie musiał robić warstwy TOP.
Wytraw tylko BOTTOM a czerwone ścieżki zastąp zworami. Ja zawsze tak projektuję.


Wysłane z mojego LG-P760 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2014, o 20:00 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Płytka jest już wykonana i zlutowana. Oto zdjęcia.
ObrazekObrazek
Obrazek
Przede mną programowanie. Mam już oczywiście cały szkic programu, natomiast na samym początku napotkałem pewien problem:
chcę zapalić sobie jeden cały rządek diod na PCB. piszę program testowy, który daje sygnał na tranzystor i zero na PORTD. na płytce stykowej gdzie mam podłączone kilka diod w analogiczny sposób, wszystko działa. wkładam układ do podstawki na płytce, zapalają się 2 rzędy diod. okazuje się że nóżka procesora gdzie podłączony jest tranzystor od sekund zwiera się z minutami i godzinami. Jednak po odłączeniu zasilania zwarcie znika. Sprawdzałem czy ścieżki nie są pozwierane przed odpaleniem, i nigdzie nie znalazłem błędu. Tylko w momencie gdy podłączę zasilanie nagle połowa portu C zwiera się ze sobą. Czy to oznacza uszkodzony procesor?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2014, o 08:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 kwi 2013
Posty: 187
Lokalizacja: Kobiernice
Pomógł: 13

Mógłbyś podesłać zdjęcie ze spodem płytki z wlutowanymi już elementami?

_________________
zapraszam na bloga http://bakcyl8bit.blogspot.com/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 22:34 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

Cześć. Problem z poprzedniego postu był błahy, po prostu błąd w programie i niedolutowana ścieżka.

Zegarek już działa, jednak w wersji bez RTC. Można na razie podać tyko godzinę na sztywno.
Natomiast z RTC jest pewien problem. Mianowicie nie mogę się z nim skomunikować. Funkcje wziąłem z książki Pana Mirka więc wydaje mi się że są OK. Atmegę mam ustawioną tak, że jeden timer zajmuje się multipleksowaniem wyświetlacza a drugi co sekundę dodaje jedną sekundę do czasu (wersja bez RTC) lub odczytuje czas z RTC z częstotliwością powyżej 1Hz.
Niestety nie działa.
Sprawdziłem:
piny RTC:
1- podłączone do oscylatora
2- podłączone do oscylatora
3- nieużywane, zwarte do masy
4- masa
5- SDA, podciągnięte do 5V przez rezystor 4k7 i do procesora
6- SCL, podciągnięte do 5V przez rezystor 4k7 i do procesora
7- nieużywane, zwarte do masy
8- zasilanie, poprawnie 5V lub 3V w przypadku zaniku zasilania.

Funckje do obsługi RTC:
Kod:
void TWI_start(void){
   TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTA);
   while (!(TWCR&(1<<TWINT)));
}

void TWI_stop(void){
   TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
   while (!(TWCR&(1<<TWSTO)));
}

void TWI_write (uint8_t bajt){
   TWDR = bajt;
   TWCR = (1<<TWINT)|(1<<TWEN);
   while (!(TWCR&(1<<TWINT)));
}

uint8_t TWI_read(uint8_t ack){
   TWCR = (1<<TWINT)|(ack<<TWEA)|(1<<TWEN);
   while (!(TWCR&(1<<TWINT)));
   return TWDR;
}

void TWI_write_buf ( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf){
   TWI_start();
   TWI_write(SLA);
   TWI_write(adr);
   while (len--) TWI_write(*buf++);
   TWI_stop();
}

uint8_t dec2bcd(uint8_t dec){
   return ((dec/10)<<4)|(dec%10);
}

void zapiszGodzineDoPCF(uint8_t godzina, uint8_t minuta, uint8_t sekunda){
   uint8_t bufor[4];
   bufor[0]=0;
   bufor[1]=dec2bcd(sekunda);
   bufor[2]=dec2bcd(minuta);
   bufor[3]=dec2bcd(godzina);
   TWI_write_buf(0xA2, 0x01, 4, bufor);
}

void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf){
   TWI_start();
   TWI_write(SLA);
   TWI_write(adr);
   TWI_start();
   TWI_write(SLA+1);
   while (len--) *buf++ = TWI_read( len? ACK : NACK);
   TWI_stop();
}

uint8_t bcd2dec(uint8_t bcd){
return ((((bcd>>4) & 0x0f)*10) + (bcd)&0x0f);
}

void odczytajCzasOdPCF(){
   uint8_t bufor[3];
   TWI_read_buf(0xA2, 0x02, 3, bufor);

   sekunda = bcd2dec(bufor[ss]);
   minuta = bcd2dec(bufor[mm]);
   godzina = bcd2dec(bufor[hh]);

}

W funkcji main tylko raz wywołuję funkcję zapisu do zegara, potem co mniej niż sekundę występuje przerwanie które powinno mi uaktualniać czas, lecz tak się nie dzieje.
Części programu która wyświetla godzinę na diodach nie zamieszczam, bo szkoda miejsca, a wiem, że działa na pewno. Mógłby ktoś pomóc? :(
Cały kod poniżej.
http://pastebin.com/WQWbCpuM



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 22:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 kwi 2013
Posty: 187
Lokalizacja: Kobiernice
Pomógł: 13

Jaki masz adres do rtc? Jeśli zwarłeś pin 3 do masy, to powinien wynosić 0xA0

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

A pinu 7 bym nie zwierał do masy tylko podłączył diodę przez rezystor, żeby zobaczyć czy zegar działa

_________________
zapraszam na bloga http://bakcyl8bit.blogspot.com/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lip 2014, o 23:03 
Offline
Nowy

Dołączył(a): 20 cze 2014
Posty: 18
Pomógł: 0

O kurczę, miałem tam 0xA2. Niestety po podmianie nic się nie stało, nadal nic się nie wyświetla.
A pin 7 teraz się przyjrzałem i nie jest zwarty do masy tylko przylutowany do płytki. niestety po przyłożeniu tam diody nic się nie dzieje :(



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: 35 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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