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

[ATTiny2313][Bascom] odliczanie czasu i PWM

ociz 02 Wrz 2010 00:33 5169 9
REKLAMA
  • #1 8466675
    ociz
    VIP Zasłużony dla elektroda
    Witam.
    Na początek napiszę że to ma być mój pierwszy program napisany w tym języku i pierwszy kontakt z mikrokontrolerami.
    Nie mam pomysłu jak się zabrać za uruchomienie jakiegoś "zegara". Program ma wyglądać mniej więcej tak że włącza jakieś urządzenie i co jakiś czas sprawdza czy minął wcześniej określony czas po którym ma je wyłączyć, sterowanych w ten sposób urządzeń ma być kilka jednocześnie i różne czasy w zależności od potrzeby od 2s do 180s.
    Drugie takie mniej istotne pytanie mam co do programu Bascom-AVR w wersji demo, jak sprawdzam składnię i jest ok to wyskakuje "Flash used: 12%". Co to znaczy? Wydaje się sporo bo napisałem dopiero kilka linijek kodu.
  • REKLAMA
  • Pomocny post
    #2 8466990
    adi84_84
    Poziom 14  
     'Atmega8
    $regfile = "m8def.dat"
     $crystal = 8000000 .
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Clock = Soft
    Enable Interrupts
    Time$ = "00:00:00"
    
    Do
    Lcd Time$
    Wait 1
    Loop
    End


    'i juz masz zegarek

    Dopisz do tego zmienne pomocnicze np:h_Budz , m_Budz.
    I zrób np: tak
    If h_Budz = _hour Then , If m_Budz = _min Then   Podtd.1 = 1 


    Flash: 12% (zapełnienie pamięci Flash).Attiny ma mało pamięci więc łatwo ją zapełnić pisząc w Bascom.
  • REKLAMA
  • #3 8469402
    ociz
    VIP Zasłużony dla elektroda
    Fajnie jakby to było takie proste tylko z ATTiny2313 nie chce działać. :(

    Mam jeszcze takie pytanie czy w symulatorze wszystko działa w jakimś zwolnionym tempie? Bo jak dałem "waitms 50" to trwało to ze 4s.
  • REKLAMA
  • Pomocny post
    #4 8470250
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 8470367
    ociz
    VIP Zasłużony dla elektroda
    Nie wiem czy dobrze kombinuję:
    $regfile = "ATtiny2313.DAT"
    $crystal = 8000000
    
    Config Timer0 = Timer , Prescale = 256
    On Timer0 Sekunda
    Enable Interrupts
    Enable Timer0
    
    Dim Scnt As Integer
    
    Sekunda:
      Incr Scnt
    Return

    Czego tu jeszcze brakuje? Bo w symulatorze nie działa, tzn nie zwiększa zmiennej scnt.
  • Pomocny post
    #6 8470454
    Konto nie istnieje
    Poziom 1  
  • #7 8471804
    ociz
    VIP Zasłużony dla elektroda
    Możliwe że jednak działa ale tylko kliknę "OVF0" na zakładce przerwań. Trzeba będzie potestować na docelowym układzie a nie w tym symulatorze.
    Główną pętlę mam, nie wklejałem całości tylko to co mnie akurat interesowało. ;)
    emarcus napisał:
    Pomijam fakt że ten interwał czasowy nie odpowiada 1 sek., rozumiem ze to tylko przykladowe cwiczenie.

    No własnie przyznam że wogle nie mam pojęcia jak ten timer działa i jak to policzyć/skonfigurować. To co wpisałem to podejrzałem z tego tematu https://www.elektroda.pl/rtvforum/topic818054.html
  • Pomocny post
    #8 8472392
    xury
    Specjalista automatyka domowa
    Hmm Nie jest to takie proste jak sobie wyobrażasz.
    Najprostszy zegar jaki ja często stosuję:
    Oczywiście preskaler i początkowa wartość timera dostosowana jest do 8Mhz
    Jeśli chcesz zastosować zegar z innym taktowaniem musisz sobie obliczyć początkową wartość i preskaler.


    $regfile = "m8def.dat" 
    $crystal = 8000000
    Dim Sekunda As Byte                                        
    Dim Minuta As Byte 
    Dim Godzina As Byte
    Config Timer1 = Timer , Prescale = 256
    On Timer1 Odmierz_1s
    
    do
    
    .... główny program
    loop
    end
    Odmierz_1s: 
     Counter1 = Counter1 + 34286 
    
    Incr Sekunda  
    If Sekunda >= 60 Then 
          Sekunda = 0 
          Incr Minuta 
    
    End If 
    
    If Minuta >= 60 Then 
          Minuta = 0 
          Incr Godzina 
    
    End If 
    
    If Godzina >= 24 Then 
       Godzina = 0 
    End If 
    Return
  • #9 8490680
    ociz
    VIP Zasłużony dla elektroda
    Właśnie zaprogramowałem swój pierwszy mikrokontroler i wszystko działa dokładnie tak jak chciałem, dzięki Waszej pomocy. :)
  • #10 8492548
    ociz
    VIP Zasłużony dla elektroda
    Znowu się zaciąłem. :( Tym razem nie potrafię skonfigurować PWM tak żeby dawał plusa nie masę.
    Przykładowy kod:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    
    Config Portb = Output
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Up , Prescale = 1
    
    Do
      Pwm0a = 0
      Wait 3
      Pwm0a = 255
      Wait 3
    Loop
    
    End

    Działa tyle że impulsy są masowe a ja potrzebuję plusa żeby podłączyć tranzystor NPN.

    edit:
    Już działa wszystko jak należy. A nie działało wcześniej bo na szybkiego wszystko podłączałem na płytce stykowej i masa od uC się odłączyła.
    Lepiej powoli a dokładnie. :D
REKLAMA