"Спасибо" за совет не нужно...
"Спасибо" за совет не нужно...
Я что то не то спросил?Аlex писал(а):Можно молотком по нему стукнуть, вот и все разборки.
"Спасибо" за совет не нужно...
Проблема в том что на двух разрядах все работает нормально, но я решил добавить третий и тут проблема, первый разряд смещается на второй, а второй на третий и температура показывает на втором и третьем разряде, а на первом почем-то 0, а хотелось полноценный вывод примерно так 36,6. Ах, да совсем забыл, если int temper; прировнять к 123, то есть int temper=123; то на индикаторе высвечивается 123. Писал в CVAVRWiseLord писал(а):Во-первых, код в виде этого холста просто нечитабелен. Я так понимаю, что вообще-то отступы расставлены, но хорошо бы это и нам увидеть.
Во-вторых, непонятно, в чём проблема.
В-третьих, лично я не вижу ни команд на запуск измерения температуры, ни задержек 750мс между ними и попытками чтения из датчика.
А где её дёргать? да и проблема не в точке, а в выводе температурыWiseLord писал(а):В коде какие-то непонятки с развёрткой. Если по поводу PORTB.1 и PORTB.3можно худо-бедно догадаться, что это первая и третья цифры индикатора с ОА, то зачем на вторую цифру сразу и PORTD.7, и PORTB.0? Первое, похоже, точка, и зачем её дёргать в этом месте, непонятно.
А вот об этом :Владимир29 писал(а):Я что то не то спросил?
мы должны были сами догадаться ?Владимир29 писал(а):Проблема в том что на двух разрядах все работает нормально, но я решил добавить третий и тут проблема, первый разряд смещается на второй, а второй на третий и температура показывает на втором и третьем разряде, а на первом почем-то 0, а хотелось полноценный вывод примерно так 36,6. Ах, да совсем забыл, если int temper; прировнять к 123, то есть int temper=123; то на индикаторе высвечивается 123. Писал в CVAVR
Скорее по фотобумаге.Аlex писал(а):Решить проблему по одному коду - это как поставить диагноз по фотографии.
Вам уже писали, в чем проблема, но Вы, повидимому, не читатель, так?Владимир29 писал(а):да и проблема не в точке, а в выводе температуры ... Проблема в том что на двух разрядах все работает нормально, но я решил добавить третий и тут проблема
Это особенно странная слепота, если учесть, что:WiseLord писал(а):лично я не вижу ни команд на запуск измерения температуры, ни задержек 750мс между ними и попытками чтения из датчика.
то есть, со всей очевидностью дело не в точке и не в разрядах.Владимир29 писал(а):если int temper; прировнять к 123, ... то на индикаторе высвечивается 123.
Это точно:Аlex писал(а): Что касается Вашего кода. У Вас там вообще бардак. Первые советы - выучите массивы и типы переменных.
Это кошмар. А если захочется добавить или убрать пару разрядов - лазить по коду и искать где же они встречаются? Нет чтобы вынести индикацию в прерывание, отделить ее от заполнения видеобуфера, да и вообще оформить по-человечески.int number = 0;
int number1 = 0;
int number2 = 0;
int number3 = 0;
if(i==0)
{
}
else if(i==1)
{
}
else if(i==2)
{
}
И это кошмар. Что если захочется поменять индикатор с общим анодом на индикатор с общим катодом? Или в угоду удобству разводки платы захочется поменять выводы местами? Компилятор, возможно, и приведет это к достаточно быстрому коду, но что мешает ему помочь?switch(number)
{
case 0:{PORTD=0xC0; break;}
case 1:{PORTD=0xF9; break;}
case 2:{PORTD=0xA4; break;}
case 3:{PORTD=0xB0; break;}
case 4:{PORTD=0x99; break;}
case 5:{PORTD=0x92; break;}
case 6:{PORTD=0x82; break;}
case 7:{PORTD=0xF8; break;}
case 8:{PORTD=0x80; break;}
case 9:{PORTD=0x90; break;}
Это тоже кошмар. Почти традиционный, но от того не менее кошмарный. Какие-то магические числа вместо осмысленных названий битов.TCCR1B=0x0A;
OCR1AH=0x10;
OCR1AL=0x46;
Код: Выделить всё
#ifndef _LCD_FONT_H
#define _LCD_FONT_H
#include <pgmspace.h>
/*
font Latin + Cyrillic 5x7 dots
223 characters starting from space
*/
const uint8_t font5x7latcyr [] PROGMEM =
{
0x07, // size of header
0x20, // char offset
0x05, // width in dots
0x08, // height in dots
0x01, // horizontal spacing
0x00, // vertical spacing
0x9F, // number of chars
0x00, 0x00, 0x00, 0x00, 0x00 , // 0x20 32
0x00, 0x00, 0x5F, 0x00, 0x00 , // ! 0x21 33
0x00, 0x07, 0x00, 0x07, 0x00 , // " 0x22 34
и.т.д. Это как сушить кошку в микроволновке - "А разве нельзя?! В инструкции не было сказано 'не употребляйте pgmspace и PROGMEM, такшта, пусть компилит!!!WiseLord писал(а):А pgmspace и PROGMEM разве в CV имеются?
Он сказано может и не было, только вот инструкции читают далеко не всеL.O.D писал(а):В инструкции не было сказано
Прочитать инструкцию на инструмент. Уже намекали выше.flimp писал(а):дайте наводку
1. PROGMEM убратьflimp писал(а):теперь вопрос - как заменить этот progmem?
вы можете почитать, как лично мне советовали читать и думать, когда я искал помощи по linux - вы легко найдете эти сообщения.Аlex писал(а):Ну вот, всегда найдётся человек, который выложит всё на блюдечке, избавив другого от тяжкого и мучительного занятия - читать и думать