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: 115
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:42

r-mik robi wszystko na nie ,nie potrafi, nie chce dać konstruktywnych rozwiązań.
A jeśli daje to takie aby zrezygnować z rozwiązania..Drugie forum elektrody tu się robi.

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

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

Postautor: r-mik » 2 sie 2018, o 08:25

Ja znalazłam na Allegro kwarc zegarkowy( 32.768kHz)z 1ppm, za 4.29 zł
Szanse na to, że ma on 1ppm są jak 1:10. Temat wielokrotnie poruszany na forach. Te "Arduinowe" elementy to odrzut produkcyjny. W przypadku np DS3231 z deklarowanych 2ppm robi sie 20ppm. Nie ma co oczekiwać cudów, DS3231 kosztuje ok 20z. Czego można oczekiwać za płytkę z DS3231+24C64+bateria za 6zł? Szkoda pieniędzy i nerwów na takie zakup tym bardziej, jak nie ma sie sposobu na zweryfikowanie parametrów zakupionego elementu.

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

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

Postautor: ACeK » 2 sie 2018, o 10:51

... Czym się różni od poprzedniego ? ...
Obrazek Jak pisalem w czesniej procedura main: sklada sie z dwoch tak samo dzialajacych blokow ktore trwaja po dwa cykle plus opoznienie :idea: Oprocz tego na koncu jest skok do poczatku ktory tez trwa 2 cykle. Zalezy Ci na symetri dlatego nalezy dodac dwa cykle. W poprzedniej wersji dodalem rozkazy nop na poczatku i to byl blad :cry: Bo pierwszy blok wykonywal sie tylko 2 cykle + opoznienie, za to drugi 6 + opoznienie :P Teraz jest 4-4 :)
Tu masz sekcje zwok :arrow: TCXO frequency reference teardown kwarca. Jak widac w srodku masz "zwykly" kwarc :idea: Dlatego na poczatek kup sobie zwykly. A jak to bedzie nie wystarczajace mozesz zaszalec np :arrow: ebay tcxo 4mhz Obrazek

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

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

Postautor: r-mik » 2 sie 2018, o 11:30

... Czym się różni od poprzedniego ? ...
Obrazek Jak pisalem w czesniej procedura main: sklada sie z dwoch tak samo dzialajacych blokow ktore trwaja po dwa cykle plus opoznienie :idea: Oprocz tego na koncu jest skok do poczatku ktory tez trwa 2 cykle. Zalezy Ci na symetri dlatego nalezy dodac dwa cykle(...)
Dobrym rozwiązaniem aby była symetria (i był taki kod w tym wątku) jest użycie funkcji negującej stan, w C:

Kod: Zaznacz cały

PORT ^= 1<<BIT;
Niestety po skompilowaniu, w języku maszynowym, nie jest to operacja atomowa ale tu nie ma to znaczenia, chyba, że zostaną użyte przerwania i będą używać PORT, ale po użyciu przerwań cały kod się posypie, bo wydłużą one pętlę.

Jeśli więc uC ma robić coś jeszcze poza miganiem diodami (była mowa o millis więc zakładam, że tak) to nie ma wyjścia, trzeba użyć timera i sprzętowego sterowania GPIO.

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

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

Postautor: Ania30 » 2 sie 2018, o 11:48

Mikroprocesor ma robić tylko tą jedną czynność, zmiana polaryzacji co 64 sekund,bo jak będzie wykonywał jeszcze coś, to wpłynie to podobno na dokładność duty 50%.Napisałam o miilis bo przeczytałam ,że to lepsze ,dokładniejsze jak delay.
Mam taki program z millis w j.C na Atmegę 8 A ,ale ktoś mi napisał ,że trzeba go poprawić to może będzie dokładny,program pobrałam z rosyjskiej strony.
Mam w domu kilka kwarców zegarkowych 32.768Khz ,kwarc 4MHz,16MHz,2 MHz,i kilka innych.
Na Forbot napisali:
"Od razu widać przewagę względem funkcji delay() tutaj wypisanie czasu wywoływane jest idealnie co sekundę! "

https://forbot.pl/blog/kurs-arduino-ii- ... is-id18418

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

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

Postautor: r-mik » 2 sie 2018, o 12:45

"Od razu widać przewagę względem funkcji delay() tutaj wypisanie czasu wywoływane jest idealnie co sekundę! "
W normalnych programach, gdzie działają przerwania, millis jest dokładniejsze od delay, ponadto nie blokuje reszty programu (o ile poprawnie użyć millis). W tym nietypowym programie, jest dokładnie na odwrót.
Generalnie, do generowania ściśle określonych przedziałów czasowych, używa się timerów. Wtedy pętla główna może wyglądać tak:
while(1);

czy w asm:
loop: JMP loop

Nie ważne co robi program, czy sa czy nie używane przerwania, czy pracuje czy nie DMA (w AVR to tylko Xmega), timera ZAWSZE będzie precyzyjnie generował zadane czasy o czym pisałem już kilka razy. Kolejna korzyść to łatwe generowanie wysokich częstotliwości, w przypadku AVR nawet 10MHz (w uC z PLLT1 może być taktowany 64MHz, nie pamiętam czy może generować 32MHz, czy te 64MHz dotyczą tylko PWM w trybie 8 i 10bit).

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

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

Postautor: Ania30 » 2 sie 2018, o 15:00

ACeK
Czy można tak zrobić kod na Atmega 8A
Między GND (masą nóżka nr.8 lub nr.22 jak dogodniej) a PB0 jest 64 sek 50/50
Między GND (masą nóżka nr.8 lub nr.22 jak dogodniej) a PB1 jest 64 sek 50/50
I tak z pozostałymi PB z PB7 włącznie

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

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

Postautor: r-mik » 2 sie 2018, o 15:39

I tak z pozostałymi PB z PB7 włącznie
while(1){
PORTB = 0xFF;
delay
PORTB = 0;
delay
}
oczywiście trzeba dostawic nop.

albo:
while(1){
PORTB ^= 0xFF;
delay
}

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

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

Postautor: ACeK » 2 sie 2018, o 16:10

Obrazek Ten program to jakby dwa w jednym 8) na pierwszych 4 pinach portu masz to co bylo (64s) na pozostalych (32s) :idea:
  • .nolist
    .include "m328def.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
    nop ;1 cycle
    nop ;1 cycle
    rcall del_s
    rcall del_s

    ldi r16, 0b0101_1010 ;1 cycle
    out portb, r16 ;1 cycle
    nop ;1 cycle
    nop ;1 cycle
    rcall del_s
    rcall del_s

    ldi r16, 0b1010_0101 ;1 cycle
    out portb, r16 ;1 cycle
    nop ;1 cycle
    nop ;1 cycle
    rcall del_s
    rcall del_s

    ldi r16, 0b0101_0101 ;1 cycle
    out portb, r16 ;1 cycle
    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
Tu masz na forum :arrow: Elektroda link do pdf w ktorych Pan Stanislaw Gardynik z pomoca krasnolodkow uczyl o prockach polecam lektore Obrazek

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

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

Postautor: Ania30 » 2 sie 2018, o 16:18

To jest kod na Atmega328 ? ,może być,czy zadziała na Atmega 328P U, którą mam.
Jak tu zrobić aby miał na wyjściu 1 HZ ,chce na mierniku sprawdzić duty 50 %.
r-mik napisał," Trzeba dostawić nop".Co to jest nop.
Nie umie przerobić kodu w j.C, który zamieściłam ,aby miał to co napisałam powyżej tj.masa bazą a pozostałe PB1 do PB7 nie wiem jak to nazwa,filiami ?.

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

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

Postautor: ACeK » 2 sie 2018, o 16:30

To jest kod na Atmega328 ? ,może być,czy zadziała na Atmega 328P U, którą mam.
Obrazek Sprawdz sama :idea: Mysle ze juz wiesz gdzie sie zmienia kod :P Jesli chcesz 1Hz to wystarczy w poprzedniej wersji wyrzucic 3 z 4 rcall del_s a zamiast 160 wpisac 5 Obrazek

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

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

Postautor: Ania30 » 2 sie 2018, o 18:18

Usunęłam 3 górne rcall del_s ,dałam 5 ,na Atmega 8A,na mierniku UT120C miałam takie wyniki:
0.981 Hz
49.9 %

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

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

Postautor: ACeK » 2 sie 2018, o 18:30

Obrazek Brawo wyrzucic teraz dolne 3 z 4 rcall del_s Obrazek

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

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

Postautor: r-mik » 2 sie 2018, o 19:04

na mierniku UT120C miałam takie wyniki:
0.981 Hz
49.9 %
Weź nie żartuj :-)
To się nie nadaje do sensownych pomiarów częstotliwości czy współczynnika wypełnienia. To jakby centymetrem zastąpić suwmiarkę :-)

Z amatorskiego sprzętu to np https://www.tomtop.com/pl/p-e2933eu-50. ... tkQAvD_BwE
Na "Aledrogo" można znaleźć "półfabrykaty" po ok 100zł, ale do tak precyzyjnych pomiarów jak wymagasz to i ten jeszcze za słaby https://www.conrad.pl/p/miernik-uniwers ... ks-1242394

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

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

Postautor: Ania30 » 2 sie 2018, o 21:29

Wiem wiem,według Ciebie potrzeba sprzętu za 1 milion dolarów i to będzie za mało,wyniki będą niemiarodajne,takim moderatorem to każdy może być , tylko nie każdy chce być tak szkodzący,przeszkadzający,upierdliwy jak Ty.
Że tez właściciel Cię tu trzyma,robisz mu obciach,szkodzisz wizerunkowi czasopisma.
Ostatnio zmieniony 2 sie 2018, o 22:18 przez Ania30, łącznie zmieniany 1 raz.

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

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

Postautor: Ania30 » 2 sie 2018, o 21:53

Po usunięciu 3 dolnych rcall del_s ,wynik ten sam .
Czasami na krótko przeskakuje na 50 % tak jak w pierwszym.
0.981 Hz
49.9 %

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

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

Postautor: Ania30 » 2 sie 2018, o 22:31

Czy te kody działają na Attiny 2313A,co wpisać aby działały.
Dziękuję ACeK za kody,i przydatne linki.

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

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

Postautor: r-mik » 2 sie 2018, o 23:08

Wiem wiem,według Ciebie potrzeba sprzętu za 1 milion dolarów i to będzie za mało,wyniki będą niemiarodajne
Podłącz ten miernik do wiarygodnego generatora albo porównaj z dobrym licznikiem częstotliwości i stwierdzisz, że to co ma ten miernik to nie licznik częstotliwości tylko wskaźnik częstotliwości. Z pewnością nie nadaje się do precyzyjnych pomiarów.
Podłącz ten mulimetr do wyjścia przerzutnika D gdzie masz wypełnienie 50% i sprawdź co pokaże. Mało prawdopodobne, że będzie to 50%. Programy, które są tu prezentowane, sa na tyle precyzyjnie, że UT120C nie ma szansy pokazać odchyłki a jednak pokazuje. Coś tu jest nie tak.

Zrób to, co powinno robić się na początku pracy z miernikiem, przeczytaj jaką dokładność oferuje. UT120C przy pomiarze częstotliwości ma deklarowane 0,5%+3 cyfry. Jeśli więc wypełnienie ma 50%, możesz zobaczyć w praktyce 50,4% jak i 49,6%.
To oznacza, że w praktyce ostatnią cyfrę wskazania możesz zignorować a była walka, nie o pojedyncze procenty tylko jak pamiętam 0,00000015%. To tak, jakbyś przy pomocy centymetra krawieckiego próbowała sprawdzić dokładność mikrometru.

robisz mu obciach,szkodzisz wizerunkowi czasopisma.
Próba wyprowadzenia z błędu to obciach?
Wskaż mi gdzie napisałem nieprawdę czy pomyliłem się w obliczeniach. Poprawię błędy.

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

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

Postautor: ACeK » 3 sie 2018, o 06:40

Czy te kody działają na Attiny 2313A,co wpisać aby działały...
Obrazek Tak dzialaja :idea: Ale dlatego ze Attiny 2313A ma mniejsza pamiec SRAM sa nie potrzebne dwie linie
  • ldi r16, high(RAMEND) ; init stack pointer
    out SPH, r16
nie kasuj ich tyjlko wstaw ';' na poczatku lini
  • ; ldi r16, high(RAMEND) ; init stack pointer
    ; out SPH, r16
Trzeba tez zmienic info dla assemblera pod jaki procek chcemy plik HEX dla Attiny 2313A to .include "tn2313adef.inc" bo on (assembler) tak z siebie sam nic nie robi Obrazek

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

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

Postautor: Ania30 » 3 sie 2018, o 07:34

Czy ja napisałam ,że miernik jest alfą i omegą w sprawie 50%,stwierdziłam fakt,i nie miałam pretensji ,że to zle wyniki,to Ty mi coś suponujesz.
Napisałeś ,że poprzez delay nie da się osiągnąć rozpiętości kHz do 12 godzin,u mnie taka rozpiętość została osiągnięta.
Widzę ,że z Ciebie gawędziarz i malkontent,niepotrzebnie zaśmiecasz i wydłużasz ten wątek.

Wróć do „AVR/AVR32”

Kto jest online

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