At90s2313 i attiny2313 problemy z opóźnieniami

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!
Lukgwo
-
Posty: 9
Rejestracja: 11 paź 2005, 14:31

At90s2313 i attiny2313 problemy z opóźnieniami

Post autor: Lukgwo » 18 lut 2006, 21:01

Witam przerzuciłem się właśnie na attiny2313 i kurcze nie działają opóźnienia z najnowszego bascoma

tz na starym procku 2313 działały poprawnie
a na tym tiny strasznie sie wydłużają

np waitms 250 potrafi trwać 2 sekundy

czy ktoś wie co jest nie tak???????????/

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 18 lut 2006, 21:18

a czy czasem procesor nie jest skonfigurowany do pracy z wewnętrznym oscylatorem a nie zewnętrznym kwarcem?
domyślnie tiny2313 ma ustawiony wewnetrzny osc. 8MHz (CKSEL = 0100) i jego podział przez 8,
szczegóły w pdf do kostki, "System Clock and Clock Options"

Lukgwo
-
Posty: 9
Rejestracja: 11 paź 2005, 14:31

no i coś zmieniłem

Post autor: Lukgwo » 18 lut 2006, 23:53

no coś tam próbowałem zmienić w lock fuse bits i ...

musze iść po nowy procek 5 zeta w plecy
pisze że nie umie zidentyfikować chipu
myśle że coś nichcący przy tym oscylatorze pogrzebałem

a pozatym co za różnica że np procesor działa na wewnętrznym oscylatorze, przecież 250ms to powinno być 250 ms (mam podpięty zewnętrzny 8MHz)

jesli ktos to mi wytłumaczy to dzięki z góry....
( :D jestem hobbysta nie elektronik ale pare układów mi sie udało zrobić na AVR 90s2313 a teraz mam zastój bo ostani mi wyszedł a attiny mnie nie kochają :D )

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Re: no i coś zmieniłem

Post autor: gaweł » 19 lut 2006, 0:29

Lukgwo pisze:no coś tam próbowałem zmienić w lock fuse bits i ...
musze iść po nowy procek 5 zeta w plecy
pisze że nie umie zidentyfikować chipu
myśle że coś nichcący przy tym oscylatorze pogrzebałem
Jeżeli "zepsułeś" procka przez grzebabie w opcjach zegara, to ten przpadek daje się naprawiać, jeżeli zrobiłeś inne prockowi kuku, to ... nie wiemy co zrobiłeś ?
Lukgwo pisze:( :D jestem hobbysta nie elektronik ale pare układów mi sie udało zrobić na AVR 90s2313 a teraz mam zastój bo ostani mi wyszedł a attiny mnie nie kochają :D )
Pokochają, spoko, tylko trzeba trochę procki dopieścić, to jak z kobietą :D

spark
Użytkownik
Posty: 412
Rejestracja: 25 lis 2004, 15:50
Lokalizacja: Wrocław

Post autor: spark » 19 lut 2006, 10:24

gaweł pisze:Pokochają, spoko, tylko trzeba trochę procki dopieścić, to jak z kobietą :D
Hmm...
To ja chyba nie mam powodzenia u kobiet w takim razie :P

Lukgwo
-
Posty: 9
Rejestracja: 11 paź 2005, 14:31

no tak to nie jest rozmowa o dziewczynach

Post autor: Lukgwo » 19 lut 2006, 15:01

Wiecie co piszcie na temat : szczególnie ten od dziewczynek

pytałem jaką różnicę procesorowi sprawia wewnętrzny oscylator że robi aż takie opóźnienie
w sumie 250ms * 8 to jest koło :D 2 sekund czyli może tylko ten dzielnik wyżucić z fuse bits?? ale czy to ma znaczenie

jeśli ktoś juz majstrował na tych attiny2313 to prosiłbym o jakąś odpowiedź bo jednak chciałbym mimo wszystko go ustawić na ten kwarc zewnętrzny 8MHz

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Re: no i coś zmieniłem

Post autor: Koppel » 19 lut 2006, 15:04

Lukgwo pisze:a pozatym co za różnica że np procesor działa na wewnętrznym oscylatorze, przecież 250ms to powinno być 250 ms (mam podpięty zewnętrzny 8MHz)
Proponuję zerknąć do instrukcji BASCOM. Powinna to być podstawowa "podpora" przy problemach z instrukcjami. Więc "WAITMS 250ms" to nie jest 250ms. "WAITMS 250ms" to jest 250ms przy oscylatorze 4MHz (zgodnie ze starą dokumentacją BASCOMA. Nie wiem czy coś się nie zmieniło). Dokładniej rzecz ujmując jest to 1'000'000 cykli zegara procesora. I jest jeszcze jedna pułapka na którą trzeba uważać. Opóźnienie realizowane jest tam gdzie zostało wywołane (ponieważ zwykle wywoływane jest w pętli głównej a nie w przerwaniach, tam też będzie naliczane). Zdarzyło mi się jednak tworzyć projekt gdzie obsługa przerwań zabierała ponad 50% czasu procesora. Każde przerwanie w czasie naliczania czasu opóźnienia generowanego za pomocą instrukcji WAIT albo WAITMS powoduje wydłużenie czasu oczekiwania (konkretniej - czas wykonywania przerwania nie jest wliczany). Jak więc widzisz... sprawa nie jest taka prosta jak Ci się wydaje a BASCOM wcale nie załatwia wszystkiego za programistę :P

Lukgwo
-
Posty: 9
Rejestracja: 11 paź 2005, 14:31

Post autor: Lukgwo » 19 lut 2006, 18:45

wiesz może to i racja z tym 4Mhz
ale to nie ma raczej tutaj znaczenia bo opóźnienie powstaje tylko na procku attiny2313
ten sam program ładowany do 90s2313 działa poprawnie, chodzi mi oto jak sie tego problemu pozbyć

apropo przerwań to nie używam ich w tym programie a przynajmniej tak mi sie zdaje
nic takiego jak enable interupts nie wpisywałem
w każdym razie dzięki

ZbeeGin

Post autor: ZbeeGin » 28 lut 2006, 19:53

Koppel pisze:"WAITMS 250ms" to jest 250ms przy oscylatorze 4MHz (zgodnie ze starą dokumentacją BASCOMA. Nie wiem czy coś się nie zmieniło).
WAITMS to nie jest sztywna procedura - jej rozwinięcie (w zasadzie wzorzec!) jest zaszyte w bibliotece DLL kompilatora. Warotści pętli w tej procedurze są obliczane podczas kompilacji na podstawie częstotliwości kwarcu. Dlatego decydujące znaczenie ma tutaj podanie wprost tej częstotliwości w opcjach kompilatora, albo najlepiej w dyrektywie $CRYSTAL. Nie są to oczywiście obliczenia dokładne, ale w większości przypadków róźnica nie jest wielka. Nadal jednak do obliczania dokładnych odcinków czasu instrukcji Wait, WaitMS nie powinno się stosować.

mariachi
-
Posty: 27
Rejestracja: 15 mar 2006, 16:43

Post autor: mariachi » 10 sie 2006, 18:26

... mam ten sam problem z nieprawidłowym odliczaniem czasu :cry:

Podam prosty przykładzik:

Program:

______________________________

Config Portd=&B1111111
Portd=&B1111111
Config Portb=&B11111111
Portb=&B11111111

Waitms 24000

Portb=&B00010000

Waitms 2000

Portb=&B00000000

End

______________________________

W programatorze ustawiłem tak:

Procesor ATTiny2313
FusebitC: Divide clock by 8 DISABLE
FusebitB: Output clock on CKOUT pin ENABLE
FusebitKL: NO DELAY
Fusebit A987: External XTAL

Niestety ciągle coś jest źle bo te 24 sekundy które procesor ma odliczyć na początku ciągną się znacznie dłużej...

Czy ktoś może mi podpowiedzieć co jeszcze trzeba ustawić aby 24 sekundy w tym programiku były 24 sekundami :mad: ?

Czy zewnętrzny kwarc musi mieć ściśle określoną wartość i to jest przyczyna ? przy AT90S2313 nie musiał....

Dzięki za pomoc :idea:

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 10 sie 2006, 18:39

Dodaj na samym początku dyrektywę:

$crystal = ........... - w miejsce kropek wpisz wartość jaka jest na oscylatorze...

Inna sprawa, że polecenie wait do precyzyjnych nie należy...

ZbeeGin

Post autor: ZbeeGin » 10 sie 2006, 19:31

Fusebit B nie trzeba było zmieniać...

mariachi
-
Posty: 27
Rejestracja: 15 mar 2006, 16:43

Post autor: mariachi » 10 sie 2006, 19:40

marcing pisze:Dodaj na samym początku dyrektywę:

$crystal = ........... - w miejsce kropek wpisz wartość jaka jest na oscylatorze.....
Dodałem na samym początku programu

$crystal = 4

i przy Syntax Check pojawia się błąd:

"BAUD rate not possible [-1]" i wskazuje na linijke z komendą "end"

co jest nie tak ?

ZbeeGin

Post autor: ZbeeGin » 10 sie 2006, 20:10

mariachi pisze:Dodałem na samym początku programu

$crystal = 4
:!: A gdzie 6 zer? Przecież tam wartość się podaje w Hz nie w MHz...

Kod: Zaznacz cały

$crystal = 4000000

mariachi
-
Posty: 27
Rejestracja: 15 mar 2006, 16:43

Post autor: mariachi » 10 sie 2006, 21:03

ZbeeGin pisze:A gdzie 6 zer? Przecież tam wartość się podaje w Hz nie w MHz...
Faktycznie zapomniałem :oops: ... ale i tak nie działa - 24 sekundy trwają około 3-4 razy dłużej :sad:

Nie wiem co jest nie tak - czy ta opcja

:arrow: Fusebit A987: External XTAL

jest dobrze wybrana w programatorze ?

ODPOWIEDZ