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

C, SPI, dwa urządzenia na magistrali i dziwne zachowanie.

19 Maj 2012 17:23 1371 7
  • Poziom 38  
    Dwa układy- MAX522-przetwornik C/A i MAX7219- sterownik wyświetlacza 8-cyfrowego.
    Oba na SPI.
    I taki programik:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    I jest tak- w wersji jak powyżej działa MAX7219 ale nie działa MAX522.
    Natomiast gdy w funkcji zamiana1() zmienna jest taka:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    to działa MAX522 ale 7219 wyświetla same zera.
    Funkcja zamiana1() nie ma nic wspólnego z MAX522.
    Czy to jest jakiś zasięg zmiennych czy jakaś inna tajemnicza siła?
  • Pomocny post
    Użytkownik usunął konto  
  • Pomocny post
    Poziom 24  
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 38  
    Działa.
    Ale dlaczego?
    Dlaczego inicjalizacja zmiennej static w tej samej linii działa inaczej niż podstawienie
    w następnej linii?
    I dlaczego to ma wpływ na działanie MAX522?
    Przecież ta funkcja nie powinna mieć żadnego wpływu na to co on dostaje.
  • Pomocny post
    Poziom 24  
    Wyjaśnił już to albertb. Zmienne static w funkcji to są takie zmienne globalne, które mają ograniczony zasięg to funkcji, w której występują. Oznacza to, że zmienna tmp przyjmuje wartość 22 podczas uruchamiania procesora, jeszcze przed funkcją main(). Funkcja zamiana1() modyfikuje zmienną tmp w taki sposób, że jej wartość po pierwszym wywołaniu jest równa zero.

    Dlaczego MAX522 przestaje działać jeszcze nie wiem. Nie analizowałem całego kodu. Zrobię to jutro i Ci napiszę, jeśli nikt nie odpowie do tego czasu.
  • Poziom 38  
    Teraz zrobiłem tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    No i licznik zaczął liczyć i nic nie blokuje MAX522.
    Zgodnie z tym co napisał albert i z uwagami sulfur-a że temp jest modyfikowane
    w tej funkcji.
    Działa i mogę prawie się cieszyć.
    Prawie- bo napisałem to na "czuja" a nie na podstawie systematycznej wiedzy.
    W dalszym ciągu nie rozumiem jak wywołanie funkcji zamiana1() w przerwaniu może wpływać na sterowanie MAX522.
    Rozumiem że na wyświetlaczu sterowanym przez MAX7219 mogły by pojawić się
    bzdury.
    Ale dlaczego MAX522 przestaje działać- nie rozumiem.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 38  
    Prawda.
    Teraz jest tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    I działa- czyli nadpisywał.
    Mój błąd.