Witam,
Od jakiegoś czasu zmagam się z pewnym problemem. Udało mi się stworzyć generator dds (głównie w oparciu o MiniDDS) na atmedze16 i przy standardowych próbkach (sin, trojkąt, piąa, kwadrat), chodzi bezbłędnie. Problem w tym, że każda z tablic ma dokładnie 256 wartości, a ja chciałbym użyć tablicy np. 20- lub 3000-bajtowej. Przy zastosowaniu 20, oscylogram poprawnie pokazuje pierwsze 20, a potem daje same zera, przy wiekszych od 256, pomija pozostałe bajty.
Głównym elementem kodu jest przerwanie timera, gdzie odbywa się "generowanie" próbek
Pytanie, jak ograniczyć ZL, żeby nie przekraczało np. wartości 0x30, a mimo to działało ciągle jak DDS oraz jak zmienić kod, żeby analogicznie ZH (r31), pobierało wartości powyżej 256 bajtów
Od jakiegoś czasu zmagam się z pewnym problemem. Udało mi się stworzyć generator dds (głównie w oparciu o MiniDDS) na atmedze16 i przy standardowych próbkach (sin, trojkąt, piąa, kwadrat), chodzi bezbłędnie. Problem w tym, że każda z tablic ma dokładnie 256 wartości, a ja chciałbym użyć tablicy np. 20- lub 3000-bajtowej. Przy zastosowaniu 20, oscylogram poprawnie pokazuje pierwsze 20, a potem daje same zera, przy wiekszych od 256, pomija pozostałe bajty.
Głównym elementem kodu jest przerwanie timera, gdzie odbywa się "generowanie" próbek
.org 0x0026
cli ;wylacz przerwania
add r28,r24 ;dodaj akumulator
adc r29,r25
adc r30,r26 ; ZL
lpm ;zaladuj XL:XH do r0
out OCR2,r0 ; pwm
clr temp ;czyszczenie licznika
out TCNT0, temp
sei ;przywroc przerwania
reti ;wroc z przerwania
Pytanie, jak ograniczyć ZL, żeby nie przekraczało np. wartości 0x30, a mimo to działało ciągle jak DDS oraz jak zmienić kod, żeby analogicznie ZH (r31), pobierało wartości powyżej 256 bajtów