AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
05.03.2014, 18:56
|
|
Частый гость
Регистрация: 05.03.2014
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Не могу подключить ds18b20
Здравствуйте.
Собственно не могу подключить ds18b20 (датчик температуры) к микроконтроллеру ATmega8515.
Не пойму почему не хочет считывать температуру...
Схема в протеусе:
Код на C:
Код:
|
#include ‹mega8515.h›
#asm
.equ __w1_port=7; PORTE
.equ __w1_bit=0
#endasm
#include ‹1wire.h› //библеотека для работы з 1wire
#include ‹ds18b20.h› //библеотека для работы з ds18b20
#include ‹delay.h›
#define MAX_DS18b20 2
//numbers
flash char digits[] = {
0b00111111, //0
0b00000110, //1
0b01011011, //2
0b01001111, //3
0b01100110, //4
0b01101101, //5
0b01111101, //6
0b00000111, //7
0b01111111, //8
0b01101111, //9
};
signed int tmp;
unsigned char devices;
unsigned char rom_code[MAX_DS18b20][9];
void main( void )
{
DDRC=0b00001000;
devices=w1_search(0xf0,rom_code);
while(1)
{
tmp= ds18b20_temperature(&rom_code[0][0]);
if(tmp!=-9999) {
PORTA=digits[1];
delay_ms(100);
}
else
PORTA=digits[0];
}
} |
Последний раз редактировалось Astendos; 05.03.2014 в 18:59.
|
|
|
|
05.03.2014, 19:53
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Не могу подключить ds18b20
какая версия CV? Из хэлпа:
Цитата:
|
The 1 Wire functions must be configured, by specifying the I/O port and bit used for communication through the 1 Wire protocol.
This is accomplished in the Project|Configure|C Compiler|Libraries|1 Wire menu:
· the Enable 1 Wire Bus Interface Support option must be activated
· the I/O Port and Bit must be specified in Data Connection.
Note: For compatibility with projects developed with CodeVisionAVR prior to V2.04.7, the 1 Wire functions can also be configured as outlined in the example below.
However in this case, the Enable 1 Wire Bus Interface Support option must be disabled in the Project|Configure|C Compiler|Libraries|1 Wire menu.
Example:
/* the 1 Wire bus is connected to ATmega8515 PORTB
the data signal is bit 2 */
#asm
.equ __w1_port=0x18
.equ __w1_bit=2
#endasm
/* now you can include the 1 Wire Functions */
#include ‹1wire.h›
This method is not recommended for new projects and it also does not support the XMEGA chips.
|
|
|
|
|
05.03.2014, 21:09
|
|
Частый гость
Регистрация: 05.03.2014
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Не могу подключить ds18b20
CV(Code Vision AVR) у меня 3.10 EVALUATION (бесплатная )
Enable 1 Wire Bus Interface Support - у меня отключена (Она по стандарту отключена), если её включить то код перестаёт компилиться (в данном случае).
|
|
|
|
05.03.2014, 22:00
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Не могу подключить ds18b20
тогда это убрать:
Код:
|
#asm
.equ __w1_port=7; PORTE
.equ __w1_bit=0
#endasm |
и выбрать порт в настройках
|
|
|
|
05.03.2014, 22:48
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,771 раз(а) в 5,896 сообщении(ях)
|
Re: Не могу подключить ds18b20
Как-то возникла нужда подключить четыре датчика, причем с простым и удобным монтажом (т.е., чтобы определять конкретный датчик не по его "ID", а по пину контроллера). Просто написал свою функцию чтения температуры обычным ногодрыгом.
Исходник сейчас уже не найду - воды много утекло. Но сложного там ничего.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
05.03.2014, 22:58
|
|
Частый гость
Регистрация: 05.03.2014
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Не могу подключить ds18b20
|
|
|
|
05.03.2014, 23:02
|
|
Частый гость
Регистрация: 05.03.2014
Сообщений: 14
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Не могу подключить ds18b20
исходник+протеус
Большой шок меня подвергает то что на другом чипе почти с таким же кодом всё работает на ура...
исходники+протеус2
P.S. как сделать миниатюру (картинку на форуме)?
Последний раз редактировалось Astendos; 05.03.2014 в 23:34.
|
|
|
|
05.03.2014, 23:16
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,771 раз(а) в 5,896 сообщении(ях)
|
Re: Не могу подключить ds18b20
Сообщение от Astendos
|
твой пост тупо ни-о-чём.
|
Ну да, Сникерса нет. Уж извините за тупое предложение сделать самому. Острые ждут готовое.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
05.03.2014, 23:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: Не могу подключить ds18b20
тактовую частоту контроллера в протеусе установите правильную. или в проекте..
|
|
|
|
05.03.2014, 23:27
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Не могу подключить ds18b20
картинка - управление вложениями в расширенном режиме.
Этот код проверял в протеусе - работало:
Код:
|
#include ‹alcd.h› // Alphanumeric LCD Module functions
#include ‹ds18b20.h›
#include ‹delay.h›
#include ‹stdio.h›
char lcd_buffer[33];
/* maximum number of DS18B20 connected to the 1 Wire bus */
#define MAX_DEVICES 1
/* DS18B20 devices ROM code storage area */
unsigned char rom_code[MAX_DEVICES][9];
main()
{
lcd_init(16);
lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo");
delay_ms(200);
lcd_clear();
/* measure and display the temperature(s) */
while (1)
{
sprintf(lcd_buffer,"%+.3f\xdfC",ds18b20_temperature(0));
lcd_clear();
lcd_puts(lcd_buffer);
delay_ms(100);
};
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:10.
|
|