To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 27 sie 2013, 13:26
Witam serdecznie,
Mam mały problem z paramterami. Otóż w nocie katalogowej Atmegi8 widnieje taki wzór:

wszystko wydaje się jasne. Jednak chciałbym aby na wyjsciu z pinu OC1A był sygnał prostokątny o czestotliwosci 2 MHz wiec wybieram: 16 MHz, tryb CTC, 16-bit, preskaler na 1 i wpisuję do rejestru OCR1AL 3 bo to mnie wychodzi z obliczeń. Jednak wchodzę na stronę z gotowymi kalkulatorami tak jak ta:
http://impuls.elektroda.eu/joomla/index ... kalkulator
i ten kalkulator mówi mi, że powinienem wpisać 8 do rejestru. Dlaczego ??
-
Załączniki
-

- Clipboard01.png (925 Bajtów) Przejrzano 12272 razy
-
kayron
- Użytkownik
- Posty: 2088
- Rejestracja: 21 wrz 2008, 12:53
- Lokalizacja: Poland
-
Kontakt:
Post
autor: kayron » 27 sie 2013, 14:05
Dobrze masz policzone 16 000 000 / 4 (3+1) = 4 000 000 /2 (półokres) = 2MHz
A kalkulator na stronie pokazuje ci 8, bo on oblicza przerwania od Timera, a nie częstotliwość, na wyjściu I/O.
ogólnie na kalkulatory na stronach, trzeba uważać, czasami są to bazmyślnie kopiowane skrypty, bez odpowiedniego opisu ich działania.
Ostatnio zmieniony 27 sie 2013, 14:41 przez
kayron, łącznie zmieniany 1 raz.
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 27 sie 2013, 14:12
Dziękuje, może będziesz znał odpowiedź na moje następne pytanie. Chciałbym aby dowolny pin portu służył mi jako bufor dla komunikacji 8 bitowej. Tzn przesyła jakieś urządzenie do uC daną w 8 bitach i nie chce wykorzystywać do tego któregoś z interfejsów seryjnych uC. Czy można coś takiego zrobić ?
-
kayron
- Użytkownik
- Posty: 2088
- Rejestracja: 21 wrz 2008, 12:53
- Lokalizacja: Poland
-
Kontakt:
Post
autor: kayron » 27 sie 2013, 14:46
Ale jakiej, komunikacji ? Szeregowej czy równoległej ? Przy szeregowej nie ma jakoś wielkiego problemu, przy równoległej, owszem można, ale nie jest to najlepsze podejście, wtedy najlepiej, albo wykorzystywać, jakiś cały port, a jeżeli to niemożliwe wykorzystać po 4 bity, z dwóch różnych portów. Najlepiej jakby były to sąsiednie bity.
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 27 sie 2013, 16:58
Mnie chodzi tutaj i transmisje szeregową. Chciałbym PIN0 PORTU C wykorzystać do odczytywania ciągu bitów (w tym wypadku zaledwie jednego bajtu). Jeżeli można to poproszę o kawałek tekstu w którym mogę o tym przeczytać.
-
kayron
- Użytkownik
- Posty: 2088
- Rejestracja: 21 wrz 2008, 12:53
- Lokalizacja: Poland
-
Kontakt:
Post
autor: kayron » 27 sie 2013, 20:34
Jeżeli chcesz używać tylko 1 pinu do łącza szeregowego, to poczytaj o programowym USART (RS232), przy czy wtedy zrealizujesz tylko pin RXD, choć nie wiem czy to tak się da używać. albo o 1War (termometery ds1820)
-
keruseykaryu
Post
autor: keruseykaryu » 28 sie 2013, 12:21
adi19887 pisze:Mnie chodzi tutaj i transmisje szeregową. Chciałbym PIN0 PORTU C wykorzystać do odczytywania ciągu bitów (w tym wypadku zaledwie jednego bajtu).
Jaki format ramki danych? Bez tego to se możemy pogadać co najwyżej o pogodzie.
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 28 sie 2013, 15:35
Dużo opowiadać nie będę. Oto wyciąg z karty katalogowej (załącznik)
i to bym chciał przyjmować z dość dużą prędkością.
-
Załączniki
-

- Clipboard02.png (26.27 KiB) Przejrzano 12168 razy
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 31 sie 2013, 8:43
Proszę jedynie o podanie sposobu podejmowania całego bajtu danych zgodnie z sygnałem taktowania generowanym przez timer1 uC. W jaki sposób programowo to rozwiązać ?
-
keruseykaryu
Post
autor: keruseykaryu » 31 sie 2013, 15:11
Jak już masz taki fajny wykres to możesz zauważyć, że dane są stabilne jak CLK jest w stanie niskim. Trzeba napisać prockę, która puści opadające zbocze CS razem z opadającym CLK. Potem poczeka trzy stany niskie CLK, potem przechwyci 8 stanów Dout w czasie gdy CLK będzie niskie. I na CS puści narastające zbocze. I cała zabawa od początku.
Można to nawet uprościć, bo te trzy puste cykle i tak są mało interesujące a bajt nie jest z gumy i tylko 8 bitów wejdzie. Wystarczy zrobić jeden ciągły przebieg i pobrać wszystko do bajtu bo te trzy zbędne bity i tak przy przesuwaniu w lewo sobie wyjdą.
I rzecz najważniejsza. Nie starczy ci jeden pin. Trza użyć trzech i nie zapędzaj licznika by sobie sam przebieg na OC1A tworzył. To ci nie przejdzie.
A teraz działacze do dział.
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 02 wrz 2013, 16:56
Dziękuje za odpowiedź. Po dłuższym zastanowieniu postaram się wykorzystac ADC atmegi (ponoć może mieć nawet 75kSps) wiec powinno wystarczyć. Jednak nadal zastanawiam się jak rozwiązuje się takie problemy. Przeciez ten układ (LTC1196) ma możliwość komunikacji 3 przewodowej (szeregowej) - czy algorytm musi być aż tak trudny ?
-
keruseykaryu
Post
autor: keruseykaryu » 03 wrz 2013, 11:36
adi19887 pisze:Jednak nadal zastanawiam się jak rozwiązuje się takie problemy. Przeciez ten układ (LTC1196) ma możliwość komunikacji 3 przewodowej (szeregowej) - czy algorytm musi być aż tak trudny ?
Jaki trudny! Jaki trudny? Jedna pętla i jedno wczytanie stanu i rolowanie bajtu to coś trudnego? Pięć linijek kodu.
-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 04 wrz 2013, 11:30
Dla mnie wydaje sie to trudne. W sumie ciekaw jestem jakby wyglądał ten kod. Mógłbyś przybliżyć swój zamysł za pomocą kodu ?
-
keruseykaryu
Post
autor: keruseykaryu » 04 wrz 2013, 16:55
adi19887 pisze:W sumie ciekaw jestem jakby wyglądał ten kod. Mógłbyś przybliżyć swój zamysł za pomocą kodu ?
Tędy mnie nie podejdziesz. Sorry.

-
adi19887
- -
- Posty: 52
- Rejestracja: 22 mar 2010, 23:48
- Lokalizacja: Poznań
Post
autor: adi19887 » 05 wrz 2013, 9:37
Wlasnie dzisiaj zauwazylem jak niefortunnie napisalem poprzedni post. Wybaczcie nie chodzilo mi o podsuniecie rozwiązania. Czytałem o rolowaniu bitów czy to to samo co rolowanie bajtu ?