Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Basic na pic-e, avr-y, arm-y
SQ6OXK Offline
Paweł
****

Liczba postów: 317
Dołączył: 23-06-2010
Post: #7
RE: Basic na pic-e, avr-y, arm-y
(22-02-2012 10:13)SP4EJT napisał(a):  Proszę o wyjaśnienie - na chłopski rozum, sprzętowe, np. I2C powinno chodzić szybciej.

Nie chodzi tutaj o samą komunikację I2C, bo jej prędkość określa standard i wynosić maksymalnie 100kbps czyli sygnal zegara SCL powinien maksymalnie mieć 100kHZ. Później dodany tryb pracy Fast Mode gdzie szybkość zegara poniesiono do 400 kbps, a jeszcze później 3,4Mbps.

Mam tutaj tą samą różnicę co miedzy sprzętowym i programowym UART-em.

Napisanie programowej komunikacji wymaga od nas trzymania się norm czasowych dotyczące czasów trwania sygnałów. Najczęściej procesor stoi i czeka na odliczenie pewnego opóźnienia, (przykładowo dla 10MHz zegara procesora i 100kbps jest to 50 cyklów zegarowych) w czasie którego nic nie robi.

Jeśli program jest mały i obsługuje tylko jeden układ nie jest to problem, ale w przypadku bardziej złożonych ten czas jest cenny i wykorzystuje się na przykład przerwanie od timera, aby co odpowiedni czas zmieniać stan lini SDA i SCL.

W przypadku programowego, sprawa jest prosta i wymaga od nas kontroli czterech rejestrów, aby sprawdzić czy dane sekwencja transmisji się zakończyła, czy odbiorca potwierdził poprawność i przygotować do kolejnej sekwencji. Samą transmisją zajmuje się układ sprzętowy, a my możemy w tym czasie zająć procesor czymś innym. Musimy tylko co pewien czas sprawdzać czy dane sekwencja transmisja się skończyła.

Sekwencje to: Zainicjowanie transmisji i wysłanie sygnału start, wysłanie adresu, wysłanie (odebranie danej), sygnał stop.

Przy okazji słów Adama, tak dla przykładu chciałbym pokazać pewien problem, który niedawno miałem przy pisaniu programu w C na AVR-a, i chciałbym również aby koledzy zaproponowali jak by to rozwiązali, na końcu porównam i pokaże jak ja to rozwiązałem.

Problem jest prostu, w danym bajcie zamienić kolejność bitów, dla ścisłości chodzi tylko o 4 pierwsze bity, czyli zamienić miejscami 1<-->4, 2<-->3. Rozwiązanie tego problemu w Asemblerze jest banalnie proste, bo są odpowiednie rozkazy do operacji na bitach, ale C który nie ma takich operacji już stwarza pewne problemy. Chodzi oczywiście o zastosowanie takiego kodu, który po kompilacji da nam najmniejszy kod wynikowy.

--= SWL SP6-01-396 =--
(Ten post był ostatnio modyfikowany: 22-02-2012 21:45 przez SQ6OXK.)
22-02-2012 21:45
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
Basic na pic-e, avr-y, arm-y - SQ4AVS - 19-02-2012, 23:26
RE: Basic na pic-e, avr-y, arm-y - SQ6OXK - 22-02-2012 21:45

Skocz do:


Użytkownicy przeglądający ten wątek: 5 gości