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

Bascom Attiny2313 - początek zagara binarnego działa timer nie wyswietla

Manianasss 06 Sty 2013 22:02 2061 6
  • #1 06 Sty 2013 22:02
    Manianasss
    Poziom 2  

    Witam Wszystkich
    Pisze kod do zegarka binarnego (zaczynam) jestem na etapie sekund.
    Licznik działa ale nie włącza poszczególnych diod led.
    Sterowanie diod jest za pomocą multipleksowania.
    Skupiłem się na razie tylko na wyświetlaniu sekund jak to ruszy to reszta pójdzie łatwo.
    Procesor attiny 2313 kwarc 20MHz Bascom.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    w miejscu tego


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod




    wstawię to czyli mruganie co 1 sekundę to działa


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 6
  • #2 06 Sty 2013 22:14
    BlueDraco
    Specjalista - Mikrokontrolery

    Stare przysłowie pszczół: żadnego oczekiwania w procedurze przerwania. Ty co (chyba) 2.4 s każesz w obsłudze przerwania czekać (chyba) ponad 10 sekund. Jak to ma działać?

    0
  • #3 07 Sty 2013 20:52
    Manianasss
    Poziom 2  

    Niby tak jak wykasuje je całkiem to czas odmierza ale bardzo krótko daje stan wysoki na ledy i prawie ich nie widać .
    Chyba mój algorytm jest do bani :(.

    0
  • #4 07 Sty 2013 22:23
    emarcus
    Poziom 34  

    Manianasss napisał:

    Chyba mój algorytm jest do bani :(.


    Chyba tu masz zupełną rację.
    Po piersze: Czy na prawdę taktujesz processor rezonatorem 20 MHz włącznie ze odpowiedno zaprogramowanymi fuse bitami?
    Jeżeli tak to praktycznie nie masz możliwości skonfigurowania timera0 aby nim odmierzyc 8 ms pomijajac reszte błędnych rachunków. Nawet przy prescalerze 1024 nie będzie to 8 ms na tyle dokładne aby przyjąc jako podstawę czasową do zegara czasu rzeczywistego.
    Podejżewam żę masz oryginalny processor z fabrycznym ustawieniem 1MHz .
    Zamiast tak elaborowanego programu, który w zasadzie nie wiele porzytecznego robi, spróbuj skonfigurowa chocby timer0, ale w trybie CTC - odciąży to w znacznym stopniu processor, który w tym czasie może wykonywac inne zadania.
    Gruga sprawa to: Pomimo że rezonatory kwarcowe ogólnego stosowania są relatywnie dośc dokładne to w zasadzie nie nadają sie do taktowania processorów z przeznaczeniem do budowy zegarów. Raczej tu byłby wskazany inny koncept z układem RTC albo inny processor z możliwością podpięcia o wiele dokładniejszego rezonatora "zegarkowego " 32.768kHz.
    Dla przykładu podaję ci konfiguracje dla timera1 aby zobrazowac jak prosty program może byc dla odmierzenia 1 sec., który praktycznie może pracowac "bez udziału processora"
    [code]
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Oczywiście stosując timer0 nie uzyskasz bezpośrednio czasu 1 sec. ale możesz dobrac sensowny wspólczynnik, który łączne z dobranym rezonatorem i prescalerm da wymagany przedział czasowy służący jako względnie doładna podstawa czasowa dla zegara.
    e marcus

    0
  • #5 09 Sty 2013 20:45
    Manianasss
    Poziom 2  

    ok działa podobny program jest w książce.
    Ale jak teraz "przenieść" to zliczanie w inne miejsce żeby diody zaczeły sie zapalać tak jak che i to jeszcze z multipleksowaniem.
    A co do keawcu to miałem go podłączonego i w fusach też ustawiony był ok.
    Jak narazie dzieki za pomoc.

    Chwile sie pobawiłem i zastanawiałem sie czemu mi zle działa dioda podpięta do
    PORTB.3 a to jest związane z OCR1A dlatego zle działała.
    Ten port musi zostać zwolniony ?
    znaczy nic nim nie sterować.

    Po jakimś tam czasie napisałem takie coś

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Narazie działa muszę do pisać reszte sekundy, minuty i godziny.

    0
  • #6 09 Sty 2013 21:40
    BlueDraco
    Specjalista - Mikrokontrolery

    W zegarku z wyświetlaczem najwygodniej robić wszystko w jednym przerwaniu timera. Program główny inicjuje procesor i idzie spać.

    0
  • Pomocny post
    #7 10 Sty 2013 06:25
    emarcus
    Poziom 34  

    Manianasss napisał:


    Chwile sie pobawiłem i zastanawiałem sie czemu mi zle działa dioda podpięta do
    PORTB.3 a to jest związane z OCR1A dlatego zle działała.


    Nie dlatego, nie ma tu żadnego związku.
    OCR1A jest to wpis do rejestru, który służy do określenia górnej granicy (TOP) do jakiej ma liczyc Timer1 co odpowiada upływowi czasu tu akutat 1 sec., zaczym się wyzeruje. Jeżeli chcesz użyc PORTB.3 jak I/O to musisz odłączyc od niego wyjście Timera1. (usuń "Compare A = Toggle " z configuracji timera), wtedy pin 3 portu B będzie zwyczajny PORTB.3 zamiast OC1A.
    Konieczne byłoby troche głębsze zaznajomienie się z Datasheet. Patrz str.108.
    TCCR1A -bit 6 oraz tabela 43 (druga linia).

    e marcus

    0