Преобразуем в строку. Часть 2. Числа с фиксированной и плавающей точкой.
Мелкие вопросы по МК и ПЛИС.
- Реклама
- Сообщения: 124
- Зарегистрирован: Пт янв 25, 2013 02:48:32
Здравствуйте, вопрос мелкий, но для меня пока неясный.
Задача измерение "мокрости" земли в таймере полива на МК. Датчик простейший из из двух разделенных дорожек текстолита или штыри может потом сделаю.
Проблема в том, что как сказали если на датчике будет постоянное напряжение, то соли отложатся и врать начнет, поэтому мерять нужно переменным током.
Я подумал, что буду так делать - сначала на одну ногу выдаю еденицу, а на другой жду её появления, а в следующем замере наоборот - на вторую выдаю 1, а на первой жду отклика...ну и так каждый час, меняя при замере.
Только вот как тут быть с подтяжками портов, чтоб без ложных срабатываний...и в каком состоянии держать порты между измерениями, чтоб на датчике не было химических реакций ?
Задача измерение "мокрости" земли в таймере полива на МК. Датчик простейший из из двух разделенных дорожек текстолита или штыри может потом сделаю.
Проблема в том, что как сказали если на датчике будет постоянное напряжение, то соли отложатся и врать начнет, поэтому мерять нужно переменным током.
Я подумал, что буду так делать - сначала на одну ногу выдаю еденицу, а на другой жду её появления, а в следующем замере наоборот - на вторую выдаю 1, а на первой жду отклика...ну и так каждый час, меняя при замере.
Только вот как тут быть с подтяжками портов, чтоб без ложных срабатываний...и в каком состоянии держать порты между измерениями, чтоб на датчике не было химических реакций ?
Попробуй сделать емкостной датчик. Принцип тот же, только плата покрыта лаком. Идея в том что наличие токопроводящей жидкости возле электродов изменяет их емкость. Емкость получится в пикофарадах конечно, но её без проблем измерить контролером с применением таймера в режиме захвата, или просто по прерыванию считывать сколько таймер тактов насчитал. с усреднением 16 замеров или даже сотни(чего мелочится, это ж дело такое - торопится некуда). Либо просто подать частоту на один электрод и измерять реактивное сопротивление емкости на фиксированной частоте - потом выпрямление, АЦП и т.д. после калибровки можно мерять степень увлажнения почвы. И главное - никакого непосредственного контакта электродов, а следовательно никакой химии.
- Сообщения: 124
- Зарегистрирован: Пт янв 25, 2013 02:48:32
нету таймеров, кончились, и место в памяти кончается(в баске пишу) - не до глобальных вычислений.Alexeyslav писал(а):с применением таймера
Неужели в устройстве столько независимых часов???_Vasilij_ писал(а):нету таймеров, кончились, и место в памяти кончается...Alexeyslav писал(а):с применением таймера
Вообще то каждый таймер может использоваться РАЗНЫМИ участками программы, важно лишь, чтобы ХОД ВРЕМЕНИ у этих потребителей был одинаковым.
- Реклама
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
Здравствуйте!Мучаю прошивку в max+плюсовском waveforme и пытаюсь понять как мне сигналы TFSA,TFSB,TFSC,TFSD с единицы на 0 сделать? он же из двух триггеров состоит,у них RST все ресетит, ставлю его хоть на ноль хоть на 1 ,результат 1 и тот же... помогите с этим пожалуйста!
язык AHDL , микросхема EMP7064STC44-10
Спойлер
Код: Выделить всё
SUBDESIGN dac4
(
SCK : INPUT;
MOSI : INPUT;
MISO : OUTPUT;
RST : INPUT;
CS : INPUT;
IOW : INPUT;
IOR : INPUT;
A[4..0] : INPUT;
DAT[7..0]: BIDIR;
TFSA : OUTPUT;
TFSB : OUTPUT;
TFSC : OUTPUT;
TFSD : OUTPUT;
TCLK : OUTPUT;
DTAO : OUTPUT;
DTAI : INPUT;
SS : INPUT;
)
VARIABLE
ECHO,SER_ENA, ASEL, BSEL, CSEL, DSEL : DFFE;
D[7..0] : NODE;
BEGIN
ECHO.CLRN = RST;
SER_ENA.CLRN = RST;
ASEL.CLRN = RST;
BSEL.CLRN = RST;
CSEL.CLRN = RST;
DSEL.CLRN = RST;
ECHO.CLK = !IOW;
SER_ENA.CLK = !IOW;
ASEL.CLK = !IOW;
BSEL.CLK = !IOW;
CSEL.CLK = !IOW;
DSEL.CLK = !IOW;
ECHO.ENA = !CS&(A[4..0]==8);
SER_ENA.ENA = !CS&(A[4..0]==8);
ASEL.ENA = !CS&(A[4..0]==8);
BSEL.ENA = !CS&(A[4..0]==8);
CSEL.ENA = !CS&(A[4..0]==8);
DSEL.ENA = !CS&(A[4..0]==8);
ECHO.D = DAT1;
SER_ENA.D = DAT0;
ASEL.D = DAT2;
BSEL.D = DAT3;
CSEL.D = DAT4;
DSEL.D = DAT5;
DTAO = MOSI;
TCLK = SCK;
TFSA = !(ASEL&SER_ENA);
TFSB = !(BSEL&SER_ENA);
TFSC = !(CSEL&SER_ENA);
TFSD = !(DSEL&SER_ENA);
MISO = TRI(DTAI,SER_ENA&ECHO);
D[] = (H"60"&(A[4..0]==0)) #
(H"28"&(A[4..0]==1))#
(H"04"&(A[4..0]==2)) #
(H"00"&(A[4..0]==3)) #
(H"00"&(A[4..0]==4)) #
(H"08"&(A[4..0]==5)) #
(H"00"&(A[4..0]==6)) #
(H"00"&(A[4..0]==7)) #
--- main part
((GND,GND,DSEL,CSEL,BSEL,ASEL,ECHO,SER_ENA)&(A[4..0]==8));
DAT0 = TRI(D0,!CS&!IOR);
DAT1 = TRI(D1,!CS&!IOR);
DAT2 = TRI(D2,!CS&!IOR);
DAT3 = TRI(D3,!CS&!IOR);
DAT4 = TRI(D4,!CS&!IOR);
DAT5 = TRI(D5,!CS&!IOR);
DAT6 = TRI(D6,!CS&!IOR);
DAT7 = TRI(D7,!CS&!IOR);
END;
Последний раз редактировалось Gudd-Head Ср мар 20, 2013 13:47:26, всего редактировалось 2 раза.
Причина: Нарушение п.2.5 Правил Форума
Причина: Нарушение п.2.5 Правил Форума
slavokhire5 писал(а):здравствуйте, коты)
прошил attiny13a c фьюзами на встроенный тактовый 128кГц (скрин не сделал). теперь программатор avr910usb не может перешить МК, пишет, что выставлены локбиты 1 и 2. сигнатуры считывает. фьюзы читает все запрограммированными (CVAVR). пробовал программатором к tiny подключиться на LOWSCK. та же картина
я запорол МК неправильными фьюзами, или это из-за низкой тактовой?
таки запорол) следующая тинька прошилась уже хорошо. появился новый вопрос:
что я неправильно делаю со входом в спящий режим?
Код: Выделить всё
while(1)
{
volatile signed char A1[5] = {0, 0, 0, 0, 0};
for (i = 0; i < 100; i++)
{
WDTCR |= _BV(WDTIE) | _BV(WDP0); // watchdog работает в режиме ПРЕРЫВАНИЯ, прерывание через 32мс
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
sleep_disable();
for (j = 0; j < 3; j++)
{
if (PINB & (1 << j))
A1[j]++;
}
PORTB ^= 0b00010000;
_delay_us(100);
PORTB ^= 0b00010000;
}
.........Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Сообщения: 44
- Зарегистрирован: Чт фев 21, 2013 20:31:33
Доброе время суток всем!
Подскажите начинающему программисту весьма преклонного возраста, как записать в два 8ми разрядных регистра 2х байтную переменную и считать её оттуда?
Подскажите начинающему программисту весьма преклонного возраста, как записать в два 8ми разрядных регистра 2х байтную переменную и считать её оттуда?
Например, так:Valer5 писал(а):как записать в два 8ми разрядных регистра 2х байтную переменную и считать её оттуда?
Код: Выделить всё
uint8_t r_lo, r_hi;
uint16_t v;
...
r_lo = v % 0x100;
r_hi = v / 0x100;
// или так
r_lo = (uint8_t)v;
r_hi = (uint8_t)(v >> 8);
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
А что вы на вход подаете? Если верить написанному, то TFSA=0, если ASEL=1 и SER_ENA=1.Nevox писал(а):Здравствуйте!...пытаюсь понять как мне сигналы TFSA,TFSB,TFSC,TFSD с единицы на 0 сделать? он же из двух триггеров состоит,у них RST все ресетит, ставлю его хоть на ноль хоть на 1 ,результат 1 и тот же... помогите с этим пожалуйста!
TFSA = !(ASEL&SER_ENA);
С другими сигналами аналогично.
Полайте им 1, зачем сброс-то мучить...
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Вход то нормальный вроде, бесплатный... а выход 10руб.... (а прерывания-то разрешены?)что я неправильно делаю со входом в спящий режим?
Alexeyslav, спасибо. Действительно, проблема с глобальным разрешением прерываний была ) я объявил asm("sei") до блока main вместе со всякими глобальными переменными.
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
Nevox писал(а):пытаюсь понять как мне сигналы TFSA,TFSB,TFSC,TFSD с единицы на 0 сделать? он же из двух триггеров состоит,у них RST все ресетит, ставлю его хоть на ноль хоть на 1 ,результат 1 и тот же... помогите с этим пожалуйста!
Ну правильно, если сбросить ASEL, сигнал TFSA будет равен единице. Чему Вы удивляетесь?
Вопрос появился...
Поставил регистр DIDR0 = 1 (TINY13a) и PCMSK = 1. Прерывания по Pin change разрешены.
Дотрагиваюсь до PORTB0 и ловлю прерывание по Pin change.
Но в даташите вроде написано, что если DIDR0 в 1, то PIN отключен и всегда читается как 0. Откуда прерывание? или я чего не понимаю?
Поставил регистр DIDR0 = 1 (TINY13a) и PCMSK = 1. Прерывания по Pin change разрешены.
Дотрагиваюсь до PORTB0 и ловлю прерывание по Pin change.
Но в даташите вроде написано, что если DIDR0 в 1, то PIN отключен и всегда читается как 0. Откуда прерывание? или я чего не понимаю?
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Сообщения: 581
- Зарегистрирован: Ср янв 05, 2011 10:03:18
Ага. Только зависит от того, с какими индейцами мы дружим. Если с большим индейцем, то lo и hi местами поменяются.Goldsmith писал(а):Например, так:Спойлер
Код: Выделить всё
uint8_t r_lo, r_hi; uint16_t v; ... r_lo = v % 0x100; r_hi = v / 0x100; // или так r_lo = (uint8_t)v; r_hi = (uint8_t)(v >> 8);
С уважением,
Виктор.
Виктор.
Точно. Поэтому первый вариант в этом смысле надежнее.ut1wpr писал(а):зависит от того, с какими индейцами мы дружим.
Именно из-за неопределенности endianness не привел вариант через манипуляции с адресами, а этот случай как-то умудрился пропустить впопыхах.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
J. Ganssle
Вообще фонарь:) в Протеусе бегает нормально, в тиньке вроде идет по циклу, но после второго прерывания по pin change улетает хз куда... может в асме что не так? или я чего не понимаю?
- Вложения
-
- prog.rar
- исходник на си, схемка в протеусе и т.д.
- (50.23 КБ) 128 скачиваний
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- Сообщения: 129
- Зарегистрирован: Вт мар 22, 2011 18:41:48
Всем привет.
Залочина МК Atmega8 ждет внешнего тактирования.
Как востановить ?
Могу ли я к выводам XTAL залоченой МК, подключить другую Рабочую МК к которой подключен внешний кварц и конденцаторы. Вообщем соединить выводы XTAL.
Залочина МК Atmega8 ждет внешнего тактирования.
Как востановить ?
Могу ли я к выводам XTAL залоченой МК, подключить другую Рабочую МК к которой подключен внешний кварц и конденцаторы. Вообщем соединить выводы XTAL.
Собрать генератор меандра, на частоту, думаю, 1-10 МГц (или взять готовый, кварцевый), и подать с него сигнал на ногу МК внешнего тактирования. Некоторые программаторы сами умеют делать такой сигнал...
- Сообщения: 162
- Зарегистрирован: Вс дек 09, 2012 12:14:44
Подскажите пожалуйста, кто Шпротеусом пользуется - как снизить нагрузку на ЦП? а то пишет: нагрузка 100% анимации в реальном времени не будет
я уже и выгрузил все из памяти, загрузка 1% память занятая 552мб. запускаю эмуляцию грузит до 100%
у меня 2 ядра по 2,2 и 2гига оперативы - я так понимаю маловато, да?
А может есть какие то хитрости в настройки анимации в самом протеусе?
у меня 2 ядра по 2,2 и 2гига оперативы - я так понимаю маловато, да?
А может есть какие то хитрости в настройки анимации в самом протеусе?


