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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс авг 31, 2008 01:27:15

Сообщение 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);




}
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

А функция sprintf нормально формирует данные в lcd_buffer?
И надо бы после delay_ms(2000) поставить бесконечный пустой цикл:

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

while(1);
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Реклама
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс авг 31, 2008 01:27:15

Сообщение Aster »

А функция sprintf нормально формирует данные в lcd_buffer
А как проверить....
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс авг 31, 2008 01:27:15

Сообщение Aster »

Возможно кто то может повторить эту несложную операцию и проверить в своем эмуляторе....может из -за версий такое...хотя я уверен что должно работать- а оно не работает...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

Походу в Протеусе проблема с этим датчиком. У меня тоже не фурычит.
Хотя пример из протеуса работает %)
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Реклама
Опытный кот
Аватара пользователя
Сообщения: 890
Зарегистрирован: Вт янв 20, 2009 14:49:08
Откуда: Гондурас, Мурманск

Сообщение DrWatson »

Не, у меня заработало.
Пользуйся визардом в кодвижне.
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
Реклама
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс авг 31, 2008 01:27:15

Сообщение Aster »

В том то и дело что я визард юзал -но толку не было.... Пришли плыз свой пример. Буду очень благодарен!
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Вс авг 31, 2008 01:27:15

Сообщение Aster »

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

Вернуться в «Микроконтроллеры и ПЛИС»