Перейти к содержимому
Форум журнала практической электроники «Датагор»

Оригинал микро-ПК Raspberry Pi 3 Model B+ (Broadcom 1.4GHz quad-core 64 bit processor, Wifi, Bluetooth, USB)

Офигенная миниатюрная рация на литии BaoFeng UV-5R, 5W, 5-15 км! Охота, поход, торговый центр и т.п.

TrueRMS мультиметр UNI-T UT139A с автодиапазонами

Паяльнник 80W с терморегулятором и LCD-дисплеем, популярные жала серии 900M
Гость химик

Как вывести переменную на WH0802

Рекомендованные сообщения

Гость химик

Добрый день. Делаю термометр на двух DS1820 + 90s2313. Проблема в том, что размер памяти 1kB, а эта жирная функция забирает 60% от обьема. Делал вот так:

     sprintf(text,"t1 %d",ds1820_temperature_10(&ds1820_rom_codes[0][0])/10); 
   lcd_gotoxy(0,0);
   lcd_puts(text);
   lcd_putchar(0x01);
   lcd_putchar(0x43);  

Один из градусников будет работать в промежутке -40 ... +50 (грубо говоря). Поетому знак должен меняться и если число меньше 10, не должно сползать влево. Искал в интернете, нашел что-то типа такого:

    lcd_gotoxy(0,0);
   lcd_putchar('t');
   lcd_putchar('=');
   lcd_gotoxy(3,0);
   lcd_putchar(x/10 + 0x30):                   ???????????????
   lcd_putchar(x%10 + 0x30):                  ???????????????
   lcd_putchar(0x01);    // мой символ
   lcd_putchar('C'); 

 

Должно получиться вот что t= +18*C

 

Вот как ето правильно сделать? И как выводить знак +/-?

Изменено пользователем химик

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
...Проблема в том, что размер памяти 1kB, а эта жирная функция забирает 60% от обьема. ...

При таком размере памяти надо писать не на "С", а на Ассемблере.

Заодно и такие вопросы

...И как выводить знак +/-?...

возникать не будут. Знак - старший бит 9-битного результата DS1820.

Изменено пользователем Lexter

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость химик
При таком размере памяти надо писать не на "С", а на Ассемблере.

Ага. Осталось только выучить Ассемблер и через пол годика у меня будет термометр.

 

Заодно и такие вопросы

возникать не будут. Знак - старший бит 9-битного результата DS1820.

С этим уже разобрался, просто не сразу понял, что указатель %d выведет на дисплей знаковое число.

 

Сделал вот так

    temp = ds1820_temperature_10(&ds1820_rom_codes[0][0])/10; 
   Block_Char();
   lcd_gotoxy(0,0);
   lcd_putchar('t');
   lcd_putchar('1'); 
   lcd_putchar(0x20);            // пробел
   lcd_putchar(sign);
   lcd_putchar(De);
   lcd_putchar(Ee);   
   lcd_putchar(0x01);
   lcd_putchar(0x43);  

void Block_Char(void){
 
 if(temp <= -1) sign = 0x2d;
 if(temp <= 1) sign = 0x2b;   
 if(temp <= 0) sign = 0x20; 
 
   De = temp/10;
   if(De != 0){
     De = De + 0x30;
     }else{
       De = 0x20;
       }
       
   Ee = (temp%10) + 0x30;  

}

 

Мне нужно было знать как выводиться переменная через lcd_putchar(); :smile:

 

Теперь другая проблема - нешьеться 90s2313. Выскакивает ошибка начала програмирования. В закромах лежит и Tynni2313, но и старушку 90s жалко выбрасывать. Для такой простинькой схемы ее и берег.

Что может быть?

P.S. Внешний кварц 4МгЦ, меандр с программатора тоже непомагает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
...Теперь другая проблема - нешьеться 90s2313. Выскакивает ошибка начала програмирования. ...

Да, встречается такое. Приходится читать рекомендации от авторов чипа (https://www.atmel.com/Images/doc0839.PDF со страницы 60 и далее) долго и до просветления, сверяя написанное с тем, что на осциллографе.

Изменено пользователем Lexter

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

︽ Наверх страницы ︽
×
×
  • Создать...