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

[AtTiny45][C] USI TWI - biblioteka z rejestrami?

brzydal91 19 Kwi 2011 23:07 1807 7
REKLAMA
  • #1 9420198
    brzydal91
    Poziom 12  
    Witam serdecznie. Zaczynam właśnie zabawę z USI TWI. Próbuję uruchomić TWI na AtTiny45. Znalazłem ciekawy poradnik, dobry na początek. Jednak mam problem już na samym początku. Dosyć banalny. Jeśli mam ustawić rejestr
    USCIR |= (1 << USIWM1)|(0 << USIWM0);
    w ten sposób tzn. żeby uruchomić TWI to jaką bibliotekę dołączyć lub co zdefiniować żeby mi nie wywalało przy kompilacji błędów że nie wie co to jest "USCIR" ? Jak uruchamiałem TWI na AtMega8 to dołączałem twi.h a teraz? Pozdrawiam
  • REKLAMA
  • #2 9422128
    zumek
    Poziom 39  
    Udzielę bardzo nie lubianej, a jakże pożytecznej odpowiedzi: Zajrzyj do dokumentacji, by przekonać się , że ATTiny 45 ( i zapewne żaden z AVR-ów) nie posiada rejestru o nazwie "USCIR" - to stuprocentowa literówka od USICR.

    zumek
  • REKLAMA
  • #3 9422193
    brzydal91
    Poziom 12  
    Tak wiem, już to zauważyłem. Jak zwykle popełniam głupi błąd i zwracam się z tym na forum, sorry. Niestety nie pomogło mi to w nawiązaniu komunikacji. Kod który udało mi się dzięki poradnikowi napisać to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jest to kod napisany wg poleceń jakie znalazłem w poradniku. Podejrzewam, że jest to masło maślane i ten kod nie ma podstaw ku temu by działać, ale jeśli proszę o pomoc to przecież wypada pokazać kod.
    Czy ktoś potrafi rozwiązać kwestię wysłania bajtu do urządzenia poprzez USI TWI ? Pozdrawiam
  • #4 9423888
    Maintenance
    Poziom 13  
    Jaki oscylator, ile MHz ?
  • REKLAMA
  • REKLAMA
  • #6 9424420
    piotrva
    VIP Zasłużony dla elektroda
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to mi się nie podoba... przecież w tym uP rejestr pinb jest 6-cio a nie 3 bitowy...
    sprawdzasz więc w rzeczywistości warunek PINB == 0b000001, a co chcesz wykryć, stan niski na pinie PB0? to się robi tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    aha, i na jakim poradniku się wzorowałeś?
    mógłbyś podać link?
  • #7 9424888
    brzydal91
    Poziom 12  
    No a czy przypadkiem nie jest tak że jak zapisujemy liczbę w postaci binarnej to zera po lewej stronie możemy pominąć?
    Jak zapiszemy 0b00010000 = 16 a jak zapiszemy 0b10000 = 16. Nie jestem pewien ale zmienię tę linijkę i będę testował dalej.
    Nie mogę adresu strony znaleźć na której znalazłem ten poradnik dlatego wrzucę go tutaj bo dużo nie waży.
    Czytałem tutoriala w nim zawartego krok po kroku i po prostu w miarę swoich umiejętności zapisywałem to w C. Pomijałem te kroki które są oznaczone gwiazdką ponieważ są to kroki obowiązkowe tylko dla trybu multi-master.
    Zależy mi na napisaniu programu, który wystawi bajt 0xFF lub 0x00 do mojego PCF8574. Wtedy będę potrafił opanować całą resztę.
    Jeśli by się to udało to chciałbym spróbować napisać obsługę TWI ale jako program bez wykorzystania sprzętowej obsługi.
    Korzystając z okazji chciałem się zapytać czy ktoś potrafiłby mi krótko wytłumaczyć na czym polegała by komunikacja USART zrobiona na przerwaniach ale dla AtMega8. Mam komunikację na zwykłych funkcjach w pętli głównej a chciałbym zrobić to na przerwaniach, nie bardzo wiem od czego zacząć.
    Pozdrawiam
  • #8 9425110
    piotrva
    VIP Zasłużony dla elektroda
    owszem zera są pomijane i nie mają znaczenia, ale ja dla czytelności zawsze zapisuję tyle zer ile bitów ma dany rejestr.
    ale za to sposób sprawdzania tego stanu (nadal nie powiedziałeś w końcu czy na pewno chcesz wykrywać 0) już ma wielkie znaczenie...

    co do obsługi UART na przerwaniach to ma to takie znaczenie, że normalnie podczas wysyłania/odbioru program i tak stoi (pomimo, że tak na prawdę tylko oczekuje aż moduł sprzętowy wyśle dane). Tymczasem jeśli używamy przerwań to dane zapisujemy do buforu cyklicznego i kiedy jeden bajt zostanie wysłany program automatycznie (w przerwaniu, a więc niepostrzeżenie dla programu głównego, który może robić w tej chwili co innego) wysyła kolejny z buforu, aż do jego opróżnienia - jedyny moment, w którym musimy wstrzymać program główny to przepełnienie buforu. Zagadnienie to zostało bardzo dobrze opisane w książce: http://atnel.pl/wydawnictwo

    Aha, i jeszcze jedno, jeśli chcesz, żeby inni użytkownicy elektrody Ci pomogli to skasuj te punkty za pobieranie...
REKLAMA