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

Atmega8 Bascom - Żarzące się czerwone diody w układzie 16 LED

outside wear 23 Sie 2013 18:48 3507 28
REKLAMA
  • #1 12660097
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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: text
    Zaloguj się, aby zobaczyć kod



    Zastanawiam się gdzie popełniłem błąd, rezystory oczywiście dobrane do diody osobno.
  • REKLAMA
  • #2 12661162
    olelek
    Poziom 24  
    Posty: 581
    Pomógł: 62
    Ocena: 167
    Nie wiem czy to jest powód, ale masz błędy w programie:
    Składnia:
    Kod: text
    Zaloguj się, aby zobaczyć kod

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


    I tak samo w pozostałych miejscach, gdzie nie są rozdzielone instrukcją czekania.
  • #3 12661593
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    Kod: text
    Zaloguj się, aby zobaczyć kod



    Zmienione, nadal to samo.
  • REKLAMA
  • #5 12662909
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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.
  • #6 12663691
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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.
  • #7 12664141
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    Witam. Schemat zrobiony na bardzo szybko. Mam nadzieje, Atmega8 Bascom - Żarzące się czerwone diody w układzie 16 LED że pomoże :)
  • #9 12665059
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    Zrobione, nadal to samo. To mi wygląda tak, jak by stan niski nie miał 0 V a np 1,5V
  • #10 12665064
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    A nie upaliłeś procka?
    Zmierz napięcia woltomierzem jakie rzeczywiście są.
    Jakie wartości mają rezystory?
  • #11 12665616
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    To by potwierdzało moje podejrzenia o błędnym sterowaniu portów - kierunek zamiast stanu wyjścia, stale włączony rezystor podciągający.
  • REKLAMA
  • #12 12665657
    mimor555
    Poziom 24  
    Posty: 788
    Pomógł: 19
    Ocena: 48
    Procek nowy. Raczej dobry. Rozumiem że schemat i kod poprawny?
  • REKLAMA
  • #14 12666002
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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ą ;/
  • #15 12667288
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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.
  • #16 12667323
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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.
  • #17 12667349
    2rs232
    Poziom 18  
    Posty: 141
    Pomógł: 28
    Ocena: 20
    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.
  • #18 12667403
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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.
  • #19 12667825
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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: text
    Zaloguj się, aby zobaczyć kod
  • #20 12667905
    Wojtek001
    Poziom 15  
    Posty: 217
    Pomógł: 5
    Ocena: 74
    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
  • #21 12667916
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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.
  • #23 12667969
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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 :)
  • #24 12668008
    Wojtek001
    Poziom 15  
    Posty: 217
    Pomógł: 5
    Ocena: 74
    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.
  • #25 12668073
    outside wear
    Poziom 12  
    Posty: 112
    Ocena: 6
    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).
  • #26 12668637
    Wojtek001
    Poziom 15  
    Posty: 217
    Pomógł: 5
    Ocena: 74
    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
  • #27 12668648
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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).
  • #28 12668680
    Wojtek001
    Poziom 15  
    Posty: 217
    Pomógł: 5
    Ocena: 74
    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.
  • #29 12668730
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    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ć.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zbudował układ z 16 diodami LED, które świecą na przemian, jednak czerwone diody żarzą się, zamiast świecić normalnie. Problemy związane z kodem w Bascomie obejmują błędną konfigurację portów oraz niewłaściwe podłączenie diod. Użytkownicy sugerują, aby sprawdzić schemat połączeń, poprawić konfigurację portów jako wyjścia oraz zmierzyć napięcia na pinach. Po poprawkach w kodzie i podłączeniach, użytkownik zidentyfikował błąd w lutowaniu, co rozwiązało problem. Dodatkowo, pojawiły się pytania dotyczące optymalizacji kodu oraz implementacji przycisku do zmiany sekwencji świecenia.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA