Страница 1 из 1

Вопросы по CVAVR.

Добавлено: 27 сен 2014, 00:25
ATM67
Вопрос первый, собственно касается библиотеки на термодатчик DS1820.
Назрела необходимость изготовить многоточечный термометр. При параллельном включении датчиков в некий массив записываются коды датчиков. Так вот, хотелось-бы узнать в какой последовательности эти датчики "прописываются". Например в нулевую ячейку массива записывается датчик с наименьшим кодом, в первую ячейку со следующим меньшим кодом и так по возрастающей ?! Или как-то по другому.

Re: Вопросы по CVAVR.

Добавлено: 29 сен 2014, 07:48
ATM67
Чтобы облегчить работу с датчиками решил подключать их на индивидуальные пины. Правда это требует замены "камня" с атмери8 на атмегу16.

Re: Вопросы по CVAVR.

Добавлено: 09 окт 2014, 17:02
koolhatcker
ATM67, у производителя всё расписано... http://pdfserv.maxim-ic.com/en/an/AN187.pdf

Re: Вопросы по CVAVR.

Добавлено: 09 окт 2014, 18:01
Serjik
ATM67 писал(а):Так вот, хотелось-бы узнать в какой последовательности эти датчики "прописываются". Например в нулевую ячейку массива записывается датчик с наименьшим кодом, в первую ячейку со следующим меньшим кодом и так по возрастающей ?! Или как-то по другому.
на самом деле удобнее и проще если все будет по однопроводной шине работать ... зачем каждый на свой пин? ну собрать ... если есть сомнения проверить адреса какие датчики какой номер, все равно на них сверху не написано... все равно определять какой куда. Не вижу смысла :no: поменять местами в случае чего. В сети куча примеров для работы с несколькими датчиками.

Re: Вопросы по CVAVR.

Добавлено: 11 окт 2014, 05:57
ATM67
Serjik писал(а):все равно определять какой куда. Не вижу смысла :no: поменять местами в случае чего.
Как датчики "прописываются" разобрался. Получается не очень удобно, например если перегорела одна лампочка в люстре и чтоб её заменить надо "перетусовать", (физически или программно) все лампочки для корректной работы этой люстры. Параллельное подключение оправданно в двух случаях, это экономия пинов камня или использования готовой библиотеки в CVAVR.

Re: Вопросы по CVAVR.

Добавлено: 11 окт 2014, 12:31
koolhatcker
ATM67, про люстру совсем ничего не понятно. Какая связь между лампочкой и датчиком? Схема есть? :-)

Re: Вопросы по CVAVR.

Добавлено: 13 окт 2014, 23:01
ATM67
koolhatcker писал(а):ATM67, про люстру совсем ничего не понятно. Какая связь между лампочкой и датчиком? Схема есть? :-)
Про люстру... это я так, вольная трактовка проблемы которая мне не нравится.
А по существу, при параллельном подключении датчиков на один пин. Коды датчиков записываются в массив, от меньшего значения к большему, (может на оборот но это не важно). Далее контроллеру нужно "объяснить" :) какой датчик что контролирует, например при помощи указателей или переписывая код датчика куда надо. Естественно это можно делать и в "железе", датчик с наименьшим кодом отвечает за первую контролируемую точку , следующий за вторую и т.д.
Так вот если один из датчиков "сдохнет", (вот здесь аналогия с лампочкой из люстры), нужно всю операцию по "переселению" датчиков повторять.
ATM67 писал(а):...Получается не очень удобно, например если перегорела одна лампочка в люстре и чтоб её заменить надо "перетусовать", (физически или программно) все лампочки для корректной работы этой люстры...

Re: Вопросы по CVAVR.

Добавлено: 14 окт 2014, 09:48
Serjik
ATM67 писал(а):Так вот если один из датчиков "сдохнет", (вот здесь аналогия с лампочкой из люстры), нужно всю операцию по "переселению" датчиков повторять.
задаю вопрос всегда всем. Какая-то конкретная задача в которой датчики дохнут как мухи? или это спортивный интерес? Из постановки задачи - решать можно по разному. если это конкретный случай можно и подобрать датчик и ... ну в общем-то трудно говорить не зная даже количество датчиков, расстояние до них условия размещения и т.п.

Re: Вопросы по CVAVR.

Добавлено: 14 окт 2014, 18:34
koolhatcker
ATM67, если это какой-то пульт, то в него просится дисплей и клава. А дальше - подключайте каждый датчик к пульту через перемычку (джампер как на материнках) и не вижу проблем...

Re: Вопросы по CVAVR.

Добавлено: 15 окт 2014, 08:16
ATM67
Делаю твердотопливный котел. На производстве где арендуем помещение пока греемся "буржуйками". Есть желание прикрутить к новому котлу автоматику управления.
При ближайшем приближение требуется контроль шести точек температуры. Из них три точки это потребители, три контура отопления. Четвертый датчик температура дымогазов. Пятый температура котла подачи. Шестой температура котла обратки, возможно обратку контролировать не придется тогда этот датчик не понадобится.
Контроллер должен управлять четырьмя водяными насосами, три насоса потребителей и четвертый насос котла.
Далее управление дымососом и заслонкой первичного/вторичного воздуха, желательно по ПИД, но для меня это пока темный лес.
Три режима работы. Первый рабочий, на полную катушку. Второй дежурный, поддержание некоторой температуры в ночное время. Третий поддержание некой минимальной температуры, чтоб не разморозить систему отопления например при длительных выходных, (Новый Год! :company: ). Подключение электро котла.
Ну и естественно контроль за уровнем теплоносителя и различными "алармами".
Расстояние до датчиков при измерений температур в помещениях от двух до тридцати метров. Если контролировать температуру в контурах теплоносителя, то все датчики в пределах котельни, 2 - 3 метра.

Re: Вопросы по CVAVR.

Добавлено: 15 окт 2014, 13:32
aegis
ПИД думаю что не нужен, потому как система реально сильно инерционная. я про подобные вопросы думаю (тоже автоматику к твердотопливнику мечтаю сделать). так реально время между реагированиями будет не меньше пары-пяти минут пока вода по контуру проскочит, поэтому пропорционального компонента будет достаточно думаю... во всяком случае у себя так хочу сделать. но за программирование еще только сажусь

Re: Вопросы по CVAVR.

Добавлено: 16 окт 2014, 06:49
ATM67
aegis писал(а):ПИД думаю что не нужен, потому как система реально сильно инерционная...
Вот это меня тоже смущает.
Здесь "http://www.forumhouse.ru/threads/251616/" обсуждается автоматика. Пока выявляется истина, програмлю модули отвечающие за переферию. "Математический" модуль пока осмысливается.

Re: Вопросы по CVAVR.

Добавлено: 12 июл 2015, 01:34
NikRoman
Привет всем. Тоже начал изучать программирование на Си в CVAVR. Хочу с помощью Arduino nano разгрузить ЦП, а так же использовать его как переходник с USB на контроллер ЧПУ станка.
Появилась проблема при синхронизации скорости USART с компьютером.
Код, автоматически генерируемый CVAVR нормально работает в Proteus, но при прошивке реального железа USART работает в 2 раза быстрее.
То есть при забитой в камень скорости 9600 бод- на терминале приходится ставить 19200 -иначе получаю мусор, вместо "Hello world!"
Прошивал средствами CVAVR, также пробовал XLoader-результат один.
Пробовал разные терминалы: Монитор последовательного порта Arduino, Терминал CVAVR, свой терминал.
Написал для проверки камня скетч в ArduinoIDE, прошил средствами ArduinoIDE- всё работает корректно- везде 9600.

Привожу сборку кусков кода CVAVR:
Показать/Спрятать
/* CLKPR - Clock Prescale Register */
#define CLKPS0 0 // Clock Prescaler Select Bit 0
#define CLKPS1 1 // Clock Prescaler Select Bit 1
#define CLKPS2 2 // Clock Prescaler Select Bit 2
#define CLKPS3 3 // Clock Prescaler Select Bit 3
#define CLKPCE 7 // Clock Prescaler Change Enable

// Crystal Oscillator division factor: 2
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (1<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

/* ***** USART0 *********************** */
/* UDR0 - USART I/O Data Register */
#define UDR0_0 0 // USART I/O Data Register bit 0
#define UDR0_1 1 // USART I/O Data Register bit 1
#define UDR0_2 2 // USART I/O Data Register bit 2
#define UDR0_3 3 // USART I/O Data Register bit 3
#define UDR0_4 4 // USART I/O Data Register bit 4
#define UDR0_5 5 // USART I/O Data Register bit 5
#define UDR0_6 6 // USART I/O Data Register bit 6
#define UDR0_7 7 // USART I/O Data Register bit 7

/* UCSR0A - USART Control and Status Register A */
#define MPCM0 0 // Multi-processor Communication Mode
#define U2X0 1 // Double the USART transmission speed
#define UPE0 2 // Parity Error
#define DOR0 3 // Data overRun
#define FE0 4 // Framing Error
#define UDRE0 5 // USART Data Register Empty
#define TXC0 6 // USART Transmitt Complete
#define RXC0 7 // USART Receive Complete

/* UCSR0B - USART Control and Status Register B */
#define TXB80 0 // Transmit Data Bit 8
#define RXB80 1 // Receive Data Bit 8
#define UCSZ02 2 // Character Size
#define TXEN0 3 // Transmitter Enable
#define RXEN0 4 // Receiver Enable
#define UDRIE0 5 // USART Data register Empty Interrupt Enable
#define TXCIE0 6 // TX Complete Interrupt Enable
#define RXCIE0 7 // RX Complete Interrupt Enable

/* UCSR0C - USART Control and Status Register C */
#define UCPOL0 0 // Clock Polarity
#define UCSZ00 1 // Character Size
#define UCPHA0 UCSZ00 // For compatibility
#define UCSZ01 2 // Character Size
#define UDORD0 UCSZ01 // For compatibility
#define USBS0 3 // Stop Bit Select
#define UPM00 4 // Parity Mode Bit 0
#define UPM01 5 // Parity Mode Bit 1
#define UMSEL00 6 // USART Mode Select
#define UMSEL0 UMSEL00 // For compatibility
#define UMSEL01 7 // USART Mode Select
#define UMSEL1 UMSEL01 // For compatibility

/* UBRR0H - USART Baud Rate Register High Byte */
#define UBRR8 0 // USART Baud Rate Register bit 8
#define UBRR9 1 // USART Baud Rate Register bit 9
#define UBRR10 2 // USART Baud Rate Register bit 10
#define UBRR11 3 // USART Baud Rate Register bit 11

/* UBRR0L - USART Baud Rate Register Low Byte */
#define UBRR0 0 // USART Baud Rate Register bit 0
#define UBRR1 1 // USART Baud Rate Register bit 1
#define UBRR2 2 // USART Baud Rate Register bit 2
#define UBRR3 3 // USART Baud Rate Register bit 3
#define UBRR4 4 // USART Baud Rate Register bit 4
#define UBRR5 5 // USART Baud Rate Register bit 5
#define UBRR6 6 // USART Baud Rate Register bit 6
#define UBRR7 7 // USART Baud Rate Register bit 7

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 9600
UCSR0A=(0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0);
UCSR0B=(1<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (1<<RXEN0) | (1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);
UCSR0C=(0<<UMSEL01) | (0<<UMSEL00) | (0<<UPM01) | (0<<UPM00) | (0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0);
UBRR0H=0x00;
UBRR0L=0x33;
Автоматом CLKPS0 установлен в 0
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
и
UBRR0L=0x33;

Для того, чтобы работало на железе приходится бит CLKPS0 устанавливать в 1
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (1<<CLKPS0);
или
UBRR0L=0x66;

камень ATM328p
частота камня 8,000000 MHz
скорость USART 9600 бод

сверял define-ы с ДШ-всё совпадает.

Re: Вопросы по CVAVR.

Добавлено: 17 июл 2015, 14:25
crashzoom
В настройках проекта правильно установлена частота процессора? В книге Лебедева нормально расписано про усарт (http://rutracker.org/forum/viewtopic.php?t=2183001) Так же посмотри при программировании процессора на фьюзы. Может делитель частоты стоит

Re: Вопросы по CVAVR.

Добавлено: 31 янв 2016, 11:22
NikRoman
Разобрался. На Arduino NANOv3 частота 16,000000 MHz, а я всё думал что 8,000000 MHz.