Страница 1 из 1

Банально не могу отобразить колличество найденых DS (1wire)

Добавлено: Вт май 19, 2009 21:51:10
Aster
Использую code vision и Proteus. Делаю все по примеру. Пытаюсь определить колличество найденых устройств 1 wire но никак не могу отобразить это число на ЛСД дисплее (эмуляция в протеусе)!!! При этом в переменную devices все же заносится колличество найденых устройств... но как ето вывести на экран....(((Что такое -не пойму...перерыл кучу примеров и кучу литературы- но чет не выходит и все.Кто знает -отпишите плыз...
вот код
#include <mega8>
#asm
.equ __w1_port=0x15 ;PORTC
.equ __w1_bit=0
#endasm
#include <1wire>
#include <ds18b20>
#define MAX_DS1820 8
unsigned char rom_codes[MAX_DS1820][9];
#include <stdio>
char lcd_buffer[33];
#include <delay>
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd>
int temp[8];

void main(void)
{
unsigned char devices,i;
lcd_init(16);
delay_ms(200);



devices=w1_search(0xf0,rom_codes);


sprintf(lcd_buffer," devices=%u",devices);
lcd_clear();
lcd_puts(lcd_buffer); // не выводит!!!!!?????
delay_ms(2000);




}

Добавлено: Вт май 19, 2009 22:20:00
DrWatson
А функция sprintf нормально формирует данные в lcd_buffer?
И надо бы после delay_ms(2000) поставить бесконечный пустой цикл:

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

while(1);

Добавлено: Вт май 19, 2009 22:22:13
Aster
А функция sprintf нормально формирует данные в lcd_buffer
А как проверить....

Добавлено: Вт май 19, 2009 22:26:19
Aster
Возможно кто то может повторить эту несложную операцию и проверить в своем эмуляторе....может из -за версий такое...хотя я уверен что должно работать- а оно не работает...

Добавлено: Вт май 19, 2009 22:57:40
DrWatson
Походу в Протеусе проблема с этим датчиком. У меня тоже не фурычит.
Хотя пример из протеуса работает %)

Добавлено: Вт май 19, 2009 23:13:17
DrWatson
Не, у меня заработало.
Пользуйся визардом в кодвижне.

Добавлено: Вт май 19, 2009 23:41:38
Aster
В том то и дело что я визард юзал -но толку не было.... Пришли плыз свой пример. Буду очень благодарен!

Добавлено: Ср май 20, 2009 01:33:44
Aster
все! разобрался... Оказывается было все в корректной работе самого компилятора с парраметрами float, а для этого необходимо было определить опцию по адресу Options->C Compiler->sprintf(f) Features
в "float, width, precision"
В большинстве компилеров Code vision эта опция по дефолту стоит либо в "float, width" либо в "float, width, precision" а у меня стояла в "long, width" :) Вот такая вот версия мне попалась)))Всем удачи!