
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ęAttiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Moderatorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
Poszukuję optymalnych parametrów,RC,różne kody,scalaki np.4047,kwarce,td.to są etapy przybliżające mnie do osiągnięcia możliwie najlepszych parametrów.
I pojawiłam się tutaj w nadziei osiągnięcia tego z pomocą tutaj.
Jak pisałam znalazłam na Allegro kwarc zegarkowy z 1 ppm z baterią,za 4 zł.
Ale jak tu napisano 5 ppm czy 50 ppm nie ma wpływu na dokładność 50%/50%
I pojawiłam się tutaj w nadziei osiągnięcia tego z pomocą tutaj.
Jak pisałam znalazłam na Allegro kwarc zegarkowy z 1 ppm z baterią,za 4 zł.
Ale jak tu napisano 5 ppm czy 50 ppm nie ma wpływu na dokładność 50%/50%
Ostatnio zmieniony 1 sie 2018, o 15:09 przez Ania30, łącznie zmieniany 2 razy.
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Do ACeK:
Czy można tak przerobić program aby był na inne uC ,i abym sama to mogła,zmienić, napisać w kodzie ?
Czy można tak przerobić program aby był na inne uC ,i abym sama to mogła,zmienić, napisać w kodzie ?
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Ale jitter ma. Częstotliwość oscylatora "pływa" a RC w szczególności. Raz wygenerowany będzie sygnał np 64,000004 sekundy, następnie 63,999996. Pisałem już, jak to się ma (jitter generatora) do tych 1/64e6 sekundy? Pewnie jak odległość z Ziemi do Księżyca do wzrostu człowieka.Ale jak tu napisano 5 ppm czy 50 ppm nie ma wpływu na dokładność 50%/50%
Skoro już jesteśmy przy takich hyper dokładnych czasach, to ścieżki i przewody, doprowadzające sygnał muszą być tej samej długości. Nie jest tajemnicą, że sygnał w przewodzie porusza się z pewną prędkością. Im dłuższy, tym sygnał potrzebuje więcej czasu aby dotrzeć do końca przewodu. Elektronika to jedno, mechanika to co innego. Proszę też uwzględnić długość doprowadzeń w obudowie układu scalonego. Połączenia mają różną długość. Jaką? Może e-mail do producenta?
Można dać generator 1bpm a i tak na korozję, będą miały wpływ inne czynniki, jak np grubość elektrod, nierównomierność ich wykonania. Z jaką dokładnością są wykonane elektrody?
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
O to zadbam póżniej ,teraz skupiam się nad dokładnością,jak nie znajdę jej tutaj ,bedę szukać dalej,może gdzie indziej będą wiedzieć.
W jakich zastosowaniach jest ptrzebna duża dokładność 50 % / 50 % ,czytałam ,że miedzy innymi w telewizorach LCD.
W jakich zastosowaniach jest ptrzebna duża dokładność 50 % / 50 % ,czytałam ,że miedzy innymi w telewizorach LCD.
Ostatnio zmieniony 1 sie 2018, o 16:10 przez Ania30, łącznie zmieniany 1 raz.
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Do ACeK:
Jak w kodzie zmieniać czas 50 %/50% i w jakim zakresie jest to możliwe.
Czy można od 200 kHz do 60 minut tj.1 godziny.
Jak w kodzie zmieniać czas 50 %/50% i w jakim zakresie jest to możliwe.
Czy można od 200 kHz do 60 minut tj.1 godziny.
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%




Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Tekst ostatniego kodu się skompilował , wgrany do uC działa, na PB1-PB2,64 sekund
stan niski i 64 sek.stan wysoki ,jak widać to na mierniku Volt i Amper.
Dziekuję ACeK
stan niski i 64 sek.stan wysoki ,jak widać to na mierniku Volt i Amper.
Dziekuję ACeK
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%


- .nolist
.include "m8def.inc"
.list
.cseg
.equ fosc = 1 ;czestotliwosc kwarcu w MHz
.org 0
rjmp ResetProcessor
ResetProcessor:
ldi r16, high(RAMEND) ; init stack pointer
out SPH, r16
ldi r16, low (RAMEND) ; init stack pointer
out SPL, r16
ldi r16, 0xff
out ddrb, r16
main:
ldi r16, 0b1010_1010 ;1 cycle
out portb, r16 ;1 cycle
rcall del_s
rcall del_s
rcall del_s
rcall del_s
nop ;1 cycle
nop ;1 cycle
ldi r16, 0b0101_0101 ;1 cycle
out portb, r16 ;1 cycle
rcall del_s
rcall del_s
rcall del_s
rcall del_s
rjmp main ;2 cycles
del_s:
ldi R28, 160
del_ss:
nop
del_100ms:
ldi r30, low (-100000*fosc/4)
ldi r31, high(-100000*fosc/4) ;opoznienie 100ms
delay:
adiw r30, 1 ;dwubajtowe dodawanie
brcc delay ;skok gdy nie nastapilo przepelnienie pary R31R30
dec r28
brne del_ss
ret
.exit

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Czas 128sekund, bardzo precyzyjny, na poziomie 1bpm w telewizorze LCD. Czym on steruje, że taka duża dokładność potrzebna, przy tak długim czasie?W jakich zastosowaniach jest ptrzebna duża dokładność 50 % / 50 % ,czytałam ,że miedzy innymi w telewizorach LCD.
Duża precyzja jest czasem wymagana, ale nie w elektrolizerze.
Da się ale już nie przez delay. Do tego najprościej użyć sprzętowego timera. W AVR bez kombinowania się nie obejdzie. Długich czasów sprzętowo nie da się wygenerować. Przy taktowaniu 32kHz da się uzyskać (timer 16-bit) 32768/2^16=0,5Hz. Trzeba więc użyć przerwań i w nich odliczać czas i zmieniać stan GPIO (utrata precyzji, jitter 1 cykl maszynowy). Można też połączyć dwa lub więcej timerów w kaskadę ale sprzętowo (programowo w AVR się nie da). Problem w tym, że Mega8 czy Tiny2313 nie jest zbyt bogato wyposażony w timeryCzy można od 200 kHz do 60 minut tj.1 godziny.
Pytanie do czego to tak naprawdę ma służyć?
- Super precyzja rodem z rozbijania atomów
- Czas regulowany od 5us do godziny
Czy to będzie:
- Bomba atomowa?
- Przyspieszacz hadronów?
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Czemu ma służyć? choćby sztuki dla sztuki, czy da się zrobić,a może się przydać kto wie w jakim celu.
Programem w delay który zamieściłam, miałam przedział 82 kHz- 12 godzin, może więcej,może da się osiągnąć więcej jak 82 kHz spróbuje.
W elektrolizeże też ma znaczenie idealna dokładność,nie będę r-mik tłumaczyć, bo jakbym nawet wytłumaczyła,nie zrozumiałby ,dalej by pisał swoje. to poza zasięgiem jego percepcji,albo ma zwą wole,lub nie potrafi napisac kodu zbliżonym do idealnego lub idealnego wypełnienia.
Testowałam dokładność wypełnienia w ten sposób,nie wiem czy to jest wiarygodne.
Kod nr.1 przy 1 Hz miał wynikł 049,99 %
Ten sam kod nr.1 przy 82 kHz miał wynik 045,99 %
-----------------------------
Kod nr.2 przy 1Hz miał wynik 049,00 %
Kod nr.2 przy 82 kHz miał wynik 047.90 %
Czy to znaczy ,że kod nr.jest bardziej dokładny.
Programem w delay który zamieściłam, miałam przedział 82 kHz- 12 godzin, może więcej,może da się osiągnąć więcej jak 82 kHz spróbuje.
W elektrolizeże też ma znaczenie idealna dokładność,nie będę r-mik tłumaczyć, bo jakbym nawet wytłumaczyła,nie zrozumiałby ,dalej by pisał swoje. to poza zasięgiem jego percepcji,albo ma zwą wole,lub nie potrafi napisac kodu zbliżonym do idealnego lub idealnego wypełnienia.
Testowałam dokładność wypełnienia w ten sposób,nie wiem czy to jest wiarygodne.
Kod nr.1 przy 1 Hz miał wynikł 049,99 %
Ten sam kod nr.1 przy 82 kHz miał wynik 045,99 %
-----------------------------
Kod nr.2 przy 1Hz miał wynik 049,00 %
Kod nr.2 przy 82 kHz miał wynik 047.90 %
Czy to znaczy ,że kod nr.jest bardziej dokładny.
Ostatnio zmieniony 1 sie 2018, o 18:53 przez Ania30, łącznie zmieniany 4 razy.
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Do ACeK:
Czy można ten kod tak przerobić aby działał z kwarcem zegarkowym ?
Czy można ten kod tak przerobić aby działał z kwarcem zegarkowym ?
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Podłączam kwarc zegarkowy do uC
Może te wskazówki pomogą,skopiowałam je z internetu :
"Po co nam taktowanie?
W attiny13 masz timera 8-bitowego. Ustawiasz go, oraz wrzucasz do niego przerwanie (po zakończeniu zliczania - przepełnienie licznika = przerwanie). Ta wiedza jest dostępna w pierwszym lepszym tutorialu pod Atmegi. W Attiny tylko zmieniasz nazwy rejestrów zgodnie z dokumentacją i dedukcją logiczną i wszystko powinno działać jak należy
W przerwaniu ustawiasz licznik jako zmienną volatile, która informuje Cię kiedy należy zmienić poziom na wyjściu.
Przykład:
Ogólny wzór:
(H * T) / (L * D) = wartość zmiennej przy której należy zmienić poziom na porcie.
H - częstotliwość (hertze)
T - czas (sekundy)
L - ilość taktów w timerze (256 dla 8-bitowego)
D - dzielnik
Dla 125 Khz czyli 125 000 Hz i dzielniku na timerze równym 1024, mamy obliczenia typu:
(125000 * 60) / (256 * 1024) = 28.6102294921875
Jak widać liczba nie jest pełna. Należy policzyć dla niej resztę:
((125000 * 60) - (1024 * 256 * 28)) = 159968
Sprawdzamy czy reszta jest dobrze policzona (reszta / (1024 * 256)):
159968.0 / 262144.0 = 0.6102294921875
Czyli wszystko się zgadza. Resztę należy podzielić przez dzielnik (1024)
159968.0 / 1024.0 = 156.21875
Otrzymamy ilość taktów w ostatnim przejściu dla rejestru TCNT0. Jako że maksymalna liczba dla TCNT0 to 256, a my potrzebujemy 156, to należy tą różnicę dodać przy ostatnim takcie przed zmianą wartości. Czyli należy dodać 100.
Pseudo kod:
port_wysoki();
volatile zmienna = 0;
inicjuj_timer();
wlacz_przerwania();
while(1);
przerwanie(){
zmienna ++;
if(zmienna == 28){
TCNT0 += 100;
}else if(zmienna > 28){
zmienna = 0;
port_zmien_stan();
}
}
Można też jak człowiek podpiąć zewnętrzny kwarc zegarkowy lub podobny, który jest podzielny przez potęgi liczby 2.
Np: 32756, wtedy obliczenia są trywialne i 32768.0 / 64.0 / 256 = 2.0 (taktowanie / dzielnik na timerze / pojemnosc timera = ilosc przerwan do zmiany poziomu na porcie dla jednej sekundy"
Może te wskazówki pomogą,skopiowałam je z internetu :
"Po co nam taktowanie?
W attiny13 masz timera 8-bitowego. Ustawiasz go, oraz wrzucasz do niego przerwanie (po zakończeniu zliczania - przepełnienie licznika = przerwanie). Ta wiedza jest dostępna w pierwszym lepszym tutorialu pod Atmegi. W Attiny tylko zmieniasz nazwy rejestrów zgodnie z dokumentacją i dedukcją logiczną i wszystko powinno działać jak należy
W przerwaniu ustawiasz licznik jako zmienną volatile, która informuje Cię kiedy należy zmienić poziom na wyjściu.
Przykład:
Ogólny wzór:
(H * T) / (L * D) = wartość zmiennej przy której należy zmienić poziom na porcie.
H - częstotliwość (hertze)
T - czas (sekundy)
L - ilość taktów w timerze (256 dla 8-bitowego)
D - dzielnik
Dla 125 Khz czyli 125 000 Hz i dzielniku na timerze równym 1024, mamy obliczenia typu:
(125000 * 60) / (256 * 1024) = 28.6102294921875
Jak widać liczba nie jest pełna. Należy policzyć dla niej resztę:
((125000 * 60) - (1024 * 256 * 28)) = 159968
Sprawdzamy czy reszta jest dobrze policzona (reszta / (1024 * 256)):
159968.0 / 262144.0 = 0.6102294921875
Czyli wszystko się zgadza. Resztę należy podzielić przez dzielnik (1024)
159968.0 / 1024.0 = 156.21875
Otrzymamy ilość taktów w ostatnim przejściu dla rejestru TCNT0. Jako że maksymalna liczba dla TCNT0 to 256, a my potrzebujemy 156, to należy tą różnicę dodać przy ostatnim takcie przed zmianą wartości. Czyli należy dodać 100.
Pseudo kod:
port_wysoki();
volatile zmienna = 0;
inicjuj_timer();
wlacz_przerwania();
while(1);
przerwanie(){
zmienna ++;
if(zmienna == 28){
TCNT0 += 100;
}else if(zmienna > 28){
zmienna = 0;
port_zmien_stan();
}
}
Można też jak człowiek podpiąć zewnętrzny kwarc zegarkowy lub podobny, który jest podzielny przez potęgi liczby 2.
Np: 32756, wtedy obliczenia są trywialne i 32768.0 / 64.0 / 256 = 2.0 (taktowanie / dzielnik na timerze / pojemnosc timera = ilosc przerwan do zmiany poziomu na porcie dla jednej sekundy"
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%



Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Ostatni kod tekstowy ACkA nie skompilował się .wywaliło 499 Errors i 13 Warnings.
Na razie chce spróbować na kwarcu zegarkowym,a potem na tym co proponujesz
Na razie chce spróbować na kwarcu zegarkowym,a potem na tym co proponujesz
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Czym zostało to zmierzone?Kod nr.1 przy 1 Hz miał wynikł 049,99 %
Ten sam kod nr.1 przy 82 kHz miał wynik 045,99 %
-----------------------------
Kod nr.2 przy 1Hz miał wynik 049,00 %
Kod nr.2 przy 82 kHz miał wynik 047.90 %
Czy to znaczy ,że kod nr.jest bardziej dokładny.
Co do kodu:
przerwanie(){
zmienna ++;
if(zmienna == 28){
TCNT0 += 100;
}else if(zmienna > 28){
zmienna = 0;
port_zmien_stan();
}
Słowo przerwanie i manipulowanie GPIUO oznacza jitter . Moja percepcja tego nie pojmuje, dlaczego z jednej strony walka o czasy, których nie ma jak zmierzyć, z drugiej pchanie się w przerwanie, które już daje jitter 1us przy 1MHz (przy 32kHz będzie ponad 30us).
Przy czasach 128sekund, aby pokazać różnicę 1us (o tym jest od dawna mowa) potrzeba miernika z wyświetlaczem posiadającym 9 cyfr. Aby wskazania były miarodajne musi on posiadać wzorzec 0,01ppm (jeśli źle liczę proszę mnie sprostować). O cenie wzorca 0.1ppm nie będę pisał, tym bardziej 0.01ppm .
Droga ta sztuka dla sztuki.
Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
... ktora sie sklada z dwuch takich samych ...
Sorry ze tak bardzo Cie urazilem ale tak mam juz od dawna ze nie wylapuje bledow jak piszejeszcze raz wybacz mi







Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%
Kod się skompilował.
Działa na Atmega 8A.
Czym się różni od poprzedniego ?
Jakie parametry ppm ma TCXO 4MHz,czytałam, że 3 ppm.
Ja znalazłam na Allegro kwarc zegarkowy( 32.768kHz)z 1ppm, za 4.29 zł.
Jest na Allegro kwarc 4MHz z 5ppm,20 sztuk za 10,80 zł.
( BQ48SH-28X6 dokładny kwarc 1ppm + zintegr. bateria)
Działa na Atmega 8A.
Czym się różni od poprzedniego ?
Jakie parametry ppm ma TCXO 4MHz,czytałam, że 3 ppm.
Ja znalazłam na Allegro kwarc zegarkowy( 32.768kHz)z 1ppm, za 4.29 zł.
Jest na Allegro kwarc 4MHz z 5ppm,20 sztuk za 10,80 zł.
( BQ48SH-28X6 dokładny kwarc 1ppm + zintegr. bateria)
Ostatnio zmieniony 2 sie 2018, o 08:47 przez Ania30, łącznie zmieniany 5 razy.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości