RTV forum PL | NewsGroups PL

Jak zrealizować cykl zapisu bajtów i generowania impulsów na ATmega88 z kwarcem 20MHz?

czas wykonywania operacji - avr

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zrealizować cykl zapisu bajtów i generowania impulsów na ATmega88 z kwarcem 20MHz?

nuclear
Guest

Sun Mar 04, 2007 7:41 pm   



Witam
tak sie zastanaiwam, jak zrobić układ, który wykonywałby nastepujacy ciąg
poleceń:
-zapisz bajt (8bit) z jakiegoś portu do pamięci (w sumie bedzie 256, lub 512
bajtów)
-wygeneruj impuls na jakiejs nóżce
i ma to być wykonywane ze scisle okresloną czestotliwoscią (max 5MHz) lub
inną wynikajacą z podziału tejże.

zastanawiam sie czy wystarczy do tego celu uzyć procka atmega88, na kwarcu
20mhz? bo aż się boję....ewentualnie jaką max czestotliwość moge osiagnąć na
tym kwarcu?

ThomasN
Guest

Sun Mar 04, 2007 8:03 pm   



"nuclear" <nuclear2001@poczta.onet.pl> wrote in message
news:esf3un$ms7$1@news.onet.pl...
Quote:
Witam
tak sie zastanaiwam, jak zrobić układ, który wykonywałby nastepujacy ciąg
poleceń:
-zapisz bajt (8bit) z jakiegoś portu do pamięci (w sumie bedzie 256, lub
512 bajtów)
-wygeneruj impuls na jakiejs nóżce
i ma to być wykonywane ze scisle okresloną czestotliwoscią (max 5MHz) lub
inną wynikajacą z podziału tejże.

zastanawiam sie czy wystarczy do tego celu uzyć procka atmega88, na kwarcu
20mhz? bo aż się boję....ewentualnie jaką max czestotliwość moge osiagnąć
na tym kwarcu?

Na końcu datasheeta w sekcji Instruction set summary masz wypisane ile cykli
zegara trwa wykonanie każdej instrukcji. Rozpatrz przykład:

ldi R17, 0

Loop:
out PORTA, R17 - 1 cykl
com R17 - 1 cykl
rjmp Loop - 2 cykle

Łącznie 4 cykle. Przy kwarcu 20MHz generowany przebieg będzie miał
częstotliwość 2,5MHz. A tu masz jedynie generowanie przebiegu na wszystkich
pinach portu A. Na Atmega tego raczej nie zrobisz.

pozdrawiam
tn

PAndy
Guest

Sun Mar 04, 2007 10:23 pm   



"ThomasN" <jakis.adres@serwer.jakis.pl> wrote in message
news:esf55r$gr6$1@inews.gazeta.pl...

Quote:
Na końcu datasheeta w sekcji Instruction set summary masz wypisane ile
cykli zegara trwa wykonanie każdej instrukcji. Rozpatrz przykład:

ldi R17, 0

Loop:
out PORTA, R17 - 1 cykl
com R17 - 1 cykl
rjmp Loop - 2 cykle

Łącznie 4 cykle. Przy kwarcu 20MHz generowany przebieg będzie miał
częstotliwość 2,5MHz. A tu masz jedynie generowanie przebiegu na
wszystkich pinach portu A. Na Atmega tego raczej nie zrobisz.

wywal loop'a i scykluj 1:1 - 256 lub 512 par pod rzad i bedzie juz 2
cykle + 2 na jmp ale raz na 256 lub 512 par instrukcji

nuclear
Guest

Sun Mar 04, 2007 10:58 pm   



Quote:

wywal loop'a i scykluj 1:1 - 256 lub 512 par pod rzad i bedzie juz 2 cykle
+ 2 na jmp ale raz na 256 lub 512 par instrukcji
racja - loop nie jest potrzebny, bo to ma być jednostkowy odczyt , tzn po

odcszytaniu tej seri danych bedzie przerwa na przetworzenie tych danych...
czyli na razie mam 2 cykle na wygenerowanie impulsu, no i zostają 2 cykle na
zczytanie i zapisanie bajtu - da się? czy w prockach avr jest cos takiego
jak stos?

ThomasN
Guest

Sun Mar 04, 2007 11:36 pm   



Quote:
wywal loop'a i scykluj 1:1 - 256 lub 512 par pod rzad i bedzie juz 2
cykle + 2 na jmp ale raz na 256 lub 512 par instrukcji
racja - loop nie jest potrzebny, bo to ma być jednostkowy odczyt , tzn po
odcszytaniu tej seri danych bedzie przerwa na przetworzenie tych danych...
czyli na razie mam 2 cykle na wygenerowanie impulsu, no i zostają 2 cykle
na zczytanie i zapisanie bajtu - da się? czy w prockach avr jest cos
takiego jak stos?

Z opisu w pierwszym poście zrozumiałem, że zczytanie 512 bajtów zakończone
jest zmianą stanu na jakiejś nóżce.
Mój prosty przykład miał pokazać, że samo generowanie fali prostokątnej
zajmuje zbyt wiele czasu, żeby osiągnąć 5MHz. Jeżeli zamiast pętli dać serie
instrukcji out, com to będzie te 5MHz, ale nic więcej.
Tobie jednak chodzi o to, żeby zmieniać stan wyjścia po zczytaniu każdego
bajta. Kolejny prosty przykład:

In R17, PINA - 1 cykl
push R17 - 2 cykle
com R18 1 - cykl
out PORTB, R18 - 1 cykl
.....


5 cykli. Potrzebowałbyś kwarcu 25MHz. Atmega pewnie by poszedł - nie
testowałem. atmega8 ma 1kB stosu - może się udać.


pozdrawiam
tn

Grzegorz Kurczyk
Guest

Mon Mar 05, 2007 6:05 am   



Użytkownik ThomasN napisał:
Quote:
instrukcji out, com to będzie te 5MHz, ale nic więcej.
Tobie jednak chodzi o to, żeby zmieniać stan wyjścia po zczytaniu każdego
bajta. Kolejny prosty przykład:

In R17, PINA - 1 cykl
push R17 - 2 cykle
com R18 1 - cykl
out PORTB, R18 - 1 cykl
....

Oj tym stosem to tak trochę nieelegacko Wink Od czego mamy rejestry

indeksowe... i odpowiednio preparując dane początkowe można to troszkę
przyśpieszyć;

; ładujemy adres bufora
ldi r30, ADDRL
ldi r31, ADDRH
; przygotowanie danych dla out-ów
ldi r16, 255
ldi r17, 0
; i lecimy Wink
in r0, PINA ; 1 clk
st Z+, r0 ; 2 clk
out r16 ; 1 clk
in r0, PINA
st Z+, r0
out r17
in r0, PINA
st Z+, r0
out r16
in r0, PINA
st Z+, r0
out r17
..
..
..

a taką sekwencją;
ldi r16, 255
ldi r17, 0
out r16
out r17
out r16
out r17
..
..

wyciskamy 10MHz z ATmegi88@20MHz, tyle, że chyba lepiej zrobić to jakimś
timerem ;-)

Pozdrawiam
Grzegorz

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zrealizować cykl zapisu bajtów i generowania impulsów na ATmega88 z kwarcem 20MHz?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map