|
|
Знаете ли Вы, что ... | |
...для каждой темы существует свой раздел. Изучите структуру форума. Если соответствующего раздела нет, то всегда есть раздел "Разное" :) | |
<< Предыдущий совет - Случайный совет - Следующий совет >> |
Ответить |
|
Опции темы | Опции просмотра |
29.04.2009 15:53 | #22 |
Н.П.О. Академприбор
Инженер-конструктор
Сообщений: 55
+ 0
1/1
– 0
0/0
|
А вы про какую тему спрашиваете? Про "Универсальное устройство", которое неизвестно что делает и неизвестно кому оно такое нужно, а также неизвестно кто его делать будет? Или про робатизированный пылесос ?
|
|
Ответить |
02.05.2009 12:40 | #23 |
В\ч Ташкент
инженер
Сообщений: 55
+ 2
3/3
– 0
0/0
|
Привет Кирилл.
Как я понял, в начале речь шла о создании некого устройства с нуля, и как предположение - речь идет о совместной разработке некого устройства новичками в этом деле и опытными разработчиками, которые делятся своим опытом и направляют первых в нужное направление! Ну, так как? Есть кто из опытных, которые готовы помочь новичкам в начинании?! |
|
Ответить |
02.05.2009 18:09 | #24 |
Н.П.О. Академприбор
Инженер-конструктор
Сообщений: 55
+ 0
1/1
– 0
0/0
|
Я думаю новичка что новичкам надо следовать мудрости "от простого к сложному", а не наоборот. Новичкам бы я лучше предложил серию примеров с выбранным контроллером. Каждый пример должен в себя включать не более 2-х перефирийных узлов. Например: "Сегодня мы рассмотрим работу с таймером. Настраивается он так-то и так-то. И так далее... А теперь с полученными знаниями мы реализуем часы(генератор и т.д.)." или "Сегодня мы рассмотрим работу с ШИМ или АЦП или модулем захвата или модулем компараторов". Тогда это будет более эффективно(в плане понимания), чем предлагать разрабатывать "монстра" неизвестно для чего служащего.
|
|
Ответить |
10.05.2009 15:40 | #25 |
В\ч Ташкент
инженер
Сообщений: 55
+ 2
3/3
– 0
0/0
|
Всем привет!
Помогите разобраться с DS1620! (цифровой термометр термостат описание здесь: "нttp://www.itis.spb.ru/DALLAS/ds1620.нtm"). В общем так: у меня в наличие есть прибор DS1620, МК ATmega8, 4х7сегмнт. матрица (для динамик. индикации) думаю в качестве первого изделия с МК сойдет - прибор в быту пригодится. Вопрос: если я пишу программу на С, то какой тип переменной подойдет для аккумулятора результата от DS1620? код программы (IAR) (я отбросил все лишнее, оставил только функцию: запись(команда), чтение(результат)): ================================================== ===== #include <iom8.h> #include <intrinsics.h> //#include <stdio.h> #define DQ PORTD_Bit0 #define CLK PORTD_Bit1 #define RST PORTD_Bit2 #define DIR DDRD_Bit0 void ds1620_write(int cmd); unsigned char ds1620_read(void); void main(void) { PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xFF; TCCR0=0x00; TCNT0=0x00; TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; while(1) { RST=1; ds1620_write(0xEE); // старт конверт. RST=0; __delay_cycles(1000); RST=1; ds1620_write(0xAA); // чтение результата конверт. ds1620_read(); RST=0; __delay_cycles(1000000); } } void ds1620_write(int cmd) //LB first { for(int i=0;i<9 { CLK=1; DQ= ((cmd >> ++i) &1); // сдвигом в право вывожу с PORTD.0 на вход DQ DS1620 9-ти битную команду CLK=0; } } unsigned char ds1620_read() { unsigned int temp_read; for (int i=0; i<9; i++) { while(CLK!=1) { temp_read=(temp_read)|(DQ&1); // temp_read =9-ти битному результату с пина DQ DS1620 + лог И =1 CLK=1; } CLK=0; temp_read=(temp_read<<i); } CLK=0; return temp_read; } ================================================== ==== Чтение температуры проходит некорректно, temp_read= 0 либо FF, что в коде не так, может кто подскажет? |
|
Ответить |
12.05.2009 14:20 | #26 |
"Ok-saroy textile" MChJ
начальник отдела АСУ
Сообщений: 44
+ 1
1/1
– 0
1/1
|
1. Самая грубая ошибка - Во время чтения из датчика пин DQ надо переводить на ввод (DDRD.0=0, затем обратно.
2. В принципе, на новом датчике конф. C0H можно не выставлять - работать будет. 3. команда записи в 3 wire: for(int i=0;i<9 { CLK=1; // здесь нужна небольшая пауза для того, чтобы установился уровень. DQ= ((cmd >> ++i) &1); // здесь тоже надо подождать CLK=0; } 4. Команда чтения: unsigned char ds1620_read() { unsigned int temp_read; for (int i=0; i<9; i++) { while(CLK!=1) // Зачем? такт задаёт только главное устройство (МК) { temp_read=(temp_read)|(DQ&1); CLK=1;// Опять же, уровни на шине не выставляются и исчезают мгновенно } CLK=0; temp_read=(temp_read<<i); // а может temp_read=(temp_read<<1); ? } CLK=0; return temp_read; } Для сравнения использование датчика DS18B21 в CVAVR - связь по одной ноге: ------------------------------------------------ #include <mega48.h> // 1 Wire Bus functions #asm .equ __w1_port=0x0B ;PORTD .equ __w1_bit=0 #endasm #include <1wire.h> // DS1820 Temperature Sensor functions #include <ds1820.h> ------------------------------------------------ w1_init(); - Используется 1 раз для запуска шины 1WIRE ds18b20_temperature() - возвращает float значение температуры или -9999 если ошибка или отсутствует датчик Если вам не нужен аппаратный термостат( без МК) ИМХО с DS1821 возни на порядок меньше - работает сходу. |
|
Ответить |
12.05.2009 15:01 | #27 |
Н.П.О. Академприбор
Инженер-конструктор
Сообщений: 55
+ 0
1/1
– 0
0/0
|
Судя по временной диаграмме в функции ds1620_write вы неправильно загоняете данные. Вы сначала выставляете тактовый сигнал, а потом сдвигаете данные, а надо сначала выставить бит данных, а потом протактировать, т.е. сделать так
DQ= ((cmd >> ++i) &1); CLK=1; //Вставить задержку, чтобы тактовый сигнал не превышал 1.75 МГц CLK=0; Ножкой RST дёргать лучше внутри функций. Это что за дурость? while(CLK!=1) temp_read перед считыванием надо обнулить. Тактировать лучше { temp_read=(temp_read)|(DQ&1); CLK=1; } CLK=0; CLK=0; // задержка CLK=1; |
|
Ответить |
21.05.2009 11:30 | #29 |
Сообщений: 22
+ 2
0/0
– 0
0/0
|
Ну если действительно мега48 стоит в районе 3000 сум, то я побежал покупать)
И еще один вопрос: я раньше брал мегу8535 в Радиодеталях, но схемами "5 проводков" и "STK200/300 на 5 проводах" у меня он не опознавался. Каким программатором эту мегу программировать можно? И если можешь, Jahongir, помоги плиз с сборкой AVR910 программатора |
|
Ответить |
|