Проблема вот в чем: Есть 3-х осевой акселерометр MMA7455L, есть мк ATmega16, необходимо получать информацию с акселерометра (его координаты x y z) по шине SPI на мк и потом передавать данные в комп. Поскольку я в этом деле не силен, но сделать надо полюбому, обращаюсь к добрым людям с криками о помощи. После долгих поисков, нашел в инете кое-какую инфу, а именно код программы для PIC контроллера, этот код реализует вродебы то что мне нужно, только для PIC, может кому не влом, посмотрит эту прогу и скажет как переделать ее под авр, желательно под мегу16? Если кто откликнется, буду ОООООчень благодарен!!!
вот код:
- Код: Выделить всё • Развернуть
#include <16F886.H>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#define ACC_CS PIN_C1
// SPI modes
#define SPI_MODE_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
#define SPI_MODE_1 (SPI_L_TO_H)
#define SPI_MODE_2 (SPI_H_TO_L)
#define SPI_MODE_3 (SPI_H_TO_L | SPI_XMIT_L_TO_H)
//----------------------------------
void Acc_Write_Register(int8 reg, int8 data)
{
output_low(ACC_CS);
spi_write(((reg & 0x3F) << 1) | 0x80);
spi_write(data);
output_high(ACC_CS);
}
//---------------------------------
int8 Acc_Read_Register(int8 reg)
{
int8 data;
output_low(ACC_CS);
spi_write((reg & 0x3F) << 1);
data = spi_read(0);
output_high(ACC_CS);
return(data);
}
//===============================
void main()
{
int8 result;
int8 Xdata, Ydata, Zdata;
output_high(ACC_CS);
delay_ms(10); // Minimum 1 ms required after power-up.
setup_spi(SPI_MASTER | SPI_MODE_0 | SPI_CLK_DIV_16); // 1.25 MHz sclk
Acc_Write_Register(0x16, 0x05);
delay_ms(30); // Minimum 20 ms required after exiting standby
// Make sure we read back 0x05 from the Control register.
result = Acc_Read_Register(0x16);
printf("Control register = %X \n\r", result);
while(1)
{
Xdata = Acc_Read_Register(0x06); //Read X,Y,Z outputs from Sensor
Ydata = Acc_Read_Register(0x07);
Zdata = Acc_Read_Register(0x08);
delay_ms(500);
printf("XYZ: %U, %U, %U \n\r", Xdata, Ydata, Zdata);
}
}
и ссылка с забугорного форума, откуда я взял этот код
В качестве эмулятора ипользую протеус, но поскольку там нет модели акселерометра, думаю, что надо его эмулировать, пока что пытаюсь организовать обмен по шине SPI между двумя мк (компилятор CVAVR, эмулятор протеус), но ничего не выходит, если никто не сможет помочь в переписывании программы для PIC под AVR, то хотя бы с SPI помогите.
Короче говоря помогите кто чем сможет:)