Strona 3 z 5
: sobota 15 lut 2014, 13:58
autor: Pyra
Witam
Ada20 pisze:
Natomiast wyjście PB2 i PB5 nie działa u mnie prawidłowo,na jednej połowie jest napięcie na drugiej nie ma ,ciekawe czy u Ciebie też tak jest.
I to jest prawidłowe zachowanie. Zerknij jeszcze raz na rysunek z pinologią, ATtiny13.
Pin PB5, ma kilka funkcji, jednak domyślną jest RESET, który umożliwia programowanie. Można zmienić funkcję tego pinu, na zwykły port, ale wtedy utracisz możliwość programowania klasycznymi programatorami.
Pozdrawiam
: sobota 15 lut 2014, 14:57
autor: Ada20
Witam
Na jaką częstotliwość najlepiej ustawić Atmega 8A,do zmiany polaryzacji co 2 minuty,na 1 MHz ?.
Pozdrawiam
: sobota 15 lut 2014, 15:01
autor: ElSor
Nie ma to większego znaczenia. Lepszy mniejszy, bo mniejsze zużycie prądu
: sobota 15 lut 2014, 15:12
autor: Ada20
Witam !
Zależy mi na dużej dokładności Duty Cycle 50 %,(mniej jak 1 %) , i czasu zmiany polaryzacji ( 2 minuty),czestotliwości,jak to osiągnąć na Atmega 8A, lub innym mikrokontrolerze, czy czym kolwiek,a może lepszy jest od mikrokontrolerów jest scalak z kwarcem zegarkowym.
Pozdrawiam
: sobota 15 lut 2014, 15:53
autor: ElSor
Dokładność zawsze można zwiększyć "zasilając" AtMega8A zewnętrznym oscylatorem kwarcowym. 50% wypełnienia będzie nawet przy rozjechanym generatorze wewnętrznym a dokładność częstotliwości przebiegu zawsze można podregulować zmianą delaya, lub używając przerwań do generowania przebiegów.
: sobota 15 lut 2014, 19:34
autor: Ada20
Witam
Co się stanie jak w Atmel Studio 6.1 zaprogramuję częstotliwość Attiny 13A,na 0.12 MHz ,10 razy mniejszą jak fabryczna ,czy będzie działać,zrobiłam tak i nie ma napięcia i nie działa,czy ma prawo działać , czy nie ?
Pozdrawiam
: sobota 15 lut 2014, 19:53
autor: Pyra
Witam
Ada20 pisze:Co się stanie jak w Atmel Studio 6.1 zaprogramuję częstotliwość Attiny 13a,na 0.12 MHz ,10 razy mniejszą jak fabryczna ...
W sumie to Ty nic tym nie programujesz, częstotliwość pracy w procesorze zmienia się przez wgranie fusebitów (proponuję na razie ich jednak nie ruszać). Ustawienie parametru w Atmel Studio, powoduje, że podczas kompilacji stosowane są odpowiednie przeliczniki, dla zachowania czasów. W tym przypadku, czasy powinny być 10x krótsze, ale program powinien działać na procesorze, z tym że 10 x szybciej.
Pozdrawiam
: sobota 15 lut 2014, 20:44
autor: Ada20
Witam
Przedtem mi nie pokazywało na mierniku napięcia, widocznie częstotliwość była za duża, albo nie stykło i nie było przewodzenia.
Teraz dałam 60 sekund i 0.12 MHz ,na mierniku był czas 6 sekund ,czyli tak jak napisałeś.
Co do zmiany polaryzacji co 2 minuty jakie będzie najodpowiedniejsze taktowanie procesora ?, do mojego programatora można włożyć kwarc i chyba nim zaprogramować mikroprocesor.
Mam coś jak kwarc o częstotliwości 1 Hz i 10 Hz,czy nim dobrze by było zaprogramować Attiny 13 A, na 1 Hz lub 10 Hz ?
Pozdrawiam
: sobota 15 lut 2014, 22:44
autor: Pyra
Witam
Ada20 pisze:Mam coś jak kwarc o częstotliwości 1 Hz i 10 Hz,
Hmmm, w swoim życiu nie spotkałem takich, ale jeszcze nie wszystko widziałem
Ada20 pisze:czy nim dobrze by było zaprogramować Attiny 13 A, na 1 Hz lub 10 Hz?
To nie takie proste...
Ściągnij sobie datasheet ATtiny13a, tam na stronie 23 masz rozdział "
6. System Clock and Clock Options" dalej na stronie 25, masz podane dwie częstotliwości podstawowe wewnętrznego zegara, 9,6 i 4,8MHz. Jeśli ustawisz 4,8MHz oraz "Divide by 8 ON" masz do dyspozycji taktowanie 600kHz, czyli 0,6MHz; Kolejną opcją jest 128kHz. Ale jeśli nie ma to być aplikacja wymagająca bardzo małego poboru prądu, to nie widzę za bardzo sensu zmiany zegara.
Muszę Cię rozczarować, ale do ATtiny, nie podłączysz kwarca, jedyna możliwość taktowania inną częstotliwością to zewnętrzny zegar.
Przy domyślnej częstotliwości zegara 1,2MHz, nie ma najmniejszego problemu uzyskać opóźnienia liczone w .... latach.
Przy
_delay_ms(1000);
i licznikach
unsigned int short licznik1;
możesz uzyskać max opóźnienie 255s, czyli 4 minuty z rozdzielczością 1s.
Jeśli np. zmienisz
_delay_ms(10);
a liczniki zadeklarujesz jako:
unsigned int licznik1;
możesz uzyskać opóźnienie 655s (ponad 10 minut) z rozdzielczością 0,01s. Czego można chcieć więcej
Nawet jeśli potrzebujesz sterować tylko jednym procesem, to możesz zastosować podaną wcześniej sztuczkę z licznikami, lub np.:
while(1)
{
unsigned int a = 0;
......
for (a=0; a < X; a++)
{
_delay_ms(1000);
}
......
}
Gdzie X, oznacza liczbę określającą opóźnienie w sekundach (w tym konkretnym wypadku). Maksymalne opóźnienie może tu wynieść 65535s, czyli 1092 minuty, co daje ponad 18 godzin.
W miejscach kropek, możesz wstawić potrzebne instrukcje.
Pozdrawiam
: sobota 15 lut 2014, 22:58
autor: Ada20
Witam
Opóżnienia jakich potrzebuję to 1-2 minuty, max 10 minut , chodzi mi o dokładność duty cycle 50 %, i dokładność,stabilnośc innych parametrów wychodzących Myślę,że im wolniejszy procesor tym lepiej sobie z tym poradzi i się nie będzie tak męczył i będzie bardziej stabilnie. .Jeśli Attiny 13A ,nie można potraktować kwarcem,to przeżucę się na Attiny 2313 lub Atmega 8A ,czy inny dogodny do tego mikrokontroler.
Pozdrawiam
: niedziela 16 lut 2014, 10:36
autor: Pyra
Witam
Co do symetrii wypełnienia impulsów, to nie masz się o co martwić, bo będzie prawie idealna, gdyż korzysta z tego samego źródła wyzwalania. Wszystkie przebiegi pętli, mają dokładnie tą samą długość, gdyż wykonywane są te same rozkazy.
Stosowanie bardzo niskich częstotliwości taktowania, według mnie nie ma najmniejszego sensu, bo nie wnosi żadnych korzyści do układu a wręcz same wady. Zauważ, że oprócz samego odmierzania czasu, potrzebne jest jeszcze wykonywanie rozkazów dotyczących zmiany stanu pinów. Przy zbyt wolnym zegarze, czasy te będą relatywnie dłuższe i nie da się ich skompensować.
Stosując wyższe częstotliwości taktowania, zyskujesz możliwość kompensacji czasu potrzebnego na wykonanie rozkazów zmieniających stany pinów itp.
Przykład:
.....
_delay_ms(999);
_delay_us(874);
....
załóżmy, że czas wykonania wszystkich rozkazów w pętli, (z wyjątkiem opóźnień) wynosi 126µs, tak więc najpierw odliczasz 999ms a potem dodajesz ostatnią milisekundę, pomniejszoną o czas potrzebny na wykonanie pozostałych rozkazów, czyli 1000µs - 126µs = 874µs. Przy zegarze 1MHz, 1 takt zegara to 1µs.
Jak obliczyć zwłokę? Możesz np. wykonać całą pętlę 10000 razy i zmierzyć czas jej trwania, oczywiście z wyłączeniem opóźnienia _delay_ms. Choćby tak:
Kod: Zaznacz cały
#include <avr/io.h>
#include <util/delay.h>
int main (void)
{
unsigned int a=0;
DDRB = (1<<PB1)|(1<<PB3);
PORTB|=(1<<PB1);
for (a=0; a<10000; a++)
{
PORTB ^= (1<<PB3);
//_delay_ms(60000);
}
PORTB&= ~(1<<PB1);
}
W tym przypadku czasem istnienia stanu 1 na porcie PB1, mierzysz czas wykonania pętli for oraz rozkazów zmieniających stan portu PB3. Oczywiście to tylko przykład, w Twoim przypadku, musisz w pętli umieścić stosowane przez Ciebie instrukcje.
Ogólnie jednak, im szybszy zegar, tym czas na wykonanie rozkazów krótszy, a co za tym idzie ich wpływ na odliczanie czasu jest mniejszy.
Jeśli chodzi o stabilizację kwarcem, to zarówno ATmega8 (i pochodne) jak i ATtiny2313 (i pochodne, np. ATtint26) będą odpowiednie.
Pozdrawiam
: niedziela 16 lut 2014, 11:24
autor: ElSor
A ja się zapytam jaka ma być dokładność odmierzania czasu? Ile max błędu (np ile % lub ile s podczas odmierzania minuty)? Może zamiast kombinować warto będzie skorzystać z funkcji timera2 i podpiąć do niego rezonator zegarkowy i tym sposobem odmierzać czas z dokładnością 20-30ppm. Koszt ok złotówki i bezcenny czas spędzony przed komputerem
Oczywiście w przypadku potrzeby dokładności rzędu 1sek na 10 minut można skorzystać z powyższej metody, szczegółowo opisanej przez Pyrę lub w podobny sposób dobrać wartość rejestru
OSCCAL – Oscillator Calibration Register. Służy on właśnie do dokładnego ustawienia częstotliwości wewnętrznego generatora.
Oczywiście wszelkie dokładne informacje są w nocie danego procesora Atmela. Osobiście uważam, że gdyby do każdego procesora były dodawane takie noty, to życie byłoby znacznie prostsze.
: niedziela 16 lut 2014, 12:39
autor: Ada20
Witam
Dokładność taka jaką się da ,nie ustalam norm,na początek 3-4 ppm na 1 rok.
Myślałam podpiąć pod Atmegę 8A,RTC,DS3232 .
Zauważyłam,że im mniejsza częstotliwość ,(dałam: F_CPU 12UL ), to na mierniku napięcie nie ,skacze,nie pływa,a to by mogło znaczyć ,ze pozostałe parametry ,nie skaczą, ,są stabilniejsze.
Pozdrawiam
: niedziela 16 lut 2014, 12:53
autor: Pyra
Ada20 pisze:Witam
Dokładność taka jaką się da ,nie ustalam norm,na początek 3-4 ppm na 1 rok.
Myślałam podpiąć pod Atmegę 8A,RTC,DS3232 .
Nie popadajmy w paranoję... do czego ma ten układ służyć?
W ostateczności można użyć kalibrowanego zegara taktującego timer i wykorzystać przerwania, jak wspomniał ElSor
Ada20 pisze:Zauważyłam,że im mniejsza częstotliwość ,(dałam, F_CPU 12UL ), to na mierniku napięcie nie ,skacze,nie pływa,a to by mogło znaczyć ,ze pozostałe parametry ,nie skaczą, ,są stabilniejsze.
Ja wygląda schemat układu, a najlepiej układ realny, bo coś mi się wydaje, że to są błędy projektu (filtrowanie zasilania, prowadzenie masy...), a nie wpływ częstotliwości taktowania
Pozdrawiam
: niedziela 16 lut 2014, 13:00
autor: Ada20
Witam
Czy to ma czemuś służyć ? na pewno tak,jest to też sztuka dla sztuki,inaczej po co były by zegary atomowe, DCF ,bieg na na 100 metrów im kto krócej,itd.itp.
Pozdrawiam