Хронограф : измеритель скорости пули. От простого к сложному

winziwul
Offline
Зарегистрирован: 05.03.2014

да собрано по ней, но исходник там для дудки, а для студии или для вижена нет?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не для дудки а для ардуино иде. дудка это программа для прошивки

в исходнике нет ничего такого, чтобы не давало по быстрому переделать под другую среду. только зачем? прошивка фьюзы есть. прошей и радуйся

я вам уже говорил не пишу я в студии. только в кодевижн периодически 

под кодевижн переделать нефиг делать. время только потратить

winziwul
Offline
Зарегистрирован: 05.03.2014

дисплей рабочий даже снял с другого устройства для проверки, попробую сделать переходник под 1110 на сколько я помню у них библиотеки идентичны

winziwul
Offline
Зарегистрирован: 05.03.2014

вопрос на первой транице выложена печатка он не соответствует той что в архиве по подключению дисплея, понятно что она другая но дисплеи подключены по разному

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

там просто подключение пинов друное. здесь cs data clock 7 6 5, на 1 странице 5 6 7

не понимаю почему не работает у вас

winziwul
Offline
Зарегистрирован: 05.03.2014

всё зашил, считываю, проверяю тестирую, всё записалось верно, фьюзы выставлены как написано,

к стати загрузчик используется галачка отмечена

Размер загрузчика=256 слов, Адрес загрузчика=$0F00; [BOOTSZ=10]
Переход к загрузчику после сброса ; [BOOTRST=0]
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

насчет загрузчика и его размера знаю. это немного, я всегда его оставляю на всякий если нужно будет загрузчик записать. можете немного памяти освободить, но хронометр всего 4к памяти съедает и не принципиально для меня

все записалось и все равно не работает?

winziwul
Offline
Зарегистрирован: 05.03.2014

да уже и другой дисплей припаял 1110 всё равно не кажет

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не понимаю как такое возможно. у меня даже на отдельной плате и дисплее работает. у тебя нет

самое главное:

сигнал управляющий доходит до дисплея? посмотри прямо на ножках дисплея

резисторы через которые идет сигнал номиналом 4.7-5.1 кОм?

ресет дисплея сидит на 3.3В?

питание дисплея 3.3В?

если все так должно работать

winziwul
Offline
Зарегистрирован: 05.03.2014

всё, заработало, все дисплеи чётко только 1110 зеркально но 1202 отлично, ставлю датчики и буду мучать дальше, а есть там меню или ещё что-то, или только главный экран и всё? вот Дисплей Nokia 2660/2760/6085 показывает ваще круто

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

меню не делал. забил. хотите приделайте

там хоть график можно выводить. раньше выводил миллисекунды для калибровки осциллографом. калибровать кстати просто. выстрелили. замерили расстрояние между началами импульсов. пересчитали в скорость (формула в коде). и дальше правите число 700000. раньше выводил 10 последних измерений , фото выше по теме можно увидеть. можете также сделать. а вообще на что фантазии хватит

skorost = 700000/value;

так в чем у вас причина была?

фото приложите там где круто выглядит. может тоже такие дисплеи буду юзать

1110 зазеркалить не проблема. одну строку просто закоментировать

SendByte(0,0xA1);            // Инвертировать экран по горизонтали 

 

winziwul
Offline
Зарегистрирован: 05.03.2014

да про строку знаю фотку не вопрос, один 1110 заработал как надо без зеркала всё чётко, в чём была проблема я так и не понял, спасибо вам за помощь и за терпение

winziwul
Offline
Зарегистрирован: 05.03.2014

winziwul
Offline
Зарегистрирован: 05.03.2014

если не трудно можешь зеркало сделать на будуюшее

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

добавил в тот же архив прошивку

жаль конечно что не узнали в чем причина

Speed_v5_6.mirror

прикольный маленький дисплей. подсветка 8В мне не понравилась. преобразователь для нее ставить

winziwul
Offline
Зарегистрирован: 05.03.2014

да только в этом минус в подсветке

winziwul
Offline
Зарегистрирован: 05.03.2014

перевернул спасибо показывает отлично, но и верх с низом поменялся )))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

обновил прошивка на перевернутую слева направо и сверху вниз. незнаю только заработает ли вертикальная зеркализация. у меня на 1202 не работает. на других не тестил

winziwul
Offline
Зарегистрирован: 05.03.2014

а возможно добавить кнопочки и меню например что бы регулировать контрастность и инверсию?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

насчет контрастности, когда прогонял все возможные коды конфигурации, там вроде всего 2-3 режима. и в них темнее, но и экран темнее. никакого улучшения. лучше примените 1110 дисплей

инверсию чего? дисплея или по осям?

меню допустим добавить можно с кнопками, но чтобы динамически через меню менять инверсию нужно знать коды нормлаьного режима. я знаю коды чтобы инвертировать, а чтобы вернуть назад честно сказать незнаю, да и не искал

вы можете также прогнать все коды. например инвертировать сначала дисплей по вертикали а потом прогонять все коды пока не найдется код нормлаьного режима

если посмотреть на контроллер pcf8814 26 стр. 

http://mylcd.sourceforge.net/files/pcf8814.pdf

то не все коды работают на 1202. даже прогнав все возможные коды я не нашел инверсию по горизонтали

я сейчас занят другим проектом, помогу по возможности

+ а зачем вам это? вы на лету дисплеи хронографу меняете?

starlei
Offline
Зарегистрирован: 14.12.2014

Здравствуйте. Временно собрал хронограф на ArduinoUNO R3 (чистый китаец). Дисплей 1202.

Дисплей заработал с первого раз, в этом проблем не было.

Но пульки датчик не видит. На входе ардуины (пин PD2,PD3) при освеценном фототранзисторе 2,3В, а при затемнении 5В.

Подскажите пожалуйста в этом ли проблема? Если в этом - как ее решить (необходимо ли увеличеват наминал резистора 4,7К)?

Заранее спасибо.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

фото приложи как сделал фотодатчик

2.3В вроде многовато. должно быть пониже

проверить просто. засунь карандаш например

starlei
Offline
Зарегистрирован: 14.12.2014

Ни как не получается разместить фото здесь. Могу на мыло.

По поводу карандаша. Так и замерял напряжения ( с карандашом 5В, без карандаша 2.3В).

Пойду пробовать менять резисторы.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

сначала на сервер загружаешь а потом вставляешь

starlei
Offline
Зарегистрирован: 14.12.2014

Извените за качество. Вот

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ик диод и фототранзистор ровно напротив друг друга?

трубка толстая. если пуля крохотная может быть без срабатывания

 

starlei
Offline
Зарегистрирован: 14.12.2014

Вроде соосны. Отверстия в трубке сверлил за один проход.

starlei
Offline
Зарегистрирован: 14.12.2014

Свершилось. Поставил подстроечный резистор вместо 4.7К. Понизил напряжение логического нуля до 0,5В(у меня получилось, что сопротивлени должно быть 9кОм).

Спасибо большое jeka_tm за столь интерестый гаджет.

Следующий этап сделать корпус.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да резистор увеличь. и можешь вручную замкнуть фототранзстор сначала один потом второй. должна измерится скорость

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

измерь номинал резистора получившийся

да пожалуйста. буду рад если выложишь тесты скорости

кстати надо калибровать. в коде есть число 70000 вроде. оно сооветствует расстоянию между датчиками. у меня было 7см. надо вписать свое. чем больше расстояние и выше частота ардуины, тем выше макс. измеряемая скорость

я тестировал на 8мгц ардуине, и измерял пневматический пистолет ТТ кажется со стальными шариками

starlei
Offline
Зарегистрирован: 14.12.2014

Резитор на 9 кОм. В программе число 70000 изменил на 100000 т.к. у меня пасстоянее между датчиками 100мм.

Завтра соберу свой пневмат и испытаю хронограф на более высоких скоростях. А после сборки корпуса откалибрую в тире по заводским хронографам.

Жаль что я в написании кодов "полный ноль". Так бы было интерестно добавить несколько окон (расчет энергетики, график скорости, память скоростей, сред.скорость...)

Планирую сделать такую плату (извените что не по правилам выполнена разводка)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

резисторы снизу 4,7к поставь возле 1к праллельно. получится аккуратнее

я думал меню добавить, потом забил

изучай программирование, добавишь все что хочешь

starlei
Offline
Зарегистрирован: 14.12.2014

Что то я запутался читая весь вечер как прошить atmega8 с помощью ArduinoUno.

У меня клон ArduinoUnoR3 и на борту имеется ICSP и USBASP.

Соединение с Arduino такое: 10 - Reset, 11 - MOSI, 12 - MISO, 13 - SCK. Ну и питанее.

Пишет: Размер скетча в двоичном коде: 3 992 байт (из 7 168 байт максимум)
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

Кто нибудь может расписать пошагово или ткнуть носом в инструкцию.

Заранее извеняюсь (в студенческие времена кое-как сдал зачет по программированию).

starlei
Offline
Зарегистрирован: 14.12.2014

Все. Запрограммировал.

Только заставка "Chronograph v5.5" (время от подачи питания до показа скорости 000m/s) грузится ровно 60 сек. На ArdunoUno это занимало 3-5 секунд.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

значит фьюзы поменяй. частота неправильная

LOW     E4 или A4

HIGH    DC или СС

должно 3-5 секунд

starlei
Offline
Зарегистрирован: 14.12.2014

Время сократилось до 32 секунд. Но это все равно не 3-5 сек. Пробовал менять фьюзы: LOW E4 или A4, HIGH DC или СС. Изменений нет - 32 секунды.

Может быть проблема в том что у меня ATMEGA8L? По даташиту у них разница в питании и в Speed Grades 0-8MHz для ATMEGA8L и 0-16MHz для ATMEGA8.

Правильно ли я меняю фьюзы? Я меняю в файле boards.txt low_fuses=0xe4 и high_fuses=0xdc

atmega8l_noxtal.name=ATmega8L @ 8MHz Internal

atmega8l_noxtal.upload.protocol=arduino
atmega8l_noxtal.upload.maximum_size=7168
atmega8l_noxtal.upload.speed=19200

atmega8l_noxtal.bootloader.low_fuses=0xe4
atmega8l_noxtal.bootloader.high_fuses=0xdc
atmega8l_noxtal.bootloader.path=atmega8
atmega8l_noxtal.bootloader.file=ATmega8L.hex
atmega8l_noxtal.bootloader.unlock_bits=0x3F
atmega8l_noxtal.bootloader.lock_bits=0x0F

atmega8l_noxtal.build.mcu=atmega8
atmega8l_noxtal.build.f_cpu=8000000L
atmega8l_noxtal.build.core=arduino
atmega8l_noxtal.build.variant=standard

starlei
Offline
Зарегистрирован: 14.12.2014

Вчера сделал корпус для датчиков и отфрезеровал окно для дисплея. Расстоянее между отверстиями для датчиков ровно 100.00мм.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

корпус классно получился

насчет скорости не скажу. в 8L дела не имел. но там вроде тоже самое, только частота ниже

программу в 8L как заливаешь?

вот на всякий случай бутлоадер получше и что в boards писать

http://yadi.sk/d/CXjuENmaEEwun

архив optiboot. там разберешься. может поможет

starlei
Offline
Зарегистрирован: 14.12.2014

Не помагло. Также 30 секуд.

В atmega8L заливаю так:

У меня клон ArduinoUnoR3.

Соединение с Arduino такое: 10 - Reset, 11 - MOSI, 12 - MISO, 13 - SCK. Ну и питанее.

В ардуино заливаю: Примеры -  ArduinoISP. 

Затем в файле boards.txt меняю фьюзы. (именно здесь играю фьюзами).

Открываю скетч Speed_v5_6.

Выбираю: Сервис - Плата - ATmega8 Optiboot (8MHz internal OSC).

Выбираю: Сервис - Программатор - Arduino as ISP.

Удерживая Shift нажимаю "Загрузить с помощью программатора"

 

Подсажите правильно ли я все делаю?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да вроде да

 

starlei
Offline
Зарегистрирован: 14.12.2014

Всех с наступающим Новым Годом.

Поменял камень на ATmega8A (вместо ATmega8L). Перепрошиваю. Не получается. Все равно скорость загрузки меню - 32 секунды.

Валялся у меня программатор USBasp. Подключаю к нему. Выставляю фьюзы. Программирую HEX-ом с помощю "дудки". Таже история - 32 секуды. Потом до меня доходит - что фьюзы нужно программировать отдельно. Нажимаю программировать фьюзы и новогоднее чудо случается - скорость загрузки 3-4 секудны. 

Значит что-то я делал не правильнос фьюзами при программировании через ArduinoUNO.

Подскажите пожалуйста - что нужно поменять в hex-овском файле для расстояния между датчиками 100мм?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в hex ничего не поменяешь. просто в ардуино коде выстави для 100мм скомпилируй и залей код. фьюзы у тебя уже стоят. хотя они должны при каждой заливке обновлятся

ну не суть. если не получится тогда заходишь в папку %temp% там находишь папку build и циферки. время изменения чтобы совпадало с компиляцией. открываешь. внутри будет куча файлов и среди них hex его и можешь отдельно залить

кстати скоро наверно буду переписывать код. добавлю 1 или 2 кнопки, статистику и среднее значение

планирую для экономии электричества регулировку яркости дисплея и отключение датчиков

будет как то так выглядеть. сами датчики отдельно. на 3д не видно дисплей. но он спереди. просто 3д модель лень было рисовать 

с наступающим

starlei
Offline
Зарегистрирован: 14.12.2014

Для питания хронографа на ebay был куплен преобразователь напряжения 3.7В-5В с функцией заряда батареии.

Так же были произведены полевые испытания.

Регулируя мощность пневматики измерял скорость пульки.

До 200м/с все работает замечательно - при каждом выстреле скорость разная, но при увеличении мощности - показывает каждый раз одну и ту же скорость 240,3м/с. Я не думаю что безредукторная воздушка может так однообразно стрелять от выстрела к выстрелу, тем более поссле каждого выстрела я меняю мощность пневматики. В чем дело еще не разобрался. Может нужно поиграть напряжением логического нуля (специально на плате вместо  резисторов на 4.7кОм для фототранзисторов поставил подстроечные до 10кОм)? А может частоты ATmegи не хватает?

img alt=

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

чем выше частотат тем точнее. если хочется точнее надо писать не на ардуиновском языке. но не горю желанием курить даташиты. здесь много людей разбирающихся, если захотят помочь будет замечательно

а вообще у меня в планах не стояло измерять скорость выше 200м/с, изза этого не заморачивался. как быть тебе уже сам думай. этот хнорометр в твоем случае скорее игрушка чем измерительный прибор, но до заслуживает определенного внимания

если приделать кварц на 16 или 20 мгц. то будет точнее

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

победил наконец дисплей, а точнее ардуину с этими всеми этими кодировками и т.д.

так что меню будет на русском

взял из одной либы кусок кода для видеопамяти, чтобы не по строкам рисовать и выводить текст, а в любом месте

но и проект теперь будет на меге328. под задуманное нужно больше памяти чем в меге8

да и видеопамять почти 1к оперативки занимает. а в меге8 ее всего 1к

вот это собственно и выводилось

void loop(){
  Clear_LCD();
  drawString(0,  0, 1, "АБВГДЕЖЗИЙК");
  drawString(0, 10, 1, "ЛМНОПРСТУФХ");
  drawString(0, 20, 1, "ЦЧШЩЪЫЬЭЮЯ");
  drawString(0, 30, 1, "абвгдежзийк");
  drawString(0, 40, 1, "лмнопрстуфх");
  drawString(0, 50, 1, "цчшщъыьэюя");
  Update();
  delay(3000);
  
  Clear_LCD();
  drawString(0,  0, 1, "ABCDEFGHIJK");
  drawString(0, 10, 1, "LMNOPQRSTU");
  drawString(0, 20, 1, "VWXYZ");
  drawString(0, 30, 1, "abcdefghijk");
  drawString(0, 40, 1, "lmnopqrstu");
  drawString(0, 50, 1, "vwxyz");
  Update();
  delay(3000);
  
  Clear_LCD();
  drawString(0,  0, 1, " !#@$%^&*()+-/");
  drawString(0, 10, 1, ".,:;[]{}");
  Update();
  delay(3000);
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

блин 3 часа потраченного времени изза странной кодировки в одной программе

если с начала есть программа GLCDFontCreator. отлично генерирует шрифты, но блин кодировка. она по колонкам блин. изза перехода на использование видеопамяти думал что то я еще не разобрался и косячу.

ну как можно было додуматься выдавать код по колонкам. по строкам ведь гораздо проще вывести. в итоге вылилось в следующее

void draw24x32(byte x, byte y, boolean color, byte c){
  if((x >= LCD_X) ||(y >= LCD_Y) || ((x + 4) < 0) || ((y + 7) < 0))
    return;
  for (byte k=0; k<4; k++ ){   
    for (byte i=0+k; i<96+k; i+=4 ){ 
      byte line = pgm_read_byte(font24x32+i+c*96);

      for (byte j = 0; j<8; j++) {
        (line & 0x01)? drawPixel(x+i/4, y+j+k*8, color) : drawPixel(x+i/4, y+j+k*8, !color);
        line >>= 1;
      }
    }
  }
}

по моему изврат

но результатом доволен

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хотя по моему предыдущий вариант как то гармоничнее смотрелся. но на всякий случай еще проверил разные шрифты. все не то

starlei
Offline
Зарегистрирован: 14.12.2014

Я тоже считаю, что первоначальный шрифт более подходит для данного девайса. 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

часть работы по переписыванию кода сделал. вот пока что имеется. данные просто для теста

но есть один кусок кода который мне не очень нравится. он относится к меню, а точнее генерации что то вроде кнопки

вот такой код выводит следующее

fillScreen(!color);
  Menu( 1, 55, 47, 0, "Вниз", 0, 1);
  Menu(50, 55, 45, 0, "Ввод", 0, 1);
  Menu( 1,  0, 94, 0, "Калибровка", 0, 0);
  Menu( 1, 12, 94, 0, "Экран", 1, 0);
  Menu( 1, 24, 94, 0, "Экон.энергии", 0, 0);
  Menu( 1, 36, 94, 0, "Назад", 0, 0);
  Update();
void Menu(byte x, byte y, byte w, byte h, char *str, boolean tap, boolean ramka){
  h=h+13;
  
  byte length=0;
  char *type = str;
  unsigned char AN_RU = *str;
  while(*type){ 
    *type++;
    length++;
  }
  if(AN_RU>128) length=length/2;
  
  if(tap){
    fillRect(x, y, w, h, color);
    drawString(x+w/2-length*3, y+h/2-3, !color, str);
  }
  else{
    fillRect(x, y, w, h, !color);
    drawString(x+w/2-length*3, y+h/2-3, color, str);
  }
  if(ramka) drawRect(x, y, w, h, color);
}

мне не нравится как я определяю длину текста. может кто что нибудь предложит покороче и приятнее на вид

byte length=0;
  char *type = str;
  unsigned char AN_RU = *str;
  while(*type){ 
    *type++;
    length++;
  }
  if(AN_RU>128) length=length/2;// делю на два так как русские символы имеюют в 2 раза длиньше код

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну так что? оставить как есть или есть вариант получше?