Нужна программная реализация получения 12 бит от ADC124s101 на Atmega32 . Пробывал опрашивать как на прямую так и с помощью прерывания ,по моим подсчетам эта микросхема должна выдавать все 12 бит через каждый мегахерц. А на самом деле получается около раза в секунду. Выводится все на жки в таком порядке: на одной знакопозиции 0909 4b4b 0909 4a4a 0909 4949 0909 4949 Короче сейчас дело не в точности показаний а в том чтобы вывести 0949 за место 09094949. Может я че в програмке напутал Кто силен подскажите! #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include <util/delay.h> #include <stdio.h> #include <avr/eeprom.h>
#define bitset(var,bitno) ((var) |= 1 << (bitno)) #define bitclr(var,bitno) ((var) &= ~(1 << (bitno)))
char dat0=0,dat1=0; //переменные, 8бит для dat0 и 4бита для dat1 char revers=0; ISR(SPI_STC_vect) // вектор прерывания для окончания посылки байта { while(revers==0) // что-то типа реверса за одно прохождение { // опрашавается одна часть 12 бит dat0 = SPDR; // revers=1; // } // // while(revers==1) // { // dat1 = SPDR; revers=0; } bitset(SREG,7); SPDR = 0x00; }
int main(void) {
DDRB=0xb0; // настройка порта b SPCR=0xd3; // настройка spi
SPDR = 0x00; bitset(SREG,7); // включаем прерывание
while(1) // вечный цикл
return (0); }
|