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

atmega8 timer odliczenie 15 min

Mimitron 17 Lut 2010 10:06 2177 14
REKLAMA
  • #1 7707020
    Mimitron
    Poziom 20  
    Witam
    Potrzebuje aby co 15 minut była wykonana pewna operacja.
    Wykorzystałem do tego timer0

    
    dim Liczba8ms as integer
    
    Config Timer0 = Timer , Prescale = 256
    On Timer0 Pomiar_paliwa
    On Interrupts  
    
     Enable Timer0
     Load Timer0 = 250
    
    
    
     '****PROGRAM GŁÓWNY
    
    
    END
    Pomiar_paliwa:
    
     Load Timer0 = 250
     incr liczba8ms
    
       If Liczba8ms = 112500 Then
             
          '*****jakies dzialanie'
    
          Liczba8ms = 0
       End If
    
    return




    Teraz moje pytanie.
    Czy do zmiennej integer można wpisać liczbę 112500 ?
  • REKLAMA
  • #2 7707212
    pief
    Poziom 17  
    integer(2 bajty) może przyjmować wartość dowolnej liczby całkowitej
    z zakresu od -32768 do +327687

    Pozdrawiam
  • REKLAMA
  • #3 7708226
    rpal
    Poziom 27  
    koledzy mają poważne problemy z arytmetyką bo liczba typu integer (2 bajty) może przyjmować wartość od 0 do $ffff czyli po naszemu 65535 a czy będzie to liczba ze znakiem czy też nie to zawsze będzie to ten sam zakres.
    Jeśli kolega zastosuje w swojej atmega8 kwarc 1 MHz i w połączeniu z preskalerem o współczynniku podziału 1024 to zliczenie na Timer1 (16 bitowe) od 0 do maksymalnej wartości 65535 zajmie licznikowi ok 64 sekund w połączeniu ze zmienną która będzie cyklicznie zwiększana aż do osiągnięcia zamierzonej wartości w okolicach 15 osiągniesz swoje 15 minut dla wiekszych prędkości taktowania Atmegi trzeba odpowiednio wiekszy zakres zmiennej sobie wybrać np. 150 dla zegarao t 10MHz. To tylko arytmetyka :)
    Więc kol. mimitron nigdy nie osiągnie swojej zamierzonej wartości a kol. pief dodał o jedną cyfrę za dużo w swojej poradzie (+327687 ):)
  • #4 7709344
    mazomen
    Poziom 16  
    Kolego rpal w zmiennej typu integer najstarszy bit jest znakiem liczby 0 = (+) 1 = (-) więc liczba jest 7-bitowa i nie zmieścisz do niej liczby większej niż 32767 i mniejszej niż -32768
  • #5 7709511
    rpal
    Poziom 27  
    mazomen napisał:
    Kolego rpal w zmiennej typu integer najstarszy bit jest znakiem liczby 0 = (+) 1 = (-) więc liczba jest 7-bitowa i nie zmieścisz do niej liczby większej niż 32767 i mniejszej niż -32768

    Szanowny kolego a może wykonasz takie dzialanie 32767 - (-32768) i zobacz co ci wyjdzie oraz w jakim zakresie będą przyjmowane wartości ? Najmniejsza i najwieksza wartość będzie się różniła o 65534.
  • #6 7709564
    mazomen
    Poziom 16  
    Przykład który kolega podał nie dowodzi że da się w tej zmiennej umieścić większą liczbę. Niech kolega wpisze do zmiennej integer liczbę większą od 32767 to zobaczy jak się błędy posypią.
  • REKLAMA
  • #7 7709745
    pixel7
    Poziom 23  
    Niestety rpal, w bascomie integer jest tylko signed. Autor postu powinien użyć zmiennej typu word.

    Cytat:

    · Bit (1/8 byte). A bit can hold only the value 0 or 1. A group of 8 bits is called a byte.

    · Byte (1 byte). Bytes are stores as unsigned 8-bit binary numbers ranging in value from 0 to 255.

    · Integer (two bytes). Integers are stored as signed sixteen-bit binary numbers ranging in value from -32,768 to +32,767.

    · Word (two bytes). Words are stored as unsigned sixteen-bit binary numbers ranging in value from 0 to 65535.

    · Long (four bytes). Longs are stored as signed 32-bit binary numbers ranging in value from -2147483648 to 2147483647.

    · Single. Singles are stored as signed 32 bit binary numbers. Ranging in value from 1.5 x 10^–45 to 3.4 x 10^38

    · Double. Doubles are stored as signed 64 bit binary numbers. Ranging in value from 5.0 x 10^–324 to 1.7 x 10^308

    · String (up to 254 bytes). Strings are stored as bytes and are terminated with a 0-byte. A string dimensioned with a length of 10 bytes will occupy 11 bytes.
  • #8 7710152
    rpal
    Poziom 27  
    cóż chylę czoło przed bascomem i odmiennością od C, jednak jakby nie patrzeć jeśli zacząć np. cykliczne powiększanie od najmniejszej wartości do największej wyjdzie na to samo czyli 65535 kolejnych operacji zwiększania :)
  • #9 7711049
    xury
    Specjalista automatyka domowa
    Pomijając dyskusję co się zmieści w integer, a co nie, to nikt nie zwrócił uwagi na błąd w programie. Klasyczny błąd powielany z książki M. Wiazani.
    Prawidłowa linia to:
    Load Timer0, 6
    A ja zliczanie załatwił bym trzema zmiennymi typu byte.
  • REKLAMA
  • #10 7711135
    leon1313
    Poziom 15  
    Zliczajcie sobie, zliczajcie jak nie znacie wartości kwarcu..
  • #11 7711381
    rpal
    Poziom 27  
    leon1313 napisał:
    Zliczajcie sobie, zliczajcie jak nie znacie wartości kwarcu..

    obliczy sobie autor bo poddałem mu sposób z Timer1 o ile przeczytał:)
  • #12 7711706
    Konto nie istnieje
    Poziom 1  
  • #13 7711712
    rpal
    Poziom 27  
    to już kwestia osobistego wyboru czy częściej zliczać przepełnienia licznika czy też wybrać dłuższy okres wystąpienia przepełnienia, skutek ten sam.
  • #14 7711800
    Konto nie istnieje
    Poziom 1  
  • #15 7712042
    rpal
    Poziom 27  
    emarcus napisał:

    To tak mniej wiecej: jezeli ktos pyta jak dojechac z Kielc do Warszawy - otrzymuje odpowiedz ze z Lodzi do Warszawy jest blizej i jest o wiele lepsza droga.
    mi się zdaje że porównanie jest o tyle niefortunne bo autor dostał odpowiedź gdzie można odszukać atlas samochodowy aby samemu docieć jak podróżować z Kielc do W-wy niekoniecznie jadąc przez Łódź i sam wybierze czy przypadkiem nie zahaczyć o Lublin.:)
REKLAMA