Пятница, 29.03.2024, 11:29
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Внешний АЦП + ATtiny2313
Частота работы МК 1МГц, те внутренний генератор на 4МГц и делитель а 4 CLKPR=2;.
На R1 и R2 собран делитель напряжения, на котором при входном напряжение 18V на выходе ~5V.

Code

#include <tiny2313.h>
#include <delay.h>

typedef unsigned char byte;
typedef unsigned int word;

byte dn=0;
word dig_shn;
word led_num=0;

//Таблица цифр для семисегментника
byte led_table[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};

void dig_show() { //Здесь отображаем разряды
PORTD|=0xf; //Не показываем ни чего
if (dn==0) dig_shn=led_num; //Если первый разряд обновляем переменную
PORTB=led_table[dig_shn%10]; //Извлекаем разряд
if (dn==2) PORTB|=0x80; //Если третий разряд кажем точку
dig_shn/=10; //Сдвигаем разряд вправо
PORTD&=~(1<<dn); //Показываем разряд
dn++;
if (dn>3) dn=0;
}

interrupt [TIM0_OVF] void timer0_ovf_isr(void) { //Прерывание переполнения таймера 0
dig_show();
}

byte adc_read() {  
byte i,n;
PORTD.4=0; //CS=0;
delay_us(10);
for (i=0;i<10;i++) { //Читаем 10 битов
PORTD.5=1; //CLK=1
delay_us(10);
n<<=1; //Сдвигаем биты влево
n|=PIND.6; //Читаем бит DO
PORTD.5=0; //CLK=0
delay_us(10);
}
PORTD.4=1; //CS=1;
return n;
}

void main(void) {
#pragma optsize-
CLKPR=0x80;
CLKPR=2;

#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTA=0;
DDRA=0;
PORTB=0;
DDRB=0xff;
PORTD=0x50;
DDRD=0x3f;

TCCR0A=0;
TCCR0B=0;
TCNT0=0;
OCR0A=0;
OCR0B=0;

TIMSK=2;

ACSR=0x80;

#asm("sei");

TCCR0B=2;

while (1) {
led_num=adc_read()*7.058824; //Читаем АЦП, число с АЦП 0-255
delay_ms(10);
}

}
Категория: Учимся работать с AVR | Добавил: HiSER (13.05.2010) | Автор: Литвин Артём
Просмотров: 22932 | Комментарии: 4 | Теги: ацп, ext, adc, attiny2313 | Рейтинг: 0.0/0 |
Всего комментариев: 4
4 S5  
0
Скопировал текст программы в AVR Studio, и выдало кучу ошибок.

../atmega_pult_cv_cpp.c:1:23: tiny2313.h: No such file or directory
../atmega_pult_cv_cpp.c:2:21: delay.h: No such file or directory
../atmega_pult_cv_cpp.c: In function `dig_show':
../atmega_pult_cv_cpp.c:15: error: `PORTD' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:15: error: (Each undeclared identifier is reported only once
../atmega_pult_cv_cpp.c:15: error: for each function it appears in.)
../atmega_pult_cv_cpp.c:17: error: `PORTB' undeclared (first use in this function)
../atmega_pult_cv_cpp.c: At top level:
../atmega_pult_cv_cpp.c:25: error: `TIM0_OVF' undeclared here (not in a function)
../atmega_pult_cv_cpp.c:25: error: syntax error before "void"
../atmega_pult_cv_cpp.c: In function `adc_read':
../atmega_pult_cv_cpp.c:31: error: `PORTD' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:31: error: parse error before numeric constant
../atmega_pult_cv_cpp.c:32: warning: implicit declaration of function `delay_us'
../atmega_pult_cv_cpp.c:34: error: parse error before numeric constant
../atmega_pult_cv_cpp.c:37: error: `PIND' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:37: error: parse error before numeric constant
../atmega_pult_cv_cpp.c:41: error: parse error before numeric constant
../atmega_pult_cv_cpp.c: At top level:
../atmega_pult_cv_cpp.c:45: warning: return type of 'main' is not `int'
../atmega_pult_cv_cpp.c: In function `main':
../atmega_pult_cv_cpp.c:46: warning: ignoring #pragma optsize
../atmega_pult_cv_cpp.c:47: error: `CLKPR' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:53: error: `PORTA' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:54: error: `DDRA' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:55: error: `PORTB' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:56: error: `DDRB' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:57: error: `PORTD' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:58: error: `DDRD' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:60: error: `TCCR0A' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:61: error: `TCCR0B' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:62: error: `TCNT0' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:63: error: `OCR0A' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:64: error: `OCR0B' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:66: error: `TIMSK' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:68: error: `ACSR' undeclared (first use in this function)
../atmega_pult_cv_cpp.c:70:3: invalid preprocessing directive #asm
../atmega_pult_cv_cpp.c:76: warning: implicit declaration of function `delay_ms'

тест программы работает в какой среде? и почему бы не разместить архив с файлами ?
объясните как и в чем надо сделать чтоб программа работала.
спасибо.


3 neox  
0
HiSER болшое спасибо все сразу получилос с вашим советом. я вид говорю хороший сайт ВСЕ ПО ДЕЛУ!!!

2 HiSER  
0
В даташите как бы все доступно написано.
Надо на него отправить 16 бит.

1й байт команда:
7 6 5 4 3 2 1 0
- - c1 c0 - - - p0
c1,c0 команда 01 запись данных
p0 выбор потенциометра т.е. 1

2й байт данные 0-255

PORTx.n=0; //Куда будет подключен CS потенциометра
spi(0x17); //Команда 0b00010001
spi(0x00); //Здесь данные
PORTx.n=1;


1 neox  
0
очень хороший сайт, многому научился здес! вопрос: я так понимаю функция byte adc_read() это протокол "spi"
если да то как записывать в функцию например для датчика MCP41010 это Цифровой потенциометр чтобы менялос сопротивление? я пробывал аппаратным spi на atmega8 но не получилос sad разясните пожалуйсто

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Какой МК вы используете?
Всего ответов: 3228
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz