Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 6 kwi 2025, o 02:05


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
    Autor Wiadomość
    PostNapisane: 28 maja 2021, o 09:31 
    Offline
    Nowy

    Dołączył(a): 28 maja 2021
    Posty: 21
    Pomógł: 0

    Witam.
    Proszę o poradę w języku C.
    Próbuję sterować rejestrem przy pomocy SPI czyli ZEGAR, DANE i ZATRZASK z pinów:

    #define MOSI (1<<PA6)
    #define SCK (1<<PA4)
    #define LT (1<<PA3)

    i za Chiny nie mogę tego odpalić .

    Wydaje mi się, że inicjalizacja powinna wyglądać tak :

    DDRA |=MOSI|SCK|LT|LED;
    USISR |=(1<<USIWM0)|(1<<USIWM1)|(1<<USICLK);

    Natomiast wysyłka danych powinna wyglądać tak:

    void wyslij_moj_bit(uint8_t y)
    {
    USIDR = y;
    while (!(USISR & (1<<USIOIF)) );

    LT_ON;
    LT_OFF;

    }

    Z prockiem się łączę, debouncer Led mryga, taktowanie 8Mhz.
    Proszę o info.
    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2021, o 18:30 
    Offline
    Użytkownik

    Dołączył(a): 26 mar 2014
    Posty: 34
    Pomógł: 11

    (1<<USIWM0) | (1<<USIWM1) = Two wire mode (I2C), a potrzebujesz ustawić Three wire mode (SPI).
    (1<<USICLK) oznacza że sygnałem SCK musisz sterować programowo przez ustawianie tego bitu z 0 na 1 i z 1 na 0 podczas wysyłania bajtu w pętli while. Bit ten musi być ustawiany tylko w pętli while, usuń go z inicjalizacji. Brakuje też kasowana flagi USIOIF przed pętlą while.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2021, o 06:55 
    Offline
    Nowy

    Dołączył(a): 28 maja 2021
    Posty: 21
    Pomógł: 0

    Skoro ma być tryb trójprzewodowy to ustawię to tak:
    USISR |=(1<<USIWM0); ???

    Z sygnałem SCK rozumiem, że bitem USICLK będę sterował każdorazowo podczas nadawania?

    Kasowanie flagi przed pętlą ma spowodować zablokowanie wysyłania (śmieci) zanim zacznie działać główna pętla?
    Czy tak może być?
    USISR &=~(1<<USIOF);



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2021, o 09:14 
    Offline
    Użytkownik

    Dołączył(a): 26 mar 2014
    Posty: 34
    Pomógł: 11

    LukMeks napisał(a):
    Skoro ma być tryb trójprzewodowy to ustawię to tak:
    USISR |=(1<<USIWM0); ???

    Tak, tylko rejestr USICR, a nie USISR.

    LukMeks napisał(a):
    Z sygnałem SCK rozumiem, że bitem USICLK będę sterował każdorazowo podczas nadawania?

    Z każdym przejściem pętli while czyli 8 razy na wysłanie jednego bajtu.

    Cytuj:
    Kasowanie flagi przed pętlą ma spowodować zablokowanie wysyłania (śmieci) zanim zacznie działać główna pętla?
    Czy tak może być?
    USISR &=~(1<<USIOF);

    Ma spowodować, że warunek w pętli while nie będzie cały czas równy false. Bez kasowania flagi program wyśle tylko jeden bajt, bo przy drugiej próbie flaga dalej będzie pokazywać że wysyłanie jest ukończone. I zauważ że "The flag is cleared if a logical one is written to the USIOIF".


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 maja 2021, o 08:51 
    Offline
    Nowy

    Dołączył(a): 28 maja 2021
    Posty: 21
    Pomógł: 0

    Czyli, że wysyłam bajt i kasuję flagę, wysyłam bajt i kasuję flagę... zgodnie z:
    "...Clearing this bit will release the counter overflow hold of SCL ..." ??

    PS Od prawie roku siedzę nad C i generalnie o większość zagadnień się otarłem ale temat flag jest mi obcy.
    Wiem, ze "jak nie wiadomo o co chodzi to najlepiej zawsze zaglądać do noty" ale 'patrzę i nie widzę"

    Dzięki kolego za pomoc. Procek siedzi już w sterowniku, poradziłem sobie bez adc. Jak przyjdzie nowy to wrócę do tematu.HEJ



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO