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



Teraz jest 16 gru 2025, o 14:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 26 gru 2014, o 19:47 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Witam.
Próbowałem stworzyć prosty generator przebiegu prostokątnego o wypełnieniu 50% na AVR.
Taktowanie procesora to kwarc 8MHz. Fusebity ustawione sa poprawnie. CKOPT niezaprogramowany.
Kod procesora jest banalny:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jednak przy takim kodzie maksymalna częstotliwość jaką mogę wydusić to coś około 160kHz.
Dlaczego tak mało? Rozumiem, że nie uzyskam z tego 4MHz (8MHz/2), ale żeby zaledwie 160kHz?
Proszę o wytłumaczenie jak to działa (a raczej nie działa :) ).
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 19:48 
Offline
Użytkownik

Dołączył(a): 27 lis 2013
Posty: 25
Lokalizacja: Legionowo
Pomógł: 3

Zobacz jak wygląda kod w asemblerze, i może to będzie przyczyną.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 20:07 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Ja się niestety na Assemblerze nie znam.
Ale wyciągnąłem to co (chyba) jest w funkcji main().
Jeżeli mam rację to zajmuje to 8 cykli łącznie. Więc powinno być 8MHz / 16 = 500kHz.
Więc jeszcze coś nie tak.
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 20:20 
Offline
Użytkownik

Dołączył(a): 27 lis 2013
Posty: 25
Lokalizacja: Legionowo
Pomógł: 3

Jeśli dobrze liczę to twój program zawiera 6 lini asemblera. Dwie pierwsze linie to inicjalizacja portów, a twoja pętla zaczyna się od
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
do
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
co daje 4 lini asemblera ale to jest 8 taków zegara co teoretycznie powinno dać 1MHz ale nie wiem dlaczego jest inaczej, może P.Mirek będzie wiedział.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 20:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 gru 2013
Posty: 185
Pomógł: 6

Z tego co widzę to pętlę realizują linię 3-7. Rozkazy in,eor,out są 1-cyklowe natomiast rjmp 2 cyklowy co razem daje 5 cykli oraz fprzebiegu =8Mhz/(5*2)=800khz więc się troszkę dziwię temu 160 khz... :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 20:38 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Nie wiem, ale jak odpalę symulator to też wychodzi te 160kHz. Więc ewidentnie coś z programem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 20:41 
Offline
Użytkownik

Dołączył(a): 27 lis 2013
Posty: 25
Lokalizacja: Legionowo
Pomógł: 3

rajmund96 napisał(a):
Z tego co widzę to pętlę realizują linię 3-7. Rozkazy in,eor,out są 1-cyklowe natomiast rjmp 2 cyklowy co razem daje 5 cykli oraz fprzebiegu =8Mhz/(5*2)=800khz więc się troszkę dziwię temu 160 khz... :)

Dlaczego 1-cyklowe ?
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jest między komórka a komórką, pamiętam że w szkole uczono nas że jest 2 cyklowy ;p



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 20:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 gru 2013
Posty: 185
Pomógł: 6

http://cygnus.tele.pw.edu.pl/olek/doc/syko/syko-w3.pdf proszę :D



Ostatnio edytowano 27 gru 2014, o 15:32 przez rajmund96, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 582
Pomógł: 17

splawik00 napisał(a):
Jednak przy takim kodzie maksymalna częstotliwość jaką mogę wydusić to coś około 160kHz.

Jesteś pewny, że dobrze odczytujesz to z oscyloskopu?
Mógłbyś wkleić screen?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 21:47 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Pomiar wykonuję różnymi miernikami częstotliwości, każdy pokazuje to samo.
Co ciekawe dla Attiny13 i Attiny85 prędkości te wynoszą tak jak wspominałem około tych 120-160kHz. Natomiast Atmega8 przy tym samym kwarcu daje już prawie 1MHz, wiec tyle co teoretycznie wyliczyliśmy. To to by się zgadzało. Ale dlaczego na Attiny nie działa?
Z góry uprzedzę, że CKDIV8 w Attiny jest niezaprogramowany!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 22:15 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

CKDIV8 =niezaprogramowany-czyli ma 0 czy 1 ? najlepiej podaj jaka jest wartość Fuse Byte Low

p.s.
można także ustawiać w programie rejestr: CLKPR – Clock Prescale Register
ale trzeba poczytać jak ( są restrykcje).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 22:25 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Skoro niezaprogramowany, czyli wyłączony, to znaczy ustawiłem ten bit (CKDIV8 = 1).
Attiny85, EF 0xFF, HF 0xDF, LF 0xFF.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 15:43 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

CKDIV8 -niby OK,
proponuję w takim razie sprawdzić:
- wartości kondensatorów przy kwarcu,
- podmienić kwarc na inny
( ew. porównać częstotliwości na wyjściu "generatorka" po zmianie kwarcu na innego z inną częstotliwością , czy odpowiednio się zmieniła ).
Na koniec spróbuj napisać programik zmieniający co jakiś czas rejestr CLKPR – Clock Prescale Register ( ale co najwyżej tylko bity: CLKPS0 i CLKPS1- dzielnik od 1 do 8 )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 19:07 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Kondensatory są na pewno ok, tak podstawowych błędów nie popełniam :)
Tak czy inaczej 22pF.
Kwarc na pewno dobry. Podmiana z 8MHz na 16MHz skutkuje dwukrotnym podniesieniem częstotliwości na wyjściu, więc działa.
Próbowałem też z wewnętrznym oscylatorem i to samo. Nawet wyprowadziłem go na PB4 (CKOUT=0) i zmierzyłem. Jest 8MHz.
Co do rejestru CLKPR to nigdy go nie ruszałem. Jakby kolega mógł przybliżyć trochę ten temat to spróbuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 19:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Nie wiem jak jest w Medze (bo nie dałem rady tego znaleźć ani w googlu ani w datasheet'cie) ale w większych prockach (ARMopochodnych) oprócz częstotliwości pracy samego rdzenia procka podaje się również maksymalną częstotliwość pracy GPIO. Nie pamiętam dokładnie danych ale np dla XMOS , gdzie wewnętrzny timer tyka z F=100Mhz, porty mogą pracować z F=60Mhz. Myślę że związane jest to ze sposobem skonstruowania układu i jest coś takiego jak czas narastania czy opadania czy coś w ten deseń. Nie wiem, nie znam się , tak tylko mi do głowy przyszło.

BTW, niedawno robiłem test tego typu - while(1) PORTx ^= (1<<0); i maksymalna częstotliwość na pinie togglowanym wyniosła ok 2Mhz (dokładnie nie pamiętam) dla kwarców od 1Mhz wewnętrzny do 27Mhz zewnętrzny. (oczywiście przy niższych F ta wartość była sporo niższa niż 2Mhz).

EDIT: F była sprawdzana na oscylku analogowym oraz na Saleae DIY.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 20:04 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Tutaj jest filmik pokazujący mniej więcej to, o co mi chodzi:
http://www.insidegadgets.com/2011/05/16/change-attiny85-clock-speed-on-the-fly/

w kodzie b. ważna jest sekwencja zapisu do rejestrów:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


p.s.
oczywiście wtedy _delay_... źle chodzi.

p.s2.

spróbuj ustawić optymalizację kodu na "heavy optimalizations" -O3
jest b. dobry kod dla np.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 27 gru 2014, o 20:52 przez krish, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 20:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Proponuję sprawdzić jak działają:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

oraz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Bo o ile pamiętam to są różnice ;)

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 22:13 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Włączenie optymalizacji -O3 niestety nic nie zmienia.
Nie ma różnicy, czy najpierw wyzeruję pin, czy go ustawię.
Natomiast nie wiadomo, dlaczego nagle już mam na wyjściu 800kHz :shock:
Nie zmieniałem treści kodu.
Natomiast co ciekawego zauważyłem:
Przy kodzie
Cytuj:
PORTB ^= (1<<PB0);

uzyskuję 800kHz.
Natomiast przy kodzie
Cytuj:
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB0);

oraz
Cytuj:
PORTB &= ~(1<<PB0);
PORTB |= (1<<PB0);

prędkość nagle wynosi 1,3MHz !!!
Jakim cudem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 23:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Zaznaczam że to co napiszę to jest mój domysł

ATmega nie ma sprzętowego negowania pinu i pewnie
dla przełącznia typu "togle" musi najpierw odczytać stan pinu
a dopiero później zmienić na przeciwny odpowiednim rozkazem,

a w tym drugim przypadku Ty bezpośrednio podajesz to co ma
być na pinie wyjściowym



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2014, o 23:23 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

No nie wiem, może się mylę, ale wydaje mi się, że w obu przypadkach zarówno XOR jak i AND oraz OR, trzeba najpierw odczytać stan portu, wykonać operacje biotowe i zapisać nową wartość. Ale to również jest mój domysł i mogę się mylić. Co innego jak bym napisał:
Kod:
while(1){
   PORTB = 0;
   PORTB = 1;
}



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 00:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Dla pewności możesz podejrzeć plik asemblerowy i
wtedy wychwycić różnicę

ale to co kolega @krish pokazał

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest zamienione przez kompilator na:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to by znaczyło że przy tym sposobie (bez toglowania) nie są odczytywane
rejestry tylko kompilator ustawia pin w konkretny stan.
Niestety nie mogę sprawdzić jak jest skompilowany kod z toglowaniem
nie mam teraz dostępu do swojego kompa ,
wtedy można by to porównać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 00:25 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Kod z togglowaniem zamieściłem w jednym z powyższych postów i rzeczywiście jest różnica, bo tam jest odczytywany stan portu, wykonywany xor i zapisywany port.
Swoją drogą powyższy kod zajmuje 4 takty zegara. Przy kwarcu 8MHz daje to generowane 1MHz na wyjściu, a w praktyce jest 1,33MHz. To juz nie rozumiem, dopalacz jakiś? 8-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 10:23 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Proponuję jeszcze sprawdzić czy taki kod zadziała:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W nowszych mikrokontrolerach toggle można uzyskać wpisując 1 do rejestru PINx

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 11:29 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Wystarczy samo przypisanie bez sumy bitowej (oczywiście zakładając, że nie togluje się w ten sposób innych pinów):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 12:32 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

PINB |= (1<<PB0) nadal zajmuje tyle samo kodu co PORTB |= (1<<PB0).
Przypisywać bezpośrednio nie mogę, bo na nieszczęście kod ma jeszcze robić coś innego 8-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 12:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

A napisz program w czystym asm. Może tak będzie lepiej?

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 13:09 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

Jakbym umiał ASM to bym napisał :oops:
Natomiast mam jeszcze prośbę do tych co znają ASM.
Mam taki kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak widać dodałem NOPy, żeby zrównoważyć (w przypadku kiedy licznik != nastawa) prędkość na pinie.
Pytanie do Was ile NOPów powinienem wstawić, żeby zrównoważyć instrukcje w przypadku kiedy licznik jest równy nastawa?
Kod w ASM:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 15:34 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

splawik00 napisał(a):
PINB |= (1<<PB0) nadal zajmuje tyle samo kodu co PORTB |= (1<<PB0).

Ale PINB = (1<<PB0) na pewno zajmuje mniej.
splawik00 napisał(a):
Przypisywać bezpośrednio nie mogę, bo na nieszczęście kod ma jeszcze robić coś innego

Możesz. A właściwie musisz. I to jest właśnie piękne w tej metodzie ;-)

A tak na marginesie: maksymalną częstotliwość równą F_CPU/2 można uzyskać sprzętowo timerem.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 18:19 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 18
Pomógł: 0

xor napisał(a):
Ale PINB = (1<<PB0) na pewno zajmuje mniej.

Ale nadal generuje to 1,3MHz. Tyle samo jak dla:
PORTB |= (1<<PB0);
PORTB &= ~(1<<PB0);

xor napisał(a):
splawik00 napisał(a):
Przypisywać bezpośrednio nie mogę, bo na nieszczęście kod ma jeszcze robić coś innego

Możesz. A właściwie musisz. I to jest właśnie piękne w tej metodzie ;-)

Mógłbyś rozwinąć, bo nie za bardzo zrozumiałem :roll:

xor napisał(a):
A tak na marginesie: maksymalną częstotliwość równą F_CPU/2 można uzyskać sprzętowo timerem.

Niby jak? Mam wywoływać przerwanie z każdym taktem zegara? A co z pętlą main?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 21:00 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

xor napisał(a):
Wystarczy samo przypisanie bez sumy bitowej (oczywiście zakładając, że nie togluje się w ten sposób innych pinów):

Nie zgodzę się z kolegą. Przypisanie to inny rozkaz asemblera i wymaga wcześniejszego załadowania wartości do rejestru rx, a potem kolejna instrukcja kopiuje to do rejestru wejścia wyjścia. Przykłady:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

daje kod asemblera:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

sbi i cbi zajmują 2 takty, a rjmp 2 takty. Razem cała pętla while zajmuje 6 taktów. Z tym, że wypełnienie nie wynosi 50%. Okres 6 taktów. Częstotliwość 8 MHz / 6 = 1,(3) MHz.
Sytuacja z zamianą instrukcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Tak samo czasowo, ale stan wysoki teraz trwa 4 takty a niski 2. Okres 6 taktów. Częstotliwość 8 MHz / 6 = 1,(3) MHz.
Z użyciem EXOR:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

(ldi - 1 takt jednorazowo) in - 1 - takt, eor - 1 takt, out - 1 takt, rjmp - 2 takty. Razem 5. Przebieg ma wypełnienie 50%. Okres 10 taktów. Częstotliwość 8 MHz / 10 = 800 kHz.

Wpisanie 1 do rejestru PINx:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

sbi - 2 takty, rjmp - 2 takty. Razem 4 takty. Wypełnienie 50%. Okres 8 taktów. Częstotliwość 8 MHz / 6 = 1 MHz.

Propozycja kolegi xor:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

(ldi - 1 takt jednorazowo), out - 1 takt, rjmp - 2 takty. Razem 3. Wypełnienie 50%. Okres 6 taktów. Częstotliwość 8 MHz / 6 = 1,(3) MHz.

splawik00 napisał(a):
Niby jak? Mam wywoływać przerwanie z każdym taktem zegara? A co z pętlą main?

Tryb CTC, a wartość OCRx = 0. Przykład dla ATMEGI644PA, który umieszcza się przed pętlą główną programu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W razie potrzeby można wyłączyć:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Ostatnio edytowano 28 gru 2014, o 22:15 przez Krauser, łącznie edytowano 3 razy

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: 32 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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