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%

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 15:03

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%
Ostatnio zmieniony 1 sie 2018, o 15:09 przez Ania30, łącznie zmieniany 2 razy.

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 15:05

Do ACeK:
Czy można tak przerobić program aby był na inne uC ,i abym sama to mogła,zmienić, napisać w kodzie ?

Awatar użytkownika
r-mik
-
-
Posty: 351
Rejestracja: 14 cze 2005, o 19:18
Lokalizacja: Wawa
Kontaktowanie:

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: r-mik » 1 sie 2018, o 15:25

Ale jak tu napisano 5 ppm czy 50 ppm nie ma wpływu na dokładność 50%/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.

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?

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 15:32

Obrazek Wystarczy zmienic .include "m8adef.inc" (atmega8a) na .include "m328def.inc" (atmega328) itd. :idea: albo pytac Obrazek

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 15:51

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.
Ostatnio zmieniony 1 sie 2018, o 16:10 przez Ania30, łącznie zmieniany 1 raz.

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 15:55

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.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 16:46

Obrazek To jest najprostrzy program jaki mozna napisac na procka :idea: jeden z tych od mrugania LED :arrow: Cala magia jest w procedurze main: ktora sie sklada z dwuch takich samych czesci (50-50) tak jak pisalem wczesniej do rejestru R16 wpisujesz to co chcesz by bylo przeslane do portu b to zajmuje dwa cykle potem odwolujesz sie do petli opozniajacej :idea: ktora jest zestrojona na okolo 100ms, ktora jest powtarzana w zaleznosci od (ldi R28, 160) 160 razy. Czyli trwa 16 sekund opoznienie jest wywolane 4 razy z stad bierze sie 64 sekundy. Jesli zmienisz te wartosci to mozesz dostosowac program do swoich potrzeb. Potem wszystko sie powtarza z tym ze wartosc przesylana do portu jest odwrotna. Na koncu procedury main: masz skok do jej poczatku i wszystko zaczyna sie od poczatku. Dlatego ze skok trwa 2 cycle zegarowe to w pierwszej czesci sa dwa rozkazy nop ktore nic nie robia oprocz tego ze trwaja 2 cyckle :idea: Suma cykli w pierwszej i drugiej czesci jest taka sama dlatego masz swoje upragnione 50-50 Obrazek

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 17:39

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

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 18:02

Obrazek Sorry ale popelnilem blad :oops: rozkazy nop powinny byc po rcall del_s:oops:
  • .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
:P Moze teraz bedzie dobrze Obrazek

Awatar użytkownika
r-mik
-
-
Posty: 351
Rejestracja: 14 cze 2005, o 19:18
Lokalizacja: Wawa
Kontaktowanie:

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: r-mik » 1 sie 2018, o 18:14

W jakich zastosowaniach jest ptrzebna duża dokładność 50 % / 50 % ,czytałam ,że miedzy innymi w telewizorach LCD.
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?
Duża precyzja jest czasem wymagana, ale nie w elektrolizerze.
Czy można od 200 kHz do 60 minut tj.1 godziny.
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 timery

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?

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 18:38

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.
Ostatnio zmieniony 1 sie 2018, o 18:53 przez Ania30, łącznie zmieniany 4 razy.

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 18:40

Do ACeK:
Czy można ten kod tak przerobić aby działał z kwarcem zegarkowym ?

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 18:49

Obrazek Co masz na mysli "kwarcem zegarkowym" :? podaj wiecej info Obrazek

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 18:51

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"

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 19:05

Obrazek Masz na mysli 32.768kHz :? Jesli tak to zalezy od procka :idea: Kup sobie 4MHz :twisted: A jak juz chcesz bardzo dokladny to poszukaj TCXO 4MHz Obrazek

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 19:10

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

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 19:19

Obrazek Zmien to .include "m8def.inc" na to .include "m8adef.inc" Obrazek

Awatar użytkownika
r-mik
-
-
Posty: 351
Rejestracja: 14 cze 2005, o 19:18
Lokalizacja: Wawa
Kontaktowanie:

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: r-mik » 1 sie 2018, o 19:45

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.
Czym zostało to zmierzone?

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.

Awatar użytkownika
ACeK
-
-
Posty: 1520
Rejestracja: 30 mar 2003, o 19:35
Lokalizacja: Kielce

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: ACeK » 1 sie 2018, o 20:28

... ktora sie sklada z dwuch takich samych ...
Sorry ze tak bardzo Cie urazilem ale tak mam juz od dawna ze nie wylapuje bledow jak pisze :( jeszcze raz wybacz mi
Obrazek Forum ep jest bardzo busy wiec jestem zdziwiony ze przy takim natloku pracy taka szybka reacja na moje bledy :o za ktore po raz kolejny przepraszam co widac po cytacie :!: a nie widac bo cytaty nie dzialaja prawidlowo tak jak zreszta tu opisane :arrow: Nowe forum o dziwo tez na czerwo ale duza czcionka hihi :lol: komus sie chcialo pokolorowac a wystarczylo zmienic jedna litere :x ale zeby poprawic dzialanie forum to juz bohatera nie ma :no: :uhoh: Obrazek

Ania30
-
-
Posty: 124
Rejestracja: 31 lip 2018, o 07:57

Re: Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 1 sie 2018, o 21:12

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)
Ostatnio zmieniony 2 sie 2018, o 08:47 przez Ania30, łącznie zmieniany 5 razy.

Wróć do „AVR/AVR32”

Kto jest online

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