РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ


  • Архив - только для чтения
    Схемы отладочных плат для МК
    Сб, 01.02.2014, 11:58 | Сообщение # 51        
    Бухарь
    аватар
      Постов: 315   Друзья 
    UR3LBL, как и обещал вот подправленные библиотеки. sl8869, ты не скопировал библиотеки в нужное место. Возьми эти и помести в соответствующие папки в CodeVision. Ну и убери кириллицу из адреса, как и писал ear .
    Файлы: 1100.h (1.0 Kb) · 1100.lib (21.1 Kb)
    Вс, 02.02.2014, 21:09 | Сообщение # 52        
    qwe
    аватар
      Постов: 19   ОК 
    Здравствуйте, пытаюсь подключить дисплей к mega168pa, но не выходит,все пробовал,вплоть до простой замены заголовочного файла, поправьте и расскажите что не так,файлы с исходниками и протеусом прилагаю.
    Файлы: 5943097.rar (55.3 Kb)
    Вс, 02.02.2014, 23:36 | Сообщение # 53        
    Бухарь
    аватар
      Постов: 315   Друзья 
    qwe, а ты пробовал только в протеусе ? Проверял ли в железе ? На протеус не всегда стоит полагаться.
    Пн, 03.02.2014, 00:11 | Сообщение # 54        
    qwe
    аватар
      Постов: 19   ОК 
    Бухарь, и там и там, светик загорелся(я поставил после инициализации на порт 1) и все, пробовал две библиотеки(пару постов выше, другая что вы мне рекомендовали с задержками) глухо. Куда копать? В самом CVAvr менял и mega168 и галочку в свойствах добавлял, не знаю в каком направлении двигаться(
    P.S. по протеусу даже порты не "дрыгаются".
    Пн, 03.02.2014, 12:17 | Сообщение # 55        
    sl8869
    аватар
      Постов: 14   ОК 
    Всем СПАСИБО ОГРОМНОЕ!!!!! всё получилось!разместив библиотеки в cvavr
    Пн, 03.02.2014, 17:48 | Сообщение # 56        
    Бухарь
    аватар
      Постов: 315   Друзья 
    qwe, удалось запустить дисплей в протеусе. Дам тебе hex файл. Попробуй запустить в железе. В случае удачного запуска попробую объяснить как подправить исходник.

    Файлы: 9422651.jpg (123.1 Kb) · 8138663.hex (9.1 Kb)
    Пн, 03.02.2014, 18:14 | Сообщение # 57        
    SssaHeKkk
    аватар
      Постов: 2291   Друзья 
    лови немного критики...незнаю нужно ли тебе это...советы от знающего человека...См. файл watch1202.c

    1) char sek , min , chas ,den , budmin, budchas
    че за бредовые названия? Надо называть вещи своими именами seconds(секунды), hours (часы), day (день), alert_min(минуты будильника), alert_hour (часы будильника), alert_on (будильник включен) – название переменной должно говорить за себя, а не типа pikpik (че за фигня так и не въехал – в этой лаже разбираться неохота). И почему будильник при 0 включен, а при 1 выключен? Обычно наоборот.
    2) int menu=0 – нифига се…больше 65 тыщ всяких значений меню, лучше использовать однобайтную переменную – все ж будет экономия оперативки.
    3) Все шрифты вынести в отдельный файл типа fonts.h и подцепить к либе дисплея, т.к. не нужно захламление основного файла ненужной информацией да и потом файлы шрифтов проще таскать от проекта к проекту, не занимаясь копипастом. И зачем ваще массивы со шрифтами были объявлены со спецификатором static?
    4) PORTB.2=1 – только в CVAVR можно подобную лажу увидеть. Та же AVR Studio или IAR пошлет подальше с такой конструкцией (ошибками закидает). Надо писать максимальнопереносимый под другие компиляторы код, ведь в теме на форуме дофига трепа про Си, а Си такого не приемлет (конечно можно через макросы или дефайны, но этого нету).
    5) hsek= sek/10;
    lsek= sek%10;
    hmin= min/10;
    lmin= min%10;
    hchas= chas/10;
    lchas= chas%10;
    hbudmin= budmin/10;
    lbudmin= budmin%10;
    hbudchas= budchas/10;
    lbudchas= budchas%10;
    Кто сказал что контроллер умеет аппаратно делить? Это ж память жрет и особенно время выполнения данных операций. Лучше написать функцию замещения деления через вычитания, что сэкономит flash (мелочь) и особенно процессорное время (уже ощутимо при таком количестве делений).
    6) Комментов в коде ваще почти нет. Если выкладываешь для других, то будь добр, объясни че такое hchas и lchas (я то понимаю что это старший и младший байты). unsigned char dd=10 – это вообще загадка. Про затрату 1 байта на цифру говорить не буду (есть вариант упакованного формата – 2 цифры на байт и не пришлось бы делить на старший и младший), т.к. не знаю нужно тут или нет (во все вникать не охота).
    7) if(budon==0){
    if(chas==budchas){
    if(min==budmin){
    };
    };
    };
    Это чистой воды ерунда. Что мешает объединить под одним оператором if? Ведь намного улучшится читаемость кода.
    8) if(menu==0)char_32_16(menu,57,6);
    if(menu==1)char_32_16(menu,57,6);
    if(menu==2)char_32_16(menu,57,6);
    if(menu==3)char_32_16(menu,57,6);
    if(menu==4)char_32_16(menu,57,6);
    if(menu==5)char_32_16(menu,57,6);
    if(menu==6)char_32_16(menu,57,6);
    Это полная жопа! А если меню = 0, то зачем проверять все остальное (расход процессорного времени на ненужные операции)? Хотя бы организовать через switch.
    9) Зачем под отсчет временных интервалов использовать самый навороченный таймер? Я согласен что для другого он тут не используется, но нужно разумно подходить к ресурсам контроллера. Для этих целей вполне хватит Timer2.
    10) Полное незнание периферии, т.к. при настройке использован Wizard, что отхавывает flash на ненужные операции.
    11) lcd_init();
    delay_ms(200);
    lcd_init();
    Зачем 2 раза инициализировать??????????????? Если сцышь за какой-то там кондер, то просто потупи свои 200мсек и сделай инициализацию.
    12) if(menu==0){
    while(ends==0){
    if(PIND.5==0){
    delay_ms(500);
    menu=1;
    ends=1;
    };
    Это вообще что….Кнопки обрабатываются через задержку… полсекунды контроллер ниче не делает (при тактовой 8МГц за полсекунды может выполнится 4000000 простейших инструкций). Во-первых достаточно примерно 100ms и делать надо через таймеры с циклическим опросом. И вообще (на сколько я понял) какие кнопки висят на порте D (бит - кнопка), т.е. че они делают, мне че, вечно в схему зырить если я захочу изменить? Надо абстрагироваться от железа и задефайнить их, чтоб не рыскать по коду, а в одном месте их переопределить.
    13) А теперь возвращаемся в середину кода….самый офигенный косяк… Вызов функции showtime(); в прерывании!!!!!!!!!!!! Это каким надо быть глупым чтоб это сделать!!!!!!!!!!!!!!

    Написано при беглом просмотре. 100% косяков больше!!!!!!!!!!!!
    Пн, 03.02.2014, 18:50 | Сообщение # 58        
    Бухарь
    аватар
      Постов: 315   Друзья 
    SssaHeKkk, критика это хорошо. Тем более от знающего человека. Можно посмотреть на свои ошибки глазами другого человека. Но художника может обидеть каждый. Косяков с точки зрения профессионала там много. Можно сказать, что программа вообще сплошной косяк. Написал как мог. У меня нет опыта и человека, чтоб объяснил. Опыт приходит со временем. На другой раз учту. Да и исходники тоже наверно выкладывать не буду. Как бы хорошо был не написан - все равно обосрут.
    Пн, 03.02.2014, 18:52 | Сообщение # 59        
    SssaHeKkk
    аватар
      Постов: 2291   Друзья 
    выложил для этого
    Цитата Бухарь ()
    Можно посмотреть на свои ошибки глазами другого человека

    а не для этого
    Цитата Бухарь ()
    художника может обидеть каждый
    Пн, 03.02.2014, 19:18 | Сообщение # 60        
    Бухарь
    аватар
      Постов: 315   Друзья 
    Цитата SssaHeKkk ()
    Кто сказал что контроллер умеет аппаратно делить? Это ж память жрет и особенно время выполнения данных операций. Лучше написать функцию замещения деления через вычитания

    То что он не умеет делить аппаратно - я догадывался. Можно посмотреть пример такой функции ?
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA