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

Attiny2313/bascom/serwa - Błąd programu, kiedy wartośc "Waitus" jest z

marijuz 01 Lip 2016 23:53 1416 23
REKLAMA
MediaMarkt Black Week
  • #1 15781213
    marijuz
    Poziom 18  
    Witam.
    Rozpoczynam właśnie zabawę w obsługę serw modelarskich przy pomocy attiny2313 i bascoma. Niestety wbudowana w bascoma procedura "Config servo" mnie zawiodła. Postanowiłem więc samodzielnie wygenerować sygnał, który posłuży do obsługi serwa. Napisałem więc taki prosty skrypt:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Niby proste, ma wysłać sygnał na PB1 przez A mikrosekund (w tym przypadku 1500), a potem wyłaczyć nadawanie na B mikrosekund (dopełnienie do 20000us). Ale niestety w praktyce nie zadziałało. Obok sygnału do serwa, kazałem mikrokontrolerowi identyczny sygnał wysyłać na diodę LED. Okazało się że dioda miga, ale stanowczo za wolno. Jakby każdorazowo po wykonaniu pętli mikrokontroler robił sobie przerwę na pół sekundy. Po sprawdzeniu w ten sam sposób wbudowanej w Bascoma komendy "Config servo" otrzymałem identyczne wyniki. A teraz najlepsze: Kiedy jako wartości waitus wpisałem konkretne liczby zamiast zmiennych, wszystko zaczęło działać jak należy. Serwo ustawiło się w konkretnej pozycji, a dioda zamiast migać, świeci ciąłym światłem (troszkę przygaszonym, ale ciągłym). I teraz moje pytanie - o co tu chodzi i jak temu zaradzić? Nie mogę predefiniować w skrypcie wychylenia serwa, wolałbym żeby było ono wyliczone w postaci zmiennej ;-)

    Prosze o pomoc i pozdrawiam
  • REKLAMA
    MediaMarkt Black Week
  • #2 15781253
    Konto nie istnieje
    Poziom 1  
  • #3 15781268
    kamyczek
    Poziom 38  
    Nie jestem w 100% pewny ale nie wydaje mi się żeby obsługiwały zmienną dłuższa od 255 a już na pewno nie typu 200000... poza tym nie podoba mi się składnia typu config pinb.1=output . Jest więc zrozumiałe że działać to nie będzie . Proponuję zerknąć do helpa i przykładów z bascoma lub jakiejś książeczki o nim ...
  • #4 15781282
    Ture11
    Poziom 39  
    Z instrukcji BASCOMA AVR (komenda Waitus):


    Cytat:
    The number of microseconds to wait. (1-65535)
    This must be a constant. Not a variable!

    In version 1.12.x.x and higher you can use a variable as well.


    oraz

    Cytat:
    When you use a constant, the timing is reasonable accurate. When using a variable, the timing accuracy depends on the oscillator speed.

    As a general rule : the higher the clock speed, the better the result.


    Chyba lepiej będzie zrobić timer, choć ja bym jeszcze spróbował dać wewnętrzny rezonator na maksa, albo zewnętrzny kwarc.
  • #5 15781374
    Konto nie istnieje
    Konto nie istnieje  
  • #6 15781565
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
    MediaMarkt Black Week
  • #7 15781691
    marijuz
    Poziom 18  
    Na swoje usprawiedliwienie powiem tylko, że w polskim helpie nie ma słowa o tym, że waitus nie może być zmienną. W takim razie mam jeszczy pytanie dlaczego nie działa mi taki program

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Więc definiuje sobie jedno serwo, ustawiam rozdzielczość na 10. Główna pętla programu ma ustawiać długość sygnału na 600 (servo(1) * reload = 60 * 10 = 600, tak to rozumiem) i jednocześnie włącza diodę z PB0, a po 3 sekundach ustawia sygnał na 2400(czyli przeciwne ustawienie serwa) i jednocześnie gasi diodę.

    Serwo achowuje się bardzo dziwnie, tyka jak zegarek i z każdym tyknięciem przesuwa się w jedną stronę. Co więcej, dioda nie gaśnie, więc pętla nie jest wykonywana w całości. Gdzie jest błąd?

    EDIT:
    Dodam że mam kondnsatory na zasilaniu i testowałem różne zasilania - od zasilacza 0.15A, po sporą baterię.
  • #8 15781725
    Konto nie istnieje
    Konto nie istnieje  
  • #9 15781791
    marijuz
    Poziom 18  
    To tak można xD? Attiny2313 ma zegar 1MHz, myslałem że tak musi byc w ustawieniach żeby poprawnie działał. Przyznam że ten kod nie chciał mi sie skompilować (bład 228: DATA line must be placed after the END statement), a po drobnych zmainach też nie chciał działac :-(
  • #10 15781824
    Konto nie istnieje
    Konto nie istnieje  
  • #11 15782129
    marijuz
    Poziom 18  
    Niestety po tej operacji mam bład "Colud not identify..."
  • #12 15782147
    Konto nie istnieje
    Poziom 1  
  • #13 15782150
    marijuz
    Poziom 18  
    Nie nie, na pewno było Enabled. Jest nadzieja na uratowanie attina?
  • #14 15782167
    Konto nie istnieje
    Poziom 1  
  • #15 15782177
    marijuz
    Poziom 18  
    No tak, jak bascom nie identyfikuje mikrokontrolera to nic nie można zdziałać. No trudno.
  • #16 15782255
    Konto nie istnieje
    Poziom 1  
  • #17 15782277
    marijuz
    Poziom 18  
    Programuję kawałkiem kabla, króry niektórzy nazywają Bascom sample programmer. Nie mam w nim niestety zadnych opcji.

    Jaki zewnętrzny kwarc podłączyć? Właściwie to mam tylko taki modelarski(oznaczony jako 27.195 FM), raczej nie będzie się nadawał.
  • #18 15782304
    Konto nie istnieje
    Konto nie istnieje  
  • #19 15782306
    Konto nie istnieje
    Poziom 1  
  • #20 15782646
    marijuz
    Poziom 18  
    Rzeczywiście jest opcja delay i próbowałem z róznymi wartościami, ale niestety bez efektów. Na zewnętrznym taktowaniu się kompletnie nie znam, zawsze kojarzyło mi się z kwarcami. Zdaje się, że można to też zrobić innym mikrokontrolerem, ale niestety nie mam innego. A jeśli coś mieszam i to sie robi kompletnie inaczej to mnie poprawcie

    Niveasoft - spoko, nic się nie stało ;-) Pod ręką miałem tylko 10 000pF i nic nie pomógł, ale poszukam takiego na 100pF. Tylko obawiam się, że to jest ta sama metoda co z opcją "delay" i przyniesie taki sam efekt.
  • #21 15783648
    kamyczek
    Poziom 38  
    Może zaczniesz od czegoś łatwiejszego , będzie prościej i mniej stresująco . wygląda na to że masz chęci , masz plan , ale brakuje odrobinkę wiedzy żeby w tej chwili zrealizować temat z sukcesem . Nie pomyśl tylko że nie uda ci się go zrealizować . Najlepszą drogą jest uzupełnienie brakującej wiedzy , a nie ma tego zbyt wiele powiedzmy na kilka wieczorów ...
    Możesz skorzystać z kursu w sieci , z EDW czy z książeczki o bascomie . To się z pewnością przyda do innych projektów , a mikrokontrolery otwierają znacznie bardziej szeroką i wszechobecną technikę cyfrową z dsp całą resztą zastosowań . Sam kiedyś tak potrzebowałem więc usiadłem pobawiłem się tydzień i poleciało polizałem trochę innych języków i skończyło się na łacinie cyfrowej ( asm) ;))
  • Pomocny post
    #22 15785278
    Konto nie istnieje
    Poziom 1  
  • #23 15785320
    Konto nie istnieje
    Konto nie istnieje  
  • #24 15785755
    kamyczek
    Poziom 38  
    emarcus napisał:
    No, nie żartuj z faceta!. Co może byc łatwiesze (?) ? miganie diodą ?...Spójż na jego ?credentials? w lewym oknie. Gośc jest tu około 10 lat, więc pewne rozeznanie w temacie posiada i ?kurs? z miganiem diodą z pewnością dawno ukończył.


    Kolego można pracować na uniwerku i z wiedzą to też nie ma nic wspólnego . Nie oceniaj więc człowieka po okładce 10 lat tu można siedzieć i nie posiadać wystarczającej wiedzy w temacie elektronika to naprawa telewizorów , i mikrokontrolery a każdy co innego potrafi . Temat można zrealizować na wiele sposobów ale człowiek w mikrokontrolerach jest początkujący i trzeba go nie zniechęcić ale zachęcić do zrobienia kroku dalej . Każdy z nas się kiedyś uczył i uczy się nadal bo ta wiedza nie ma końca i ciągle się rozwija . Wszystkie podpisy , rangi , czas na forum nie są wymiernym wskaźnikiem jakiejkolwiek wiedzy a jedynie czas ,który upłynął na forum . Jak się uprzesz to znajdziesz tu profesorów z poziomem 1 i ludzi bez studiów z poziomem 3x , a wiedza ? Można bzdurnie odpowiadać na bzdurne tematy i mieć w ciągu miesiąca 20 poziom bez wiedzy . Tak samo jest z moderowaniem pstryk i jest moderator ...
    Oceniłem gościa po poziomie problemu ,który go przerósł chcę mu pomóc , ale nie koniecznie chcę mu pisać program w bascomie , w asemblerze też mu nie pomogę , bo on tego języka nie zna za grosz . Staram się pomagać w rozwiązywaniu problemu wskazując drogę osiągnięcia rozwiązania nie dając gotowce . Człowiek ma się czegoś nauczyć i sam rozwiązać problem żeby mieć satysfakcję , jak by chciał gotowca kupił by sobie na "alledrogo" chiński tester serw za 10pln i tyle .
REKLAMA