Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Elektroniczny zegarek LED z sekundami

VSS 18 Kwi 2011 11:43 192234 597
  • Relpol przekaźniki
  • #572
    kacper077
    Poziom 2  
    Witam
    Do tej pory przeglądnąłem część wpisów w tym temacie (braku czasu)
    Widzę że autor zmienił AT89C2051 na wersję AT89S2051.
    Ja miałem (walczyłem coś od stycznia do marca) podobny problem z wersją "C".
    Podzielę się z resztą forumowiczów jak rozwiązałem problem BLOWIT.
    Oparło się to nawet na napisaniu programu w asemblerze z dyskietką startową na PC + programowanie układu timer 8254 w PC ale to już mam za sobą bo powód niedziałania był taki.... błachy.
    Ale do rzeczy:
    Programowałem BLOWITEM AT89C2051 niestety bez skutku.
    Wprowadziłem nawet kilka poprawek w samym programatorze (głównie po to aby odczytać kod z mikrokontrolera).
    I okazywało się że wgrywałem np. 50bajtów a odczytany program - 60bajtów i między bajtami komórki #FF.
    Problem tkwił w tym że opornik 1kOhm który jest na wyjściu "STROBE" był nie potrzebny. Po zwarciu go zworką wszystko zaczęło śmigać jak struś pędziwiatr.
    Podejrzewam że opornik + kondensator + port komputera powodowały jakieś zakłócenia i wewnętrzny licznik zwiększał swoja wartość.
    Jak procesor miał wykonać rozkazy 85 00 90 05 90 80 FC jak zamiast nich miał w pamięci 85 00 FF 90 FF 05 90 FF 80 FC.
    Pozdrawiam wszystkich ufff a myślałem że tylko ja się z tym męczyłem a tu jakoś do tego tematu nigdy nie zajrzałem.
  • #573
    folio
    Poziom 17  
    W tej chwili mam przerwę przy zegarze z uwagi na "bardziejsze" sprawy w dniu codziennym ale wrócę niebawem.
    Co do układów C chętnie podejdę raz jeszcze do tematu. Wersję S programuję ale do C mam programator BLOWITa tyle że nie działa. W jaki sposób dokonałeś odczytu wsadu z C? Piszesz o przeróbkach programatora.
  • #574
    kacper077
    Poziom 2  
    Witam ponownie.
    Aby odczytać dane z portu LPT napisałem krótki programik , który ustawiał port ten na odbiór danych i generował impulsy STROBE co inkremendowało licznik kontrolera (wersji programu było kilka w C pod Windows w asemblerze pod DOS nawet).
    Ale tak jak mówię przyczyną wadliwej pracy był opornik 1k (zrobiłem układ na krótkim odcinku kabla , coś koło 10 cm a w opisie blowit mówili nawet o kablu 5m).

    Zasiliłem to wszystko za pomocą znalezionego zasilacza antenowego chyba coś 100mA 12V i z tych 12 V dałem stabilizator 5V plus kondensator 1000uF.Wszystko działa jak należy a długo się zastanawiałem że może za słaby zasilacz.

    Do "BLOWITa" dolutowałem diodę zenera z przełącznikiem w miejscu RTS mikrokontrolera. Jak chciałem to miałem tam 12V a jak przełączyłem to dawało mi około 5V.

    Potem z drugim przełącznikiem suwakowym pokombinowałem tak że można było ustawić konfigurację mikrokontrolera jako odczyt lub zapis (wystarczyło p3.4 ustawiać 0 lub 1 )

    zapis = p3.3;p3.4;p3.5;p3.7 = L;H;H:H
    odczyt=p3.3;p3.4;p3.5;p3.7 = L;L;H:H

    Głównie to program do odczytu portu był podtrzebny no i ustawienie odpowiednich wyjść w LPT tak żeby BLOWIT ustawił się w taki tryb jaki chcemy.
    A sam mikrokontroler programowałem programikiem " blowit programmer " ściągnięty gdzieś stąd.

    Ogólnie to mam przerwę w przygodzie z mikrokontrolerami no bo i problem rozwiązałem i programik jaki chciałem żeby działał - działa.

    Ach jeszcze jedna sprawa , wkładając układ , programując, sprawdzając działanie co dzieje się kilka razy w jednym podejściu przy programowaniu zdarzyło mi się włożyć (miałem zakupione dwa układy at89c2051) oba układy odwrotnie, co spowodowało to że 7805 zagrzał się nawet mocno.
    Myślałem że już po układach , ale dziwnym trafem działają , chociaż w jednym nie mogę włączyć obsługi przerwań.
    Pozdrawiam :)
  • #575
    idepopizze
    Poziom 33  
    Od siebie mogę napisać, że jeżeli chodzi o programowanie przez LPT to obecnie duży problem stanowi znalezienie sprzętu pracującego z 5V na lini danych. Ponieważ ten port nie miał ujednoliconego standardu ma różne odmiany. W moim przypadku podczas programowania C2051 chciałem sobie zabezpieczyć linie danych D0-D7 dodając tam szeregowo rezystor 1k i efekt tego okazał się taki, że tylko jedna linia widziała, że po drugiej stronie za rezystorem zmienia się stan przy zwieraniu do masy, reszta lini na porcie nie widziała zwierania. Całkiem więc możliwe, że w BlowIt przeszkodą był taki właśnie rezystor. Ale najlepiej i tak port przed programowaniem przetestować ręcznie.
  • Relpol przekaźniki
  • #576
    bob54
    Poziom 12  
    Witam mam taki nietypowy wyświetlacz z kalkulatora tylko tyle że wspólnym minusem ...czy ktoś ma pomysł jak zaadaptować go do tego projektu ?
  • #578
    Salvator
    Poziom 10  
    Witam. Mam zbudowany zegar z pierwszego postu. Sprawa wygląda tak że po podłączeniu zasilania zaświecają mi się wszystkie segmenty tj. 88 : 88 :88 co muszę zrobić aby zegarek ruszył? Nadmieniam że atmega8 zaprogramowana prawidłowo bez żadnych błędów.
  • #579
    eleki11
    Poziom 10  
    A schemat tego zegarka gdzie ?
    Na pierwszej stronie w załącznikach są pliki źródłowe, płytki pcb i nic więcej.
  • #580
    cudny90
    Poziom 14  
    Witam wszystkich.

    Chciałem podzielić się swoją modyfikacją programu, schematu oraz płytki pcb tego zegarka. Myślałem o stworzeniu nowego tematu, ale stwierdziłem, że lepiej tutaj w odpowiedzi wszystko umieścić (jeśli moderatorzy stwierdzą inaczej, to stworzę nowy temat)

    Oto co zmieniłem:
    - dodałem obsługę jednego czujnika DS18B20
    - wyeliminowałem problem słabego świecenia wyświetlaczy
    - wyeliminowałem z kodu przestarzałe już instrukcje
    - usunąłem podtrzymanie bateryjne
    - zmniejszyłem częstotliwość migania kropki (zmiana stanu co sekundę)

    Aby wyświetlacze świeciły jaśniej, emitery zostały zasilone z przetwornicy napięcia opartej o układ LM2596 (układy te można tanio kupić w Chinach z darmową przesyłką) ustawionej na 7,5V. Dodatkowo zostały zmienione tranzystory na BC327-40 (mogą być BC327-25) dodane diody na bazy, oraz rezystory między bazami, a emiterami.
    Przy zastosowaniu filtra (użyłem dymionej plexi) wszystko na wyświetlaczach widać bardzo dobrze zarówno w nocy, jak i w słoneczny dzień.
    Cały układ zasilam z zasilacza 12V i taki zasilacz zalecam.
    Uwaga. Gdy ktoś programuje procesor w układzie, na czas programowania należy odpiąć/wylutować czujnik temperatury, gdyż "przeszkadza" on w programowaniu.

    Działanie: układ na zmianę pokazuje czas i temperaturę. Temperatura pokazywana jest przez 2 sekundy co 8 sekund. Czas ten można bardzo prosto zmienić sobie wg upodobań w kodzie głównym programu.

    Atmega taktowana z wewnętrznego rezonatora 8MHz, timer działa tak jak w oryginalne, w trybie asynchronicznym z zewnętrznego kwarcu 32768Hz.

    Zdjęcia:
    Elektroniczny zegarek LED z sekundami Elektroniczny zegarek LED z sekundami
    Elektroniczny zegarek LED z sekundami Elektroniczny zegarek LED z sekundami Elektroniczny zegarek LED z sekundami

    W załączniku zamieszczam program (w języku C wraz z biblioteką do DS'a oraz skompilowany *.hex), płytkę pcb w *.pdf'ie, oraz schemat w *.jpg.

    Życzę powodzenia wszystkim początkującym elektronikom, w razie czego służę pomocą.

    Pozdrawiam, szczęśliwego nowego roku!
  • #581
    idepopizze
    Poziom 33  
    cudny90
    Napięcia 7,5V używasz tylko do LEDów więc bez sensu jest mając zasilające 12V zbijać go do 5 a później podnosić go w górę przetwornicą. Mogłeś dodać 7808 i miałbyś dokładnie to samo bez dodatkowego obciążania 7805TV i tracenia na nim niepotrzebnego ciepła.
  • #582
    konrad92
    Poziom 15  
    Witam,
    zbudowałem już chyba z 4 takie zegary na wyświetlaczach 1.5' i ładnie śmigają.
    Wczoraj zabrałem się za wysokość 2.3' i wyświetlacze nie chodzą tzn. Zapalają się wszystkie segmenty, niektóre jaśniej, niektóre ciemniej. Anody zasilam +8V przez bc557 ( prąd nie przekracza 100mA).
    Trzeba tutaj zastosować jakiś układ uln ?
  • #584
    milek22
    Poziom 12  
    Witam.

    Miałbym prośbę o skompilowanie softu oryginalnego autora pod ULN2803 dla segmentów.
    Byłbym wdzięczny za pomoc lub proszę o info w jakim programie można edytować ten projekt, żeby nie namieszać sobie w komputerze, gdyż używam eclipce do programowania.

    Z góry serdecznie dziękuję. W załączniku orginalny soft.
  • #585
    idepopizze
    Poziom 33  
    Program masz w C więc możesz go edytować w eclipse
  • #586
    milek22
    Poziom 12  
    Zrobiłem duży, 4-calowy zegarek i ruszył, tylko zgaszone są te segmenty co powinny świecić i na odwrót. Wszystko przez ULN-y w segmentach a ten hex "clock2" w ogóle u mnie nie działa i nic nie świeci.
  • #587
    idepopizze
    Poziom 33  
    No to odwracasz kod dla segmentów wyświetlacza i powinno działać.
  • #588
    milek22
    Poziom 12  
    Tak, chciałbym to zrobić ale w eclipse mam same błędy, chyba trzeba z innych ustawień korzystać a obecnie nie korzystam z winavr tylko atmel Toolchain.
  • #589
    idepopizze
    Poziom 33  
    Dalej nie rozumiem w czym problem. Przecież eclipse nie trzeba instalować więc ściągasz innego i instalujesz na nim co trzeba, możesz ich mieć ile chcesz i będą działać równolegle. Jeden do tego drugi do czego innego
  • #590
    milek22
    Poziom 12  
    Mam eclipse, trochę używam w czystym C i chyba szybciej od nowa pisać bo ja tylko trochę bawiąc się w C bazując głównie na funkcjach. N forum podobno jest gdzieś wersja "clock3", której nie znalazłem.
  • #591
    idepopizze
    Poziom 33  
    Ten program jest napisany w C, nie zauważyłem tam niczego obiektowego.
    To zwykły program na procesorek
  • #592
    milek22
    Poziom 12  
    Udało mi się wstępnie skompilować, błąd mi pokazywało w tej linii


    SIGNAL (SIG_OUTPUT_COMPARE2)//512 razy na sek

    poza tym nie wiem gdzie tu segmenty zanegować
  • #593
    idepopizze
    Poziom 33  
    Tu masz wygląd cyfr
    const unsigned char tablica_7seg[]={0x08,0x6E,0x84,0x24,0x62,0x30,0x10,0x6C,0x00,0x20};//wyglad cyfr na wyswietlaczu

    0, 1, 2, 3, 4 itd

    Tu masz
    Segmenty: ( najpierw nóżka, potem segment)
    3 A
    4 F
    5 G
    6 B
    11 E
    12 D
    13 C

    tak są podpięte do katod.

    Teraz zmieniasz stan na przeciwny i zmieniają się te cyferki
    {0x08,0x6E,0x84,0x24,0x62,0x30,0x10,0x6C,0x00,0x20}

    Możesz to też napisać bitowo wtedy będzie prościej
    0x08 to przeciez 00001000 i teraz sobie sprawdź co masz podłączone do nóżki na którą idzie ten 1
  • #594
    milek22
    Poziom 12  
    Dzięki kolego idepopizze, pomogła Twoja wskazówka.

    Zegarek już poprawnie wyświetla cyfry. Wystawiłem "1" na katody segmentów dla ULN-a.
    Zrobiłem 4-cyfrowy, duży wyświetlacz na Atmega8 z ograniczoną ilością elementów.
    Skoro już działa poprawnie, to zrobię 6-cyfr na Atmega16.
    Sterowanie anod zrobiłem wg pomocy kolegi idepopizze na kluczach tranzystorowych.
    Użyte tranzystory smd - BC807 i BC817
    Dodam DS18B20(zew. temperatura), fotorezystor i DS3231.
    Elektroniczny zegarek LED z sekundami

    W załączniku hex dla ULN, schemat mojego okrojonego zegara dla 4 cyfr i kod żródłowy w którym chyba coś namieszałem z wektorem przerwania ale zegar chodzi poprawnie.
  • #595
    idepopizze
    Poziom 33  
    Jeżeli chcesz sterować większą ilością wyświetlaczy to wcale nie musisz przechodzić na większy procesor. Wystarczy dodać dekoder 74138 albo 7442 (w dowolnej wersji) i z 3 wyjść z mikroprocesora sterujesz 8 czy tam 10 anodami.
  • #596
    cudny90
    Poziom 14  
    Cześć,

    Fajnie, że kogoś jeszcze to interesuje (a nie tylko arduino i arduino :) )
    Widzę, że już kolega Ci pomógł.

    Cieszę się, że podzieliłeś się swoim kodem. Gdybyś miał jakieś pytania natury programistycznej - pytaj śmiało.

    Pozdrawiam,
    Adam
  • #597
    HD-VIDEO
    Poziom 40  
    milek22 napisał:
    Sterowanie anod zrobiłem wg pomocy kolegi idepopizze na kluczach tranzystorowych


    Takie sterowanie się robi na dwóch tranzystorach a nie na trzech; pierwszy tranzystor to T1, podłączony do PORT0 a drugi Q2; Q1 jest zbędny.

    Można też zastosować UDN2981
  • #598
    milek22
    Poziom 12  
    idepopizze napisał:
    Jeżeli chcesz sterować większą ilością wyświetlaczy to wcale nie musisz przechodzić na większy procesor. Wystarczy dodać dekoder 74138 albo 7442 (w dowolnej wersji) i z 3 wyjść z mikroprocesora sterujesz 8 czy tam 10 anodami.

    Przy większym procesorze miałbym większe możliwości krosowania sygnałów wyprowadzając dodatkowo na goldpinach wszystkie piny portów bez konieczności tworzenia nowej pcb.
    HD-VIDEO napisał:
    Takie sterowanie się robi na dwóch tranzystorach a nie na trzech; pierwszy tranzystor to T1, podłączony do PORT0 a drugi Q2; Q1 jest zbędny.
    Można też zastosować UDN2981

    Serdecznie dziękuję za cenne uwagi. Mam zrobioną pcb na TD62783 w anodach i ULN2803 w katodach ale coś mi ta nie działało poprawnie bo cyfry świeciły bez multipleksowania, jakby TD62783 nie reagował na zmiany stanów "0" i "1".