ADUC831 ADC DAC przetwornik cyfrowo-analogowy i analogowo-cyfrowy

wtorek, 07 listopada 2006 00:49 Dominik Łuczak
Drukuj
Ocena użytkowników: / 11
SłabyŚwietny 

Program prezentujący przetwornik cyfrowo-analogowy i analogowo-cyfrowy.

/*

Name: ADUC831_ADC_DAC

 

Copyright: cyberowca

Author: Dominik Łuczak

Date: 06-11-06 21:00

Description: Obsługa przetwornika analogowo-cyfrowego (ADC) i cyfrowo-analogowego (DAC)

Kod sprawdzony na kompilatorze uVision firmy Keil Elektronik.

*/

 

 

//Biblioteki

#include<aduc831.h>

 

///////////////////////////

//Prototypy funkcji

/////////////////////////

void DELAY(int); //opóznienie przez pętle

 

 

////////////////////////////////////////////////////////////

//Funkcja obsługująca przerwanie timera2

///////////////////////////////////////////////////////////

/*

Przyk&lstrok;adowy obraz

 

Z powyższego rysunku widać iż 4 strasze bity danych ADCDATAH nie zawieraja informacji o sporóbkowanym sygnale, dlatego założyłem maske ADCDATAH&=~(11110000) oznaczającą zerowanie 4 najstarszych bitów.

Iloczyn logiczny z maską ~(11110000) gdzie tylda (~) oznacza negacje logiczną otrzymująć 00001111. Dla przypomnienia iloczyn logiczny:

0&0=0

0&1=0

1&0=0

1&1=1

 

 

 

Powyższa tabela zawiera wektor przerwań. Timer2 ma pozycje 6 dlatego przy słowie interrupt znajduje się 6 w poniższym kodzie.

DAC0H i DAC0L to odpowiednio 8 straszych i 8 młodzych bitów danchy przetwornika cyfrowo-analogowego.

*/

void przerwanie() interrupt 6{

ADCDATAH&=~(11110000); //skrucenie 16bitów ADC

//do 12bitów DAC

//rozmiar DAC-12bitów

DAC0H =ADCDATAH; //4 starsze bity DAC

DAC0L =ADCDATAL; //8 młodszych bitów DAC

 

 

TL2 = 0xD2; //ustawienie timera2

TH2 = 0xFF; //młodze i starsze 8bitów

//Progaram jest przerywany odkładany na stos i wykonywana jest funkcja przerwania po jej //wykonaniu należy zdjąć danie ze stosu, uzyskujemy to dzięki return.

return;

}


/****************/

//FUNKCJA GŁÓWNA

/****************/

 

 

void main(void){

//Inicjalizacja

 

//0x9E=10011110b

/*ADCCON1 = 0x9E; oznacza:

ADCCON1.7=1

ADCCON1.6=0

ADCCON1.5=0

ADCCON1.4=1

ADCCON1.3=1

 

ADCCON1.2=1

ADCCON1.1=1

ADCCON1.0=0 */

/////////////////////////////

ADCCON1 = 0x9E; //włączenie ADC i z>

/////////////////////////////

 

//0x03=00000011b

ADCCON2 = 0x03;

 

 

RCAP2L = 0xFF; //wartość przeładowania timera2

RCAP2H = 0xFF;

 

//0x0D=00001101

DACCON = 0x0D; //włączenie DAC0 (12bitowy)

 

TL2 = 0xD2; //ustawienie wartości początkowej 2*8bitów

TH2 = 0xFF; //timera2

Przyk&lstrok;adowy obraz

 

//Tabela wyjaśnia w zupełności poniższe działania

 

EA = 1; //globalne zezwolenie na przerwania

EADC = 1; //zezwolenie przerwania od ADC

TR2 = 1; //start Timer2

 

 


//////////////////////////////

//Petla nieskończona

/////////////////////////////

for (;;){

DELAY(32); //Przykładowa funkcja, można ją pominąć

}

}

/****************/

//KONIEC FUNKCJI GŁÓWNEJ

/****************/


//////////////////////////

//Definicje funkcji

/////////////////////////

 

void DELAY(int dlugosc){

while (dlugosc >=0)

{dlugosc--;}

}