logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Nowy projekt i problem z zgarkim, zliczaniem impulsów z portu czyli zmiany biegó

Mimitron 26 Lis 2011 10:00 8064 85
  • #1 10183767
    Mimitron
    Poziom 20  
    Witam.

    Zaczynam nowy projekt, tym razem do motocykla:
    Wyświetlacz biegów, zegarek, licznik przejechanych km do motocykla


    I mam kilka problemów.
    Pierwszy z nich jest z zegarkiem który się dość sporo spóźnia.
    Wykorzystałem chyba najpopularniejszy sposób pomiaru sekundy.

    Oto część programu:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ktoś ma jakąś sugestie? A może jednak wykorzystać zewnętrzny układ do odmierzania sekundy, niestety zależy mi na jak najmniejsze ilości elementów z braku miejsca.


    Drugi problem mam ze zliczaniem biegów.
    Do wykrycia zmiany biegów wykorzystuje kontaktrony zmieniające stan z 1 na 0 na danym porcie gdy dźwignia jest dźwignięta lub opuszczona. Problem polega na tym żeby układ zliczył jeden impuls = jeden ruch dźwigni. Myślałem o zastosowaniu kondensatora i dwóch oporników na wejściu portu tak że zwarcie kontaktronu będzie uwalniać tylko jeden impuls zamiast sprawiać że stan 0 będzie tak długo jak długo będzie zwarty kontaktron.

    Nowy projekt i problem z zgarkim, zliczaniem impulsów z portu czyli zmiany biegó

    Oto część programu:

    Kod: text
    Zaloguj się, aby zobaczyć kod



    Mam jednak pytanie jak to zrealizować programowo nie używając przerwania ?
  • #2 10184103
    INTOUCH
    Poziom 30  
    Możesz wykorzystać kwarc zegarkowy 32kHz (dokładnie 32.768kHz) i timer 2 mikrokontrolera, lub zegar Pcf8583. Przerwań i tak nie unikniesz jesli nie chcesz zbyt częzto korygować liczonego czasu.Przerwania nie są aż tak straszne, wystarczy zrozumieć jak działają.
  • #3 10184130
    Mimitron
    Poziom 20  
    Nie boję się przerwań tylko mam zajęte oba :) ale chyba będzie trzeba układ zmodyfikować i uwolnić jedno przerwanie dla zegarka. Oglądam układy z Pcf8583 i DC13017 i one komunikują się chyba przez I2C a nie umiem znaleźć żeby generowały tylko impuls co 1 sekundę
  • #5 10184165
    Mimitron
    Poziom 20  
    Bardziej się boje zakłóceń na taśmie do wyświetlacza :/

    Dodano po 21 [minuty]:

    Jak dobrze ogarniam temat Pcf8583 to należy go podpiąć pod uC przez I2C, potem go skonfigurować w programie i poprzez wyście INT podłączone do timera w uC zliczać impulsy. Można by też podpiąć INT z Pcf8583 do np. INT0 w uC i też zliczać impulsy.

    Dodano po 1 [godziny] 4 [minuty]:

    Problem ze zliczaniem biegów rozwiązałem zmieniając trochę program. Dźwignie biegu przytrzymuje się tylko chwile więc niech pierwszy zwarcie styków kontaktrona zliczy bieg a potem wystarczy dać opóźnienie "wait" i nie trzeba się przejmować drganiem styków ani czasem wrzucania biegu.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #6 10184603
    dondu
    Moderator na urlopie...
    Mimitron napisał:
    Dźwignie biegu przytrzymuje się tylko chwile więc niech pierwszy zwarcie styków kontaktrona zliczy bieg a potem wystarczy dać opóźnienie "wait" i nie trzeba się przejmować drganiem styków ani czasem wrzucania biegu.

    I zakłócenie, które przebije się na Twój kontaktron i jego przewody, będą generować fałszywy sygnał przełączenia biegu.
    Zrób to porządnie. Pewność masz tylko wtedy gdy przez określony czas np. 50ms sprawdzasz czy kontaktron jest zwarty. Warto się przyłożyć, bo środowisko pracy jakim jest motocykl jest środowiskiem trudnym, ze względów o których pisałem.
  • #7 10184689
    INTOUCH
    Poziom 30  
    Mógłbyś podesłać linka do DC13017.
    Zaciekawił mnie ten układ ale nie modę go znaleźć w google
  • #9 10203787
    Mimitron
    Poziom 20  
    Zmieniłem realizacje zegarka na timer1.
    Oto część programu:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    I zegarek śpieszy się 10 sekund na dobę. Postanowiłem zrealizować zegarek na PCF8583.
  • #11 10204102
    Konto nie istnieje
    Poziom 1  
  • #12 10204401
    Mimitron
    Poziom 20  
    Układ jest budowany na atmega8 i taktowany kwarcem 8MHz. Najlepiej było by to zrealizować to bez dodatkowego układu, szczególnie że zależy i na jak najmniejszym rozmiarze całego urządzenia. Niestety nie wiedziałem że jest taka możliwość żeby uC taktować jednym kwarcem np. 8MHz a timer1 drugim kwarcem 32kHz. Nawet nie mam pojęcia jak się za to zabrać, poza tym moja wiedza o uC jest bardzo płytka i o trybie CTC coś tam słyszałem ale nie wiem to ugryźć. No ale będzie trzeba zagłębić się w temat i poszukać tych rozwiązań.

    Dodano po 29 [minuty]:

    Czyżby z atmega8 mógłbym tylko zrobić tak że uC puścić na wewnętrznym generatorze a timer taktować kwarcem ?
  • #13 10204491
    dondu
    Moderator na urlopie...
    Mimitron napisał:
    Czyżby z atmega8 mógłbym tylko zrobić tak że uC puścić na wewnętrznym generatorze a timer taktować kwarcem ?

    Tak, to jest możliwe:

    Datasheet napisał:
    If the Internal Calibrated RC Oscillator is used as chip clock source, PB7..6 is used as TOSC2..1 input for the Asynchronous Timer/Counter2 if the AS2 bit in ASSR is set.
  • #14 10204510
    Mimitron
    Poziom 20  
    A czy wewnętrzny generator może chodzić tylko jako 1MHZ czy jest możliwość zwiększenia częstotliwości ? Chodzi mi o to że kiedyś gdy nie wiedziałem o istnieniu fus bitów i uruchomiłem atmega8 taktowaną wew. generatorem z programem i podpiętym LCD to LCD jakoś dziwnie powoli reagował.
  • #16 10204568
    dondu
    Moderator na urlopie...
    Mimitron napisał:
    A czy wewnętrzny generator może chodzić tylko jako 1MHZ czy jest możliwość zwiększenia częstotliwości ?

    Oj, zaglądnij do datasheet, do rozdziału: System Clock and Clock Options
    punkt: Calibrated Internal RC Oscillator
    i wszystko będzie jasne :)


    Mimitron napisał:
    ... LCD jakoś dziwnie powoli reagował.

    Bo domyślnie w czasie produkcji jest ustawiony 1MHz.

    Dodano po 19 [minuty]:

    INTOUCH napisał:

    Ten przykład jest dla mikrokontrolera posiadającego wejścia XTAL i TOSC na osobnych pinach. Autor tematu stosuje Atmega8 i niestety tam piny XTAL i TOSC są tymi samymi pinami. Oczywiście reszta tego dokumentu zawiera bardzo wiele istotnych informacji więc i tak warto poczytać, tak jak sugeruje INTOUCH.
  • #17 10204645
    Mimitron
    Poziom 20  
    To że wolno reagował to wiem że wina taktowania 1MHz

    Dodano po 13 [minuty]:

    Czyli nie muszę przesiadać się na większą atmege. Mogę zostać przy atmega8, ustawić wewnętrzny generator na 8MHz a z kwarcu taktować timer kwarcem 32KHz
  • #18 10204814
    INTOUCH
    Poziom 30  
    Mimitron napisał:
    To że wolno reagował to wiem że wina taktowania 1MHz

    Dodano po 13 [minuty]:

    Czyli nie muszę przesiadać się na większą atmege. Mogę zostać przy atmega8, ustawić wewnętrzny generator na 8MHz a z kwarcu taktować timer kwarcem 32KHz

    TAK
  • #19 10204865
    Mimitron
    Poziom 20  
    Super :)

    Teraz przydała by mi się pomoc jak skonfigurować w bascomie timer1 tak żeby był taktowany kwarcem :)

    Dodano po 2 [godziny] 19 [minuty]:

    Czy przy pracy na wewnętrznym generatorze i rezonatorze 32768Hz na pinach XTAL1/TOSC1 i XTAL2/TOSC3 trzeba w bascomie określić $crystal ?

    Znalazłem coś takiego ale nie ogarniam tego CTC :)

    Kod: text
    Zaloguj się, aby zobaczyć kod



    Przerobiłem dla moich potrzeb tyle ile potrafiłem ale nie mam pojęcia jak ustawić timer dla kwarcu 32768Hz:


    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #20 10207725
    kriss68
    Poziom 20  
    Tu coś masz :
    www.elektroda.pl/rtvforum/topic1073787.html

    Dla atmegi8 będzie tak samo. Jako RTC może jedynie pracować timer2.
  • #22 10208060
    Konto nie istnieje
    Poziom 1  
  • #23 10208098
    kriss68
    Poziom 20  
    Mimitron widzę, że nawet nie sprawdziłeś co robi config clock w bascomie, na wyświetlaczu nie będziesz miał cały czas jednej godziny bo bascom tym poleceniem ustawia timer2 do pracy anachronicznej, ustawia odpowiedni preskaler, konfiguruje przerwanie od przepełnienia i tworzy funkcje obsługi przerwania w której automatyczne zwiększa te zmienne. Wystarczyło zajrzeć do helpa bascoma eh to lenistwo :)
  • #24 10208331
    Mimitron
    Poziom 20  
    kriss68 to nie lenistwo tylko moja znajomość angielskiego nie pozwala mi czytać ze zrozumieniem helpa z bascoma.

    Mam już polskiego helpa :)

    Czyli jeżeli ustawie czas w zmiennej Time$ na np. Time$ = "02:20:00" to będzie on ustawiony i zliczane od wpisanej godziny ?

    I jedyne co muszę zrobić to podpiąć kwarc 32768Hz pod tosc1 tosc2 i w programie wpisać:

    Enable Interrupts
    Config Date = Mdy , Separator = /
    Config Clock = Soft


    Time$ = "02:20:00"

    i mogę wyświetlić na LCD godzinę zawartą w zmiennej Time$?

    A co z tym ustawieniem prekselera na 128 jak pisze emarcus
    Dalej nie wiem jak ustawić częstotliwość $crystal = skoro uC będzie taktowany wew. zegarem ?
  • #25 10209220
    kriss68
    Poziom 20  
    $crystal ustawiasz na 8MHz (jeśli oczywiście masz tak ustawiony oscylator) a preskaler automatycznie ustawia config clock o czym już pisałem. Jedynie podłączasz kwarc zegarkowy tylko bez kondensatorów! Ze zliczaniem będzie tak jak mówisz i powinno tak zadziałać, jeśli nie to zobacz w helpie bascoma :) wiem, że można też było jakoś zrobić swoje przerwanie i samemu zwiększać sobie odpowiednie zmienne bo to co automatycznie generuje bascom dużo zajmuje miejsca. Chodź moje informacje mogą już być nie aktualne bo ponad rok nie robiłem niczego w bascomie
  • #28 10228362
    Mimitron
    Poziom 20  
    Zmontowałem układ ale nie mam jeszcze kwarcu 32768Hz. Podłączyłem 2 inne wydłubane z zegarków elektronicznych i na każdym zegar stoi. Czy nie powinno być tak że nawet gdyby częstotliwość była większa niż 32768Hz to zegarek powinien ruszyć tylko ewentualnie szybciej zliczać ?
  • #29 10228527
    INTOUCH
    Poziom 30  
    Czy czasem nie uszkodiłeś tych kwarców podczas wydłubywania?
    Sprzwdź jeszcze raz program oraz czy masz dobrze ustawione rejestry timera.
    Czy właściwie odczytujesz informacje z timera.
  • #30 10228584
    Mimitron
    Poziom 20  
    Mam tak jak pisałem wcześniej

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Mam nadzieje że dzisiaj dojdą te kwarce 32768Hz
    Skoro interesuje mnie tylko data to linia "Config Date = Mdy , Separator = /" i "Date$ = "11/11/00" jest mi zbędna ?
REKLAMA