CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение a.garkin »

Кстати при использовании также родного заголовка LCD.H

И именно:
#ifndef _LCD_INCLUDED_
#define _LCD_INCLUDED_

#pragma used+

Валится точно также...
Проверьте плиз у кого есть возможность на версии 2.05.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение a.garkin »

pyzhman писал(а):
Prior to #include -ing the lcd.h file, you must declare which microcontroller port is used for communication with the LCD module.
The following LCD formats are supported in lcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
Example:
/* the LCD module is connected to PORTC */
#asm
.equ __lcd_port=0x15
#endasm
/* now you can include the LCD Functions */
#include <lcd.h>



Да спасибо помогло! Но тогда зачем облегчили подключение через:

// Alphanumeric LCD Module functions
// The LCD connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric menu
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение a.garkin »

pyzhman писал(а):
Prior to #include -ing the lcd.h file, you must declare which microcontroller port is used for communication with the LCD module.
The following LCD formats are supported in lcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
Example:
/* the LCD module is connected to PORTC */
#asm
.equ __lcd_port=0x15
#endasm
/* now you can include the LCD Functions */
#include <lcd.h>




Теперь интересней:

После прошивки, зависает программа в том месте где идут русские буквы в программе.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение pyzhman »

Значит кодировка не попадает. Проверить по асму.
Docendo discimus
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение a.garkin »

pyzhman писал(а):Значит кодировка не попадает. Проверить по асму.


Все разобрался сенкс, осталось только понять почему в:

Код: Выделить всё

sprintf(lcd_buffer,"Темп%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));


Вывод Темп1=25.357ЯС

Т.е знак градуса меняется на букву "Я" :shock:
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

Добрый вечер,не могли бы помочь с температурными датчиками ds18b20.
Atmega8 и два дааичика один на PB0,а второй на PB2,нужно считывать их и выводить на дисплей 16х2,подкоюченный на port D.
Просто это 1/3 моей программы,с одного датчика умею считывать,а со второго как хоть убей-не пойму...
Спасибо.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: CodeVision AVR в вопросах и ответах

Сообщение Arlleex »

всмысле? Во-первых: не пойму для чего такое щедрое и нерациональное использование выводов микроконтроллера? Можно к 1 линии подключить и не заморачиваться. Алгоритм считывания с одного датчика - такой же как и с другого. Не понимаю, в чем возникла трудность, ведь первый датчик у тебя работает...
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
rs39
Открыл глаза
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Re: CodeVision AVR в вопросах и ответах

Сообщение rs39 »

a.garkin писал(а):Все разобрался сенкс, осталось только понять почему в:

Код: Выделить всё

sprintf(lcd_buffer,"Темп%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));

Вывод Темп1=25.357ЯС
Т.е знак градуса меняется на букву "Я" :shock:

Возможно всё дело в LCD. Надо поднять на него даташит, найти там таблицу поддерживаемых символов. Скорее всего символ градуса отсутствует, либо имеет другой код.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

Arlleex писал(а):всмысле? Во-первых: не пойму для чего такое щедрое и нерациональное использование выводов микроконтроллера? Можно к 1 линии подключить и не заморачиваться. Алгоритм считывания с одного датчика - такой же как и с другого. Не понимаю, в чем возникла трудность, ведь первый датчик у тебя работает...

А как мне в живую узнать какой из них кто?вот в этом и нелогичность использования 2 пинов мк.
Меня не радует методом тыка каждый раз определять какой из них кто...
Могу кинуть исходник для работы 2 датчиков по одной линии,я так по началу сделал, потом понял что не правильно так делать.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: CodeVision AVR в вопросах и ответах

Сообщение Arlleex »

Не правильно. Поверь, инженеры-разработчики такую простейшую проблему обдумали сразу - и поэтому:
в каждом датчике есть ROM-память, содержащая уникальный 64-битный код, в котором имеется поле CRC (8bit), Family code (28h), и 48bit уникального идентификационного номера, по которому управляющая система понимает, кому она отсылает данные и от кого она их получает. Существует группа команд работы с ROM-памятью. Но обычно, если к линии подключен всего лишь 1 датчик, можно опустить эти команды, применив команду Skip ROM (пропуск ROM) - тут эта команда используется в каждой фазе обращения к датчику, т.к. он один. А по существу эта команда нужна в многоточечной системе, когда необходимо за одну команду передать всем датчикам какие-либо одинаковые данные.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

rs39 писал(а):
a.garkin писал(а):Все разобрался сенкс, осталось только понять почему в:
Вывод Темп1=25.357ЯС
Т.е знак градуса меняется на букву "Я" :shock:

Возможно всё дело в LCD. Надо поднять на него даташит, найти там таблицу поддерживаемых символов.

Можно еще и тупо вывести все символы на дисплей, при этом подписывая возле каждого какой он по счету, можно даже с использованием шестнадцатеричной системы исчисления.
TovsCat
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт апр 27, 2012 15:48:35

Re: CodeVision AVR в вопросах и ответах

Сообщение TovsCat »

Arlleex наверное родом из Одесы, или недавно оттуда, Сериг задал конкретный вопрос, а вы ему вопрос №2 , и совет не делай так, мне вот тоже интересно подключить датчики нерационально на разные пины, только тоже не знаю как, мабуть и не узнаю, так как, инженеры против!
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

Arlleex писал(а):Не правильно. Поверь, инженеры-разработчики такую простейшую проблему обдумали сразу - и поэтому:
в каждом датчике есть ROM-память, содержащая уникальный 64-битный код, в котором имеется поле CRC (8bit), Family code (28h), и 48bit уникального идентификационного номера, по которому управляющая система понимает, кому она отсылает данные и от кого она их получает. Существует группа команд работы с ROM-памятью. Но обычно, если к линии подключен всего лишь 1 датчик, можно опустить эти команды, применив команду Skip ROM (пропуск ROM) - тут эта команда используется в каждой фазе обращения к датчику, т.к. он один. А по существу эта команда нужна в многоточечной системе, когда необходимо за одну команду передать всем датчикам какие-либо одинаковые данные.

Спасибо за ответ!
Но вот к примеру я делаю 200 устройств и начинаю их продавать,датчик один впаян в плату в второй выносится и что мне делать?методом тыка определять у кого какой rom code?это я все 200 устройств буду не одно кратно переделывать получается...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

Зачем же методом тыка? Методом инициализации.Сначала один датчик подключили, включили прибор, он сам запомнил его, любой не запомненный будет выполнять роль второго датчика.

Есть еще один способ- заранее разделить датчики на четные и нечетные. И от этого плясать.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Volgol_555 »

На каждом датчике написан свой адрес - это и есть ROM code. Можно после инициализации n-го количества датчиков (их может быть до 8 на одной ноге) находить каждый путем сравнения с известным ROM кодом и брать данные именно с него. Т.е. по сути весь архив кодов сравнивать с известным ROM кодом одного датчика и при совпадении брать данные температуры.
Самое гениальное - всегда самое простое
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: CodeVision AVR в вопросах и ответах

Сообщение Arlleex »

их может быть до 8 на одной ноге

неправда. Принципиального ограничения нет. Есть ограничение по параметрам линии, к которой это будет все подключено, а конкретно ее емкость и индуктивность, коэффициент разветвления по выходу микроконтроллера и т.д. и т.п.

Сначала при старте программы командой SEARCH ROM выявляем все серийные номера датчиков и тем самым определяем их количество.
Потом, чтобы обратиться к конкретному датчику, используя команду MATCH ROM, получаем к нему доступ.

А чтобы найти все номера датчиков - используйте вышеуказанный совет vitalik_1984.
Не умеешь - не берись, но не взявшись не научишься...
TovsCat
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт апр 27, 2012 15:48:35

Re: CodeVision AVR в вопросах и ответах

Сообщение TovsCat »

Датчики на одной линии это уже протореный путь, естественно код разработал программист высокого уровня, примеров этого кода предостаточно и преимущества применения неоспоримы.
А вот, что бы, работали датчики на разных пинах, это по видимому надо уметь написать самому такой код, кто нибудь имеет пример такого кода? или будем доказывать уже давно всеми доказаное, что протокол 1-Wire это протокол №1 на века...
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

vitalik_1984 писал(а):Зачем же методом тыка? Методом инициализации.Сначала один датчик подключили, включили прибор, он сам запомнил его, любой не запомненный будет выполнять роль второго датчика.

Есть еще один способ- заранее разделить датчики на четные и нечетные. И от этого плясать.

ок,спасибо.
Тогда такой вопрос:
1131с4-это ром код датчика?
даже если да,тогда не могли бы помочь переделать код на считывание двух датчиков и вывод информации на дисплей?
вообще делаю термостат,но на датчиках как раз и возникла проблема.
на всех моих датчиках на корпусе написанно DALLAS 18b20 1131c4 +663ac

Код: Выделить всё

#include <mega8.h>                                              // библиотека ввода\вывода микроконтроллера
#asm
  .equ __w1_port=0x18 ;PORTB                               //сообщаем куда подключен датчик
.equ __w1_bit=0
#endasm
#include <ds18b20.h>                                             //библиотека для работы с датчиком ds18b20
unsigned char rom_code[4][9];                                //масив с адресами найденых датчиков
#define MAX_DS18B20 8
#asm
  .equ __lcd_port=0x12 ;PORTD                               //сообщаем куда подключён экран
#endasm
#include <lcd.h>                                                    //библиотека для LCD
#include <stdio.h>                                                 //библиотека для LCD
#include <delay.h>                                                //библиотека задержки
unsigned char i,devices;                                          //переменная в которой количество
int temp1,temp2;                                                    //обьявляем перменные
unsigned char lcd_buffer_1[16];                               //масив с данными для экрана
unsigned char lcd_buffer_2[16];                               //масив с данными для экрана
void main(void)                                                      // Declare your global variables here
{
 char *_str="http://c2.at.ua";                                  //Создаем информ. строку
char *_str1="2 Tepјoјeїpa 1\x60C";

PORTB=0b00000000;                                              // «WzAVR «Port B initialization
 DDRB=0b00000000;                                              // 0b в таком виде легче представить состояние портов

PORTC=0b10000000;                                              // «WzAVR «Port C initialization
DDRC=0b00000000;

PORTD=0b00000000;                                              // «WzAVR «Port D initialization
DDRD=0b00000000;
devices=w1_search(DS18B20_SEARCH_ROM_CMD,rom_code); //определим сколько устройств подключено к шине 1-Wire

ACSR=0x80;                                                          // «Analog Comparator: Off
 ds18b20_init(0,-35,35,DS18B20_12BIT_RES);          // переключения термометра в 12 битный режим
  w1_init();                                                             // Wire Bus initialization
  lcd_init(16);                                                         // Инициализация ЖКИ на 16 символов
  lcd_gotoxy(0, 0);                                                  // Переводим курсор на первый символ первой строки
  lcd_puts(_str);                                                      // Выводим строку _str на дисплей ЖКИ 
  lcd_gotoxy(0, 1);                                                  // Переводим курсор на первый символ первой строки
  lcd_puts(_str1);                                                    // Выводим строку _str на дисплей ЖКИ
  delay_ms(900);                                                    // ждём 900мс 
  lcd_clear();                                                          // чистим дисплей перед выводом 
lcd_init(16);                                                            // Инициализация ЖКИ на 16 символов
while(devices>0)                                                     // бесконечный цикл, если датчик подключон 
{                                                                           // Place your code here
  temp1 = ds18b20_temperature(&rom_code[0][0]);  // читаем температуру с выбранного датчика
//if( temp1 > 1000 ) { temp1 = 4096 - temp1; temp1 = -temp1; }
  if ((temp1 < 130) & (temp1 > -60))                        // установим границу диапазон
temp1= temp1;
else
{
  temp1 =0;                                                            // если выходит за границу тогда 0
}
sprintf(lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1);
  lcd_gotoxy(0,0);                                                   // указали место на дисплее
lcd_puts(lcd_buffer_1); // выводим масив на LCD
  temp2 = ds18b20_temperature( &rom_code[1][0] ); //читаем температуру с выбранного датчика 
//if( temp2 > 1000 ) { temp2 = 4096-temp2; temp2 = -temp2; }
  if ((temp2 < 130) & (temp2 > -60))                        // установим границу диапазон
temp2= temp2;
else
{
  temp2 =0;                                                           // если выходит за границу тогда 0
}
sprintf(lcd_buffer_2," t%u=%i.%u\xdfC ",i+2,temp2,temp2%1);
lcd_gotoxy(0,1);
  lcd_puts(lcd_buffer_2);                                          // выводим масив на LCD
  delay_ms(30);                                                      // ждём
};

}

спасибо!
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

Ром код записан внутри, снаружи пишется марка детали, дата производства, иногда Вид упаковки компонентов: лента, паллет, линейка.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

Тогда как вы сне предлагаете на одну линию датчики вешать?
Я просто реально не понимаю,вот я сделал 1000 устройств и бегать у каждого смотреть какой датчик Кто...чистая смерть...
Ответить

Вернуться в «AVR»