[ATmega32][C] Zegar na ściane

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

[ATmega32][C] Zegar na ściane

Post autor: komax3 » 22 gru 2014, 13:53

Witam, jestem tu nowy więc proszę o wyrozumiałość.

1) Chce zrobić zegarek ścienny do pokoju, prosił bym o sprawdzenie schematu. Na stykówce nie mam miejsca żeby podłączyć wyświetlacz więc głównie mi o niego chodzi. Czyli rejestry 74hc595, traznystory, i elementy zwiazane z wyświetlaczem.

Obrazek
Obrazek

2) Prosze jeszcze o ogólnie czy to wszystko ma prawo działać na tym procku, multipleks nie bedzie kolidował np z odczytem i przerwaniem z rtc lub DS18B20, itd.

3) W pętli main mam ifa sprawdzającego flagę przerwania z rtc 1hz w której jest odczyt czasu i odczyt temp wraz z delay 750ms. Myślę przyspieszyć clkout z rtc do 32hz i odliczac na nim kiedy oczytać temp z ds. Czy lepiej zrobić to na innym przerwaniu np tego z multipleksowania wyświetlacza? jaka tolerancje ma czas na konwersje temp?

Obrazek

4) Na CLKOUT pojawiają się szpilki przy odczycie z DS (niestety nie mam oscyloskopu zeby sprawdzić dokładnie co sie dzieje) nie wpływa to teraz na nic bo flaga sie zeruje dużo po tych szpilach.

Obrazek
Obrazek

LCD podłączone do testów urządzeń, RTC i czujnik temp działają poprawnie. Na razie wewn 8mhz, jak będzie wyrabiać to tak zostawię jak nie to kwarc 16mhz.
Jestem początkujący programista i elektronik ale jestem bardzo cierpliwy więc jeżeli da się to zrobić to to zrobię:) Za każdą pomoc będę wdzięczny, pozdrawiam:)

Obrazek
Obrazek
Obrazek

// na razie odczytem rc5 się nie zajmuję - to plany na odległą przyszłość

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 23 gru 2014, 17:16

Musisz sobie wszystko policzyć.
Jak się nie pomyliłem to wyświetlacz masz 32x12 pix. Aby LEDy ci nie migały w zauważalny sposób musisz go odświeżać co najmniej 100 do 200x/sek, to daje przerwania od Timera od 3200 (312us) do 6400(156us)x/sek.
Same rejestry przesówne też możesz sobie uprościć, bo właściwie zapiszesz tylko raz 1, i będziesz ją przesuwał, w prawo, i po 32 cyklach zaczniesz od nowa, więc nie musisz mieć sygnału zwrotnego, wystarczy ci tylko CLK, DataIN, STROBE. Pewnie można to i usprzętowić, wykorzystując Timer w trybie CTC i wyjście OCn jako CLK dla rejestru a po zanegowaniu może nawet jako STROBE ? Przy czym musi on wtedy pracować dwa razy szybciej niż jest odświeżanie wyświetlacza. Ale trzeba by się pobawić tym na stykówce, może da się coś ciekawego stworzyć ?

Jak w PCFie masz wyjście INT to korzystaj z sprzętowego kontrolera przerwań, a nie sprawdzaj programowo to wyjście.

Po co ci ten TSOP ? Chcesz ustawiać Godz z pilota TV ?

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 23 gru 2014, 19:08

Jak w PCFie masz wyjście INT to korzystaj z sprzętowego kontrolera przerwań, a nie sprawdzaj programowo to wyjście.
Tak to jest podpięte pod INT0 i w przerwaniu mam wystawienie flagi, a w pętli głównej ifa który sprawdza flagę i wtedy wykonuje kod. jak skończy to zeruje flagę i znowu czeka w bezczynnej petli na flagę.
Po co ci ten TSOP ? Chcesz ustawiać Godz z pilota TV ?
// na razie odczytem rc5 się nie zajmuję - to plany na odległą przyszłość
myślę że właśnie tak będę chciał zrobić, ale to nie temat na ten rok:)

To o obsłudze wyświetlacza napisałeś zbyt skomplikowanie i nie wiem o co konkretnie chodzi ale spróbuje podłączyć i napisać program po mojemu i dam znac tutaj:)

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 23 gru 2014, 21:44

Nie wiem czy w schemacie wyświetlacza nie masz bledu, bo jaki popłynie prąd przez układ 74hc595 jak zapalisz wszystkie dziody naraz w jednej kolumnie wyświetlacza ? Może się okazać że będzie trzeba zbudować to inaczej.
Wyjście kostki może wytrzymać max 20mA czyli prąd jednej góra dwóch Diod LED. Musiałbyś mieć tzw. Drivery Mocy, za układami 74hc595, albo przebudować układ.

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 23 gru 2014, 23:36

Na 74hc595 na każdym pinie będzie świeciła tylko 1 dioda LED multipleksowana na 12 wierszy. Nie wiem czy mi coś z tego wyjdzie, ale nie spocznę póki to nie będzie działać.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 24 gru 2014, 14:00

I tak przeprojektowałbym ten układ sterowania wyświetlaczem, bo jak w programie się pomylisz i zapalisz kilaka LEDów na raz to upalisz rejestry przesówne. Dodatkowo można dobudować układ zabezpieczający w razie zawieszenia się procesora.

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 24 gru 2014, 22:02

kayron pisze:I tak przeprojektowałbym ten układ sterowania wyświetlaczem, bo jak w programie się pomylisz i zapalisz kilaka LEDów na raz to upalisz rejestry przesówne. Dodatkowo można dobudować układ zabezpieczający w razie zawieszenia się procesora.
Liczę na to że się nie pomylę:)

https://www.youtube.com/watch?v=9aYfE9dh0g8
TAKI EFEKT PODŁĄCZENIA 8X8, RESZTĘ ANALOGICZNIE SIĘ ZROBI:)

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 25 gru 2014, 1:19

Szkoda pinów na sterowane tranzystorów. Albo zastosujesz w tym miejscu jeszcze dwa rejestry przesuwne albo pomyśl o dekoderze 1z16 (zajmuje tylko 4 piny uC). Wiem że tak jest taniej, ale dodatkowe układy do koszt 2zł i w zamian dostaniesz znaczne uproszczenie płytki.

Co do sprawdzania poprawności:
- na schemacie brakuje diód przy PCF (masz je na płytce), więc nie mamy o czym rozmawiać dopóki nie ogarniesz zgodności pomiędzy schematem a płytką
- obwód przełączenia zasilania między programatorem a złączem zasilania jest nieregulaminowy, nie da się używać programatora w którym cała logika lub bufor wyjściowy są zasilane z programowanego układu i nie ma możliwości podania napięcia na programowany układ (np. STK200 i STK300 z wbudowanym buforem)
- wrzuć schemat w większej rozdzielczości (eagle ma opcję eksportu schematu do png) bo nie ogarniam co gdzie jest podłączone
- nigdy nie używaj jpg do grafik wektorowych / generowanych komputerowo
- jak będziesz się nudził, dodaj opcjonalny czujnik światła, przyciemnienie wyświetlacza w nocy (nawet kosztem zmniejszenia częstotliwości taktowania) naprawdę sporo daje

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 25 gru 2014, 4:20

Co do pinów to atmega32 ma ich aż za dużo na taki projekt, a ułożyłem je obok siebie więc stworzenie płytki będzie banalnie proste. tak mi się przynajmniej wydaje:)

Jeżeli chodzi o zworkę to jest po to żeby przełączyć do programowania na zasilanie z programatora a do normalnej pracy z zasilacza zewnętrznego. korzystam z USBasp. Wytłumacz mi to jaśniej bo nie wiem o co dokładnie chodzi.

Schemat wrzucę popoludniu bo muszę go zaktualizować, bo zmiany wychodzą w praniu (czyt. na stykówce). Wyszło już to że nie wiadomo jakim cudem polutowałem odwrotnie LEDy, ale zamieniłem tranzystory na PNP i jak widać działa. Z hc595 biorę GND. Może to tak być?

Czujnik jest w planach. zostało dużo pinów do których nie mam zastosowania:) Ale będę musiał dać trochę więcej prądu LEDom bo w dzień mogły by być troszeczkę jaśniejsze. Mam tylko takie dane o LEDach i nie wiem jak wyliczyć jaki prąd mogę im podać przy impulsie.

Parametry diody:
Obrazek

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 25 gru 2014, 13:42

Generalnie do programowania, programator i układ programowany powinny mieć bardzo podobne napięcie zasilania i wspólną masę. Najczęściej jest to rozwiązane przez połączenie szyn zasilania obu urządzeń i wszystko musi działać.
Pozostaje jednak kwestia, które z urządzeń dostarcza zasilanie a które je pobiera. U ciebie nie ma problemu, UsbAsp posiada zasilanie z komputera i dzieli się tym zasilaniem z układem programowanym - Twoim zegarem. Jednak czasem możesz znaleźć programatory izolowane elektrycznie albo niepobierające zasilania z komputera, w nich to urządzenie programowane musi zasilić bufor wyjściowy programatora, inaczej nie da się programować. Ja bym dał tutaj dwie zworki umożliwiające niezależne połączenie zasilania z programatora, zasilania z zewnątrz, a w razie zwarcia obu - podanie zasilania zewnętrznego na programator.
Jeśli jeszcze nie rozumiesz, to odpuść. Nie umiem tego wytłumaczyć bardziej łopatologicznie.


Diody LED - często producenci podają maksymalny prąd impulsowy np. 0.1A albo 0.3A, do tego dopisują uwagi: maksymalna długość impulsu nie może przekroczyć 1ms wypełnienie przebiegu 10% (czyli przerwa minimum 9x czas impulsu). W Twoich danych nie ma tego parametru - musisz szukać dalej.


Ostatnie życzenie. Poszukaj dokumentacji DOC2579 albo AVR318 od Atmela i poczytaj jak prosto można zaimplementować 1-wire przy użyciu sprzętowego UART. Taka obsługa pół-sprzętowa może znacząco uprościć program, w szczególności zależności czasowe między multipleksowaniem LED a obsługą 1-wire.

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 25 gru 2014, 14:39

Zasilanie teraz zrozumiałem, czyli w sumie to nie mam nic źle, tylko w razie programowania z np STK to nie będę mógł zaprogramować więc to teoretycznie może zostać.

Ledy z aukcji LINK Chyba poczytam o innych ledach i zbliżę się do wartości tam podanych.

Znalazłem TO Zrobię tak jak mówisz.
Do podłączenia przez uart potrzebował bym takiego podłączenia pod PD0 i PD1? Na wyjściu BUS podłączam DS'a?
Obrazek
Zamiast BC547 mogę dać BC337 albo BC414? Tych drugich akurat mam spory zapas:)
Nie mam pojęcia jak to zaprogramować, ale będę dążył do celu:)

//EDIT
Jak obiecaklem tak wrzucam zaktualizowany schemat:
Obrazek

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 25 gru 2014, 18:17

Jeżeli masz TSOPa to jak dodasz diodę IR sterowaną PWMem, to da się z tego zrobić prosty radar, który np. wykryje że ktoś jest przed zegarem i rozjaśni diody.

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 25 gru 2014, 19:20

Równie dobrze mogę dodać moduł BT i WIFI i dodatkowo GPS żebym wiedział gdzie się znajduje. Dziękuję za propozycję, ale to jest na prawdę zbędne bo wpierw muszę zrobić podstawowe rzeczy, potem peryferie:)

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 29 gru 2014, 20:37

Co do diody LED, pierwsza lepsza oferta sklepu, o dziwo cena się zgadza:
http://lispol.com/product,1127,dioda_le ... zyjna.html
Szukanie po symbolu prowadzi do sklepu oferującego dokumentację:
http://www.mikroshop.ch/pdf/5AY3UD09.pdf

Oczywiście Ty kupiłeś diody bez jakiegokolwiek symbolu, jeśli dobrze czytam to o znaczne gorszych parametrach, ale nie o to chodzi.
Zerknij w tabelkę Absolute Maximum Ratings czyli wartości krytyczne których przekroczenie spowoduje bardzo szybkie zniszczenie LEDa. Interesuje Cię parametr IFP który tutaj wynosi 220mA oraz warunek pomiaru pod tabelką: długość impulsu 10ms (prawdopodobnie jest to wartość maksymalna) a wypełnienie przebiegu nie może przekroczyć 1/10 (u Ciebie będzie nieco poniżej 1/12 bo masz 12 wierszy).
Możesz przyjąć że Twoje LEDy będą podobne, ale gwarantuję że nie będą takie same, zatem prąd warto przyjąć mniejszy.



Obsługa DS'a - dobrze idzie. Wydaje mi się że możesz te tranzystory zastąpić miejscami nawet bez zmiany układu pinow, ale poczekaj na potwierdzenie od drugiej osoby.



Schemat - dzięki za wrzucenie czytelnej rozdzielczości.
Ja bym zmienił kilka rzeczy:
- Jest możliwe że z UsbAsp będziesz zasilał ten zegar? Moim zdaniem nie ma takiej opcji ponieważ już przy 20mA/diodę, zapalenie całego rzędu da prąd 640mA, a USB ma teoretyczny limit 500mA. Dlatego tranzystory sterujące LEDami zasilił bym z zasilacza, a uC i '595 powinny mieć zworkę do wyboru zasilanie z programatora lub zasilacza.
- Wysył danych do '595 powinien być zrealizowany sprzętowo przez SPI a nie programowo przez normalne piny I/O. Po zmianie prędkość transmisji wzrośnie - możesz zwiększyć odświeżanie i zmniejszyć migotanie.
- Sterowanie pinem 13 rejestrów ma sens tylko gdy sterujesz nim przez PWM (ok).
- Pin 12 rejestrów powinien być sterowany przez uC a nie zwarty na stałe do masy. Bez tego musisz wygasić wszystko (wyłączyć tranzystory) na czas przesłania kolejnej porcji danych by uniknąć duchów. W ten sposób marnujesz cenny czas - spada jasność świecenia wyświetlacza, zmniejsza się dopuszczalna częstotliwość odświeżania.



BTW, zakładając że na raz może świecić się tylko jeden wiersz czyli max 32 LEDy.
Maksymalny prąd LEDa nie jest ograniczony przez tranzystory (0.5A/32 = 15mA) a przez '595, max 20mA na jedno wyjście ale max 70mA na pin zasilania czyli sumę wszystkich prądów, wypada więc po 8mA na LEDa. Wniosek - musisz zainwestować w ULN2003 lub podobne bufory i (opcjonalnie) mocniejsze tranzystory. Inaczej nie wyciągniesz wysokich prądów i zegarek pozostanie jedynie nocny.

komax3
-
Posty: 14
Rejestracja: 22 gru 2014, 12:00
Lokalizacja: kety

Post autor: komax3 » 31 gru 2014, 16:49

Czyli mogę bezpiecznie przyjąć ~150mA na 1/12 ms?

Matryca nie będzie zasilana z USB, zworka dana żeby można było załączyć zasilanie na procesor z USBasp do programowania, ale matryca odłączona na ten czas. Albo dodam zworkę odcinającą zasilanie matrycy, albo rozwiąże to programowo.

595 zrobię po SPI, tylko jak to się ma do programowania? Programator podciąga reset do gnd i wtedy procek przechodzi w tryb programowania? muszę dać zworki przełączające miedzy programatorem a 595?

Pin 12 zrobię tak jak mówisz, muszę sobie za symulować w zwolnionym tempie jak on działa

Już doszedłem do tego że max 70mA na scalak, mam gdzieś jakieś uln2003, ale na pewno nie 4szt. I mam dużo tranzystorów BC414 i BC337. Sądzę że te 414 wystarczą, tylko że musiał bym ich lutować 30.

// Biorąc pod uwagę że najmocniejszy zasilacz jaki mam ma 2A więc i tak nie mogę przekroczyć 66mA na LED
// Jest to zasilacz impulsowy - stara ładowarka palmtopa 5V 2A MAX się nada? Nie będzie siać? Jakoś go dodatkowo filtrować, jak tak to jak?

// matryca ma 12*30 LED bo mi się nie zmieściło więcej na płytce.

ODPOWIEDZ