Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega8 - Bascom - o co chodzi z tym timerem ?

flyoe 10 Nov 2012 13:00 1911 10
Computer Controls
  • #1
    flyoe
    Level 10  
    Kilka pytań - bo kto pyta nie błądzi :-)
    Niby wszystko ładnie liczyło w przerwaniach - ale tylko do momentu kiedy zacząłem wywoływać Sub lub funkcję - wtedy zaczyna się resetować i zaczyna program od początku co sekundę ?? O co chodzi

    Teraz przestało mi nawet liczyć w przerwaniach. Wchodzi tylko raz i potem lcd się czyści.

    Zamieszczam kod, w którym staram się przetestować wszystkie układy na płytce i działanie timera, zanim zabiorę się za właściwy program.

    Pewnie coś namieszałem ale nie widzę gdzie.

    Tu mam jeszcze pytanie - czy mogę wykorzystać timer, do odpytania co kilka sekund o czas z rtc, co kilkadziesiąt ms o stany przycisków, co kilka sekund o temperatury?
    Z tym ostatnim wiąże się oczekiwanie 750ms po każdym dallasie.
    Jak to rozwiązać?


    Dodam jeszcze , ze w pętli do loop te funkcje działały.

    Code: basic4gl
    Log in, to see the code
  • Computer Controls
  • #2
    Mol
    Level 30  
    Nie jestem pewny czy procesor zdąży wykonać to co masz w tym przerwaniu , zanim przyjdzie następne (mam na myśli wszystko ).Program w przerwaniu ma być krótki , chyba że pierwsza linijka jest taka " Disable timer0 " , ale w twoim programie taka instrukcja raczej odpada. I jeszcze jedno , co się dzieje jeżeli podczas transmisji po i2c lub 1Wire przyjdzie przerwanie od timera , bo nie miałem okazji tego testować .
  • #3
    flyoe
    Level 10  
    Ja też nie jestem pewny, ale nie wyobrażam sobie pisania programu obsługującego i2c, 1wire, rs232, rtc, 4094 i 74165 w pętli do loop...?
    Być może do tego jednak dojdzie - jak tak dalej pójdzie jak idzie. :-(
  • Computer Controls
  • #4
    Mol
    Level 30  
    Napisz je w podprogramach , wtedy w każdym miejscu w programie będziesz mógł do nich skoczyć , jeżeli będzie taka potrzeba i program będzie bardziej przejrzysty .
  • #5
    flyoe
    Level 10  
    Doszedłem, że funkcja Getrtctime() resetuje mi układ.
    Wcześniej działała. Jaki może mieć związek z deklaracją timera?
  • #6
    Mol
    Level 30  
    Spróbuj jej na początku dać disable timer0 , a na końcu enable timer0.
  • #7
    flyoe
    Level 10  
    disable czy raczej stop?

    Dodano po 10 [minuty]:

    Niestety - nie pomogło.
    Czy może to mieć związek z tym, że podpiąłem sda i scl (od rtc IN1307)
    do AIN1 i ICP1? (piny 14 i 13 atmegi8)

    Dodano po 18 [minuty]:

    Chyba mam to coś:

    w funkcji Getrtctime()
    zamiast
    Stime = "GODZINA " + Hours + ":" + Minutes + ":" + Seconds
    Getrtctime = Stime
    zrobiłem:
    Getrtctime = "12:00"
    i jest ok

    chyba jakiś problem z typem zmiennej, ale już chyba jestem w domu.
  • #8
    tehaceole

    Level 28  
    flyoe wrote:
    Tu mam jeszcze pytanie - czy mogę wykorzystać timer, do odpytania co kilka sekund o czas z rtc, co kilkadziesiąt ms o stany przycisków, co kilka sekund o temperatury?
    Użyj techniki opisanej tutaj. Co prawda kody są w C, ale z opisu bez problemu wyciągniesz odpowiednie wnioski.
  • #10
    SylwekK
    Level 32  
    Wykonywanie tak długich zadań jak choćby operacje na LCD w przerwaniach aż się prosi o kłopoty. Zrób sobie w przerwaniach kilka timerów programowych i ich zawartość badaj w pętli głównej Do...Loop i to od tych timerów uzależniaj kolejność wykonywania odpowiednich sekwencji (fragmentów) programu.
  • #11
    flyoe
    Level 10  
    Tak - właśnie tak zrobiłem. Dzięki wszystkim za uwagi. Timer działa.
    Teraz mam problem z 4094 - ale to w innym poście.
    Ten wątek uważam za zamknięty.