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.

Atmega 8/C/SPI - Wysłanie większej ilości bajtów spi

mati_7828 25 Lis 2014 21:43 1161 11
  • #1 25 Lis 2014 21:43
    mati_7828
    Poziom 5  

    W linijce send_spi_buf(wynik); // taki błąd i podkrelsenie na czerwono: too few arguments to function 'send_spi_buf'. Problem polega na tym że nie wiem jak wysłać dwa bajty przez SPI. Wydaje mi się że funkcje są wporządku ale niestety coś jest nie tak. Proszę o pomoc ponieważ chce przesłać przez w przysłośći przez SPI wartość napięcia na 10 bitowym ADC.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 11
  • #2 25 Lis 2014 23:06
    michalko12
    Specjalista - Mikrokontrolery

    Zgodnie z deklaracją funkcja send_spi_buf przyjmuje dwa argumenty a ty podałeś jej tylko wynik. W to miejsce powinieneś użyć funkcji void Wyslij_string (char *dana).
    Program i tak bedzie źle działał ponieważ zadeklarowałeś za małą tablicę na znaki

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Popraw to na
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 26 Lis 2014 09:55
    mati_7828
    Poziom 5  

    Oto mój kod do obierania danych od Mastera:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Na termianalu wyświetlają mi sie takie wartości a nie te które wysyła Master:
    52
    52
    53
    52
    54
    52
    55
    52
    56
    52
    57
    52
    48
    52
    49
    52
    50

    Proszę o pomoc

    0
  • #4 26 Lis 2014 10:10
    BlueDraco
    Specjalista - Mikrokontrolery

    Nadajesz ciąg znaków (cyfr), a wyświetlasz kolejno kody ASCII tych cyfr w postaci dziesiętnej. Problem leży w wyświetlaniu, a nie w transmisji danych. Wypisuj po prostu odbierane znaki, nie konwertując ich na liczby funkcją itoa().

    0
  • #5 26 Lis 2014 10:26
    mati_7828
    Poziom 5  

    Oto mój kod do wysyłania znaków:
    [

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nadal na terminalu nie wyświetla mi się liczba którą nadaje. Gdy użyje funkcji nadaj string i chce wysłać zmienną którą odbieram to kompilator podkreśla mi linie na żółto i wyswietla się błąd :passing argument 1 of 'nadajstring' makes pointer from integer without a cast

    0
  • #6 26 Lis 2014 11:13
    BlueDraco
    Specjalista - Mikrokontrolery

    źle przetwarzasz i wyświetlasz dane ODBIERANE - zbędne wywołanie itoa() w kodzie odbiornika. Zamiast wyświetlić odebraną cyfrę jako znak, zamieniasz ją na cyfry reprezentujące jej kod i je wyświetlasz, np. zamiast cyfry 0 wyświetlasz "48".

    0
  • #7 26 Lis 2014 13:14
    mati_7828
    Poziom 5  

    Kod odbiornika:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Kod nadajnika:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nadal dzieje się tak samo. Zamieszczam kody może ktoś znajdzie błąd

    0
  • Pomocny post
    #8 26 Lis 2014 13:52
    BlueDraco
    Specjalista - Mikrokontrolery

    Wysyłasz kolejno kilka cyfr. Odbierasz jedną cyfrę co ponad 100 ms, czyli na pewno gubisz losowo wybrane cyfry. zacznij od zweryfikowania transmisji pojedynczej cyfry - nadawaj kolejne cyfry co np. 1s, a z pętli odbioru wyrzuć opóźnienia.

    0
  • #9 26 Lis 2014 18:54
    mati_7828
    Poziom 5  

    Liczby wyświetlają się tak jak powinny. Dziękuję bardzo za pomoc. Chciałbym jeszcze zapytać jak wyświetlić każdą wartość w nowej linijce w terminalu.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Gdy dodam nową linie w tym miejscu to każda cyfra wyświetla mi się w nowej linijce. Pozdrawiam

    0
  • #10 26 Lis 2014 22:06
    BlueDraco
    Specjalista - Mikrokontrolery

    Złe pytanie. Zapytaj, skąd odbiornik ma wiedzieć, kiedy zaczyna się i kończy transmisja paczki danych z nadajnika.

    0
  • #11 26 Lis 2014 22:15
    mati_7828
    Poziom 5  

    Skąd odbiornik ma wiedzieć, kiedy zaczyna się i kończy transmisja paczki danych z nadajnika?

    0
  • #12 27 Lis 2014 21:51
    BlueDraco
    Specjalista - Mikrokontrolery

    No właśnie - w jaki sposób informujesz odbiornik wysyłając dane, gdzie jest ich początek i/lub koniec?

    0