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

Jak zmierzyć czas na ATmega32 z kwarcem 4MHz i wyświetlić na LCD w Bascom?

sliver1 19 Lut 2007 10:41 2133 7
REKLAMA
  • #1 3589721
    sliver1
    Poziom 22  
    Posty: 870
    Pomógł: 2
    Ocena: 122
    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
  • REKLAMA
  • #2 3589809
    vain
    Poziom 13  
    Posty: 89
    Pomógł: 8
    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 ...
  • REKLAMA
  • #3 3590361
    sliver1
    Poziom 22  
    Posty: 870
    Pomógł: 2
    Ocena: 122
    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
  • REKLAMA
  • #4 3590419
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    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...
  • REKLAMA
  • #5 3594438
    sliver1
    Poziom 22  
    Posty: 870
    Pomógł: 2
    Ocena: 122
    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 3594600
    vain
    Poziom 13  
    Posty: 89
    Pomógł: 8
    sliver1 napisał:
    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 3594765
    sliver1
    Poziom 22  
    Posty: 870
    Pomógł: 2
    Ocena: 122
    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 3594837
    cyberdar
    Poziom 31  
    Posty: 1465
    Pomógł: 161
    Ocena: 73
    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ć

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji pomiaru czasu na mikrokontrolerze ATmega32 z kwarcem 4 MHz w języku Bascom, z wyświetlaniem wyniku w formacie HH:MM:SS na LCD. Proponowane rozwiązania obejmują konfigurację timerów, zwłaszcza Timer1 w trybie Timer z preskalerem 64 lub 1024, aby odliczać sekundy poprzez przerwania przepełnienia. Przykładowy kod pokazuje inkrementację zmiennych sekund, minut i godzin oraz ich wyświetlanie na LCD. Wskazano, że dokładność pomiaru może być ograniczona ze względu na preskaler i częstotliwość kwarcu. Alternatywnie zasugerowano wykorzystanie zewnętrznego zegara czasu rzeczywistego PCF8583 lub dodatkowego kwarcu 32.768 kHz z softwarowym taktowaniem (Config Clock = soft) dla lepszej precyzji. Autor posiada już skonfigurowane trzy timery (Timer0 jako licznik, Timer1 i Timer2 jako timery z różnymi preskalerami) i szuka prostszego rozwiązania. Przykłady kodu zawierają obsługę przerwań i wyświetlanie czasu na LCD, a także propozycje resetowania i formatowania czasu.
Wygenerowane przez model językowy.
REKLAMA