Страница 2 из 2
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Вс июн 20, 2010 18:55:50
ARV
shev377 писал(а):Нифига в этом даташите нет,
Единственное что я понял, это то, что нужно читать данные из регистра AAh КАк?*?? там нифига не сказано.
странно вы как-то даташиты читаете... цитирую:
DS1821 FUNCTION COMMAND SET Table 4
1-Wire Bus Activity
Command Description Protocol After Command is Issued
TEMPERATURE CONVERSION COMMANDS
Read Reads last converted temperature AAh Master receives 8-bit temperature
Temperature value from temperature register. value from DS1821.
Start Convert T Initiates temperature conversions. EEh None
Stop Convert T Halts temperature conversions. 22h None
это на странице 10. а на странице 13 есть пример обмена с датчиком. если вы имеете низкоуровневые функции для работы с 1-wire - послать сброс, потом послать команду запуска измерения температуры, затем подождать определенное время, снова послать сброс и команду чтения температуры - это так сложно? я вам намекал на статьи - вы их находили? читали?
вот это читали?
а это? почему у вас все еще остаются вопросы?!

Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Чт июн 24, 2010 16:08:56
shev377
читал....
Временно вопрос меняется на прежний, Нашёл датчик DS1820 и DS18b20
Не находит мк девайсы.........
Код: Выделить всё
#include <mega32.h>
#include <delay.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x12 ;PORTD
.equ __w1_bit=6
#endasm
#include <1wire.h>
// DS18b20 Temperature Sensor functions
#include <ds18b20.h>
#include <stdio.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD.0=1;
DDRD.1=1;
DDRD.2=1;
DDRD.3=1;
DDRD.4=1;
DDRD.5=1;
DDRD.6=0;
DDRD.7=1;
devices=w1_init();
while(devices>0)
{
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
delay_ms(500);
};
}
Почему не загараются светодиоды
PORTA.1
PORTA.2
PORTA.3
ТЕ почему не находит датчики?
схематика такая,
Vq датчика подключен на д6 ножку мк
Земля к Земле
питание к питанию
Резистор между питанием и vQ номиналами в 4.7 Ком, пробовал ставить 20 Ком
проверял, порт на мк не спален, (PAD.6=0 PORTD.6=1 на выходе был нужный ток и 5.1В)
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Чт июн 24, 2010 19:44:48
shev377
подключил светодиод на 3 вольта к ножке д6, при включении мк светодиод не мигает, хотя пыйдее же должен (инициализация iwire шины, посылка байта чтобы заставить датчик давать температуру)? Поставил другой мк, таже хрень, в схеме ошибок нет, полярность соблюдаю
Проверил другими датчиками DS18B20 Ds18B20 (второй) DS18S20 DS1820
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Чт июн 24, 2010 21:09:20
ARV
а где в вашей программе собственно поиск девайсов? вы сделали инициализацию шины 1-wire и думаете, что радостные девайсы при этом сами полезут в ваши переменные?!
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Чт июн 24, 2010 21:46:40
shev377
ну во всех примерах делается именно так?! Разве w1_init не ищет девайсы?
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Чт июн 24, 2010 22:01:42
ARV
shev377 писал(а):ну во всех примерах делается именно так?! Разве w1_init не ищет девайсы?
вы пользуетесь CVAVR? там отличный хелп ко всем встроенным функциям - потрудитесь изучить. так же не мешает иной раз обращать внимание на уже имеющиеся в изобилии исходники, только не просто их компилировать. а вчитываться в каждую строчку...
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Пт июн 25, 2010 15:42:02
shev377
http://avru.cwx.ru/uchebnik/radota_s_da ... 18b20.html
Я ничего не путаю?
Ну и теперь в самой программе пишем devices=w1_init(); этой строкой ищем устройства 1Wire, которые подключены к МК, а число найденных устройств запишется в переменную devices Теперь, если переменная devices больше нуля, то МК знает что есть подключенный датчик, а может и не один.
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Пт июн 25, 2010 19:54:32
shev377
Ну хорошо, вот с адресацией,
Шью это
Код: Выделить всё
/*****************************************************
Chip type : ATmega32
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 512
*****************************************************/
#include <mega32.h>
#asm //сообщаем куда подключен датчик
.equ __w1_port=0x12 ;PORTD
.equ __w1_bit=6
#endasm
#include <1wire.h> //библиотека работы с 1Wire
#include <ds18b20.h> //библиотека для работы с датчиком ds18b20
#include <delay.h> //библиотека задержки
#include <stdio.h> //ненаю что за библиотека, но без неё неполучается
unsigned char rom_code[8][9]; //масив с адресами найденых датчиков
void main(void)
{
unsigned char devices, i; //переменная в которой количество присоеденённых датчиков, и номер выбранного датчика
int temp; //переменная для хранения температуры
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xBF;
PORTC.0=1;
w1_init();
devices=w1_search(0xf0,rom_code); //ищим датчики, и записуем их адреса в масив
while(devices>0) //бесконечный цикл, если датчик подключон
{
if(!PINC.0){ //Если нажата кнопка
i++; //Увиличиваем переменную "i" на 1
delay_ms(300); //Ждём 300мс для "анти-дребезга"
}
if(i>=devices){ //Если "i" больше или равно найденым датчикам
i=0; //тогда "i" равно нулю
}
temp=ds18b20_temperature(&rom_code[i][0]); //читаем температуру с выбранного датчика
if (temp>1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
PORTD=0;
PORTD.3=1;
PORTB=255;
PORTB.6=0;
PORTB.5=0;
PORTB.4=0;
PORTB.2=0;
PORTB.1=0;
delay_ms(1);
PORTD=0;
PORTD.2=1;
PORTB=255;
PORTB.7=0;
PORTB.6=0;
PORTB.3=0;
PORTB.2=0;
PORTB.1=0;
delay_ms(1);
PORTD=0;
PORTD.1=1;
PORTB=255;
PORTB.7=0;
PORTB.6=0;
PORTB.5=0;
PORTB.3=0;
PORTB.2=0;
PORTB.1=0;
delay_ms(1);
};
while(devices==0) //бесконечный цикл, если датчик не подключон
{
PORTD=0;
PORTD.3=1;
PORTB=255;
PORTB.6=0;
PORTB.5=0;
PORTB.3=0;
PORTB.2=0;
PORTB.1=0;
delay_ms(1);
PORTD=0;
PORTD.2=1;
PORTB=255;
PORTB.7=0;
PORTB.3=0;
PORTB.4=0;
PORTB.2=0;
PORTB.1=0;
delay_ms(1);
PORTD=0;
PORTD.1=1;
PORTB=255;
PORTB.7=0;
PORTB.6=0;
PORTB.5=0;
PORTB.3=0;
PORTB.2=0;
PORTB.1=0;
delay_ms(1);
};
}
А получаю это

Тобиш неа, нет девайсов от даласа
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Пт июн 25, 2010 22:56:47
shev377
Слушайте! МЕНЯ ОСИНИЛО!!!!!!
А может это индивидуальная непереносимость Mega32 16PU xxxсерии датчиков даллас???
У меня ещё мега 48 есть, только её паять страшно, какая она маленькая, может стоит попробовать?
возможно такое?
Re: ТермомЭтр Помогите с созданием прошивки на Cи
Добавлено: Вс май 15, 2011 12:15:18
artmasterpro
Если собирать этот пример в протоусе те не работает, не находит датчики. Облазил весь инет, все тоже самое.
http://avru.cwx.ru/uchebnik/radota_s_da ... 18b20.html