Witam.
Potrzebuje pomocy przy sprawnym uruchomieniu SPI na ATmega128. Chce wysyłać po SPI do 12 bitowego przetwornika DAC (MCP4921) dane. Przetwornik jest podłączony do standardowych wyjść SPI w atmedze, MOSI (PB2), SCK (PB1), LDAC(PB4), SC(PB5 lub PB0). Piny są ustawione jako wyjścia. Najpierw sygnał SC ściągany jest do zera, następnie następuje zapis danych do rejestru SPSR, potem standardowe podniesienie SC do 1 i zapis o na linie LDAC. Ale niestety przetwornik nie działa. Męczę się z tym już od trzech dni i nic. Nie wiem czy u mnie w kodzie jest gdzieś błąd czy przetwornik jest uszkodzony?
Może ktoś miał do czynienia z tym przetwornikiem i miał podobny problem.
Z góry dziękuje za wszelka pomoc.
Potrzebuje pomocy przy sprawnym uruchomieniu SPI na ATmega128. Chce wysyłać po SPI do 12 bitowego przetwornika DAC (MCP4921) dane. Przetwornik jest podłączony do standardowych wyjść SPI w atmedze, MOSI (PB2), SCK (PB1), LDAC(PB4), SC(PB5 lub PB0). Piny są ustawione jako wyjścia. Najpierw sygnał SC ściągany jest do zera, następnie następuje zapis danych do rejestru SPSR, potem standardowe podniesienie SC do 1 i zapis o na linie LDAC. Ale niestety przetwornik nie działa. Męczę się z tym już od trzech dni i nic. Nie wiem czy u mnie w kodzie jest gdzieś błąd czy przetwornik jest uszkodzony?
#define DDR_SPI DDRB //Definicje pinów używanych do SPI
#define SPE 6
#define MSTR 4
#define SPI2X 0
#define SPIF 7
void init_masterSPI(void) //Inicjalizacja modułu SPI
{
DDR_SPI = 0x37; //Ustawianie MOSI CS LDAC SCK SS jako wyj
PORTD=0x37; //porty w stanie wysokim
sbi(SPCR,SPE); //Włączenie modułu SPI
sbi(SPCR,MSTR); //Moduł SPI w trybie master
sbi(SPSR,SPI2X); //Podwojenie prędkości transmisji
}
void sent_SPI(char cData) //Start transmisji
{
SPDR = cData; //Zapis danej do rejestru SPDR i jej wyslanie
while(!(tbi(SPSR,SPIF))); //Czeka na koniec transmisji
}
int main(void)
{
.
.
.
int warogrz;
char mswarogrz;
char lswarogrz;
init_masterSPI(); //Wywolanie funkcji inicjującej moduł SPI
sbi(PORTB,4); //Linia LDAC w stanie wysokim na czas zapisu
sbi(PORTB,0); //Start transmisji poprzez zmiane CS
cbi(PORTB,0); //Start transmisji poprzez zwolnienie CS
mswarogrz = warogrz >> 8;
lswarogrz = warogrz;
sent_SPI((0x70) | mswarogrz); //Zapis do DACa, Buforowany, Gain=1
sent_SPI(lswarogrz); //Output power down control bit lswarogrz
sbi(PORTB,0); //Stop transmisji poprzez zmiane CS
cbi(PORTB,4); //Zerowanie linii LDAC
sbi(PORTB,4);
}
Może ktoś miał do czynienia z tym przetwornikiem i miał podobny problem.
Z góry dziękuje za wszelka pomoc.