Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 06:55   #1
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
Радость микроконтроллер

посоветуйте микроконтроллер для не дорогой и имеющий следующие характеристики:
USB интерфейс
АЦП
несколько портов ввода ввывода
wanes101 вне форума Ответить с цитированием
Старый 02.07.2010, 09:46   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

USB интерфейс - если недорогой, то делайте эмуляцию на ATmel, статья есть на нашем форуме, если средней цены, то есть AT90USB серия, там даже бут-загрузчик заводской (вирт-машина), прошивку можно по USB, загружает само, там HOST режим

АЦП - лучше все-таки внешний, поверьте ничего сложного, к примеру (см. рисунок и вложения):
Код:
#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); 
} 

}
...а так AT90USB646_647_1286_12871 тоже содержит АЦП

- несколько портов ввода ввывода - это у всех
Изображения
Тип файла: jpg 39311501.jpg (70.4 Кб, 141 просмотров)
Вложения
Тип файла: zip AT90USB128_загрузчик по USB.zip (238.4 Кб, 14 просмотров)
Тип файла: pdf 1923_AT90USB646_647_1286_12871.pdf (3.24 Мб, 18 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц