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

Atmega 32 jako sterownik plc bascom

paczus 03 Kwi 2010 23:17 3767 2
  • #1 7917989
    paczus
    Poziom 10  
    Witam
    Chciałbym użyć atmegi jako sterownika PLC (coś na wzór LOGO Siemensa)
    chce wykorzystywać następujące funkcje
    ( opóźnienie załączania )
    ( opóźnienie wyłączania )
    ( przerzutnik RS reset/set ) ten jest chyba
    ( generator impulsów
    ( przerzutnik stabilny z opóźnieniem
    ( generator pojedynczego impulsu
    ( licznik w górę )
    ( licznik w dół )
    największy problem mam z opóźnienie załączania i opóźnienie wyłączania np.
    Jeśli podam impuls na wejście (porta.1)to wyjście (portc.1) ma się załączyć po 10s
    takich zdarzeń ma być więcej a timer(ów) w atmedze 32 jest tylko 4
    Komenda wait i waitms nie sprawdza się bo wstrzymuje działanie całego programu a wtedy atmega nie reaguje na inne wejścia

    Mam nadzieje że ktoś mnie nakieruje jak to zrobić
  • Pomocny post
    #2 7918170
    klops_mops
    Poziom 17  
    Bardzo dobrze, uznałeś że wait zupełnie się nie nadaje...
    Ja bym zrobił to tak:
    Timer generuje przerwanie co ok. 1s w przerwaniu zwiększam jakąś zmienną o 1... Z resztą poniższy przykład chyba najlepiej Ci wytłumaczy moją idę:

    
    do
    if wejscie_1 = 1 then 
    licznik_1 = 0
    flaga_wejscie_1 = 1
    end if
    
    if flaga_wejscie_1 = 1 then                              ' to mozna umiescic w przerwaniu, ale po co je bardziej wydluzac w dzialaniu
    if licznik_1 > 10 then
    reset wyjscie
    flaga_wejscie_1 = 0
    else 
    set wyjscie
    end if
    end if
    loop
    
    
    przerwanie_od_timera:
    if flaga_wejscie_1 = 1 then incr licznik_1
    


    Tylko w tym przypadku, albo impuls musi być stosunkowo długi, albo stany pinów muszą być dość często sprawdzane :) Przykład pisałem tak na szybko. Pewnie po dłuższym zastanowieniu zrobiłbym to inaczej - prościej... Ale mam nadzieję, że choć trochę Ci pomogłem.


    EDIT: Przepraszam, źle zrozumiałem - powyższy przykład tyczy się załączenia na 10s po podaniu impulsu. Ale nie problem przerobić to tak by, po 10s po podaniu impulsu wyjście zostało załączone - spróbuj, a jak nie dasz rady to się odezwij.
  • #3 7918988
    paczus
    Poziom 10  
    Bardzo dziękuje myślę ze rozumiem i będę ćwiczył Poustawiam timery na podstawę czasu np. 10ms,1s wtedy będę mógł zrobić czasówki o różnych długościach czasu.
REKLAMA