Совесть писал(а):Потратить 2 месяца на микросхему с одним управляющим регистром при этом перебирать "тонны разных библиотек" и не добиться успехов?! Сдается мне, что вашему "ИМХО" можно смело не доверять.
+100500!
Не поверите! Ни одной библиотеки! Все написал согласно ДШ и на камень и на протокол. Заработало сразу и навсегда. Потому и беда, что "тонны библиотек" на столе, а что в голове? Библиотеки лучше применять, когда все основы и принципы поняты и нет вопросов. Когда надо срочно и быстро. А изучать по этому принципу не годится.
в место выражения, например переменной которой перед этим будет присвоено значение?
определенно можно, ведь оператор Switсh имеет лишь одно ограничение - работает только с целыми числами, таким образом отбросив после всех вычислений дробную часть можно кормить переменную в Switсh.
в самом перечислении случаев сработки Switсh (они же case x: ) не должно быть никаких выражений, которые требуют интерактивного вычисления.Можно только такие,которые возможно вычислить на этапе компиляции.
в место выражения, например переменной которой перед этим будет присвоено значение?
определенно можно, ведь оператор Switсh имеет лишь одно ограничение - работает только с целыми числами, таким образом отбросив после всех вычислений дробную часть можно кормить переменную в Switсh.
в самом перечислении случаев сработки Switсh (они же case x: ) не должно быть никаких выражений, которые требуют интерактивного вычисления.Можно только такие,которые возможно вычислить на этапе компиляции.
Понял, теперь бы со 2ым, вопросом бы разобраться...
Правила форума писал(а): 2.7 Запрещается полное цитирование предыдущего сообщения. Допускается цитирование только части сообщения, необходимой для смысловой связи с предыдущим сообщением.
levaclaus писал(а):вопрос, считываю из ds1307 к примеру минуты "minuts=26",
как эти minuts разложить, чтоб в "ten_min" оказались десятки, в "min" единицы.?
Если считано в двоичном формате (библиотека уже перевела) то делением на 10 и взятием целого либо остатка. Если считано как есть, тоесть в двоично десятичном формате, то наложением маски и сдвигом.
levaclaus писал(а):вопрос, считываю из ds1307 к примеру минуты "minuts=26",
как эти minuts разложить, чтоб в "ten_min" оказались десятки, в "min" единицы.?
Всем привет! Видит датчиков больше чем просил! Почему? Подключаю несколько датчиков 18В20 к меге 32, мне нужно что бы максимальное количество датчиков было не больше 5, соответственно пишу:
#define MAX_DEVICES_18B20 4 //максимальное количество датчиков
unsigned char rom_codes[MAX_DEVICES_18B20][9]; //масив ROM кодов датчиков
void Search_18B20 (void) //поиск и инициализация датчиков
{
uchar devices,i,j;
devices = w1_search (0xf0, rom_codes); //Определить количество DS18B20 подключенных к шине и хранить коды ROM в массив
if (devices) //если датчики были найдены
{
for (i=0;i<devices;i++)
{
sprintf(Resp,"\r\nINITIALIZING DEVICE #%-u",i+1);UART_SendStr(Resp);
if (ds18b20_init(&rom_codes[i][0],0,0,DS18B20_9BIT_RES))//инициализация. Анализ присутствия (адр.датч, нижн.порог Т, верхн.порог Т, разрешение)
{
sprintf(Resp,"ROM CODE IS:"); UART_SendStr(Resp);
for (j=0;j<8;j++) //выводим поочередно каждый байт ROM кода
{
sprintf(Resp,"%-X ",rom_codes[i][j]); UART_SendStr(Resp);
}
sprintf(Resp,">OK"); UART_SendStrR(Resp);
}
............
}
devices = w1_search (0xf0, rom_codes); //Определить количество DS18B20 подключенных к шине и хранить коды ROM в массив
if (devices) //если датчики были найдены
{
for (i=0;i<devices;i++)
Где то тут кроется.Вы передали функции w1_search указатель, она забивает под завязку пока видит устройства,
потом берете переменную devices которая опять же равна шести и сравниваете в цикле не странно ли?
Где ограничение Макс_девайсес используется?
unsigned char rom_codes[MAX_DEVICES_18B20][9]; //масив ROM кодов датчиков
но каким то образом ф-ция поиска гребет себе байты масива сколько хочет, мож какой то баг компилятора, иначе зачем такой пример в хелпе компилятора....Какие идеи еще будут?
в принципе вы правы....., просто спортивный интерес
еще....., можна ли задавать стили редактирования кода ?
если перейти в меню help - AVR data sheets то оные он ищет с помощью интернет эксплоэра......., а как сделать чтобы он их искал с помощью оперы ?
но каким то образом ф-ция поиска гребет себе байты масива сколько хочет, мож какой то баг
это не баг компилятора, а нежелание думать над тем, что вам пишут.
вы просто объявили размер изначального массива.Функции неважно какого размера массив.Вы ей передали указатель(адрес нулевой ячейки )и к нему прибавляете.Функция считает смещение от начального адреса и туда пишет.
Можно было вообще не указывать размер массива.
А ограничение сделать на этапе поиска устройств.
vitalik_1984 писал(а): это не баг компилятора, а нежелание думать над тем, что вам пишут.
согласен....хотя я примерно так и подозревал......Спасибо за подсказку, но дело в том, я так думаю, что встроенная ф-ция ищет один раз, при этом только после окончания поиска возвращает количество устройств. По вашему алгоритму нужно свою ф-цию писать...
Здравствуйте, прошу подсказать кусок кода RMS вольтметра 220 вольт, для CodeVision AVR.
Работающий по такой вот схеме.
или если кто знает, где есть такой пример на CodeVision AVR, дайте пожалуйста ссылку.