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

[Attiny2313][BASCOM] Sterowanie czasowe mostkiem H.

marijuz 13 Lip 2008 13:18 5985 62
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak sterować silnikiem przez mostek H z ATtiny2313 tak, aby obracał się 5 sekund w jedną stronę, a potem 5 sekund w drugą, skoro po czasie WAIT program wydaje się przestawać działać?

To nie wygląda na błąd samego programu, tylko na reset mikrokontrolera wywoływany przez zakłócenia od silnika i mostka H. Dodaj przy ATtiny2313 kondensator 100 nF ceramiczny między VCC i GND jak najbliżej nóżek układu oraz najlepiej także elektrolit ok. 100 µF na zasilaniu, bo bez tego układ potrafi się wieszać albo resetować [#5338699][#5340624][#5341890] Jeśli po wlutowaniu nadal są problemy, sprawdź luty i sam kondensator, bo w wątku podejrzewano zimny lut albo uszkodzony element [#5341919][#5341930] Kod powinien być też w pętli `Do...Loop`, jeśli sekwencja ma się powtarzać, np. ustawienie jednego kierunku, `Wait 5`, potem drugiego kierunku, `Wait 5` [#5338432][#5338259]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • #1 5338226
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    Napisałem program do sterowania mostkiem H zrobionym z tranzystorów BC 327 i BC 337 , całość działa w porządku, ale jest jeden problem. Nie mogę napisać programu, który kręciłby silnikiem w lewo przez 5 sekund, a potem w prawo;/. Zawsze kręci silnik tylko w tę stronę, w którą ma kręcić na początku, po 5 sekundach nic się nie dzieje ;/.

    Mostek jest podpięty do procesora attiny 2313 pinami pd.4 i pd.6

    oto kod napisany przeze mnie , niedziałający ;/
    
    Config pind.6 = output
    Config pind.4 = output
    
    portd.4 = 0
    portd.6 = 1
    wait 5 
    portd.4 = 1
    portd.6 = 0
    

    program jest wykonywany tylko do słowa wait , czyli kręci silnikiem w jedną stronę , po 5 sekundach nic się nie dzieje ;/
  • Pomocny post
    #2 5338259
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    Jaką częstotliwość zegara masz podaną w ustawieniach Bascoma, tak samo jaki uK masz podany? Zawsze lepiej użyć dyrektyw REGFILE i CRYSTAL.
    Czy poprawnie masz ustawione źródło sygnału zegarowego w bitach konfiguracyjnych?
    Poprawiony kod:
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    
    Config pind.6 = output
    Config pind.4 = output
    
    portd.4 = 0
    portd.6 = 1
    wait 5
    portd.4 = 1
    Portd.6 = 0
    Do : Loop : End 
  • #3 5338372
    Mariusz Ch.
    VIP Zasłużony dla elektroda
    Posty: 6181
    Pomógł: 866
    Ocena: 462
    Przenoszę z "Początkujący Nauka".
  • #4 5338395
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    niestety , ten kod mi nie pomógł
  • Pomocny post
    #5 5338432
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 131
    Niestety myślenia nie nauczymy ;)

    zacznij (do)
    - zrób coś (ustaw wartości na liniach)
    - poczekaj
    - zrób coś innego (z tymi samymi liniami)
    - znów poczekaj
    i od początku (loop)
  • #6 5338452
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    
    Config pind.6 = output
    Config pind.4 = output
    
    Do
    Portd.6 = 1
    Portd.4 = 0
    Wait 5
    Portd.6 = 0
    Portd.4 = 0
    Wait 5
    Loop

    no niestety można długo czekać a silniczek się nie wyłącza...
  • #8 5338471
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 131
    ;) Uciesz nasze oczy schematem. Zapewniam Cię że to na pewno pomoże ulży Twoim cierpieniom.
  • #9 5338485
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    bez wyjmowania procka mogę wam powiedzieć że działa bo jak wpisze w programie samo w lewo , albo samo w prawo to działa ;]. Sam nie wiem dlaczego nie działa , robiłem kiedyś diodę migającą na identycznej zasadzie...
    [Attiny2313][BASCOM] Sterowanie czasowe mostkiem H.
  • Pomocny post
    #10 5338488
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Za przeproszeniem Qżwa ale schemat... niech Cię pies kopnie;>

    jAKI MASZ KWARC / FOSC? Grzebałęś w fuseach?

    PS Schemat -> schemat procka z podłączonymi bridgeami...
  • #11 5338513
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    kwarcu nie używam

    [Attiny2313][BASCOM] Sterowanie czasowe mostkiem H.
  • Pomocny post
    #12 5338520
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Ale masz podłączone PB.6 i PD.4:) A w programie?
  • Pomocny post
    #13 5338526
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    Na schemacie masz PD4 i PB6 a w programie co innego.
  • #15 5338543
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    na szybko robiłem,
    w układzie mam do pD6 ;]
  • Pomocny post
    #16 5338553
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    A w programie masz tak:
    Portd.6 = 1
    Portd.4 = 0
    Wait 5
    Portd.6 = 0
    Portd.4 = 0
    

    czy tak, jak zaproponował kolega K_o_n_r_a_d :
    portd.4 = 0
    portd.6 = 1
    wait 5
    portd.4 = 1
    Portd.6 = 0

    :?:
    I nie spiesz się:D
  • #17 5338624
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    w programie na końcu mam 2 zera bo chciałem sprawdzić czy się zatrzyma na moje żądanie ;]
  • #18 5338656
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    A co się dzieje, jeśli zmienisz kolejność, czyli najpierw dasz same zera i po 5 sekundach sygnał do startu? Silnik grzecznie czeka 5 sekund?
  • #19 5338661
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    Przy takim kodzie:
    $regfile = "attiny2313.dat"
    $crystal = 1000000
    
    Config pind.6 = output
    Config pind.4 = output
    
    Do
    Wait 5
    Portd.6 = 0
    Portd.4 = 1
    Wait 5
    Portd.6 = 0
    Portd.4 = 0
    Loop

    silnik drga równo co 5 sekund ;/. Sygnał jest odbierany przez sylnik tylko przez krótki moment. To tak jakbt wykonywał 3 pierwsze linijki komendy , omijał wait 5 i praktycznie odrazu się wyłączał...

    $regfile = "attiny2313.dat"
    $crystal = 1000000
    
    Config pind.6 = output
    Config pind.4 = output
    
    Do
    Wait 5
    Portd.6 = 0
    Portd.4 = 1
    Wait 5
    Portd.6 = 1
    Portd.4 = 0
    Loop


    pomimo tej zmiany (po drugim wait jest "obracaj sie w lewo" ) silnik wykonuje dokładnie taką sama pracę...
  • #21 5338674
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Daj 100nF, jak radzi Balu. Masz zasilanie o wystarczającej wydajności? Może ten silnik jest jakiś specjalny (krokowy?) :)
  • #22 5338675
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    hmmm nie wiem , jestem początkującym elektronikiem ;] aaaa chodzi ci o te rezystorki?? mam tylko trochę większe, ale gościu z elektronicznego powiedział że to prawie niczym się nie różni ;]
  • #23 5338678
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    marijuz napisał:
    hmmm nie wiem , jestem początkującym elektronikiem ;]

    To nie jest wytłumaczenie ;) Jak to nie wiesz, czy dałeś kondensator??
  • #24 5338682
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    PO CO CZYTAĆ PRZYKLEJONE TEMATY!!!
    Wrrrr!!!!!@!!!!!

    I zaczniesz te zdania z dużej litery pisać?

    Dodano po 31 [sekundy]:

    marijuz napisał:
    hmmm nie wiem , jestem początkującym elektronikiem ;] aaaa chodzi ci o te rezystorki?? mam tylko trochę większe, ale gościu z elektronicznego powiedział że to prawie niczym się nie różni ;]


    Teraz to już chyba do nawesoło...
  • #25 5338686
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    Hmmm Na schemacie nie było kondensatora?? Gdzie go trzeba wrzucić??
  • #27 5338695
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    A czemu ten kondensator ma służyć?? Naprawde sądzicie że to tego wina??
  • #28 5338699
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Tak, ma służyć eliminacji (tj. zwieraniu) przepięć na zasilaniu / szpilek / zwał jak zwał zakłóceń.
    Daj na zasilanie procka KONIECZNIE 100nF i najlepiej z 470uF...
  • #29 5338706
    drakon3
    Poziom 15  
    Posty: 122
    Pomógł: 3
    Ocena: 7
    A mi się w tym programie nie podoba konfiguracja portu. Z tego co wiem to składni "pinD/B" używa się gdy końcówka pracuje jako wejście. Według mnie powinno być "config portd.4=1". Rejestr PinD może być tylko odczytywany, może przez to program sie głubi.

    Moderowany przez crazy_phisic:

    Jeśli Ci się tylko wydaje to przed napisaniem postu sprawdź. Zapis "config portd.4=1" to czyste masło-maślana.

  • #30 5338707
    marijuz
    Poziom 18  
    Posty: 383
    Ocena: 13
    Chyba macie racje(z tym kondensatorem) bo on faktycznie zachowuje się jakby po odliczaniu 5 sekund i odpaleniu silnika się resetował. A kiedy odliczanie miał po odpaleniu silników to resetował się na okrągło , co było prawie niezauważalne 9faktycznie silnik dziwnie pracował...) :) Dobra teoria??

    p.s ta zmiana z pind na portd nic nie dała..

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczy sterowania mostkiem H zbudowanym z tranzystorów BC327 i BC337 za pomocą mikrokontrolera Attiny2313 w BASCOM. Program miał obracać silnik w lewo przez 5 sekund, a następnie w prawo, jednak silnik kręcił się tylko w jedną stronę, a po 5 sekundach nie następowała zmiana kierunku. Dyskusja wskazała na błędy w kodzie, m.in. brak pętli powtarzającej sekwencję, niepoprawne ustawienia portów (różnice między PD4, PD6 i PB6), a także na problemy z zasilaniem i stabilnością układu. Kluczowym rozwiązaniem okazało się zastosowanie kondensatora ceramicznego 100nF (oznaczenie 104) blisko nóżek zasilania mikrokontrolera w celu eliminacji przepięć i zakłóceń, które powodowały resetowanie się programu i niestabilną pracę silnika. Kondensatory elektrolityczne o większej pojemności (np. 100µF, 470µF) również powinny być stosowane, ale nie zastępują kondensatora ceramicznego. Dodatkowo zasugerowano filtrowanie zasilania cyfrowej części układu dławikiem oraz poprawne lutowanie elementów, aby uniknąć zimnych lutów i uszkodzeń. Po wprowadzeniu kondensatora ceramicznego i poprawnym rozmieszczeniu tranzystorów stabilność działania uległa poprawie, choć nadal występowały sporadyczne problemy z resetem i niestabilnością, co może wymagać dalszej filtracji i optymalizacji układu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA