Witam
Chcąc budować układ przetwornika cyfrowo-analogowego. Zbudowałem układ zaprezentowany na schemacie ideowym.
Wyjście przetwornika zostało podłączone dla napięcia 5V.
Zaprogramowałem mikrokontroler AVR ATmegę 32 z zewnętrznym rezonatorem kwarcowym wynoszącym 11,0952 MHz.
Wykorzystałem tablicę 200. próbek sygnału sinusoidalnego . Timer 0 został ustawiony na tryb CTC , z pleskalerem 256 oraz OCR0 równym 215. Co generuje 50Hz przebiegu.
Kod Programu:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char tab[200]={132, 136, 140, 144, 148, 151, 155, 159, 163, 167, 171, 175, 178, 182, 186, 189, 193, 196, 199, 203, 206, 209, 212, 215, 218, 221, 224, 226, 229, 231, 233, 236, 238, 240, 242, 243, 245, 247, 248, 249, 250, 251, 252, 253, 254, 254, 255, 255, 255, 256, 255, 255, 255, 254, 254, 253, 252, 251, 250, 249, 248, 247, 245, 243, 242, 240, 238, 236, 233, 231, 229, 226, 224, 221, 218, 215, 212, 209, 206, 203, 199, 196, 193, 189, 186, 182, 178, 175, 171, 167, 163, 159, 155, 151, 148, 144, 140, 136, 132, 128, 123, 119, 115, 111, 107, 104, 100, 96, 92, 88, 84, 80, 77, 73, 69, 66, 62, 59, 56, 52, 49, 46, 43, 40, 37, 34, 31, 29, 26, 24, 22, 19, 17, 15, 13, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 15, 17, 19, 22, 24, 26, 29, 31, 34, 37, 40, 43, 46, 49, 52, 56, 59, 62, 66, 69, 73, 77, 80, 84, 88, 92, 96, 100, 104, 107, 111, 115, 119, 123, 128,};
unsigned char licznik=0;
int main(void)
{
// sinus 50Hz---------------------------------------------------
TCCR0 |=(1<<WGM01); // tryb CTC
TCCR0 |=(1<<CS02)|(1<<CS00); // pleskaler 256
OCR0=215;
TIMSK |=(1<<OCIE0);
sei();
while(1);
}
ISR(TIMER0_COMP_vect)
{
PORTA= tab[licznik];
licznik++;
if (licznik==200) licznik=0;
reti();
}
Chciałbym się zapytać co wykonałem nieprawidłowo, ponieważ podłączając układ wyjścia DAC oraz za filtrem. nie uzyskuje przebiegu sygnału. na oscyloskopie.
Chcąc budować układ przetwornika cyfrowo-analogowego. Zbudowałem układ zaprezentowany na schemacie ideowym.
Wyjście przetwornika zostało podłączone dla napięcia 5V.
Zaprogramowałem mikrokontroler AVR ATmegę 32 z zewnętrznym rezonatorem kwarcowym wynoszącym 11,0952 MHz.
Wykorzystałem tablicę 200. próbek sygnału sinusoidalnego . Timer 0 został ustawiony na tryb CTC , z pleskalerem 256 oraz OCR0 równym 215. Co generuje 50Hz przebiegu.
Kod Programu:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char tab[200]={132, 136, 140, 144, 148, 151, 155, 159, 163, 167, 171, 175, 178, 182, 186, 189, 193, 196, 199, 203, 206, 209, 212, 215, 218, 221, 224, 226, 229, 231, 233, 236, 238, 240, 242, 243, 245, 247, 248, 249, 250, 251, 252, 253, 254, 254, 255, 255, 255, 256, 255, 255, 255, 254, 254, 253, 252, 251, 250, 249, 248, 247, 245, 243, 242, 240, 238, 236, 233, 231, 229, 226, 224, 221, 218, 215, 212, 209, 206, 203, 199, 196, 193, 189, 186, 182, 178, 175, 171, 167, 163, 159, 155, 151, 148, 144, 140, 136, 132, 128, 123, 119, 115, 111, 107, 104, 100, 96, 92, 88, 84, 80, 77, 73, 69, 66, 62, 59, 56, 52, 49, 46, 43, 40, 37, 34, 31, 29, 26, 24, 22, 19, 17, 15, 13, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 15, 17, 19, 22, 24, 26, 29, 31, 34, 37, 40, 43, 46, 49, 52, 56, 59, 62, 66, 69, 73, 77, 80, 84, 88, 92, 96, 100, 104, 107, 111, 115, 119, 123, 128,};
unsigned char licznik=0;
int main(void)
{
// sinus 50Hz---------------------------------------------------
TCCR0 |=(1<<WGM01); // tryb CTC
TCCR0 |=(1<<CS02)|(1<<CS00); // pleskaler 256
OCR0=215;
TIMSK |=(1<<OCIE0);
sei();
while(1);
}
ISR(TIMER0_COMP_vect)
{
PORTA= tab[licznik];
licznik++;
if (licznik==200) licznik=0;
reti();
}
Chciałbym się zapytać co wykonałem nieprawidłowo, ponieważ podłączając układ wyjścia DAC oraz za filtrem. nie uzyskuje przebiegu sygnału. na oscyloskopie.
