Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 Bascom - Efekt kółko16 led

outside wear 23 Sie 2013 18:48 3135 28
  • #1 23 Sie 2013 18:48
    outside wear
    Poziom 12  

    Witam. Zbudowałem układ do 16 diod. Diody są podłączone do portu przez rezystor, diody są na przemian 1 niebieska druga czerwona itd...

    Układ działa poprawnie. Steruje 3 portami, jednak mój problem polega na tym, że czerwone diody cały czas się żarzą, a w przypadku gdy są sterowane normalnie się palą.

    Co do układu to zasilam go 5 V do resetu podciągnięty mam rezystor 10K i tym portem nie steruję. Oto wsad.

    Kod: bascom
    Zaloguj się, aby zobaczyć kod



    Zastanawiam się gdzie popełniłem błąd, rezystory oczywiście dobrane do diody osobno.

    0 28
  • #2 23 Sie 2013 22:27
    olelek
    Poziom 24  

    Nie wiem czy to jest powód, ale masz błędy w programie:
    Składnia:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Jest bez sensu, bo momentalnie nadpisujesz port nową wartością. Albo wywal pierwsze polecenie, albo daj:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    I tak samo w pozostałych miejscach, gdzie nie są rozdzielone instrukcją czekania.

    0
  • #3 24 Sie 2013 00:19
    outside wear
    Poziom 12  

    Kod: bascom
    Zaloguj się, aby zobaczyć kod



    Zmienione, nadal to samo.

    0
  • #5 24 Sie 2013 15:54
    outside wear
    Poziom 12  

    Schematu nie mam. Tak jak napisałem wyżej, zrobione na płytce prototypowej. Do wyjścia uP podłączony rezystor, następnie dioda i wszystko do masy. Do resetu podłączony 5V przez R 10k. Program wydaje się ok. Niewiem dlaczego czerwone się świecą delikatnie ;/

    Układ zasilam z zasilacza 0-15 V 2 A stabilizowany z regulacją.

    Dodano po 3 [minuty]:

    Jeśli naprawdę potrzebny schemat to bd działał w eaglu, ale budowa tego jest strasznie prosta. Może powinienem zastosować diody prostownicze dodatkowo, sam już nie wiem.

    0
  • #6 24 Sie 2013 19:38
    BlueDraco
    Specjalista - Mikrokontrolery

    Dioda LED nie powinna się ani palić, ani żarzyć. Ona tylko świeci przy poprawnym podłączeniu. Prawdopodobnie diody masz włączone pomiędzy wyjścia i masę, ale nei chcesz pokazać schematu. W tej sytuacji szukaj pomocy u wróżki. Ja podejrzewam, że zamiast zmieniać stan wyjść, zmieniasz ich kierunek, a świecenie diod jest spowodowane włączeniem wewnętrznego podciągania.

    0
  • #7 24 Sie 2013 21:46
    outside wear
    Poziom 12  

    Witam. Schemat zrobiony na bardzo szybko. Mam nadzieje, Atmega8 Bascom - Efekt kółko16 led że pomoże :)

    0
  • #9 25 Sie 2013 09:23
    outside wear
    Poziom 12  

    Zrobione, nadal to samo. To mi wygląda tak, jak by stan niski nie miał 0 V a np 1,5V

    0
  • #11 25 Sie 2013 12:34
    BlueDraco
    Specjalista - Mikrokontrolery

    To by potwierdzało moje podejrzenia o błędnym sterowaniu portów - kierunek zamiast stanu wyjścia, stale włączony rezystor podciągający.

    0
  • #12 25 Sie 2013 12:52
    mimor555
    Poziom 24  

    Procek nowy. Raczej dobry. Rozumiem że schemat i kod poprawny?

    0
  • #14 25 Sie 2013 14:23
    outside wear
    Poziom 12  

    Układ zasilam z zasilacza PS-1502DD regulowany, tak jak napisałem wyżej. Oczywiście 5V. Zasilałem różne układny nim i nigdy nie było problemów. Więc wina na pewno nie leży po stronie zasilacza.

    Co do rezystorów przy niebieskiej diodzie 68 Ohm a przy czerwonej 150.
    Co do napięć około 1,75 V ( na wyjściu portu np PB2 ) i pozostałe.

    Sprawdziłem na NOWEJ drugiej atmedze i też nic.

    Jeden z kolegów napisał do mnie abym do programu dopisał zakończenie END ale to też nic nie dało. Prosty układ a mi ręce opadają ;/

    0
  • #15 25 Sie 2013 20:12
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeden z kolegów napisał też, co prowdopodobnie dolega Twojemu programowi - konfiguracja portów.

    Za to ewidentnie gwałcisz parametry diody i/lub mikrokontrolera. Diodę niebieską próbujesz zasilać prądem ponad 25 mA, a czerwoną - ponad 20 mA.

    0
  • #16 25 Sie 2013 20:18
    outside wear
    Poziom 12  

    To jak ma wyglądać ta konfiguracja portów? Diody również sprawdziłem pod 5V i rezystorem w szeregu i było wszystko ok, prąd ok.

    0
  • #17 25 Sie 2013 20:23
    2rs232
    Poziom 17  

    Tak jak koledzy pisali wyżej, problem leży w konfiguracji kierunku portów (brak ustawienia jako wyjście).

    np:
    Config Portb = Output

    Zapoznaj się z pomocą do Bascoma to ułatwi pisanie programów.
    http://avrhelp.mcselec.com/index.html?config_port.htm

    Zerknij też do dokumentacji procesora jaki prąd może płynąć przez pojedynczy pin oraz sumaryczny prąd na wszystkich portach.

    0
  • #18 25 Sie 2013 20:32
    BlueDraco
    Specjalista - Mikrokontrolery

    Co to znaczy "prąd ok"? Prąd 25 mA "nie jest OK", chociaż pewnie jakoś przetrzyma go i dioda i uC, których parametry pogwałcisz. Przy 25 mA, a nawet przy oficjalnie dozwolonych 20 mA współczesne LED są raczej za jasne dla oczu, chyba, że nie oglądasz ich światła bezpośrednio.

    0
  • #19 25 Sie 2013 21:58
    outside wear
    Poziom 12  

    Program wygląda następująco. Nadal to samo.
    Jeśli ktoś widzi błąd proszę o informacje dokładniej co i gdzie, na razie uczę się programować, każdy kiedyś zaczynał. Program wydawał mi się bardzo prosty, a tu zdziwiony jestem że jednak nie działa prawidłowo. W zasadzie programowałem już i lcd 2x16 i wiele innych prostych ukł i nigdy nie było większych problemów.



    Kod: bascom
    Zaloguj się, aby zobaczyć kod

    0
  • #20 25 Sie 2013 22:13
    Wojtek001
    Poziom 15  

    2rs232 napisał:
    Tak jak koledzy pisali wyżej, problem leży w konfiguracji kierunku portów (brak ustawienia jako wyjście).

    np:
    Config Portb = Output

    Zapoznaj się z pomocą do Bascoma to ułatwi pisanie programów.
    http://avrhelp.mcselec.com/index.html?config_port.htm

    Zerknij też do dokumentacji procesora jaki prąd może płynąć przez pojedynczy pin oraz sumaryczny prąd na wszystkich portach.
    Obawiam się że ty też musisz zapoznać się z dokumentacją.Napisał przecież "Config Portb = &B11111111" To to samo więc nie wprowadzaj autora w błąd.

    Do autora tematu. Wywal to "Config Portb = output" bo to jest niepotrzebne. Musisz się zdecydować albo output albo konkretna wartość w rejestrze kierunkowym np. &B11111111
    http://www.weekendowe-projekty.blogspot.com/2012/06/podstawowe-dyrektywy-jezyka-bascom.html

    0
  • #21 25 Sie 2013 22:16
    outside wear
    Poziom 12  

    Teraz już nie wiem nic. Zawsze wydawało mi się że konfiguracje mam dobrze zrobioną. Korzystam z książki AVR&ARM7 Pawła Borkowskiego. Mam ją przeczytaną nie tylko raz ;) A w szczególności gdy coś nie działa.

    0
  • #23 25 Sie 2013 22:30
    outside wear
    Poziom 12  

    Konfiguracja wydaje się ok. Nawet jeśli nie mam podłączonej diody do wy, a mam go skonfigurowane to chyba nic się z nim nie dzieje. Nie wiem gdzie mam rękę przyłożyć bo kod niby dobry, schemat też a diody się świecą lekko :)

    0
  • #24 25 Sie 2013 22:39
    Wojtek001
    Poziom 15  

    Przy tak prostym problemie nie ma siły żeby nie znaleźć przyczyny. A co się dzieje gdy np. zamiast wszystkich tych ustawień portx = blebleble,pętli do loop i waitms w petli wpiszesz po prostu jakąś wartość do rejestru port (tego na którym masz te feralne diody) tak żeby się któraś z nich zapaliła. Też się jarzy czy pali normalnie?

    W ogóle jak patrzę na ten kod to mam wrażenie że nie znacz poleceń shift i rotate.

    0
  • #25 25 Sie 2013 23:00
    outside wear
    Poziom 12  

    Wojtek001 napisał:


    W ogóle jak patrzę na ten kod to mam wrażenie że nie znacz poleceń shift i rotate.


    No nie znam, muszę zaopatrzyć się w jakąś dobrą książkę o Bascomie dla początkujących z przykładami. Internetowe kursy jakoś mi nie leżą.


    Układ zadziałał. Dopatrzyłem się swojego błędu. Źle podlutowana druga nóżka GND. Dziękuję wszystkim szukającym błędu.


    Ale mam kolejne pytania:
    Jak widzicie kopiuję kod aby mieć kilkukrotnie wykonany efekt, jak go powtarzać programem? np *6
    Jak zdefiniować gdzieś wartość czasu, abym mógł w przypadku zmiany programu zmienić wszędzie czas.
    Typu waitms czas1

    czas1= 150
    itp.
    ?

    Teraz bd kombinował nad przyciskiem (zmiana sekwencji świecenia i szybkości).

    0
  • #26 26 Sie 2013 09:19
    Wojtek001
    Poziom 15  

    już dawno nie używam bascoma więc nie pamiętam jeak jego polecenia dokładnie wyglądały ale poczytaj o pętli for i poleceniu rotate.

    mniej więcej by to tak wyglądało:

    Do
    pętla for (wykona się określoną przez ciebie ilość razy np. 6)
    waitms x
    rotate (przesunięcie bitu na porcie)
    koniec pętli

    jakieś działanie np. wyzerowanie portu obsługiwanego w poprzedniej pętli i ust 1 na kolejnym

    pętla for (wykona się określoną przez ciebie ilość razy np. 6)
    waitms x
    rotate (przesunięcie bitu na porcie)
    koniec pętli

    jakieś działanie np. wyzerowanie portu obsługiwanego w poprzedniej pętli ust 1 na kolejnym


    pętla for (wykona się określoną przez ciebie ilość razy np. 6)
    waitms x
    rotate (przesunięcie bitu na porcie)
    koniec pętli

    jakieś działanie np. wyzerowanie portu obsługiwanego w poprzedniej pętli i ust 1 na kolejnym

    Loop
    End

    książka np. Piotra Góreckiego.
    Da się jeszcze dużo prościej:

    dim flaga as byte
    Do
    pętla for (wykona się określoną przez ciebie ilość razy np. 6)
    waitms x
    if flaga = 0 then rotate (przesunięcie bitu na porcie pierwszym np. porta)
    if flaga = 1 then rotate (przesunięcie bitu na porcie drugim np. portb)
    if flaga = 2 then rotate (przesunięcie bitu na porcie trzecim np portc )
    koniec pętli
    if flaga = 0 then wyzeruj porta i usatw 1 na portb
    if flaga = 1 then wyzeruj portb i usatw 1 na porta
    if flaga = 2 then wyzeruj portc i usatw 1 na porta
    flaga = flaga + 1
    if flaga = 3 then flaga = 0
    Loop
    End

    0
  • #27 26 Sie 2013 09:26
    BlueDraco
    Specjalista - Mikrokontrolery

    Tego się tak nie robi. Uruchom przerwanie timera. Zapisz wartości strowania portów dla kolejnych kroków w tablicy stałych. W przerwaniu timera testuj przycisk, a co pewną liczbę przerwań wyrzucaj na porty kolejną wartość z tablicy.Przy takim podejściu cały kod zmieści się w kilkunastu liniach, może dwudziestu paru, a jego długość nie będzie zależała od tego, ile różnych kombinacji diod będziesz musiał wyświetlić.

    No i wreszcie wypada napisać, że Bascom to zabawka, która służy zatrzymaniu rozwoju programisty na poziomie przedszkola (wiem, zaraz posypią się gromy).

    0
  • #28 26 Sie 2013 09:40
    Wojtek001
    Poziom 15  

    BlueDraco napisał:
    Tego się tak nie robi. Uruchom przerwanie timera. Zapisz wartości strowania portów dla kolejnych kroków w tablicy stałych. W przerwaniu timera testuj przycisk, a co pewną liczbę przerwań wyrzucaj na porty kolejną wartość z tablicy.Przy takim podejściu cały kod zmieści się w kilkunastu liniach, może dwudziestu paru, a jego długość nie będzie zależała od tego, ile różnych kombinacji diod będziesz musiał wyświetlić.

    No i wreszcie wypada napisać, że Bascom to zabawka, która służy zatrzymaniu rozwoju programisty na poziomie przedszkola (wiem, zaraz posypią się gromy).
    Po co robić tablice, skoro w przykładzie autora dane na portach zmieniają się tak regularnie? Są mnożone przez 2.
    Można by się jeszcze do waitms przyczepić, ale jeśli procedurka miałaby być przezroczysta, a dokładność nie musi być duża, to można by dać jakieś przepełniające się zmienne.

    0
  • #29 26 Sie 2013 10:03
    BlueDraco
    Specjalista - Mikrokontrolery

    Np. po to, żeby przesuwanie lub mnożenie nie musiało być jedyną możliwością zmiany stanu wyświetlacza. W tablicy można zapisać dowolną sekwencję kombinacji. Oczywiście, jeśli z góry założymy, że urządzenie nigdy nie będzei wyświetlało innych wzorców, niż jedna krążąca w kółko kropka, rozwiązanie z rotacją zmiennej będzie lepsze.

    W obu przypadkach budowa kodu będzie taka sama, jedyna różnica polega na tym, że "u mnie" czytamy z tablicy kolejną wartość, a "u Ciebie" - modyfikujemy zmienną. I tu, i tu uzyskaną w prosty sposób wartość wyrzucamy na porty i zajmuje to jedną linijkę programu, a nie tyle linijek, ile różnych wzorców mamy wyświetlać.

    0