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
Attiny 2313A zmiana stanu wysokiego na niski,duty cycle 50%

Postautor: Ania30 » 31 lip 2018, o 08:20

Witam
Potrzebuję kodu na Attiny 2313A,Atmega 8A,Atmega 328, w j.assembler, który na pinie A i B zmienia stany z wysokiego na niski co 64 sekund,okres 128 sekund,wypełnienie 50 %(duty cucle 50%).
Dioda czerwona podłaczona katodą do pinu A ,anodą do pinu B.
Dioda zielona podłaczona katodą do pinu B,anodą do pinu A.
Dioda czerwona świeci 64 sekund,w tym czasie dioda zielona nie świeci 64 sekun i tak w nieskończonej petli na przemian.
Za pomoc z góry dziękuje.
Pozdrawiam

Ania
Ostatnio zmieniony 31 lip 2018, o 09:39 przez Ania30, łącznie zmieniany 1 raz.

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 » 31 lip 2018, o 08:46

Jaka częstotliwość oscylatora?
Czemu ASM? Teraz nikt rozsądny tego nie używa.
Pokaż co już jest napisane, napisz co nie działa, czego nie wiesz.

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

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

Postautor: Ania30 » 31 lip 2018, o 09:38

Tutaj mam kod , na jednym stanie jest napięcie ,a na drugim niema,jak zrobić aby na obu było na przemian napięcie.Najlepiej na kwarcu zegarkowym.
CPU 1Mhz

kod:
.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
out portb, r16
inc r17


main:
ldi r16, 0xf0
out portb, r16
rcall del_s
ldi r16, 0x0f
out portb, r16
rcall del_s
rjmp main

del_s:
ldi R28, 250

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

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 » 31 lip 2018, o 10:07

Diody sA włączone pomiędzy porty A i B (tak przynajmniej wnioskują z niejasnej wypowiedzi "Dioda czerwona podłaczona katodą do pinu A ,anodą do pinu B. Dioda zielona podłaczona katodą do pinu B,anodą do pinu A."
W programie wykonywane są operacje tylko na porcie B.

Nie rozumie wypowiedzi "na jednym stanie jest napięcie"

Pokaż schemat, jak podłączone są te diody.

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

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

Postautor: Ania30 » 31 lip 2018, o 10:44

Jedna dioda nie świeci,na mierniku jak widać plus jest napięcie +4.08 volt,jak widać minus niema napięcia.
Diody mają być podłączone tak:
dioda LED czerwona (anoda do portu PB0, katoda do PB1)
dioda LED zielona (katoda podłączona do PB0, anoda do PB1)
Lub na innej dogodnej parze PIN.
Załączniki
LED 2.png
LED 2.png (5.45KiB)Przejrzano 9393 razy
Ostatnio zmieniony 1 sie 2018, o 09:51 przez Ania30, łącznie zmieniany 1 raz.

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 » 31 lip 2018, o 13:15

Obrazek Twoj kod masz napisany na m8 :idea: Ten procek nie ma portu A :!: Tu masz kod jesli bys uzyl port B i C.
  • ldi r16, 0xff
    out ddrb, r16
    out ddrc, r16
    out portb, r16
    out portc, r16

    main:
    ldi r16, 0b1111_0000
    out portb, r16
    ldi r16, 0b0000_1111
    out portc, r16
    rcall del_s
    ldi r16, 0b0000_1111
    out portb, r16
    ldi r16, 0b1111_0000
    out portc, r16
    rcall del_s
    rjmp main
To kod jesli uzywasz tylko port b
  • ldi r16, 0xff
    out ddrb, r16
    out portb, r16

    main:
    ldi r16, 0b1111_1110
    out portb, r16
    rcall del_s
    ldi r16, 0b1111_1101
    out portb, r16
    rcall del_s
    rjmp main
Tu masz fajny opis tego co chcesz zrobic :arrow: 1 Atmega32 Assembly Tutorial
Jak cos nie jasne pytaj Obrazek

Btw tagi ciagle zle :evil: dzialaja zwlaszcza code :twisted:

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

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

Postautor: Ania30 » 31 lip 2018, o 16:54

Dziękuję ACeK.
Czy można tak zrobić aby masa tj.minus miała stan wysoki lub niski a pozostałe porty stan wysoki lub niski.
Np.anodę diodę Led podłączam do masy a katodę do pinu PB0 i mam zmianę polaryzacji co 64 sekund z okresem 128 sek.
Anodę diodę Led podłączam do masy a katodę do pinu PB1 i mam zmianę polaryzacji co 64 sekund z okresem 128 sek.
I tak samo z pozostałymi pinami tj,PB2,PB3,PB,PB5,PB6,PB7.
Zależy mi na bardzo dokładnym duty cycle 50% i okresie .
Czy dokładność duty 50% 64sekund jest powiązana z dokładnością okresu 128 sekund.
To znaczy czy może być duża dokładność duty50% bez mniejszej dokładności okresu.
Chciałabym to zrobić na kwarcu zegarkowym 5ppm,na Allegro widziałam zegarkowy 1ppm.
Czytałam ,że programem w assembler można to osiągnąć bardziej jak w języku C,C++
Dałam ten kod do kompilacji, na Attiny2313 w Atmel Studio 6, nie skompilował się. Na Atmega 8 i 328 też.
Ostatnio zmieniony 31 lip 2018, o 18:11 przez Ania30, łącznie zmieniany 6 razy.

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 » 31 lip 2018, o 17:10

Zacznę od końca.
"Czytałam ,że programem w assembler można to osiągnąć bardziej jak w języku C,C++"
Nieprawda. Czy C, Bascom, czy ASM dokładność będzie taka sama.

"Zależy mi na bardzo dokładnym duty cycle 50% i okresie .(...)
Chciałabym to zrobić na kwarcu zegarkowym 5ppm,"
Średnio dobry pomysł z kwarcem zegarkowym. Mega8 nie ma PLL. Nie wiem co ten mikrokontrolera ma jeszcze robić i czy taktowanie 32kHz wystarczy.

Do sterowania LED-am należy użyć PWM. Wtedy dokładność generowanego sygnału jest wysoka, niezależna od tego jakie funkcje realizuje program. Niska częstotliwość taktowania jest wtedy korzystna. Timery można jednak połączyć kaskadowo i taktowanie może być wyższe.
W każdym razie, pętla opóźniająca do generowania dokładnych czasów to zły pomysł.

Czemu ma służyć urządzenie generujące sygnał 64 sekundy o dokładności 5ppm?

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

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

Postautor: Ania30 » 31 lip 2018, o 17:28

To ma być elektrolizer,jeśli nie jest dokładne 50 % duty to po miesiącu i dłużej elektrolizy pojawiają się zanieczyszczenia.
Natężenie prądu i napięcie na wyjściu możliwie jak najmniejsze,jak dałam1.2 mA to pojawiły się zanieczyszczenia.Jak dałam 0.480 mA zanieczyszczenia nie było tak jak przy 1.2 mA

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 » 31 lip 2018, o 18:18

Elektrolizer. Kaszpirowski, Nowak (ręce, które leczą) wciąż żywy! Warto to zbudować aby przekonać się, że jest nic nie warte.

"jeśli nie jest dokładne 50 % duty to po miesiącu i dłużej elektrolizy pojawiają się zanieczyszczenia."
zapewnienie precyzyjnego 50% to nie problem, dzielnik przez 2 czy PWM ustawiony na 50%. Trochę gorzej z "pływaniem" częstotliwości ale w tym zastosowaniu to nie tylko kwarc 20 czy nawet 50ppm wystarczy a nawet zwykły generator RC. Pytanie, czy mechanikę da się wykonać tak dokładnie?

"jak dałam1.2 mA to pojawiły się zanieczyszczenia.Jak dałam 0.480 mA zanieczyszczenia nie było tak jak przy 1.2 mA"
Jak się da prąd 0 to wytrąci się najmniej zanieczyszczeń. Jednocześnie urządzenie nic nie zmienia. Jak dać duży prąd elektroliza jest najsilniejsza i wytrącają się osady pochodzące między innymi z elektrod, które ulegają korozji. To urządzenie to w praktyce generator zanieczyszczeń.


Elektrolizery, różne cewki nawijane na rury od wody czy dopływu paliwa do samochodu, tak jak Kaszpirowski czy Nowak, bioenergoterapeuci, itp, itd, pomagają tylko tym co w to wierzą. Proponuję zdecydować się na ślepy test, on rozwieje wszelkie wątpliwości.

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 » 31 lip 2018, o 19:52

Obrazek Ten kod co Ci podalem jest uzupelnieniem do tego ktory Ty zamiescilas. Musisz dac naglowek oraz pod program opozniejacy. Polecenie out portb, r16 wysyla na portb zawartosc resjestru R16 :idea: Polecenie ldi r16, 0b0000_1111 wpisuje do R16 liczbe jaka chcesz wyslac na port. Liczbe jaka wysylasz mozna podac w roznym systenie liczbowym. Ja podalem Ci w dwojkowym bo w zaleznosci czy bedzie 1 lub 0 tak samo bedzie na pinach portu. Jesli przeanalizujesz jak w programie zmienia sie to co jest na pinach portu zrozumiesz jak dziala program Obrazek

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

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

Postautor: Ania30 » 31 lip 2018, o 20:11

Program który zamieściłam pobrałam z internetu,sama nie umie napisać programu,ani zrobić to według wskazówek jakie podałeś.
Czy możesz zamieścić ten kod z poprawkami jakie dałeś .

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 » 31 lip 2018, o 20:15

Program który zamieściłam pobrałam z internetu,sama nie umie napisać programu,ani zrobić to według wskazówek jakie podałeś.
A potrafisz go skompilować, wgrać do mikrokontrolera i odpowiednio ustawić bity konfiguracyjne?

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

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

Postautor: Ania30 » 31 lip 2018, o 21:24

Wgrałam program który zamieściłam do mikrokontrolera, się skompilował bez błędów,został wgrany do uC,ale nie działał tak jak chciałam.ustawić bity konfiguracyjne nie potrafię.
Kompilowałam i wgrywałam do uC, z powodzeniem na Atmel Studio 5.1 niejeden program,który na uC działał tak jak chciałam.

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 » 31 lip 2018, o 22:07

Obrazek Ech te kobiety :roll:
  • .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
    out ddrc, r16
    out portb, r16
    out portc, r16

    main:
    ldi r16, 0b1111_0000
    out portb, r16
    ldi r16, 0b0000_1111
    out portc, r16
    rcall del_s
    ldi r16, 0b0000_1111
    out portb, r16
    ldi r16, 0b1111_0000
    out portc, r16
    rcall del_s
    rjmp main

    del_s:
    ldi R28, 250
    ret
    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
:D Albo
  • .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
    out portb, r16

    main:
    ldi r16, 0b1111_1110
    out portb, r16
    rcall del_s
    ldi r16, 0b0000_1101
    out portb, r16
    rcall del_s
    rjmp main

    del_s:
    ldi R28, 250
    ret
    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
Obrazek

Btw. to dla admina program w tagu 'code'

Kod: Zaznacz cały

.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 out portb, r16 main: ldi r16, 0b1111_1110 out portb, r16 rcall del_s ldi r16, 0b0000_1101 out portb, r16 rcall del_s rjmp main del_s: ldi R28, 250 ret 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
na forum EP :no:

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

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

Postautor: Ania30 » 31 lip 2018, o 22:32

Pierwszy kod na AVR Studio 5.1 nie skompilował się na Atmega 8A
2 kod na Atmega 8A nie skompilował się.
3 kod dla admina na Atmega 8A nie skompilował się.

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 » 1 sie 2018, o 06:10

Obrazek Jak sprawdzalem czy dziala program w symulatorze to zeby nie czekac w nieskonczonosc skrocilem pod program del_s:
  • del_s:
    ldi R28, 250
    ret
    del_ss:
:oops: dodajac ret ta czesc programu powinna byc tak
  • del_s:
    ldi R28, 250
    del_ss:
:idea: Ta zmiana nie ma wplywu na kompilacje programu
  • :020000020000FC
    :1000000000C004E00EBF0FE50DBF0FEF07BB04BB40
    :1000100008BB05BB00EF08BB0FE005BB06D00FE037
    :1000200008BB00EF05BB01D0F5CFCAEF0000E8E543
    :0C003000FEE93196F0F7CA95C9F7089573
    :00000001FF
Tu masz hex pierwszej wersji z portami B i C
  • :020000020000FC
    :1000000000C004E00EBF0FE50DBF0FEF07BB0EEF02
    :1000100008BB04D00DEF08BB01D0F9CFCAEF000038
    :0E002000E8E5FEE93196F0F7CA95C9F70895B4
    :00000001FF
    A tu sterownie bitami portu B

Podaj jakie bledy masz podczas kompilacji 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 08:10

Wgrane hex nie działa na uC
Programy nie kompilują się, wywala 499 Errors i 13 Warning.

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 09:49

wywala 499 Errors i 13 Warning.
Pytałem czy potrafisz skompilować, przeczytałem, ze tak :-)
Duża ilość błędów być może spowodowana jest brakiem/złą nazwa pliku z definicjami rejestów uC.
Pokaż kilka pierwszych błędów.


Czy do tego zadania potrzebny jest uC? Wystarczy generator i dzielniki np CD4060. Jeśli koniecznie ma być stabilizacja kwarcowa (na 99% zbędna) to to można połączyć dwa dzielniki kaskadowo. W razie potrzebny byłby większy prąd to układy serii HCT.

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 » 1 sie 2018, o 09:59

Obrazek Moze kopia ekranu Ci pomozei Obrazek
Załączniki
ep.png

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