Например TDA7294

Форум РадиоКот • Просмотр темы - ATmega8: 1-wire - не видит
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 21:49:39

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 18:45:34 
Родился

Зарегистрирован: Вс май 15, 2011 22:13:25
Сообщений: 18
Рейтинг сообщения: 0
По доброму учебнику дошел я ажно до 1-wire. Там предложен вариант работы AVRки и DS1820. Решил я побаловаться (отработать дескать навыки), подключил к МК к LCD для индикации процессов. Подключил DS18B20. Написал в CVAVR код, теоретически который должен проинициализировать устройства 1-wire. Создал я три строки для индикации на LCD: 1 - устройства найдены, 2-не найдены, 3 - просто для теста, для отображения температуры. Но вот проблема, мой же код, говорит что устройства отсутствуют. Порты вроде подключил правильно, да и сам датчик вроде подключен.

Собственно сам исходник:
Код:
#include <mega8.h> //Включаем библиотеку для работы с микроконтроллером ATMega8
#include <delay.h>   // Задержки
#include <stdlib.h>  // Переводим int в char
 #asm
    .equ __lcd_port=0x18 ;PORTB LCD   
    .equ __w1_port=0x12 ;PORTD DS18B20
    .equ __w1_bit=0 ; BIT0 DS18B20
 #endasm

#include <lcd.h> //Включаем библиотеку для работы с LCD
#include <1wire.h> // 1-wire
#include <ds18b20.h> // DS18B20
 
 

 char _str1[]="Devices found!"; // Выводим на экран если 1-wire нашло
 char _str2[]="No devices!";    // Если нет
 unsigned char _temp[];         // Где хранится температура
 int temper;                    // Температура с датчика
 
 void main(void)
 {
 
 temper=ds18b20_temperature( 0 ); // Получаем температуру с датчика
 itoa(temper, _temp );            // Переводим int в char для возможности вывода на LCD
 
                                  // Инициализируем ЖК
 lcd_init(16);                    // В начало ЖК
 lcd_gotoxy(0,0);
 
    if (w1_init()){  // Если устройства 1-wire нашло
        lcd_clear();  // Чистим ЖК
        lcd_puts(_str1); // Пишим, что что-то есть на ЖК
    } else { lcd_puts(_str2); // Если 1-wire устройств не обнаружено
             lcd_puts(_temp); // Пишем, что совсем хреново
    }


 }


И конечно же схема:
http://s008.radikal.ru/i306/1105/31/cf11b21d344c.jpg
Подскажите пожалуйста, где пробой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 20:16:25 
Друг Кота
Аватар пользователя

Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Сообщений: 7439
Откуда: г. Москва
Рейтинг сообщения: 0
PRStudio писал(а):
И конечно же схема:
http://s008.radikal.ru/i306/1105/31/cf11b21d344c.jpg
Подскажите пожалуйста, где пробой.

А чего минус батарейки в воздухе висит ? ))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 20:23:58 
Родился

Зарегистрирован: Вс май 15, 2011 22:13:25
Сообщений: 18
Рейтинг сообщения: 0
Ну как бы земля тоже минус (исходя из того как я понимаю что такое земля), а так как другие элементы подключены к земле, то это минус и остался неиспользованным. Хотя я могу и ошибаться в понятии "земли", ибо честно толком не осознаю зачем именно она нужна. Но все же вряд ли это решит проблему "невидимости" DS18B20


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 20:34:15 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
PRStudio выкиньте батарейку и поставьте POWER ..... а на счет земли почитайте книжку :)

ЗЫ Для DS18B20 также важна частота, которая выставляется в свойствах МК....


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 20:36:45 
Прорезались зубы
Аватар пользователя

Карма: 4
Рейтинг сообщений: 6
Зарегистрирован: Пн сен 08, 2008 11:21:11
Сообщений: 201
Откуда: Пермь
Рейтинг сообщения: 0
поддерживаю, для начала всё же сделай нормальное питание на термодатчик, пока что он у тебя обесточен, об этом говорит синий квадратик (низкий потенциал) на выводе Vсс


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 21:08:06 
Друг Кота
Аватар пользователя

Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Сообщений: 7439
Откуда: г. Москва
Рейтинг сообщения: 0
PRStudio писал(а):
Ну как бы земля тоже минус (исходя из того как я понимаю что такое земля), а так как другие элементы подключены к земле, то это минус и остался неиспользованным. Но все же вряд ли это решит проблему "невидимости" DS18B20

Жооож -)))))))))))))))))))
Рекомендую начать не с градусника, а самых азов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 21:11:12 
Родился

Зарегистрирован: Вс май 15, 2011 22:13:25
Сообщений: 18
Рейтинг сообщения: 0
сделал: поставил power на VSS (при этом резистор не убирал), но это разумеется не помогло
Но на счет земли так и не нашел нормального определения :) (научные сухие выдержки лишь больше запудривают мозг)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 22:57:42 
Родился

Зарегистрирован: Вс май 15, 2011 22:13:25
Сообщений: 18
Рейтинг сообщения: 0
Ура товарищи, разобрался с землей наконец :wink: . Переделал схему, программно задал МК 8мГц, повесил на него кварц в 8мГц (Суть кварца немного понимаю, однако куда вешать не знаю, поэтому повесил как все - на SC1-SC2 (PB-PB7)), и знаете что - все незаработало :) , "градусник" отказывается быть обнаруженным. Я не могу даже предположить от чего он не желает работать.

Переделанная схема:
http://s43.radikal.ru/i102/1105/d0/433c75cd2172.jpg

В исходник добавил:
Код:
 #asm 
     $crystal = 8000000 ; Добавил частоту 8 мГц
    .equ __lcd_port=0x18 ;PORTB LCD   
    .equ __w1_port=0x12 ;PORTD DS18B20
    .equ __w1_bit=0 ; BIT0 DS18B20
 #endasm


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Вт май 17, 2011 23:46:35 
Нашел транзистор. Понюхал.

Зарегистрирован: Вт ноя 30, 2010 00:50:40
Сообщений: 195
Рейтинг сообщения: 0
открою великую тайну ) в сях изучал работу 1820 и погоняв его решил выводить напрямки буфер в 3310 экран ,получилось так что я получал мусор бесполезный , он явно несходился с декодированием перечитав раз 5-7 допёр!!! программу я писал на 4 мгц в компиляторе ,а выстовлял совершенно другую фигическую тактовую частоту проверь чтоб компиллер был выставлен допустим 4-8мгц и установи в симуляторе 4,8 RС или кварцу задай как положено


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Ср май 18, 2011 00:14:21 
Друг Кота
Аватар пользователя

Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Сообщений: 7439
Откуда: г. Москва
Рейтинг сообщения: 0
PRStudio писал(а):
Переделанная схема:
http://s43.radikal.ru/i102/1105/d0/433c75cd2172.jpg

Еще бы такому заработать -)))
При тактовании от внутреннего генератора на кварце к PB6 и PB7 не должно быть подключено ничего кроме кварца и соотв. образом быть выставлены фьюзы


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Ср май 18, 2011 08:19:21 
Нашел транзистор. Понюхал.

Зарегистрирован: Вт ноя 30, 2010 00:50:40
Сообщений: 195
Рейтинг сообщения: 0
вот мой код 100% запустится ,но тут ещё не корректированы градусы 25 град будут как 32 ,а дальше линейность ,вобщем попробуй с таким кодом прогнать
#include <mega8.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x15; PORTC
.equ __w1_bit=3
#endasm
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds18b20.h>
#include <delay.h>
// maximum number of DS1820 devices
// connected to the 1 Wire bus
#define MAX_DS18B20 3
// number of DS1820 devices
// connected to the 1 Wire bus
unsigned char ds18b20_devices;
// DS1820 devices ROM code storage area,
// 9 bytes are used for each device
// (see the w1_search function description in the help)
unsigned char ds18b20_rom_codes[MAX_DS18B20][9];
#include <n3310lcd.c>
#include <stdio.h>

// Declare your global variables here
float temper;
int temper_int,temper_fl,min=0;

void temperature(void) // функция по работе с термо-датчиком
{
temper=ds18b20_temperature(&ds18b20_rom_codes[0][0]);
temper_int=temper; // отбор целой части от температуры
if(temper<0) // при отрицательной температуре
{
temper_fl=(temper-temper_int-0.0625)*10; // дробная часть
temper_int=-((temper_int*10)+temper_fl); // температура*10
min=1; // минус
}else // при положительной
{
temper_fl=(temper-temper_int)*10; // дробная часть
temper_int=(temper_int*10)+temper_fl;// температура*10
min=0; // плюс
}

}
void main(void)
{
// Determine the number of DS1820 devices
// connected to the 1 Wire bus
ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes);
ds18b20_init(0,-35,35,DS18B20_12BIT_RES); // переключения термометра в 12 битный режим

LcdInit();
LcdMode(2);
while (1 )
{
// Place your code here
delay_ms(500);
temperature(); // вызываем функцию температуры
LcdClear(); // очищаем LCD
if(min==1) // если минус
{
sprintf(lcd_buf,"-%u.%u\x80C",temper_int,temper_int%10); //вывод отрицательной температуры
}else
{
sprintf(lcd_buf,"+%u.%u\x80C",temper_int,temper_int%10); // вывод положительной
}
LcdStringBold(1,2);
LcdUpdate();
};

}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Чт май 19, 2011 17:11:55 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Вт июн 15, 2010 07:16:42
Сообщений: 299
Откуда: Иркутск
Рейтинг сообщения: 0
PRStudio писал(а):
Ура товарищи, разобрался с землей наконец :wink: . Переделал схему, программно задал МК 8мГц, повесил на него кварц в 8мГц (Суть кварца немного понимаю, однако куда вешать не знаю, поэтому повесил как все - на SC1-SC2 (PB-PB7)), и знаете что - все незаработало :) , "градусник" отказывается быть обнаруженным. Я не могу даже предположить от чего он не желает работать.

Переделанная схема:
http://s43.radikal.ru/i102/1105/d0/433c75cd2172.jpg

В исходник добавил:
Код:
 #asm 
     $crystal = 8000000 ; Добавил частоту 8 мГц
    .equ __lcd_port=0x18 ;PORTB LCD   
    .equ __w1_port=0x12 ;PORTD DS18B20
    .equ __w1_bit=0 ; BIT0 DS18B20
 #endasm


При всем уважении. Я бы Вам посоветовал для начала почитать http://lib.mexmat.ru/books/25487


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8: 1-wire - не видит
СообщениеДобавлено: Чт май 19, 2011 19:10:21 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1244
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Классная кстати книжка, рекомендую. Я ее в пятом классе читал, до сих пор помню. Спасибо за ссылку, понастальгирую, пожалуй. :)

По теме хотел бы отметить следующее:

1. Под "землей" в жаргонном смысле понимают общую точку схемы. Т.е., все провода, оканчивающиеся знаком _|_ , в реальности будут соединены вместе. Кроме того, предполагается, что напряжения на схеме измеряются относительно потенциала этой точки.

Поэтому "минус" батареи тоже должен быть подсоединен к "земле", иначе она фактически не включена в схему.

2. Симуляторы вроде Proteus - первый шаг к резиновой женщине. Купите макетку, и отлаживайте на ней. Заодно, пока будете собирать программатор для контроллера, потренируетесь в пайке, теории и технологии.

3. Микроконтроллеры - прежде всего железо. Потому, исходя из увиденного, я также рекомендую Вам на время отвлечься от термометров, и пособирать что-нибудь попроще. Причем именно попаять (или пособирать на макетке), а не посимулировать в Proteus.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y