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ę

Jak zrobić kod według wskazówek r-mik

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

Jak zrobić kod według wskazówek r-mik

Postautor: Ania30 » 3 paź 2019, o 12:40

r-mik podał mi takie wskazówki jak zrobic kod,i abym poradziła się na innych forach jak to zrobić.
Na forach jakich byłam nikt nie potrafił zrobic kodu ,programu ,według wskazówek r-mik.
Czy ktoś tutaj wie jak zrobić taki kod według wskazówek r-mik.
Za pomoc z góry dziękuję.

Oto te wskazówki :

"Cały czas mowa o precyzyjnych częstotliwościach, współczynniku wypełnienia a uczepiłaś się najgorszego z możliwych rozwiązań mając sprzętowe sterowanie GPIO, gdzie trzeba liczyć każdy cykl maszynowy jak w latach 80.
W Generatorze DDS z EP 6/2018 jest sprzętowe sterowanie wyjściem:
void Timer1_Start(uint8_t dzielnik)
{
// OCR1B=dzielnik;
OCR1B=dzielnik;

//Output compare toggles OC1A pin
// TCCR1A |= 0x40; // COM1A = 1
TCCR1A |= 0x10; // COM1B = 1
//start timer without prescaler
TCCR1B = 0b00001001; // WGM 12=1, CS=1

DDRD |= _BV(PD4);
}

Uzyskasz DOKŁADNIE 50% bez liczenia cykli. Nie muszą być włączone przerwania ale mogą. Program główny może robić co chce a nie wpłynie to na generowany przebieg bez względu na to, czy przerwania będą włączone czy nie. Max częstotliwość to Fclk/2, uzyskaj taką przez delay. Taki program jest krótszy niż z delay. Jeśli częstotliwość jest zbyt duża należy timery połączyć w kaskadę.
Można także użyć timera w trybie PWM. Używając OCRxA można ustawić próg zliczania a co za tym idzie, precyzyjnie regulować częstotliwość.

Głupotą jest, mając możliwości sprzętowe, rozwiązywać problem w sposób programowy.
Uważasz, że nie mam racji? Napisz na innych forach i zweryfikuj moją wiedzę."

viewtopic.php?f=38&t=26188&start=80

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

Re: Jak zrobić kod według wskazówek r-mik

Postautor: Ania30 » 16 paź 2019, o 14:39

Może chodzi o taki kod,tylko dlaczego jest napięcie 2.5 Volt ,dla mnie to nawet lepiej jak jest 2.5 Volt ,niż jak 4.5 Volt.
Jak zrobić aby przy kwarcu 16 MHz mieć te 64/64 sekund ,bo teraz maksymalnie jest 32/32 ,przy kwarcu 8MHz jest 64/64 sekund.

#include <avr/io.h> //kwarc 16 MHz ,32/32sekundy ,2.5 Volt
main ()
{
DDRB = 255;
PORTB = 170;
TCCR1B |= (1 << WGM12); // Ustawia timer w tryb CTC
TCCR1A |= (1 << COM1A0); // Uruchomienie kanału A Compare Output timera 1 w trybie negacji
OCR1A = 65535;
TCCR1B |= 101; //preskaler 1024
while(1)
{
PORTB ^= 255;
}
}

// https://sites.google.com/site/qeewiki/b ... -atmega328

A niżej disassembly tego kodu C.

.NOLIST ; ,KWARC 16MHz ; 32/32 sekund ,ALL PB ,2.5 Volt
.INCLUDE "M328PDEF.INC"
JMP 0x00000034
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
JMP 0x0000003E
CLR R1
OUT 0x3F,R1
SER R28
LDI R29,0x08
OUT 0x3E,R29
OUT 0x3D,R28
CALL 0x00000040
JMP 0x0000005D
JMP 0x00000000
SER R24
OUT 0x04,R24
LDI R24,0xAA
OUT 0x05,R24
LDS R24,0x0081
ORI R24,0x08
STS 0x0081,R24
LDS R24,0x0080
ORI R24,0x40
STS 0x0080,R24
SER R24
SER R25
STS 0x0089,R25
STS 0x0088,R24
LDS R24,0x0081
ORI R24,0x65
STS 0x0081,R24
IN R24,0x05
COM R24
OUT 0x05,R24
RJMP PC-0x0003
CLI
RJMP PC-0x0000

Wróć do „AVR/AVR32”

Kto jest online

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