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ę

Mam idealne duty cycle 64/64 sekund? c.d.

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

Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 1 lis 2018, o 15:42

Witam
Ostatni Kod ACeKa działa tak jak chcę tj.64/64 sek.
[MOD] Gdzie ten kod?
Poprzednio dawałam fuse bity programem mkAVRCalculator,a ten program na kwarc 8 MHz , ustawiał inne fuse bity ,jak podawał ACeK , dlatego było 8min/8 min.
Zwracam Honor ACeKowi , przepraszam ,nie zrobiłam tego celowo.
[MOD] Niezwiązane z tematem wyciąłem.

Proszę zapoznać się z regułami umieszczania znaków interpunkcyjnych, nawiasów itp. Znaki interpunkcyjne "," "." itp umieszcza się za ostatnim znakiem wyrazu, po znaku interpunkcyjnym umieszcza się spację. Przed nawiasem otwierającym spacja, za bez spacji, nawias zamykający odwrotnie, przed nawiasem bez spacji, po spacja.

Ostatni kod ACeKa

.nolist
.include "tn2313adef.inc"
;.include "m32def.inc"
.list
.cseg
.equ fosc = 8 ;czestotliwosc kwarcu w MHz
.org 0x0000
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 ddrd, r16
out portd, r16

ldi r18, 0xff
ldi r19, 0xff
ldi r20, 0xa1
ldi r21, 0x07

main:
ldi r16, 0b1010_1010
out portd, r16
nop
nop
rcall del_64s
ldi r16, 0b0101_0101
out portd, r16
rcall del_64s
rjmp main

del_64s:
MOVW R24, R20
Coarse:
MOVW R30, R18 ;
Loop:
SBIW R30, 0x01 ;
BRNE Loop ;
SBIW R24, 0x01 ;
BRNE Coarse ;

ldi r28, 0xfd
ldi r29, 0x1f
Fine:
SBIW R28, 0x01 ;
BRNE Fine

ret
.exit
----------------------------------------------------------
viewtopic.php?f=38&t=26269
Ostatnio zmieniony 1 lis 2018, o 22:22 przez Ania30, łącznie zmieniany 1 raz.

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: r-mik » 1 lis 2018, o 22:19

,a ten program na kwarc 8 MHz
Program nie ma kwarcu.
ustawiał inne fuse bity ,jak podawał ACeK , dlatego było 8min/8 min.
Zwracam Honor ACeKowi , przepraszam ,nie zrobiłam tego celowo.
Czyli miałem rację! Niestety, panna Ania30 (z pewnością panna,bo porozumieć się z nią nie łatwo, wszystko wie lepiej, typowe dla nauczycielki) z tego powodu napisała pod moim adresem kilka niepochlebnych opinii.
Zgadza się panno Anno?
Czy wyciągnęła już panna z tego wnioski? Takie, że jednak się znam? Że nie piszę głupot?

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 1 lis 2018, o 22:29

Na początku program ACeKa działał , bo dawałam takie fuse bity jak napisał.
Po jakimś czasie dawałam fuse bity z programu mkAVRCalculator i wtedy nie działał 64/64sek ,nie wiedziałam ,nie zwróciłam uwagi,że są inne ,i że inne są powodem zmiany działania programu.
Myslałam co się stało,że nie działa,ktoś zmnienił coś na stronie,czy co.
Nie jestem panną ,w przeciwieństwie do Pana kawalera.
A to mój ostatni kod po przerobieniu ,ściągnięty z zagranicznej strony.
Działa na kwarcu 8MHz ,i ma 66/66 sek.

#include <avr/io.h>

main()
{
char toggle = 0;

DDRB = (1<<PB3)|(1<<PB4);
PORTB = (1 << PB3);


TCCR1A = 0;

TCCR1B = (1<<CS02) | (1<<CS00);

while(1)

if (TIFR & (1 << OCF1A)) {
TIFR |= (1 << OCF1A);
if (toggle) {
toggle = 0;


}
else {

toggle = 1;

PORTB ^= (1<<PB3)|(1<<PB4);

}
}
}

----------------------------------------------------------

https://startingelectronics.org/tutoria ... led-timer/

https://www.google.pl/search?ei=093JW-K ... GLaAHj9JSI

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: r-mik » 1 lis 2018, o 23:43

Na początku program ACeKa działał , bo dawałam takie fuse bity jak napisał.
Po jakimś czasie dawałam fuse bity z programu mkAVRCalculator i wtedy nie działał 64/64sek ,nie wiedziałam ,nie zwróciłam uwagi,że są inne ,i że inne są powodem zmiany działania programu.
To było powodem zrównania mnie "z błotem", pisząc, że nie chcę pomóc, piszę głupoty?
Proszę się zastanowić, czy po czymś takim, znajdzie się chętny do pomocy?
Czytając poprzednie posty, sądzę, że chętnych do pomocy nie będzie.
Nie jestem panną ,w przeciwieństwie do Pana kawalera.
Cały czas dowiaduję się nowych rzeczy o sobie. Skąd takie informacje? Wróżbita Maciej powiedział?

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 2 lis 2018, o 01:09

Nie dostateczna odpowiedz , i nie na temat.
Na dalsze dywagacje odpowiedzi nie będzie ,nie będę karmić trolla.

[MOD]Zablokowałem możliwość edycji postu, aby potomni wiedzieli, komu chcą pomóc i jaką za to dostaną "nagrodę" od Ania30.

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 3 lis 2018, o 13:05

// Kwarc 16 MHz ,66/66 sekund
#include <avr/io.h>

main()
{
char toggle = 0; // toggle LED flag

DDRB = (1<<PB3)|(1<<PB4); // LED on PB3-PB4
PORTB|=(1<<PB3);

OCR1A = 4000; // number to count to
TCCR1A = 0; // CTC mode
// CTC mode, clk src = 1024, start timer
TCCR1B = (1<<CS02) | (1<<CS00);
while(1)
{
if (TIFR & (1 << OCF1A)) { // count reached?
TIFR |= (1 << OCF1A); // clear flag
if (toggle) { // toggle LED
toggle = 0;

}
else {
toggle = 1;
PORTB ^= (1<<PB3)|(1<<PB4);
}
}
}
}

---------------------------------------------------------------------------------------
https://startingelectronics.org/tutoria ... led-timer/

https://www.google.pl/search?rlz=1C1AOH ... 00&bih=509

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 4 lis 2018, o 02:16

#include <avr/io.h>

main()
{

DDRB = (1<<PB3)|(1<<PB4); // LED on PB3-PB4
PORTB|=(1<<PB3);
TCCR1B |= (1 << WGM12)|(1 << CS11)|(1 << CS10); //Fcpu/64

int i = 0;
while(1)
{
if (TCNT1 > 20000)
{
i++;
TCNT1 = 0;
if(i > 100)
{
i = 0;
PORTB ^= (1<<PB3)|(1<<PB4);
}
}
}
}

-------------------------------------------------------------------------------------

https://www.avrfreaks.net/forum/using-c ... toggle-led

https://www.google.pl/search?rlz=1C1AOH ... LzJ8XoIVHs

--------------------------------------------------------------------------------------------------------------------------------------------------------------
.NOLIST
.INCLUDE "TN2313ADEF.INC"
;.INCLUDE "TN13ADEF.INC"
.EQU FOSC = 16; CZESTOTLIWOSC KWARCU 16MHz
CLR R1
OUT 0x3F,R1
LDI R28,0xDF
OUT 0x3D,R28
RCALL PC+0x0003
RJMP PC+0x001B
RJMP PC-0x001B
LDI R24,0x18
OUT 0x17,R24
SBI 0x18,3
IN R24,0x2E
ORI R24,0x0B
OUT 0x2E,R24
LDI R20,0x18
LDI R24,0x00
LDI R25,0x00
IN R18,0x2C
IN R19,0x2D
LDI R21,0x4E
CPI R18,0x21
CPC R19,R21
BRCS PC-0x05
ADIW R24,0x01
OUT 0x2D,R1
OUT 0x2C,R1
CPI R24,0x65
CPC R25,R1
BRNE PC-0x0B
IN R24,0x18
EOR R24,R20
OUT 0x18,R24
RJMP PC-0x0011
CLI
RJMP PC-0x0000
NOP

--------------------------------------------------------------------------

https://www.avrfreaks.net/forum/using-c ... toggle-led

https://www.google.pl/search?rlz=1C1AOH ... LzJ8XoIVHs

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 4 lis 2018, o 11:05

#include <avr/io.h>
#include <util/delay.h> // kwarc 16 MHz

main()
{
DDRB = (1<<PB3)|(1<<PB4);
PORTB|=(1<<PB3);



while(1)
{

PORTB ^= (1<<PB3)|(1<<PB4);
_delay_us(128000000);

}
}

------------------------------------------------------------------------------------
http://www.avrprojects.net/index.php/av ... ?showall=1

https://www.google.pl/search?q=avr+led+ ... 800&bih=50
Ostatnio zmieniony 6 lis 2018, o 09:46 przez Ania30, łącznie zmieniany 1 raz.

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 6 lis 2018, o 09:42

#include <avr/io.h> //kwarc 16MHz

int main (void)
{
unsigned char Sekundy = 0; // Nasza zmienna ustawiona na 0

DDRB = (1<<PB3)|(1<<PB4);
PORTB|=(1<<PB3); // Ustawienie bitu LED jako wyjścia

TCCR1B |= (1<<CS02)|(1<<CS00); //Ustawia timer z preskalerem Fcpu/1024


while(1)
{
// Sprawdza wartość timera w pętli IF, prawda jeśli wartość wynosi 1 sekundę

if (TCNT1 >= 976.5625)
{
TCNT1 = 0; //Zerowanie Timera
Sekundy++;
// Sprawdzenie, czy zmienna osiągnęła wartość 128
if ( Sekundy == 128)
{
Sekundy = 0; // TODO: Zerowanie wartości zmiennej
PORTB ^= (1<<PB3)|(1<<PB4); // Zmień stan diody LED
}
}
}
}
------------------------------------------------------------------------
Jak przerobić powyższy kod aby czasy dawać w us,w mikrosekundach,np 100 us.


--------------------------------------------------------------------------
.NOLIST
.INCLUDE "TN2313ADEF.INC"
;.INCLUDE "TN13ADEF.INC"
.EQU FOSC = 16; CZESTOTLIWOSC KWARCU 16MHz
CLR R1
OUT 0x3F,R1
LDI R28,0xDF
OUT 0x3D,R28
RCALL PC+0x0003
RJMP PC+0x0086
RJMP PC-0x001B
PUSH R16
PUSH R17
LDI R24,0x18
OUT 0x17,R24
SBI 0x18,3
IN R24,0x2E
ORI R24,0x05
OUT 0x2E,R24
LDI R16,0x18
LDI R17,0x00
IN R22,0x2C
IN R23,0x2D
LDI R24,0x00
LDI R25,0x00
RCALL PC+0x0011
LDI R18,0x00
LDI R19,0x24
LDI R20,0x74
LDI R21,0x44
RCALL PC+0x0049
SBRC R24,7
RJMP PC-0x000B
OUT 0x2D,R1
OUT 0x2C,R1
SUBI R17,0xFF
CPI R17,128 ; 0x80
BRNE PC-0x10
IN R24,0x18
EOR R24,R16
OUT 0x18,R24
RJMP PC-0x0015
CLT
RJMP PC+0x000A
BST R25,7
BRTC PC+0x08
COM R25
COM R24
COM R23
NEG R22
SBCI R23,0xFF
SBCI R24,0xFF
SBCI R25,0xFF
TST R25
BREQ PC+0x16
MOV R31,R25
LDI R25,0x96
CLR R27
INC R25
LSR R31
ROR R24
ROR R23
ROR R22
ROR R27
CPSE R31,R1
RJMP PC-0x0007
BRPL PC+0x20
LSL R27
BRNE PC+0x03
SBRS R22,0
RJMP PC+0x001C
SUBI R22,0xFF
SBCI R23,0xFF
SBCI R24,0xFF
SBCI R25,0xFF
RJMP PC+0x0017
TST R24
BREQ PC+0x03
LDI R25,0x96
RJMP PC+0x0012
TST R23
BREQ PC+0x05
LDI R25,0x8E
MOV R24,R23
MOV R23,R22
RJMP PC+0x0006
TST R22
BREQ PC+0x0F
LDI R25,0x86
MOV R24,R22
LDI R23,0x00
LDI R22,0x00
BRMI PC+0x06
DEC R25
LSL R22
ROL R23
ROL R24
BRPL PC-0x04
LSL R24
LSR R25
ROR R24
BLD R25,7
RET
RCALL PC+0x0004
BRCC PC+0x02
SER R24
RET
LSL R25
SBC R0,R0
LSL R21
SBC R26,R26
LDI R30,0x80
LDI R31,0xFE
CP R1,R22
CPC R1,R23
CPC R30,R24
CPC R31,R25
BRCS PC+0x19
CP R1,R18
CPC R1,R19
CPC R30,R20
CPC R31,R21
BRCS PC+0x14
SUB R22,R18
SBC R23,R19
SBC R24,R20
SBC R25,R21
BRNE PC+0x08
EOR R0,R26
BREQ PC+0x0D
OR R18,R19
OR R18,R20
OR R18,R21
BRNE PC+0x05
RET
EOR R0,R26
BRNE PC+0x02
SBCI R26,0x01
LSR R26
SER R24
ADC R24,R1
ADC R24,R1
RET
CLI
RJMP PC-0x0000
NOP
NOP
NOP
NOP
NOP
NOP

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

Re: Mam idealne duty cycle 64/64 sekund? c.d.

Postautor: Ania30 » 9 lis 2018, o 00:50

#include <avr/io.h>
#include <util/delay.h> //Kwarc 16 MHz

void delayms( uint16_t millis ) {
while ( millis ) {

millis--;
}
}

main() {
unsigned int licznik0;


DDRB = (1<<PB3)|(1<<PB4);
PORTB|=(1<<PB3);
while ( 1 ) {



PORTB ^= (1<<PB3)|(1<<PB4);
_delay_us(128000000);
}

}

-------------------------------------------------------------------------------
.NOLIST
.INCLUDE "TN2313ADEF.INC"
;.INCLUDE "TN13ADEF.INC"
CLR R1
OUT 0x3F,R1
LDI R28,0xDF
OUT 0x3D,R28
RCALL PC+0x0004
RJMP PC+0x0017
RJMP PC-0x001B
RET
LDI R24,0x18
OUT 0x17,R24
SBI 0x18,3
LDI R25,0x18
IN R24,0x18
EOR R24,R25
OUT 0x18,R24
LDI R18,0x54
LDI R19,0x85
LDI R20,0x45
LDI R21,0x01
SUBI R18,0x01
SBCI R19,0x00
SBCI R20,0x00
SBCI R21,0x00
BRNE PC-0x04
RJMP PC+0x0001
RJMP PC+0x0001
NOP
RJMP PC-0x000F
CLI
RJMP PC-0x0000
NOP
NOP
NOP
NOP
NOP
NOP

[MOD]Nie pisz posta pod postem! Do tego służy edycja!
Temat 50% był już poruszany wielokrotnie, wyjaśniony, z przykładami.
Jeśli obszerne wyjaśnienia i przykłady to za mało, proszę zapoznać się z PODSTAWAMI programowania.
Temat 50% jest już po prostu nudny. Temat zamykam, kolejne podobne będą od razu usuwane!

Wróć do „AVR/AVR32”

Kto jest online

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