logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Budowa przetwornika cyfrowo-analogowego z AVR ATmega32, rezonator 11,0952 MHz, 50Hz

flagmanski 22 Wrz 2022 21:30 456 3
  • #1 20203276
    flagmanski
    Poziom 3  
    Witam

    Chcąc budować układ przetwornika cyfrowo-analogowego. Zbudowałem układ zaprezentowany na schemacie ideowym.
     Budowa przetwornika cyfrowo-analogowego z AVR ATmega32, rezonator 11,0952 MHz, 50Hz
    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.
    ad558S..pdf Download (336.37 kB)
  • #2 20203305
    tmf
    VIP Zasłużony dla elektroda
    Zapewne program się wykrzacza na tym reti(). Skąd pomysł, aby umieścić taką instrukcję?
    Ponadto raczej lepiej byłoby aby zmienna licznik była zadeklarowana jako static w ISR.
  • #3 20203395
    mpier
    Poziom 29  
    Napisz jeszcze jak Ci wyszło to 50Hz, skąd preskaler 256 i czego spodziewasz się zapisując 256 do zmiennej char tab.

    Pozdrawiam.
  • Pomocny post
    #4 20204748
    juntom
    Poziom 19  
    Nie ustawiłeś portu jako wyjścia.
    Pozdr.
REKLAMA