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

[ATtiny2313] Jak ograniczyć zakres PWM w ATtiny2313 do 0-100 w Bascom?

mdm150 16 Kwi 2012 21:49 4388 22
  • #1 10802229
    mdm150
    Poziom 27  
    Ello.
    Mam w planach zrobić ściemniacz do stateczników elektronicznych ściemnianych napięciem stałym 1-10V. Rozwiązanie układowe sterownika ma pochodzić z stąd: http://www.portalnaukowy.edu.pl/pwm.htm . Dorobie jeszcze zdalne sterowanie- koncepcja już jest. Wiadome jest że będę musiał dołożyć filtr do pwm, żeby było napięcie stałe.Problem rozchodzi się o program-regulacja tam w w zakresie 0-255kroków. Jak zatem ograniczyć zakres regulacji choćby od 0-100?
    Gdybym wiedział to bym nie pytał się. Wstępnie zmodyfikowany kod ponizej-zmieniłem tylko napisy wyświetlane na lcd dla swoich potrzeb. Oryginalny kod jest w linku podanym wyżej.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #2 10802301
    Mol
    Poziom 30  
    Sub Zwieksz
    Incr A
    if a=101 then
    a=100
    end if
    Pwm1a = a
    End Sub

    Sub Zmniejsz
    Decr A
    if A = 255 then
    a=0
    end if
    Pwm1a = A
    End Sub
  • #4 10802536
    Konto nie istnieje
    Poziom 1  
  • #5 10802616
    mdm150
    Poziom 27  
    W zasadzie chodziło mi o ograniczenie pwm do 100. Bo nieco powyżej tej granicy kończyły się możliwości tych stateczników. Kod ten przed wprowadzeniem zmian proponowanych prze kolegę wyżej kompilował się bez problemu i działał zgodnie z założeniami zawartymi w nim.
    Z kodu wynika że porty d0 i d1 są wejściami a nie wyjściami skoro sterownik poprawnie reagował na przyciskanie klawiszy zapiętych pod te porty.
  • Pomocny post
    #6 10813260
    arktik1
    Poziom 27  
    
    Sub Zwieksz
    if a < 100 then 
    incr a
    endif
    Pwm1a = a
    End Sub
    
    Sub Zmniejsz
    if A > 0 then
    Decr a
    end if
    Pwm1a = A
    End Sub
    
  • Pomocny post
    #8 10813707
    Mol
    Poziom 30  
    Dopisałeś na początku po Config ......
    Dim a as byte ?
    Pomiędzy Do a Loop brakuje ci dwóch endif.
  • #9 10814365
    mdm150
    Poziom 27  
    Kod skompilował się po dodaniu komendy Dim a as byte i wygląda to tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Oczywiscie dziękuję wszystkim za pomoc.
  • #10 11341062
    mdm150
    Poziom 27  
    Odkopuję temat.
    Wiadomo z braku czasu projekt się przeciąga.
    Jestem w trakcie realizacji wspomnianego sterownika, pierwsze testy na demo boardzie mam za sobą. Naszla mnie jeszcze jedna myśl. Jak zrobić aby uklad pamiętał ostatnie a nie domyślne nastawy po przywróceniu zasilania sterownika. Bo w programie są domyślne nastawy. Ja bym chciał aby pamiętał moje ostatnie ustawienia po ponownym uruchomieniu. Wiadomo nastawy muszą być zapisywane w pamieci eeprom procka.
  • #11 11341141
    morswin89
    Poziom 23  
    Po ustawieniu odpowiedniej wartości zapisz ta zmienną w eeprom za pomocą polecenia "writeeeprom" a podczas włączania przed główna pętlą odczytaj tą zmienną za pomocą polecenia "readeeprom"

    Dodano po 12 [sekundy]:

    Zapis musisz robić dla zwiększania i zmniejszania i zobacz do helpa jak wygląda składnia poleceń bo readeeprom jest źle.


    READEEEPROM zmienna , adres
  • #12 11342008
    mdm150
    Poziom 27  
    Zrobiłem se coś takiego, ale nie działa tak jak powinno, nie odczytuje właściwych ustawień tylko domyślne 0.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #13 11342035
    Mol
    Poziom 30  
    Readeeprom A , 1

    Writeeeprom A , 1

    ale nie jestem pewny , jutro sprawdzę.
  • #14 11342404
    Konto nie istnieje
    Poziom 1  
  • #15 11439064
    mdm150
    Poziom 27  
    Ello,
    Generalnie jak dla mnie długość życia procka nie ma wiekszego znaczenia.
    Po kombinacjach z komendami powstalo coś takiego:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Już zapisuje i odczytuje zawartość pamięci, ale jest szkopuł. Niestety przy zwiększaniu lub zmniejszaniu wartości, układ startuje od wartości zerowej a nie od zapisanej już w pamięci. Kolejnym elementem który jednak byłby mi potrzebny to funkcja on/off.
    Zrobilem jeszcze tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Tutaj w zasadzie też zapisuje do pamięci, tyle ze układ zawsze staruje od 0. Dopiero odczyt następuje po naciśnięciu któregoś z przycisków(up lub down) włącznie ze zmianą wartości w zależności od naciśniętego przycisku.
  • #16 11439493
    Mol
    Poziom 30  
    W pierwszym listingu startuje od 0 bo zmienna A jest 0 , przed tym Readeeprom Pwm1a , 1 daj Readeeprom A , 1 .Co ma robić ON/OFF zatrzymać PWM , wyłączyć wszystko ?
  • #17 11440019
    mdm150
    Poziom 27  
    Są dwie opcje:
    1.Jak wspomniałeś-wyłączenie wszystkiego.
    2. Wyłączenie samej lampy-funkcja wyłącznika w tym sterowniku.
    Skłaniam się ku pierwszej opcji-wyłączenie całości.
    Jeżeli się da tak zrobić.

    W pierwszym listingu wpisałem tak jak mi napisałeś. Wkońcu odczyt i zapis działa poprawnie. Tylko jest jeden bug w programie- przy pierwszym uruchomieniu uklad startuje z poziomu 255. Nie wiem czemu sie tak dzieje. Jak wcisnę up to uklad już wskakuje do zera i regulacja już działa w tym zakresie w jakim powinno być.
  • #18 11440234
    Mol
    Poziom 30  
    Linię Config Timer1 daj zaraz po $regfile , bo może kompilator tu coś kaszani , albo zobacz w eepromie , czy nie masz czasem FF. Wyłączenie chyba najprościej , to do PWM wpisać 0. I do eeproma wpisuj A - Writeeeprom A , 1
  • #19 11443859
    mdm150
    Poziom 27  
    Ello.
    Linię Config Timer1 przewalałem tak jak pisałeś, lecz to nic nie zmieniało sytuacji. Co się tyczy zawartości eeprom to po załadowaniu programu do procka był pusty-same FF. Dopiero jak zmieniłem wartość ustawień to już w zaadresowanej w/g bascoma komórce już była wartość inna niż FF. Zależna ona była od kroku ustawionego w sterowniku. Pytanie jak skopiować zawartość eepromu na dysk, bo jak dam save to file to mam możliwość zapisania jako .bin lub .hex, a powinno mieć rozszerzenie .eep no nie?
  • #20 11443978
    Mol
    Poziom 30  
    W FUSE bitach ustaw że przy ładowaniu flasha , ma nie kasować zawartości eeprom .
  • #21 11444074
    mdm150
    Poziom 27  
    Ok, to w takim razie jak zrealizować te nieszczęsne on/off czyli stand-by na przycisku? Raczej bym nie chciał dokładać jeszcze jednego już procka. Już i tak jeden ma odpowiadać za pwm i st-by a drugi za sterowanie na podczerwień( w tym przypadku mam juz sprawdzoną koncepcję + gotowy program, tylko go dopieścić).
  • #22 11445899
    Mol
    Poziom 30  
    Jeżeli chcesz wyłączyć wszystko to wyłącz całe zasilanie zwykłym wyłącznikiem , jeżeli chcesz użyć do tego procesora , to po naciśnięciu przycisku robisz pwm=0 i może do tego disable interrupts . Procesor leci cały czas w krótkiej pętli i sprawdza czy przycisk został powtórnie naciśnięty , ale wtedy musi mieć cały czas zasilanie. Jest jeszcze chyba komenda idle , ale nie testowałem tego nigdy więc nie wiem dokładnie jak działa.Musisz się na coś zdecydować. Co do drugiego procesora to masz na nim zrobiony odbiór , czy nadawanie ?
  • #23 11446508
    mdm150
    Poziom 27  
    Drugi procek odpowiada za odbiór z ir. Konkretnie to coś takiego: http://mirley.firlej.org/odbiornik_rc5. Odbiornik ir finalnie zrobiony bedzie na attiny13. Pierwotnym zalożeniem było włączanie/wyłączanie na twardo wyłącznikem, lub z pilota wspomnianym wyżej odbiornikiem. Doszedłem do wniosku że jednaj lepiej by było sterowanie na "miekko"-switchem. Załączana/wyłączana by była lampa i wyświetlacz. Jednak rozbuduję układ o kolejnego procka(attiny13-znalazłem już program ze schematem układu)) i będzie sterowanie na miękko. Założyłem do tego celu juz dwusekcyjny przekaźnik. Jedna sekcja bedzie załączać/wyłączać lampę a druga procek pwm'a z lcd. Reszta peryferii będzie trzymana pod napięciem. Innej drogi nie widzę już niestety.
REKLAMA