Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

pomiar czasu na atmega32 (bascom)

sliver1 19 Feb 2007 10:41 1953 7
  • #1
    sliver1
    Level 22  
    jak zrobic w bascomie na atmedze32 z kwarcem 4MHz pomiar czasu rozpoczynany po spelnieniu jakiegos warunku i wyswietlany w formacie HH:MM:SS (moze byc tez bez sekund) na lcd ?? jesli to ma znaczenie to dlugos pomiaru nie bedzie raczej nigdy wieksza niz 12h.
    pozdrawiam
  • #2
    vain
    Level 13  
    ustawic timer (tak by odliczal sekunde)

    on timer1 jakis_sub

    dim sekunda as byte, minuta as byte, godzina as byte,

    do
    lcd godzina. minuta, sekunda
    loop


    jakis_sub:
    incr sekunda
    if sek = 60 then
    incr minuta
    sekunda=0
    end if
    if minuta=60 then
    incr godzina
    minuta=0
    end if
    if godzina=25 then godzina=0


    Jakos tak ...
  • #3
    sliver1
    Level 22  
    jak ustawic timer by odliczal sekundy lub czas??
    obecnie mam w programie uruchomione trzy - czy ktorys z nich sie nada??
    
    Config Timer0 = Counter , Edge = Rising
    Config Timer1 = Timer , Prescale = 64
    Config Timer2 = Timer , Prescale = 1
    

    uklad ma tez zegar czasu pcf8583 - moze sie jakos do tego przyda??
    moze jeszcze napisze do czego mi to jest wogole potrzebne - zbudowalem komputerek pokladowy do auta na atmedze32 i chcialbym dlozyc funkcje pokazujaca czas podrozy czyli od zapalenia silnika do zgaszenia
  • #4
    pubus
    Level 30  
    Sekundę można odliczać na timerze1 (16-bit)...
    Już gdzieś na forum pisałem ale niech będzie...
    Tryb fast pwm, ICR1 jako TOP równe 62499...
    Prescaler na 64 i włączone przerwanie OVF...
    Będzie wywoływane co sekundę... oczywiście dokładność nie będzie rewelacyjna...
  • #5
    sliver1
    Level 22  
    znalazlem taki kod jak ponizej ale wynik jest przeklamany. nadal szukam rozwiazania. macie jakies pomysly??
    
    Dim Czasstr As String * 4                           
    Dim P As Word
    Dim Czas As Single 
    
    If Cos =1 Then
          Incr P
          Cls
          Lcd "Pomiar"
    End If
    
    If Cos = 0 Then
             Czas = P / 10
             Czasstr = Fusing(czas , " 0.0")
             Lcd ": " ; Czasstr ; " s"
             Wait 10
             Czas = 0
             P = 0
    End If
    
  • #6
    vain
    Level 13  
    sliver1 wrote:
    znalazlem taki kod jak ponizej ale wynik jest przeklamany. nadal szukam rozwiazania. macie jakies pomysly??
    
    Dim Czasstr As String * 4                           
    Dim P As Word
    Dim Czas As Single 
    
    If Cos =1 Then
          Incr P
          Cls
          Lcd "Pomiar"
    End If
    
    If Cos = 0 Then
             Czas = P / 10
             Czasstr = Fusing(czas , " 0.0")
             Lcd ": " ; Czasstr ; " s"
             Wait 10
             Czas = 0
             P = 0
    End If
    


    Czy ja Ci przypadkiem nie napisalem rozwiazania?
  • #7
    sliver1
    Level 22  
    na bascomie sie za dobrze nie znam, timery mam juz wykorzystane w programie tak:
    
    Config Timer0 = Counter , Edge = Rising 
    Config Timer1 = Timer , Prescale = 64 
    Config Timer2 = Timer , Prescale = 1 
    

    napisales by ustawic timer tak by odliczal sekunde ale nie wiem jak to zrobic(?) i dlatego nadal szukalem prostszego rozwiazania...
    moze da sie cos wykompinowac z tym pcf8583??
  • #8
    cyberdar
    Level 31  
    Witam

    Zegarek można zrobić w oparciu o dodatkowe dwa wyprowadzenia umożliwiające podłączenie dodatkowego kwarca 32.768 kHz. W bascomie są do tego gotowe intrukcje więc nie będę przepisywał helpa. W każdym razie możesz zacząć od Config Clock = soft.

    Jesli chcesz na timerze to program zegarka mógłby wyglądać następująco:

    
    $crystal=8000000
    
    Config Lcd ........... {tu sobie dopisz co trzeba}
    Config Timer1 = Timer, Prescale = 1024
    
    Dim Wsk As Bit
    Dim L_sek As Byte
    Dim L_min As Byte
    Dim L_god As Byte
    
    Load Timer1, 7812
    On Timer1 Sekunda
    Enable Timer1
    Enable Interrupts
    
    wsk=1
    
    Start Timer1
    
    Do
    Lcd "Godzina:" ; L_god ; ":" ; L_min ; ":" ; L_sek
    Loop
    
    Sekunda:
    Load Timer1, 7812
    If Wsk = 1 Then Incr L_sek
    
    If L_sek>59 Then
     L_sek=0 : Incr L_min
      End If
    Return
    
    If L_min>59 Then
     L_min=0 : Incr L_god
      End If
    
    If L_god>23 Then L_god=0 
    
    Return
    


    Oczywiście musisz sobie zmienne sformatować żeby to wyglądało jak zegarek. Druga rzecz to dopisanie reszty logiki działania tego układu.


    --
    pozdrawiam

    PS
    Program nie kompilowany. Trzeba sprawdzić i ewnetualnie skorygować