Трубка связиста

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 142
Зарегистрирован: Сб дек 24, 2011 12:39:03

Сообщение CyberVad »

vem566 писал(а):Цепочка резисторов между землей и питанием и кнопки от каждого соединения к ноге МК. Дешево и сердито. Правда кнопок всего 5 или 6 было. Ну а в принципе можно и до хрена нацеплять.
Да, это верно. Я порой в своих самоделках такие клавы делаю. Работает. В некоторых бытаппаратах буржуи штук по 10-15 на один канал АЦП цепляют. Ну а 4 это вообще влёгкую. Единственный вопрос: может кто-то подскажет конструкцию поизящнее, чем череда проверок типа:
if (radc<0x33) NumButton=ON_OFF; //Кнопка 1 "Вкл"
//---------------------------------Кнопка 2---------------------------------------
if ((radc>=0x33) & (radc<0x66)) //Кнопка 2 "Select"
{
}
//---------------------------------Кнопка 3---------------------------------------
if ((radc>=0x66) & (radc<0x99)) //Кнопка 3 "Минус"
{
}
?
radc это сокращение от "read from ADC"
Вышел из себя.
Пришел в себя.
Ушел в себя.
И решил больше сегодня никуда не ходить
Реклама
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

Сообщение shim666 »

Строго не судите,тут только еще наброски
Вложения
трубка.rar
(29.02 КБ) 131 скачивание
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4751
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

CyberVad писал(а):может кто-то подскажет конструкцию поизящнее,
Как то не встречалось ничего лучше. Оператор case это те-же проверки, просто по другому написано.
shim666 писал(а):тут только еще наброски
Это все уже выкладывалось. И комментировалось.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

CyberVad писал(а):может кто-то подскажет конструкцию поизящнее, чем череда проверок
в вашей череде проверок записаны явно лишние условия. если пороги уровней POROG1, POROG2, POROG3 и т.д. соответствуют возрастающим числам (т.е. каждый последующий порог больше предыдущего), нет нужды в проверках "с обоих краев" участка, образуемого порогами:

Код: Выделить всё

if(radc < POROG1){ /* обработка 1-го участка */}
else if(radc < POROG2){ /* обработка 2-го участка */}
else if(radc < POROG3){ /* обработка 3-го участка */}
...
else { /* обработка выхода за предельно допустимый уровень */ }
оператор switch вряд ли поможет, т.к. проверяет на точное совпадение значения, а не на вхождение в диапазон значений.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 142
Зарегистрирован: Сб дек 24, 2011 12:39:03

Сообщение CyberVad »

Да, всё так. Сейчас упростил 3 проверки - прошивка стала меньше на 8 байт )) Ну, "копейка рубль бережёт" )) А что, в старые времена приходилось за каждый байт бороться :))) И немного быстрее будет.
Вышел из себя.
Пришел в себя.
Ушел в себя.
И решил больше сегодня никуда не ходить
Реклама
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

Сообщение shim666 »

vem566 писал(а):
CyberVad писал(а):может кто-то подскажет конструкцию поизящнее,
Как то не встречалось ничего лучше. Оператор case это те-же проверки, просто по другому написано.
shim666 писал(а):тут только еще наброски
Это все уже выкладывалось. И комментировалось.
протос я еще не выкладывал до этого.
Реклама
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

Сообщение shim666 »

$regfile = "m8def.dat" 'МК MEGA8
$crystal = 8000000 'Рабочая частота МК 9.6МГц
$hwstack = 32
$swstack = 32
$framesize = 32


Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5 , E = Portd.4 , Rs = Portd.3
Config Lcd = 16 * 1a

Initlcd
Cursor Off Noblink

Config Portb.1 = Output

Led Alias Portb.1

Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim Voltage1 As Single
Dim Readadc1 As Word
Dim R As Word
Dim N As Byte
Dim I As Byte
Dim C As Byte

Do
Start Adc
Readadc1 = Getadc(4)
Voltage1 = Readadc1 / 1023
Voltage1 = Voltage1 * 30

Locate 2 , 1
Lcd "1" ; ":" ; Fusing(voltage1 , "##.#") ; "V"

R = Getadc(0)
C = 1


Select Case R
Case 0 : Exit Do
Case 620 To 650 : N = 1

Case 330 To 350 : N = 2

Case 400 To 440 : N = 3

Case 550 To 600 : N = 4

Case 300 To 329 : N = 5

End Select
Goto Nabor
Loop
End


Nabor:
Locate 1 ,C !!!!Подскажите как сделать так,чтобы к переменная (С) после каждого нажатия цифры увеличивалась на 1???!!!!!
Lcd N
For I = 1 To N
Led = 1
Waitms 50
Led = 0
Waitms 50
Next
Return

Уже многое пробовал(и incr и субпрограмму,что то не получаетя).Помогите новичку)).И заодно скиньте кто нибудь исходник омметра...
Друг Кота
Аватара пользователя
Сообщения: 4751
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Так она же перед case в единицу становится. Вынести установку в единицу до оператора Do, а в подпрограмме увеличивать. тем же incr.
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

Сообщение shim666 »

А функция Locate точно прочитает переменную "С"???
Друг Кота
Аватара пользователя
Сообщения: 4751
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

А почему нет?
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

Сообщение shim666 »

Сделал как вы говорили,но что то не выходит!!!может locate не воспринимает переменные???или просто я туплю?!И вопрос не в тему!!!Есть шанс поступить на вышку "Энергоснабжение", стоит ли??Зарплата у меня небольшая,придётся сложить зубы на полку в ближайшие 5 лет, и на мк мало времени останется.
Последний раз редактировалось shim666 Вт окт 28, 2014 02:43:24, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 4751
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Функция locate в качестве параметров допускает хоть константы, хоть переменные.
А по вопросу не в тему, так не понятно. Где зарплата большая? А где по душе?
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Пн мар 12, 2012 12:01:15
Откуда: Тростянец, Винницкая обл, Украина

Сообщение Nico2_2 »

shim666 писал(а):Вывод на дисплей набираемый номер... Дисплей от мобилы ,как вариант Ls020.
А вот этого как раз делать Вам, коллега, не советую, если Вы, конечно, не живете на юге. Поносите часок Вашу трубу в монтерской сумке на морозе и гарантировано ничего на дисплее не увидите! Уж лучше подумайте о малогабаритном многоразрядном сегментном индикаторе, хотя и тут проблемы с прожорливостью... Экономней, думаю, пара светодиодов, которые и будут Вам сигнализировать о КЗ, наличии питания в линии, полярности линии, повышенном напряжении, индикации набора(при импульсном наборе) и чего Вы еще напрограммируете :)
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

Сообщение shim666 »

Семисегментный не подходит,охото сделать многофункциональную трубу!А как насчет монохромного дисплея,к примеру от нокии 3310???
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Пн мар 12, 2012 12:01:15
Откуда: Тростянец, Винницкая обл, Украина

Сообщение Nico2_2 »

Те же грабли... Я к чему. Делал я зарядное устройство для автомобильной АБ. Имея дисплей и библиотеку к нему, сделал вывод всего на lcd. Так вот, все это хорошо и красиво работало до того момента, когда очень нужно было подзарядить батарею зимой. Оставил я это все на заряде на ночь в гараже, а утром на дисплее абсолютно НИЧЕГО! Он попросту замерз! А все дело в том, что рабочий температурный диапазон абсолютного большинства lcd начинается с 0 и выше по Цельсию. Работа ниже 0 не гарантирована. Сначала символы тускнеют, что даже подсветка не помогает, потом пропадают вообще... Вот такие дела... С зарядного я его снял и использовал семисегментники, тем минуса нормально.
Теперь о функционале. Что Вы хотите туда вложить? Если Вы делаете инструмент для линейного електромонтера, зачем усложнять ему жизнь вольтметром и тем более амперметром, что он ими будет измерять? Защита от постороннего высокого потенциала - это так. Но будете ли Вы работать на линии, зная о постороннем напряжении? А ведь одно из первых правил - приступая к работе убедится в отсутствии постороннего напряжения с помощю обязательного инструмента - ПРОВЕРЕННОГО ИНДИКАТОРА! И какой практический смысл в отображении набираемого номера? Достаточно звукового подтверждения нажатия клавиш. Если что-то и нужно измерить, например сопротивление изоляции или шлейфа, то для монтера лучше это организовать не в виде точных измерений (этим пускай занимаются работники кроса), а в виде сравнений <1кОм, <1МОм, <5МОм и т.д. Тоже и с станционным напряжением. Неплохо организовать подачу напряжения из Вашей трубы на микрофон коллеги при прозвонке кабеля в отсутствии станционного напряжения, предусмотреть два способа набора(тональный и импульсный), определение полярности, для работы со спаренными номерами, память на последний набранный номер. Ну и для продвинутых, несколько дополнительных функций, как то - генератор 800Гц/0дБ, возможность работы работы по двум линиям одновременно(по одной разговариваем, вторую меряем), автоответчик по типу станционного, измеритель интервалов(проверка дисковых номеронабирателей), часики с будильником, что-бы не пропустить обеденный перерыв :))... и всего-то каких-то четыре светодиода индикации, которые светятся, мигают с разными интервалами, меняют цвет в конце концов. Да и не страшно им содержимое Вашей сумки(отвертки, бокорезы, обжимки и прочего), и падения с 6 метровой высоты. Правда в тетрис поиграть не получится! :))
abc
Друг Кота
Аватара пользователя
Сообщения: 3688
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

не-не, только свистоперделки, только хардкор !
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Ответить

Вернуться в «AVR»