Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

BAscom atmega - Programowanie w Bascomie,silnik DC,Atmega32

DianaNowak 28 Jan 2016 21:11 2607 32
IGE-XAO
  • #1
    DianaNowak
    Level 7  
    Witam ,
    Mam do zaprojektowania układ zbudowany z silnika dc,mostka l293d oraz z AtMegi32 z zegarem kwarcowym 8MHz
    Moim celem jest sterownie silnika lewo/praw oraz szybciej/wolniej.
    Na wyświetlaczu ma się wyświetlać prawo/lewo oraz szybkość(w %)
    Program jaki mam jest napisany w Bascomie.


    Code: vbnet
    Log in, to see the code


    Program jest wgrany ale silnik nie działa i wyświetlacz nie reaguje na podłączenie.
    Szukam osoby,która jest w stanie pomóc znaleźć błąd w programie.
    Jestem początkujący i mam małe problemy z tworzeniem programów.
    Z góry,dziękuję za wszelkie uwagi.
    W załączniku wysyłam schemat układu
    Kamery 3D Time of Flight - zastosowania w przemyśle. Darmowe szkolenie 16.12.2021r. g. 10.00 Zarejestruj się
  • IGE-XAO
  • Helpful post
    #2
    dr.hannibal
    Level 22  
    DianaNowak wrote:
    z zegarem kwarcowym 8MHz

    DianaNowak wrote:
    $crystal = 1000000

    To w końcu jaki ma być ten kwarc?
  • #3
    DianaNowak
    Level 7  
    mój błąd.
    W układzie jest 8MHz.
    Proszę o dalsze uwagi.
  • Helpful post
    #4
    GBW
    Level 29  
    Fusebity ustawione poprawnie? Bywają układy które mają JTAG na PC 2-5 ustawiony fabrycznie.
  • Helpful post
    #5
    User removed account
    User removed account  
  • IGE-XAO
  • Helpful post
    #6
    GBW
    Level 29  
    Generalnie PIN to wejście, a PORT to wyjście.
  • Helpful post
    #7
    dr.hannibal
    Level 22  
    GBW wrote:
    Generalnie PIN to wejście, a PORT to wyjście.

    Chyba jednak nie :)
    PIN to pojedyncze wejście/wyjście, a PORT to 8 (najczęściej) pinów (np. PORTA, PORTB). Gdzie każdy pin w porcie może być programowany i obsługiwany niezależnie.
  • Helpful post
    #8
    GBW
    Level 29  
    Kolego, układy AVR mają nogę podłączoną do kilku rejestów. Pisząc słowo PIN konfigurujemy rejestry wejściowe, a słowo PORT rejestry wyjściowe. Chodzi tu o składnie języka Bascom.
  • #9
    DianaNowak
    Level 7  
    Po małej przeróbce(ustawione są konkretne piny na wejście /wyjście) silnik nadal nie działa.
    Problem jest w tym ,że na obu wejściach do mostka (Pin Pa0 i Pa1) są jedynki logiczne, co unieruchamia silnik (bo jest w stanie zabronionym).
    Próbowałem w programie na jedno wejście wprowadzić 0 i na drugie 1 ,ale po zmierzeniu miernikiem obu wejść nadal jest tam napięcie 5V.
    Czy ktoś wie jak ten problem rozwiązać?
    Z góry,dziękuję za odpowiedzi

    Code: vbnet
    Log in, to see the code
  • Helpful post
    #10
    emarcus
    Level 38  
    GBW wrote:
    Kolego, układy AVR mają nogę podłączoną do kilku rejestów. Pisząc słowo PIN konfigurujemy rejestry wejściowe, a słowo PORT rejestry wyjściowe. Chodzi tu o składnie języka Bascom.


    Ta informacja jest oczywiście niedokładna , a sama interpretacja błędna (!).
    Pisząc 'config ...' w efekcie edytujesz rejestr DDRx odpowiedniego portu x. Nie jest ważne czy edytujesz pojedynczy bit (pin portu) czy też całą grupę (8 bitów tego portu jako cały Byte). Podczas konfiguracji portów Bascom akceptuje zamiennośc określeń PORT/PIN, jednak podczas czytania stanu na wejściu należy posługiwac się określeniem PINx. Rejestr PORTx również może byc czytany, lecz zmiany stanu rejestru PINx (wywołane z zewnątrz), nie przenoszą sie do rejestru PORTx. Zatem stan logiczny przycisku (generalnie sygnału wejściowego) może byc czytany tylko z rejestru PINx.
    Zmiany stanów logicznych wyjśc moga byc dokonane tylko z wewnątrz programu jako wynik odpowiedniej funkcji na przykład:
    set PORTX.y - pojedynczy pin y portu X otrzymuje stan wysoki (1)
    albo
    PORTX = 255 - cały port X (wszystkie bity) ustawiony w stan wysoki.
    'Set' albo 'Reset' moze byc stosowane w odniesieniu tylko do pojedynczego bitu danego portu a nie do całego portu(!)
    Natomiast Rejestr PINx jest przeznaczony tylko do odczytu przez aktualny program, a zmiany logiczne winny byc wywołane z zewnątrz, dlatego praktykuje się wywołanie wstępnych stabilnych stanów logicznych przez podciąganie do Vcc lub GND.

    Wszystkie AVR z serii Tiny lub Mega maja mozliwośc stosowania podciągania wewnętrznego tylko do Vcc. Processory Xmega umozliwiają taka procedurę 'podciagania' również do GND.

    e marcus
  • Helpful post
    #11
    User removed account
    User removed account  
  • #12
    DianaNowak
    Level 7  
    Bardzo dziękuję za pomoc:)
    Jutro biorę się od razu za programowanie:)
    Mam nadzieję,że silnik ruszy:)
  • #13
    DianaNowak
    Level 7  
    Silnik ruszył:)Pięknie zmienia kierunek obrotów.
    Problem jest w regulacji obrotów, ponieważ są cały czas są stałe .Drugi problem jest w włączaniu/wyłączaniu silnika.
    Pomimo różnych zmian w programie nadal nie mogę go przyciskami włączyć i wyłączyć .
    Silnik cały czas chodzi i nie chce się zatrzymać.
  • #14
    DianaNowak
    Level 7  
    Czy to normalne,ze stabilizator lm (o
    d lcd i mostka)się mocno grzeje?
  • Helpful post
    #15
    emarcus
    Level 38  
    DianaNowak wrote:
    Silnik ruszył:)Pięknie zmienia kierunek obrotów.
    Problem jest w regulacji obrotów, ponieważ są cały czas są stałe .Drugi problem jest w włączaniu/wyłączaniu silnika.
    Pomimo różnych zmian w programie nadal nie mogę go przyciskami włączyć i wyłączyć .
    Silnik cały czas chodzi i nie chce się zatrzymać.


    Pokaż cały program, z którym masz te objawy.
    Ostatnie co widziałem to:
    "Jutro biorę się od razu za programowanie:) "
    W poprzednich listingach nie widac poprawnego wysterowania wejśc do ukladu L293, tak aby silnik i cały układ pracował z zamierzonym efektem.
    Nie wystarczy wpisanie do LCD magicznych słów "ON" albo "OFF" czy też L/P i processor będzie wiedział co z tym zrobic. Taka procedura jest tylko informacją dla obserwatora.
    Processor musi wykonac stosowne operacje na odpowiednich portach kontrolujących układ mocy (L293) dla silnika.
    Stosuj kommendy wzorując się na 'Function Table' dla całego mostka H (L293). Jeżeli takiej tabeli nie masz to ją sobie sporządź we własnym zakresie w/g. datasheet. Niektóre datasheet nie załączają takiej tabeli.

    Hint: Pracę silnika kontrolujesz trzema liniami:
    1. Enable - prędkośc obrotowa zależna od wypełnienia PWM
    2. In1 -
    3. In2 -
    Te dwie ostatnie odpowiedzialne są za kierunek obrotów, hamowanie/stop, lub 'free wheeling/stop'./

    Czy na prawdę potrzebujesz dwa przyciski dla zmiany kierunku obrotów L/P, oraz dwa dla ON/OFF ?
    Pełny efekt osiągniesz stosując po jednym przycisku na funkcję.
    Masz przed sobą monitor, - ile masz na nim przycisków aby go załączyc/wyłączyc?
    Stosujesz przecież sygnalizację na LCD to wiesz który z kierunków jest aktualnie załączony, a także znasz status czy silnik ma pracowac czy też byc zatrzymany.....

    Przy zmianie kierunku obrotów należy wprowadzic pewne opóźnienie lub nawet procedurę na wyhamowanie silnika, inaczej wyniknie problem prądowy. Dla małego silnika nie jest to tak bardzo zauważalne/istotne, ale przy większych o duzej bezwładności wirnika i mas napędzanych elementów, może byc powodem częstych awarii układu.

    e marcus
  • Helpful post
    #16
    User removed account
    User removed account  
  • Helpful post
    #17
    emarcus
    Level 38  
    DianaNowak wrote:
    Czy to normalne,ze stabilizator lm (o
    d lcd i mostka)się mocno grzeje?

    Zależy jak duży masz silnik i jak często jest sterowany L/P - to o czym pisałem wyżej.
    Zainstaluj radiator na stabilizator./
    Lcd może brac prąd ze wspólnego źródła z processorem, natomiast dla silnika (VCC2) nie musi byc stabilizowane.

    e marcus
  • #18
    DianaNowak
    Level 7  
    Dziękuję za podpowiedzi.
    Już wcześniej był założony radiator na lm.Wg mnie się za mocno grzeje i obawiam się ,że się kiedyś się w końcu przepali.
    Co do płytki , to mam już wlutowane dwa przyciski start i stop, szkoda byłoby znowu coś odlutować bo tył płytki wygląda makabrycznie,co chwile coś zmieniałem i jest z tyłu "nababrane".
    Jeżeli chodzi o program, to nadal próbuje sterować tym pwm ale coś mi nie idzie:
    Zmieniony program:
    Code: vbnet
    Log in, to see the code
  • #19
    emarcus
    Level 38  
    DianaNowak wrote:
    Dziękuję za podpowiedzi.
    Już wcześniej był założony radiator na lm.Wg mnie się za mocno grzeje i obawiam się ,że się kiedyś się w końcu przepali.
    Co do płytki , to mam już wlutowane dwa przyciski start i stop, szkoda byłoby znowu coś odlutować bo tył płytki wygląda makabrycznie,co chwile coś zmieniałem i jest z tyłu "nababrane".


    Eliminując zbędne przyciski nie musisz nic zmieniac na płytce. Zwyczajnie nic pod te porty nie podłączasz, a zmiany nanosisz w programie.
    Odnośnie programu:
    Pwinna byc tylko jedna pętla główna:
    Do...Loop zakończona
    End

    Pozostałe 'Do/ loop' oraz "End" są zbędne i nic porzytecznego do programu nie wnosza - usuń je.
    Stosując 'Debounce' - to w tej funkcji już jest ustalony delay na drganie (bounce) styków i sprawdzenie stabilności kontaktu, więc ta dodatkowa procedura w subrutynie jest zbędna.
    Prescaler 64 jest zbyt duży w sterowaniu silnika; - daje to zbyt niską częstotliwośc PWM = 244 Hz -> dobre do mrugania diodą.

    e marcus
  • #20
    User removed account
    User removed account  
  • #21
    DianaNowak
    Level 7  
    Dzięęęęki bardzo niveasoft, bardzo mi pomogłeś!Nie wiem jak mogę Ci się odwdzięczyć.
    Silnik działa:)
    Do końca z tym PWM sobie jeszcze nie radzi,bo nie chce zmniejszać i zwiększać obrotów.
  • #22
    User removed account
    User removed account  
  • #23
    DianaNowak
    Level 7  
    Pokombinuje wtedy z tymi prescalerami i fuse bitami.
    Póki co w kodzie i w mkAVrcalculator cały czas mam ustawione na 8MHz, a prescaler ustawiony na 8,natomiast slow SCK mam ustawione na >187,5 kHz
    Na wyświetlaczu pokazuje mi to samo co Tobie, ale nie słychać ani nie widać w rzeczywistości ,że ta prędkość się zmienia.
  • #24
    User removed account
    User removed account  
  • #25
    DianaNowak
    Level 7  
    Sprawdziłem, że pomimo wciskania szybciej/wolniej na wyjściu silnika napięcie jest stałe dlatego silnik nie zmienia obrotów i miernik pokazuje około 5 V

    Dodano po 4 [minuty]:

    Posiedzę jeszcze trochę nad tymi prescalerami ,może rzeczywiście jest w tym problem.

    Dodano po 2 [minuty]:

    Niestety nie mogę sprawdzić za pomocą diody ponieważ mam płytkę wytrawioną z ścieżkami, a to by oznaczało rozcinanie ścieżek i na nowo lutowanie .
  • #26
    DianaNowak
    Level 7  
    Niestety to nie jest wina prescalerów i taktowania, próbowałem już w każdej kombinacji .
    Żadnej różnicy nie zauważyłem, a napięcie przy wyjściu pwm się nie zmienia.

    Z tego co wiem ,to może być to wina złej kompilacji, dlatego przy wyjściu oc1a(Pin D5) od pwma muszę odwoływać się do poszczególnych rejestrów coś na wzór tego:

    Code: vbnet
    Log in, to see the code

    Spróbuję jutro się za to zabrać i odpowiednio dobrać rejestry.
    Jeśli widzicie, że to nie ma sensu to napiszcie.
    Z góry,dzięki:)
  • #27
    User removed account
    User removed account  
  • #28
    DianaNowak
    Level 7  
    Niestety pwm dalej nie chce działać:(Kombinuje dalej
  • #29
    DianaNowak
    Level 7  
    Już chyba prawie wszystkie problemy wykluczyłem.
    Atmega jest sprawna,silnik też.
    Zaprogramowałem też na inne wyjścia Pwm (wyjście PD.4) i dalej jest tam sam problem
    Pwm nadal nie chce działać.Przy nóżkach nadal jest 5v i nie chce się zmieniać.
    Wydaje się ,że to wina programu, ale po konsultacji u mojego wykładowcy powiedział ,że też nie widzi błędu w programie.
    W załączniku wysyłam filmik jak działa mój silnik.
  • #30
    emarcus
    Level 38  
    DianaNowak wrote:
    Już chyba prawie wszystkie problemy wykluczyłem.
    Atmega jest sprawna,silnik też.


    Zdaje się ze wykluczyleś zbyt wiele..<ciach>
    Najprawdopodobniej masz błędnie poprowadzone podłaczenia na płytce.
    Program jest na tyle trywialny że trudno tu o pomyłkę.
    Pokaż swoją płytke, to moze znajdzie się ktoś, kto dezinteresownie wykona reszte twojego projektu. Dziwię się że niveasoft poświęcił tobie tak dużo czasu i byc może bez frustracji, napisał ci kilka wersji programu włacznie z kompilacją, gdzie twój wkład był znikomy lub żaden, gdy tymczasem to ty(!) jesteś/(miałeś byc) autorem i wykonawcą. Poporoś kogoś to moze i płytke ci ten ktoś zrobi, a ty zaniesiesz do oceny.
    A już ma koniec najlepsze jes to:
    Cyt; "załącznik
    video-2016-02-19-14-41-09.mp4
    Download (9.87 MB)
    Punkty: 4 dla użytkownika"

    <ciach>

    e marcus

    Moderated By dondu:

    Zbędne wyciąłem - proszę emocje i osobiste wycieczki pozostawić po swojej stronie klawiatury.