Вопросы по CVAVR.

помощь начинающим осваивать программирование МК (PIC, AVR) на Си.

Модератор: koolhatcker

Ответить
Аватара пользователя
ATM67
Станкостроитель
Станкостроитель
Сообщения: 609
Зарегистрирован: 12 ноя 2010, 01:00
Откуда: Набережные Челны

Вопросы по CVAVR.

Сообщение ATM67 »

Вопрос первый, собственно касается библиотеки на термодатчик DS1820.
Назрела необходимость изготовить многоточечный термометр. При параллельном включении датчиков в некий массив записываются коды датчиков. Так вот, хотелось-бы узнать в какой последовательности эти датчики "прописываются". Например в нулевую ячейку массива записывается датчик с наименьшим кодом, в первую ячейку со следующим меньшим кодом и так по возрастающей ?! Или как-то по другому.
Аватара пользователя
ATM67
Станкостроитель
Станкостроитель
Сообщения: 609
Зарегистрирован: 12 ноя 2010, 01:00
Откуда: Набережные Челны

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

Сообщение ATM67 »

Чтобы облегчить работу с датчиками решил подключать их на индивидуальные пины. Правда это требует замены "камня" с атмери8 на атмегу16.
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

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

Сообщение koolhatcker »

ATM67, у производителя всё расписано... http://pdfserv.maxim-ic.com/en/an/AN187.pdf
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Аватара пользователя
Serjik
Станкостроитель
Станкостроитель
Сообщения: 757
Зарегистрирован: 05 янв 2010, 01:00
Откуда: Волгоград
Контактная информация:

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

Сообщение Serjik »

ATM67 писал(а):Так вот, хотелось-бы узнать в какой последовательности эти датчики "прописываются". Например в нулевую ячейку массива записывается датчик с наименьшим кодом, в первую ячейку со следующим меньшим кодом и так по возрастающей ?! Или как-то по другому.
на самом деле удобнее и проще если все будет по однопроводной шине работать ... зачем каждый на свой пин? ну собрать ... если есть сомнения проверить адреса какие датчики какой номер, все равно на них сверху не написано... все равно определять какой куда. Не вижу смысла :no: поменять местами в случае чего. В сети куча примеров для работы с несколькими датчиками.
Аватара пользователя
ATM67
Станкостроитель
Станкостроитель
Сообщения: 609
Зарегистрирован: 12 ноя 2010, 01:00
Откуда: Набережные Челны

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

Сообщение ATM67 »

Serjik писал(а):все равно определять какой куда. Не вижу смысла :no: поменять местами в случае чего.
Как датчики "прописываются" разобрался. Получается не очень удобно, например если перегорела одна лампочка в люстре и чтоб её заменить надо "перетусовать", (физически или программно) все лампочки для корректной работы этой люстры. Параллельное подключение оправданно в двух случаях, это экономия пинов камня или использования готовой библиотеки в CVAVR.
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

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

Сообщение koolhatcker »

ATM67, про люстру совсем ничего не понятно. Какая связь между лампочкой и датчиком? Схема есть? :-)
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Аватара пользователя
ATM67
Станкостроитель
Станкостроитель
Сообщения: 609
Зарегистрирован: 12 ноя 2010, 01:00
Откуда: Набережные Челны

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

Сообщение ATM67 »

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

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

Сообщение Serjik »

ATM67 писал(а):Так вот если один из датчиков "сдохнет", (вот здесь аналогия с лампочкой из люстры), нужно всю операцию по "переселению" датчиков повторять.
задаю вопрос всегда всем. Какая-то конкретная задача в которой датчики дохнут как мухи? или это спортивный интерес? Из постановки задачи - решать можно по разному. если это конкретный случай можно и подобрать датчик и ... ну в общем-то трудно говорить не зная даже количество датчиков, расстояние до них условия размещения и т.п.
koolhatcker
Смотрящий
Сообщения: 1504
Зарегистрирован: 30 авг 2009, 00:00
Откуда: Омск
Контактная информация:

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

Сообщение koolhatcker »

ATM67, если это какой-то пульт, то в него просится дисплей и клава. А дальше - подключайте каждый датчик к пульту через перемычку (джампер как на материнках) и не вижу проблем...
Автономный контроллер станка с ЧПУ: http://it-en.ru/cnc
Аватара пользователя
ATM67
Станкостроитель
Станкостроитель
Сообщения: 609
Зарегистрирован: 12 ноя 2010, 01:00
Откуда: Набережные Челны

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

Сообщение ATM67 »

Делаю твердотопливный котел. На производстве где арендуем помещение пока греемся "буржуйками". Есть желание прикрутить к новому котлу автоматику управления.
При ближайшем приближение требуется контроль шести точек температуры. Из них три точки это потребители, три контура отопления. Четвертый датчик температура дымогазов. Пятый температура котла подачи. Шестой температура котла обратки, возможно обратку контролировать не придется тогда этот датчик не понадобится.
Контроллер должен управлять четырьмя водяными насосами, три насоса потребителей и четвертый насос котла.
Далее управление дымососом и заслонкой первичного/вторичного воздуха, желательно по ПИД, но для меня это пока темный лес.
Три режима работы. Первый рабочий, на полную катушку. Второй дежурный, поддержание некоторой температуры в ночное время. Третий поддержание некой минимальной температуры, чтоб не разморозить систему отопления например при длительных выходных, (Новый Год! :company: ). Подключение электро котла.
Ну и естественно контроль за уровнем теплоносителя и различными "алармами".
Расстояние до датчиков при измерений температур в помещениях от двух до тридцати метров. Если контролировать температуру в контурах теплоносителя, то все датчики в пределах котельни, 2 - 3 метра.
aegis
Станкостроитель
Станкостроитель
Сообщения: 1696
Зарегистрирован: 05 сен 2010, 00:00
Имя: Михаил
Откуда: Конотоп=>Запорожье=> Харьков, Украина
Контактная информация:

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

Сообщение aegis »

ПИД думаю что не нужен, потому как система реально сильно инерционная. я про подобные вопросы думаю (тоже автоматику к твердотопливнику мечтаю сделать). так реально время между реагированиями будет не меньше пары-пяти минут пока вода по контуру проскочит, поэтому пропорционального компонента будет достаточно думаю... во всяком случае у себя так хочу сделать. но за программирование еще только сажусь
Аватара пользователя
ATM67
Станкостроитель
Станкостроитель
Сообщения: 609
Зарегистрирован: 12 ноя 2010, 01:00
Откуда: Набережные Челны

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

Сообщение ATM67 »

aegis писал(а):ПИД думаю что не нужен, потому как система реально сильно инерционная...
Вот это меня тоже смущает.
Здесь "http://www.forumhouse.ru/threads/251616/" обсуждается автоматика. Пока выявляется истина, програмлю модули отвечающие за переферию. "Математический" модуль пока осмысливается.
NikRoman
Станкостроитель
Станкостроитель
Сообщения: 381
Зарегистрирован: 26 фев 2012, 10:41
Имя: Роман
Откуда: Печора
Контактная информация:

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

Сообщение 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-ы с ДШ-всё совпадает.
Аватара пользователя
crashzoom
Станкостроитель
Станкостроитель
Сообщения: 97
Зарегистрирован: 05 фев 2011, 01:00

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

Сообщение crashzoom »

В настройках проекта правильно установлена частота процессора? В книге Лебедева нормально расписано про усарт (http://rutracker.org/forum/viewtopic.php?t=2183001) Так же посмотри при программировании процессора на фьюзы. Может делитель частоты стоит
NikRoman
Станкостроитель
Станкостроитель
Сообщения: 381
Зарегистрирован: 26 фев 2012, 10:41
Имя: Роман
Откуда: Печора
Контактная информация:

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

Сообщение NikRoman »

Разобрался. На Arduino NANOv3 частота 16,000000 MHz, а я всё думал что 8,000000 MHz.
Ответить