мне это нужно для того чтоб реакция на нажатие кнопки была незамедлительна, а не ждать пока отработает чтение датчика.
CodeVision AVR в вопросах и ответах
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
подскажите как провернуть такое. допустим происходит чтение ds18b20. в это время наступает прерывание в котором читаются кнопки. допустим кнопка нажата, как сделать так чтоб при выходе из этого прерывания, прекращалась текущая процедура чтения ds18b20 и выполнялся код который идет после чтения?
мне это нужно для того чтоб реакция на нажатие кнопки была незамедлительна, а не ждать пока отработает чтение датчика.
мне это нужно для того чтоб реакция на нажатие кнопки была незамедлительна, а не ждать пока отработает чтение датчика.
- Реклама
to ValBag:
никто не запретит вам создать union с вашим битовым полем, для которого так же будет выделены битовые поля для доступа к каждому биту... только нафига весь этот огород?!
to neon-f:
во-первых, чтение датчика занимает примерно 16 миллисекунд - это ж какая у вас реакция, что нажатие кнопки при этом так задерживается?! человек должен быть резче, чем детский утренний понос, чтобы заметить запаздывание реакции на нажатую кнопку в 16-20 миллисекунд!!! тем более, что для кнопки надо дребезг подавлять - а это минимум 10 миллисекунд.
во-вторых, почему бы не продолжать спокойно дочитывание информации из датчика, отработав прерывание от кнопки (если уж так нетерпится)? почему надо обязательно завершать процедуру чтения?
наконец, в-третьих, чтение инфы из датчика ведется явно в цикле - почему бы в этом цикле не проверять дополнительно какой-то флаг, который устанавливается в обработке вашей супер-резкой кнопки? если флаг установлен - return и точка.
никто не запретит вам создать union с вашим битовым полем, для которого так же будет выделены битовые поля для доступа к каждому биту... только нафига весь этот огород?!
to neon-f:
во-первых, чтение датчика занимает примерно 16 миллисекунд - это ж какая у вас реакция, что нажатие кнопки при этом так задерживается?! человек должен быть резче, чем детский утренний понос, чтобы заметить запаздывание реакции на нажатую кнопку в 16-20 миллисекунд!!! тем более, что для кнопки надо дребезг подавлять - а это минимум 10 миллисекунд.
во-вторых, почему бы не продолжать спокойно дочитывание информации из датчика, отработав прерывание от кнопки (если уж так нетерпится)? почему надо обязательно завершать процедуру чтения?
наконец, в-третьих, чтение инфы из датчика ведется явно в цикле - почему бы в этом цикле не проверять дополнительно какой-то флаг, который устанавливается в обработке вашей супер-резкой кнопки? если флаг установлен - return и точка.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
не, не так.
есть прерывание обслуживающее динамическую индикацию. также внутри этого прерывания производится чтение кнопок(их у меня 12 шт(про антидребезг не забыл)) и переменной bytton присваиваю значение состояния кнопок. потом по выходу из прерывания происходит какое то действие в зависимости от того какая кнопка нажата. так вот, если кнопка нажата когда началось чтение датчика(а он опрашивается раз в 5сек) то по выходу из прерывания произходит дочитывание датчика, а уж потом проверяется значение bytton и производится определенное действие. а чтение ведь почти секунду длиться, и следовательно периодически я получаю неприятные "затыки" реакции кнопок.
есть прерывание обслуживающее динамическую индикацию. также внутри этого прерывания производится чтение кнопок(их у меня 12 шт(про антидребезг не забыл)) и переменной bytton присваиваю значение состояния кнопок. потом по выходу из прерывания происходит какое то действие в зависимости от того какая кнопка нажата. так вот, если кнопка нажата когда началось чтение датчика(а он опрашивается раз в 5сек) то по выходу из прерывания произходит дочитывание датчика, а уж потом проверяется значение bytton и производится определенное действие. а чтение ведь почти секунду длиться, и следовательно периодически я получаю неприятные "затыки" реакции кнопок.
Чтение длится несколько десятков миллисекунд. Секунда нужна датчику для преобразования температуры. Но, не обязательно же заставлять МК тупо простаивать эту секунду, можно в это время занять его другим, более важным делом. А датчик опрашивать когда-нибудь там в цикле, готов он отдать температуру или нет.neon-f писал(а):а чтение ведь почти секунду длиться, и следовательно периодически я получаю неприятные "затыки" реакции кнопок.
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
- Реклама
пишем в CVAVR? научится можно глянув в хелп к этому компиляторуneon-f писал(а):я только за, научите как.
заодно и размер *.hex уменьшится немножко
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
да, в CVAVR?
к сожалению с нулевым английским смотреть туда бесполезно. может подбросите кусочек кода.
к сожалению с нулевым английским смотреть туда бесполезно. может подбросите кусочек кода.
После подачи команды на преобразование температуры (0x44), периодически отсылайте датчику команду чтения данных (0xBE), как только датчик перестанет отвечать нулём - можно делать сброс и читать температуру. Разумеется, т.к. датчику приходится просаживать линию в ноль, паразитное питание - невозможно.neon-f писал(а):я только за, научите как.
а делается это низкоуровневыми коммандами...
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
- Сообщения: 1138
- Зарегистрирован: Сб апр 03, 2010 08:57:35
А подскажите пожалуйста как можно програмно сбросить контроллер ATmega. (ног свободных нет)
Токо сильно носом тыкать не надо ежели обсуждалось уже где
Токо сильно носом тыкать не надо ежели обсуждалось уже где
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Могу ошибаться, но вроде как единственный способ программного сброса МК - ватчдок.
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
AI_Disable
sema
так это надо библиотеку править??? или что? я пока только вершки си осилил, а остальное для меня темный лес. если не тяжело, может кусок готового кода, или пример дадите, который я смогу в свою СИ программу вставить.
sema
так это надо библиотеку править??? или что? я пока только вершки си осилил, а остальное для меня темный лес. если не тяжело, может кусок готового кода, или пример дадите, который я смогу в свою СИ программу вставить.
вот:
The 1 Wire Functions are:
unsigned char w1_init(void)
this function initializes the 1 Wire devices on the bus.
It returns 1 if there were devices present or 0 if not.
unsigned char w1_read(void)
this function reads a byte from the 1 Wire bus.
unsigned char w1_write(unsigned char data)
this function writes the byte data to the 1 Wire bus.
It returns 1 if the write process completed normally or 0 if not.
unsigned char w1_search(unsigned char cmd,void *p)
this function returns the number of devices connected to the 1 Wire bus.
If no devices were detected then it returns 0.
The byte cmd represents the Search ROM (F0h), Alarm Search (ECh) for the DS1820/DS18S20, or other similar commands, sent to the 1 Wire device.
только что скопипастил из хелпа к CVAVR 2***
перевести описание функций элементарно
The 1 Wire Functions are:
unsigned char w1_init(void)
this function initializes the 1 Wire devices on the bus.
It returns 1 if there were devices present or 0 if not.
unsigned char w1_read(void)
this function reads a byte from the 1 Wire bus.
unsigned char w1_write(unsigned char data)
this function writes the byte data to the 1 Wire bus.
It returns 1 if the write process completed normally or 0 if not.
unsigned char w1_search(unsigned char cmd,void *p)
this function returns the number of devices connected to the 1 Wire bus.
If no devices were detected then it returns 0.
The byte cmd represents the Search ROM (F0h), Alarm Search (ECh) for the DS1820/DS18S20, or other similar commands, sent to the 1 Wire device.
только что скопипастил из хелпа к CVAVR 2***
перевести описание функций элементарно
абажаю мой KIA CEED [img]http://www.kolobok.us/smiles/madhouse/to_become_senile.gif[/img]
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Пресекать нарушения закона мой долг и обязанность как гражданина моей страны
Можно еще использовать безусловный переход на начало проги (в СИ - это функция main), но если прога зависнет, данный способ конечно не сработает.AI_Disable писал(а):Могу ошибаться, но вроде как единственный способ программного сброса МК - ватчдок.
- Сообщения: 1138
- Зарегистрирован: Сб апр 03, 2010 08:57:35
Ну на счёт сторожевого таймера понятно, просто както не очень удобно, Думал может есть какая функция на Си или вставка на асме. Неужели ничего такого нет. 
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
- Сообщения: 297
- Зарегистрирован: Пт ноя 13, 2009 10:43:31
Помогите, добрые коты! где найти как написано в руководствах "в свойствах проекта CVAVR надо указать float для sprintf"
Имеется компилятор WinAVR-20090313 и AVR Studio 4.14. ПРобовал, как написано http://winavr.scienceprog.com/avr-gcc-t ... r-gcc.html - Не работает почемуто, может еще где-то корявка...
Имеется компилятор WinAVR-20090313 и AVR Studio 4.14. ПРобовал, как написано http://winavr.scienceprog.com/avr-gcc-t ... r-gcc.html - Не работает почемуто, может еще где-то корявка...
...Им бы пить и жрать в три горла день и ночь,
Будь ты трижды гений - им нельзя помочь...
\\Ария\\Игра с огнем
Будь ты трижды гений - им нельзя помочь...
\\Ария\\Игра с огнем
вообще-то об WinAVR есть совсем отдельная тема... но пока модераторы не видят, подскажу:tuco2009 писал(а):Помогите, добрые коты! где найти как написано в руководствах "в свойствах проекта CVAVR надо указать float для sprintf"
Имеется компилятор WinAVR-20090313 и AVR Studio 4.14. ПРобовал, как написано http://winavr.scienceprog.com/avr-gcc-t ... r-gcc.html - Не работает почемуто, может еще где-то корявка...
то есть добавьте нужные параметры в свойства вашего проекта (в AVR Studio открываете свойства проекта и переходите на закладку Custom Options, там в параметрах линкера вводите нужную строчку) и добавьте соответствующую библиотеку для компоновки... кстати, по вашей ссылке это и написаноПримечания: полная реализация всех возможностей форматирования требует больших затрат программной памяти. С целью минимизации ресурсов существует 3 варианта реализации функции vfprintf(), выбираемых компоновщиком во время сборки проекта:
- обычная (по умолчанию) – реализует все виды преобразований, кроме предназначенных для чисел с плавающей точкой;
- усеченная – реализует только базовые преобразования форматов целых чисел и строк, кроме того, может применяться только префикс # (см. Спецификация строки формата для функций форматированного вывода);
- полная – реализующая полную спецификацию форматов.
Усеченная версия выбирается следующими параметрами компилятора:
-Wl,-u,vfprintf -lprintf_min
Полная версия выбирается следующими параметрами компилятора:
-Wl,-u,vfprintf -lprintf_flt -lm
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 297
- Зарегистрирован: Пт ноя 13, 2009 10:43:31
Вот поэтому и пишу, что не работаетARV писал(а):... там в параметрах линкера вводите нужную строчку) и добавьте соответствующую библиотеку для компоновки... кстати, по вашей ссылке это и написанопоздно увидел
Я уже все облазил, при билде вылазит
Код: Выделить всё
avr-gcc.exe -mmcu=atmega8 -Wl,-u,-vfprintf -lm -Wl,-Map=tonometr.map tonometr.o -lprintf_flt -lm -o tonometr.elf
Уже даже все файлы в папке поудалял, кроме проэктного и .с, думаю, пусть заново все пересоздаст - не хотит выводить ФЛОАТ
В чем может быть загогулина? Уже 3-й день простейшую прогу сделать не могу. В int все считать не получится, там три не очень простые формулы с делением и умножением...
...Им бы пить и жрать в три горла день и ночь,
Будь ты трижды гений - им нельзя помочь...
\\Ария\\Игра с огнем
Будь ты трижды гений - им нельзя помочь...
\\Ария\\Игра с огнем
внимательно посмотрите, как должны вводиться опции:
у вас
у вас
надо-Wl,-u,-vfprintf
-Wl,-u,vfprintf
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 297
- Зарегистрирован: Пт ноя 13, 2009 10:43:31
уже пробовал и -Wl,-u,vfprintf и
-Wl,-u,-vfprintf
а также все это с -lm и без него - результат один - пустой массив. Вот сильно упрощенный код.
-Wl,-u,-vfprintf
а также все это с -lm и без него - результат один - пустой массив. Вот сильно упрощенный код.
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>
#include <util/delay.h>
#include <stdint.h>
#include <stdio.h>
unsigned char ADCOut [16];
float Mean;
float StandartDeviation;
Mean = 12.45;
StandartDeviation=25.25;
for (;;){
sprintf (ADCOut,"%2.2f+-%2.2f", Mean,StandartDeviation);
}
...Им бы пить и жрать в три горла день и ночь,
Будь ты трижды гений - им нельзя помочь...
\\Ария\\Игра с огнем
Будь ты трижды гений - им нельзя помочь...
\\Ария\\Игра с огнем


