Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

ile czasu to powinno trwać?

Awatar użytkownika
Aleksander Zawada
Moderator
Moderator
Posty:532
Rejestracja:21 lut 2003, o 12:10
Lokalizacja:Warszawa
Kontaktowanie:
ile czasu to powinno trwać?

Postautor: Aleksander Zawada » 24 lip 2005, o 23:09

Jestem ciekaw ile według Was powinna trwać jedna pętla takiego programu? I co zrobić by wystawianie tych cholernych liczb na port trwało krócej :D

$regfile = "m8def.dat"
$crystal = 16000000
Config Pind.0 = Output
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output

Dim A As Byte
Dim K As Integer

Do
For K = 1 To 60
A = Lookup(k , Tab)
Portd = A
Next K
Loop

End

Tab:
Data 63 , 70 , 76 , 82 , 89 , 94 , 100 , 105 , 110 , 114 , 118 , 121 , 123 , 125 , 126 , 126 , 126 , 125 , 123 , 121 , 118 , 114 , 110 , 105 , 100 , 95 , 89 ,
Data 83 , 76 , 70 , 63 , 57 , 50 , 44 , 37 , 32 , 26 , 21 , 16 , 12 , 9 , 6 , 3 , 1 , 0 , 0 , 0 , 1 , 3 , 5 , 8 , 12 , 16 , 21 , 26 , 31 , 37 , 43 , 50 , 56 , 62

Awatar użytkownika
Press
-
-
Posty:389
Rejestracja:10 mar 2004, o 16:21
Lokalizacja:Wrocław
Kontaktowanie:

Postautor: Press » 25 lip 2005, o 02:33

Według symulatora wykonani całej pętli DO - LOOP zajmuje 4222 cykli zgarowych, to jest 0,263875 sekundy.
A jak to skrócić...? - to juz pytanie na "Ele...-coś tam" ;) oni tam kochają bascoma i umieją skracać programy z niego jednym magicznym słowem "asembler" ;)

czarutek

Postautor: czarutek » 25 lip 2005, o 06:30

Nie żebym kochał Elecośtam, ale tempo skróciłbym do minimum właśnie assemblerem, nie skacząc po tablicy we FLASH, tylko całą funkcję wpisując do FLASH programu. Jeśli to jest ATmega8, to dodatkowo pójdzie na 20MHz i zrobiłbym z grubsza tak:

.include "m8def.inc"
LDI r16,255
OUT DDRD,r16
Loop:
LDI r16,63
OUT PORTD,r16
LDI r16,70
OUT PORTD,r16
LDI r16,76
OUT PORTD,r16
...
LDI r16,50
OUT PORTD,r16
LDI r16,56
OUT PORTD,r16
LDI r16,62
OUT PORTD,r16
RJMP Loop

Tak jest chyba najszybciej, bo LDI trwa 1 cykl, a zaadresowanie FLASH 2 cykle.
Widzę tylko, że k ma się zmieniać 1..60, a w tablicy doliczyłem się 61 wartości, ale nie znam Bascoma, może w ogóle o co innego Ci Aleksander chodzi...

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 25 lip 2005, o 08:33

Niestety, prawda jest taka, że jeśli pierwsze skrzypce ogdrywa prędkość, to Bascom niestety wymięka :D Asembler to jedyne rozwiązanie. Sposób zaproponowany przez Czarutka jest najszybszy, chociaż zajmuje 4 razy więcej pamięci programu. Jesli starczy miejsca to można to tak rozwiązać (tylko modyfikacja danych na wypadek jakiejś zmiany w programie bedzie trochę niewygodna).

Awatar użytkownika
Aleksander Zawada
Moderator
Moderator
Posty:532
Rejestracja:21 lut 2003, o 12:10
Lokalizacja:Warszawa
Kontaktowanie:

Postautor: Aleksander Zawada » 25 lip 2005, o 10:18

"Według symulatora wykonani całej pętli DO - LOOP zajmuje 4222 cykli zgarowych, to jest 0,263875 sekundy" - chyba milisekundy? (1/16000000)*4222 :wink:
No ale tak czy siak potwierdził się mój czarny scenariusz. Zostaje więc asm...
Dziekuję za odpowiedzi :D

Awatar użytkownika
Press
-
-
Posty:389
Rejestracja:10 mar 2004, o 16:21
Lokalizacja:Wrocław
Kontaktowanie:

Postautor: Press » 25 lip 2005, o 14:20

tamsie czepiacie ;) sekunda, czy milisekunda, przecież to nie taka wielka różnica, tylko trzy zera ;P

Czajnik
-
-
Posty:264
Rejestracja:17 cze 2004, o 15:40
Lokalizacja:Kraków
Kontaktowanie:

Postautor: Czajnik » 29 lip 2005, o 20:28

Ja tez jestem za asemblerem ale jesli szukasz rozwiązania omiajającego asm to wez jakis nowy procek atmela ktory wyrabia 20 MHz i zasil go 5,5 albo nawet 6V i wpakuj 25 ...30MHz działa sprawdziłem na tiny 2313 choc czasami sie wiesza i grzeje sie troche :P w kazdym badz razie moze ci rozwiazac problem... choc to niepewne rozwiazaniei moze wykluczyc jesli to nie amatorska konstrukcja tylko powazne urzadzenie.. a jesli chodzi o bascoma to napisz program tak jak czarutek wyzej napisał w asmie... nie w pętli tylko linijka po linijce...

portb = ...
portb = ...

itd.
opiszesz sie wiecej w kodzie ale hex bedzie krótszy .. kto wie czy nawet nie to samo wyjdzie jak w asmie bo to bardzo prosta operacja i moze byc tak samo tłumaczona...
co do innych zeczy typu symulator i jego iles tam lini do przerobienia to jeszcze wazne jest czy zalezy ci na predkosci całego programu czy tylko na wystawianiu tych danych na linie... bo bascom ma dziwną "zaletę" ;) dodawania na poczatku programu kupy niepotrzebnych zeczy....

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 16 gości