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

[BASCOM] amtega8 - zegare wolna praca

chablak 29 Wrz 2010 19:02 1198 4
REKLAMA
  • #1 8565381
    chablak
    Poziom 11  
    Posiadam książkę pt. "Programowanie mikrokontrolerów AVR w języku BASCOM" Marcina Wiązania i jest tam przykład zegarka z wykorzystaniem timera. Problem polega na tym że sekunda tak naprawdę trwa "wieki" prawie 8s prawdziwych. Połączyłem układ zgodnie ze schematem w książce i tak samo, odłączyłem rezonator nic się nie zmieniało, zmieniałem taktowanie rezonatora i nic... i tu moje pytanie jakie jest ustawienie rezonatora wewnętrznego w atmedze 8 nowej? bo już nie wiem co mam robić... a nie chce kombinować z fusbitami dopóki nie skończę programatora równoległego a to moja ostatnia atmeg (już garść leży zablokowanych w szufladzie... ) oto kod programu z książki:

    
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Config Timer1 = Timer , Prescale = 256
    
    Declare Sub Wysw_czas
    
    On Timer1 Odmierz_1s
    
    Dim Sekundy As Byte
    Dim Minuty As Byte
    Dim Godziny As Byte
    Dim Nowa_w As Bit
    
    Dim Wart_bcd As Byte
    
    Enable Interrupts
    
    Enable Timer1
    
    Counter1 = 34286
    
    Set Nowa_w
    
    Do
    
    Call Wysw_czas
    
    Loop
    End                                                         'end program
    
    Sub Wysw_czas
    If Nowa_w = 1 Then
       Cls
       Wart_bcd = Makebcd(godziny)
    
       Lcd Bcd(wart_bcd) ; ":"
    
       Wart_bcd = Makebcd(minuty)
    
       Lcd Bcd(wart_bcd) ; ":"
    
       Wart_bcd = Makebcd(sekundy)
    
       Lcd Bcd(wart_bcd) ;
    
       Reset Nowa_w
       End If
    End Sub
    
    Odmierz_1s:
    
    Counter1 = Counter1 + 34286
    
    Incr Sekundy
    
    Set Nowa_w
    
    If Sekundy = 60 Then
       Sekundy = 0
       Incr Minuty
       If Minuty = 60 Then
       Minuty = 0
       Incr Godziny
    
       If Godziny = 24 Then
       Godziny = 0
       End If
       End If
       End If
       Return
    
    
  • REKLAMA
  • #2 8565453
    Wojtek75
    Poziom 24  
    Fuse bity masz źle ustawione. Fabrycznie tyka na 1MHz.
  • REKLAMA
  • Pomocny post
    #3 8565485
    landy13
    Poziom 31  
    chablak napisał:
    jakie jest ustawienie rezonatora wewnętrznego w atmedze 8 nowej?
    1MHz

    Zmienić to można tylko fusebitami.


    Jeśli się boisz to tymczasowo - dla prób - możesz zmienić: "Counter1 = Counter1 + 34286 " na "Counter1 = Counter1 + 61629". Będzie prawie sekunda.
  • REKLAMA
  • #5 8565864
    chablak
    Poziom 11  
    wielkie dzięki za odp. działa już:)
REKLAMA