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

[TDA1543A] [Atmega8] - Napięcie stałe zamiast danych, brak komunikacji

elektronik666 26 Kwi 2016 15:05 1797 15
REKLAMA
  • #1 15631552
    elektronik666
    Poziom 11  
    Witam,
    Potrzebuję zrobić na TDA1543A i Atmega8 regulowane napięcie stałe w zakresie napięc podawanych przez TDA1543A.
    Znalazłem przykładowy program i zmontowałem układ, atmega wysyła dane lecz na wyjściach TDA mam jedynie napięcie stałe bliskie napięciu zasilania.
    Atmega8A taktowana kwarcem 12MHz. Próbowałem także 1MHz i 8MHz i nic to nie zmieniało.
    Być może coś głupiego przeoczyłem, proszę o pomoc

    Schemat:
    [TDA1543A] [Atmega8] - Napięcie stałe zamiast danych, brak komunikacji

    Program
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15637946
    Eagle
    Poziom 24  
    Sam to pisałeś czy gdzieś znalazłeś ?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Nie wiem ile jest tam jeszcze takich dziwolągów, ale powyższe po resecie nie ustawia prescalera na 1 jak w komentarzu


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 15638879
    elektronik666
    Poziom 11  
    O to chodzi że znalazłem i ogólnie ciężko znaleźć przykłady do komunikacji z tym w internecie
  • #4 15638928
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 15646643
    elektronik666
    Poziom 11  
    Z racji tego że nie do końca rozumiałem jak kod który znalazłem miał działać napisałem sam kod. Niestety nadal nie działa to więc proszę o pomoc i wytłumaczenie dlaczego bo kombinuje różnych rzeczy ale nadal nie wychodzi.
    Nie pisałem jeszcze programów do komunikacji po szynach danych więc zapewne albo źle do tego podchodze albo robię głupie błędy.

    MAIN.C
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    [TDA1543A] [Atmega8] - Napięcie stałe zamiast danych, brak komunikacji [TDA1543A] [Atmega8] - Napięcie stałe zamiast danych, brak komunikacji
  • Pomocny post
    #6 15647208
    Eagle
    Poziom 24  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Mógłbym dać ci rybę, ale wolę dać ci wędkę.

    Więc dziś będę twoją gumową kaczuszką, której opowiesz jak działa twój program:


    1) Opisz czego spodziewasz się po wykonaniu WS_1 oraz czego po wykonaniu WS_0, tz. jak powinna zachować się linia PD1
    2) Poszukaj i opisz ile wynosi wartość ( 1<<PD1) oraz dla przykładu (1<<PD7)
    3) Poszukaj i opisz co robi _BV(), najlepiej jak znajdziesz definicję tego macra
    4) Poszukaj i opisz co robi ~
    5) Teraz złącz to wszystko i opisz co robi macro WS_1 z definicji na samej górze
  • #7 15648093
    elektronik666
    Poziom 11  
    1) Po ustawieniu WS_1 chce by na porcie PD1 była ustawiona wartość 1 logicznej, a po wykonaniu WS_0 wystawienie 0 logicznego na PD1 - według mnie odpowiada to ustawieniu kanału lewego bądź prawego na wyjściu TDA1343a
    2) 1<<PD1 to przesunięcie bitowe w lewo co zmieni wartość pinu PD1 na wartość po lewej w PD7 zależało by to od wartości wcześniej ustawionego bitu.
    3) Converts a bit number into a byte value. - zamienia
    bit do jego wartości liczbowej. PD1 to inaczej 1, więc _BV(1)=2 czyli na binarne 10
    4) ~ robi bitową negacje, więc jeśli dam 1 to mamy 0, a jeśli 0 to mamy 1
    5) Powinno mi to ustawić 1, ale się zastanawiam teraz nad słusznością wstawienia makra. Być może że wystarczyło by PORTD |= (1<<PD1). Po prostu zgłupiałem albo już dziś nie myśle
  • REKLAMA
  • Pomocny post
    #8 15648132
    Konto nie istnieje
    Konto nie istnieje  
  • #9 15648266
    elektronik666
    Poziom 11  
    Dziękuję za pomoc i odpowiedzi, idźmy dalej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Main:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    no to teraz mam tak. I zaczęło to żyć ale co to za życie. Pojawiał się prostokąt na wyjściu to usunąłem delay lecz nawet po usunięciu delay mam szpileczki a nie napięcie stałe tak jak chciałem, co Panowie poradzicie na to?
    [TDA1543A] [Atmega8] - Napięcie stałe zamiast danych, brak komunikacji
  • #10 15648810
    Eagle
    Poziom 24  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jeśli WS_1 ma ustawić logiczne "1" na lini PD1 to tego nie robi, zarówno jeśli WS_0 ma ustawić logiczne "0" na lini PD1 to tego nie robi.


    Proponuję taką zabawę :

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Wrzuć swoje definicje do jakiegoś typowego projektu, w którym możesz odpalić main, jakiś VS express z konsolową aplikacją i doprowadź do porządku ustawianie linii, bez tego nie pójdziesz dalej. Przykład powyżej, trzeba go poprawić.


    Jeszcze jedna uwaga nie kończ definicji ";" a użycie definicji
  • #11 15648856
    Konto nie istnieje
    Konto nie istnieje  
  • #12 15648929
    elektronik666
    Poziom 11  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    No i na wyjściu jest prostokąt, więc nadal coś jest nie tak :(
  • #13 15648932
    Eagle
    Poziom 24  
    @Piotrus_999 zepsułeś lekcję, gość się nic nie nauczy jak każdy będzie dawać rybę, jutro przyjdzie z następnym problemem.
  • #14 15648956
    elektronik666
    Poziom 11  
    Nie mniej jednak z ciekawości popróbowałem w aplikacji okienkowej :D tak to jest jak się ma przerwy z programowaniem :p Ale dzięki za pomoc.

    Tymczasem coś nadal jest nie tak i temat się nie skończył
  • REKLAMA
  • #15 15648986
    grko
    Poziom 33  
    @elektronik666

    Dlaczego używasz makr do tego? To jest idealny przypadek do użycia funkcji inline. Jak już chcesz używać makr to należy to zrobić zgodnie ze sztuką czyli:
    - bez zbędnego ; na końcu
    - dodać nawiasy do definicji makra informujące o tym, że to makro jest function like

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #16 15654159
    elektronik666
    Poziom 11  
    W tym przypadku to ma "działać" i to możliwie szybko.
    Dlaczego makr, zasugerowałem się książką "Podstawy programowania" M.Kardaś strona 319 w opisie programowej obsługi spi, gdyż stwierdziłem że zasada działania mojego kodu ma być podobna więc zaanektowałem w swoim projekcie tamte rozwiązania - a tu chodziło głównie z makrami o czytelność mechaniki programu głównie dla mnie gdybym musiał użyć tego jeszcze raz.
REKLAMA