Помогите подключить термодатчик к меге16

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Помогите подключить термодатчик к меге16

Сообщение The_Kurs » 22 июл 2007, 15:04

Пришел термодатчик от Ti TMP121.
Решил подключить его по SPI к ATmega16.
Подключил
                      МК             TMP121
                      SS  --------- CS
                  MISO  ---------- SO
                     SCK-----------SCK
МК сделал как мастер пользовался мастером начального кода в кодевизарде.
С датчика нужно принять 16 бит.
По даташиту на вывод CS подаю низкий уровень. Поидее должно срабатывать прерывание в котором я и считываю данные с регистра но ничего не происходит (((
Что я не так сделал ???Уже второй день капаюсь с этим (((
Хм почему-то на ножке SCK нет импульсов они же должны идти с МК ?
The_Kurs
 
Сообщения: 161
Зарегистрирован: 16 фев 2007, 16:33
Откуда: Петропавловск-Камчатский

Сообщение avr123.nm.ru » 22 июл 2007, 16:31

посмотрите в VMLAB  или в PROTEUS почему так.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение avr123.nm.ru » 22 июл 2007, 16:31

Советую прицепить проект сюда.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение The_Kurs » 27 июл 2007, 13:08

Прицепляю проект.
Как вообще осуществяется прием данных у мастера ??? Есть примеры а то я делал по даташиту на мегу 16. тем только для слейва... и не работант(
Принять нужно 16 бит ...
Вложения
TEMPER.rar
(19.36 КиБ) Скачиваний: 68
The_Kurs
 
Сообщения: 161
Зарегистрирован: 16 фев 2007, 16:33
Откуда: Петропавловск-Камчатский

Сообщение The_Kurs » 21 авг 2007, 16:17

Всё проблема решена )))
МК за мастер )))
Отправляем байт в регистр SPDR процедурой из даташита SPI_MasterTransmit(char cData), срабатывает прерывание и в обработчике прерывания считываем показания температура из регистра SPDR )))
The_Kurs
 
Сообщения: 161
Зарегистрирован: 16 фев 2007, 16:33
Откуда: Петропавловск-Камчатский

Сообщение avr123.nm.ru » 21 авг 2007, 17:17

А где РАБОТАЮЩИЙ проект ???    :lol:
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение The_Kurs » 22 авг 2007, 07:16

Проект простейший выводит два байта принятых данных с термодатчика от ти на компутер через ком порт. Принимать через встроенный в кодевижн терминал включать режим показа в виде шестнадцатеричных чисел )))
Данные имеют вид
00 0B 53 00
где 00 - разделительные символы
0B53 данные с датчика смотреть по даташиту что с ними делать )))  22,6градуса показывает)))


Теперь буду думать как в МК вычисления сделать чтоб сразу готовую температуру выводил )))
Подскажите функции перевода из Float в char и обратно а так же в integer и обратно.
Вложения
Temper.jpg
Схема подключения упрощенная.
Temper.jpg (7.65 КиБ) Просмотров: 2789
TEMPER.rar
Сам проект
(23.89 КиБ) Скачиваний: 64
The_Kurs
 
Сообщения: 161
Зарегистрирован: 16 фев 2007, 16:33
Откуда: Петропавловск-Камчатский

Сообщение avr123.nm.ru » 22 авг 2007, 08:13

Спасибо.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение avr123.nm.ru » 22 авг 2007, 08:16

The_Kurs писал(а):Теперь буду думать как в МК вычисления сделать чтоб сразу готовую температуру выводил )))

Подскажите функции перевода из Float в char и обратно а так же в integer и обратно.


Посмотри пример CVAVR вывода в примере для LM75  и  в задаче 5  - avr123.nm.ru/z5.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение Master » 22 авг 2007, 12:25

Я использовал вот такой вариант.

// Declare your global variables here
char Hour=23, Min=59, Sec=58;
char strHour[3]="sd", strMin[3], strSec[3];

LCDshow(void)
{
itoa(Hour, strHour); //Переводит целое в строчное, если это ввести в поиске CVavr там будут функции и для перевода float и т. д.
itoa(Min, strMin);
itoa(Sec, strSec);
lcd_gotoxy(0,0);            
lcd_putsf("   ");  //3 пробела
if (Hour<10) {lcd_putsf("0");}
lcd_puts(strHour);
lcd_putsf(":");
if (Min<10) {lcd_putsf("0");}
lcd_puts(strMin);
lcd_putsf(":");        
if (Sec<10) {lcd_putsf("0");}
lcd_puts(strSec);
}
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Сообщение The_Kurs » 25 авг 2007, 10:29

Теперь отсылаестя по ком порту на комп в уже готовом виде значение температуры)))


Master Спасибо очень помогло !!!)))

avr123.nm.ru Отличный курс ))) опять выручил )))! Сдвиг разрядов в право и лево!

Как мне нравится С для Мк переменной типа чар присваиваю значение типа интеджер ))) Делфи на три бы буквы послал )))
Вложения
TEMPER.rar
Окончательный вариант)))
(42.14 КиБ) Скачиваний: 73
The_Kurs
 
Сообщения: 161
Зарегистрирован: 16 фев 2007, 16:33
Откуда: Петропавловск-Камчатский


Вернуться в Микроконтроллеры

Кто сейчас на конференции

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