Страница 223 из 421

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

Добавлено: Вт окт 16, 2012 18:15:03
a.garkin
Кстати при использовании также родного заголовка LCD.H

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

#pragma used+

Валится точно также...
Проверьте плиз у кого есть возможность на версии 2.05.

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

Добавлено: Вт окт 16, 2012 18:17:49
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

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

Добавлено: Вт окт 16, 2012 18:29:39
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>

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

После прошивки, зависает программа в том месте где идут русские буквы в программе.

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

Добавлено: Вт окт 16, 2012 19:24:04
pyzhman
Значит кодировка не попадает. Проверить по асму.

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

Добавлено: Вт окт 16, 2012 20:19:53
a.garkin
pyzhman писал(а):Значит кодировка не попадает. Проверить по асму.
Все разобрался сенкс, осталось только понять почему в:

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

sprintf(lcd_buffer,"Темп%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
Вывод Темп1=25.357ЯС

Т.е знак градуса меняется на букву "Я" :shock:

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

Добавлено: Ср окт 17, 2012 17:10:48
Сериг
Добрый вечер,не могли бы помочь с температурными датчиками ds18b20.
Atmega8 и два дааичика один на PB0,а второй на PB2,нужно считывать их и выводить на дисплей 16х2,подкоюченный на port D.
Просто это 1/3 моей программы,с одного датчика умею считывать,а со второго как хоть убей-не пойму...
Спасибо.

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

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

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

Добавлено: Ср окт 17, 2012 18:30:33
rs39
a.garkin писал(а): Все разобрался сенкс, осталось только понять почему в:

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

sprintf(lcd_buffer,"Темп%u=%+.3f\xdfC",j++,ds18b20_temperature(&rom_code[i][0]));
Вывод Темп1=25.357ЯС
Т.е знак градуса меняется на букву "Я" :shock:
Возможно всё дело в LCD. Надо поднять на него даташит, найти там таблицу поддерживаемых символов. Скорее всего символ градуса отсутствует, либо имеет другой код.

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

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

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

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

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

Добавлено: Ср окт 17, 2012 21:34:36
vitalik_1984
rs39 писал(а):
a.garkin писал(а): Все разобрался сенкс, осталось только понять почему в:
Вывод Темп1=25.357ЯС
Т.е знак градуса меняется на букву "Я" :shock:
Возможно всё дело в LCD. Надо поднять на него даташит, найти там таблицу поддерживаемых символов.
Можно еще и тупо вывести все символы на дисплей, при этом подписывая возле каждого какой он по счету, можно даже с использованием шестнадцатеричной системы исчисления.

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

Добавлено: Чт окт 18, 2012 00:16:26
TovsCat
Arlleex наверное родом из Одесы, или недавно оттуда, Сериг задал конкретный вопрос, а вы ему вопрос №2 , и совет не делай так, мне вот тоже интересно подключить датчики нерационально на разные пины, только тоже не знаю как, мабуть и не узнаю, так как, инженеры против!

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

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

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

Добавлено: Чт окт 18, 2012 02:00:21
vitalik_1984
Зачем же методом тыка? Методом инициализации.Сначала один датчик подключили, включили прибор, он сам запомнил его, любой не запомненный будет выполнять роль второго датчика.

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

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

Добавлено: Чт окт 18, 2012 08:39:15
Volgol_555
На каждом датчике написан свой адрес - это и есть ROM code. Можно после инициализации n-го количества датчиков (их может быть до 8 на одной ноге) находить каждый путем сравнения с известным ROM кодом и брать данные именно с него. Т.е. по сути весь архив кодов сравнивать с известным ROM кодом одного датчика и при совпадении брать данные температуры.

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

Добавлено: Чт окт 18, 2012 18:54:36
Arlleex
их может быть до 8 на одной ноге
неправда. Принципиального ограничения нет. Есть ограничение по параметрам линии, к которой это будет все подключено, а конкретно ее емкость и индуктивность, коэффициент разветвления по выходу микроконтроллера и т.д. и т.п.

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

А чтобы найти все номера датчиков - используйте вышеуказанный совет vitalik_1984.

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

Добавлено: Чт окт 18, 2012 20:41:19
TovsCat
Датчики на одной линии это уже протореный путь, естественно код разработал программист высокого уровня, примеров этого кода предостаточно и преимущества применения неоспоримы.
А вот, что бы, работали датчики на разных пинах, это по видимому надо уметь написать самому такой код, кто нибудь имеет пример такого кода? или будем доказывать уже давно всеми доказаное, что протокол 1-Wire это протокол №1 на века...

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

Добавлено: Чт окт 18, 2012 22:24:51
Сериг
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);                                                      // ждём 
};

}
спасибо!

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

Добавлено: Чт окт 18, 2012 23:23:19
vitalik_1984
Ром код записан внутри, снаружи пишется марка детали, дата производства, иногда Вид упаковки компонентов: лента, паллет, линейка.

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

Добавлено: Пт окт 19, 2012 00:15:10
Сериг
Тогда как вы сне предлагаете на одну линию датчики вешать?
Я просто реально не понимаю,вот я сделал 1000 устройств и бегать у каждого смотреть какой датчик Кто...чистая смерть...