Zmiana polaryzacji na wyjściu, na Atmega 8A

....nie pasujące gdzie indziej...
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post autor: Ada20 »

Witam
Na jaką częstotliwość najlepiej ustawić Atmega 8A,do zmiany polaryzacji co 2 minuty,na 1 MHz ?.
Pozdrawiam
Awatar użytkownika
ElSor
Site Admin
Posty: 5040
Rejestracja: niedziela 13 wrz 2009, 12:52
Lokalizacja: Ozimek

Post autor: ElSor »

Nie ma to większego znaczenia. Lepszy mniejszy, bo mniejsze zużycie prądu ;)
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post 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
Ostatnio zmieniony sobota 15 lut 2014, 17:57 przez Ada20, łącznie zmieniany 6 razy.
Awatar użytkownika
ElSor
Site Admin
Posty: 5040
Rejestracja: niedziela 13 wrz 2009, 12:52
Lokalizacja: Ozimek

Post 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.
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post 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
Ostatnio zmieniony sobota 15 lut 2014, 20:13 przez Ada20, łącznie zmieniany 2 razy.
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post 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
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post 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
Ostatnio zmieniony niedziela 16 lut 2014, 11:11 przez Ada20, łącznie zmieniany 1 raz.
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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&#181;s, tak więc najpierw odliczasz 999ms a potem dodajesz ostatnią milisekundę, pomniejszoną o czas potrzebny na wykonanie pozostałych rozkazów, czyli 1000&#181;s - 126&#181;s = 874&#181;s. Przy zegarze 1MHz, 1 takt zegara to 1&#181;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 &#40;void&#41;
&#123;
unsigned int a=0;

DDRB = &#40;1<<PB1&#41;|&#40;1<<PB3&#41;;
PORTB|=&#40;1<<PB1&#41;;

for &#40;a=0; a<10000; a++&#41;
&#123;

PORTB ^= &#40;1<<PB3&#41;;
//_delay_ms&#40;60000&#41;;
&#125;
PORTB&= ~&#40;1<<PB1&#41;;
&#125; 
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
Ostatnio zmieniony wtorek 10 lip 2018, 06:04 przez Pyra, łącznie zmieniany 1 raz.
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Awatar użytkownika
ElSor
Site Admin
Posty: 5040
Rejestracja: niedziela 13 wrz 2009, 12:52
Lokalizacja: Ozimek

Post 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 &#8211; 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.
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post 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
Ostatnio zmieniony niedziela 16 lut 2014, 22:31 przez Ada20, łącznie zmieniany 1 raz.
Awatar użytkownika
Pyra
Site Admin
Posty: 8522
Rejestracja: niedziela 02 sie 2009, 20:35
Lokalizacja: Gądki

Post 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
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Ada20
Posty: 71
Rejestracja: niedziela 08 gru 2013, 13:26
Lokalizacja: Wroclaw

Post 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
Ostatnio zmieniony niedziela 16 lut 2014, 22:19 przez Ada20, łącznie zmieniany 2 razy.
Zablokowany