Специальные цены   новые товары
Закрытая тема
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 41 по 80 из 121

Программирование контроллеров

Тема раздела Самодельная электроника, компьютерные программы в категории Общие вопросы; STK500 У меня он есть на базе AVR Butterfly и на базе Bus Pirate...

  1. #41

    Регистрация
    16.12.2005
    Адрес
    Москва
    Возраст
    39
    Сообщений
    4,452
    Записей в дневнике
    13
    STK500
    У меня он есть на базе AVR Butterfly и на базе Bus Pirate

  2.  
  3. #42

    Регистрация
    04.10.2004
    Адрес
    Балашиха
    Возраст
    42
    Сообщений
    2,892
    Я 100 лет назад собрал "протоса". С прошивкой STK-500 имел глюки в виде необходимости практически при каждом действии с программатором "перетыкать" его в усб ноута (может ноут у меня кривой какой?). С прошивкой "протоса" - AVR910 проблем нет. Но есть несколько "но". Из под кодевижин не поддерживается страничный режим, т.е. контроллер прошивается, но медленнее, чем мог бы. Поэтому я использую аврпрог от аврстудии. Подпихнул его в кодевижин в свойствах проекта на запуск после компиляции. Вполне удобно. Все хочу, но ленюсь попробовать STK-500 v2, т.е. с аппаратным, а не софтовым усб. Думаю, глюк описанный выше - в кривой реализации софтового усб.

  4. #43

    Регистрация
    19.03.2009
    Адрес
    Москва
    Возраст
    33
    Сообщений
    64
    кстати ..только вспомнил... у меня есть ЦАП\АЦП... работающее от усб.. имеюще и аналоговые и цифровые входы выходы...
    а может есть смысл на базе него сделать программатор?

  5. #44

    Регистрация
    18.07.2006
    Адрес
    Москва, коптево
    Возраст
    34
    Сообщений
    411
    Честно скажу, всю ветку я не прочитал, но к первому сообщению, хочу посоветовать проект arduino (и его клоны - freeduino, boarduino), поглядите - уверен, что заинтересует.

  6.  
  7. #45

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Я тоже хочу освоить программирование микроконтроллеров, но что-то не за что зацепиться. Может кто-нибудь показать как это делается на конкретном примере.

    Вот, например, для начала у меня есть такая минимальная задачка.
    Нужно сделать контроллер, который будет управлять проходным светофором железнодорожной автоблокировки. Светофор имеет 3 огня (кто угадает, какие?). Логика его работы такая:
    - Если ограждаемый светофором блок участок занят (на первом входе 0), то горит красный. При этом состояние других входов можно и не проверять.
    - Если этот блок участок свободен (на первом входе 1), то проверяется состояние следующего светофора, от которого тянется отдельный провод, подходит ко второму входу.
    - Если следующий светофор зактыт (на втором входе 0), то горит жёлтый огонь.
    - Если сдедующий светофор открыт (на втором входе 1), то проверяется положение стрелок с помощью третьего входа.
    - Если на третьем входе 1 (стрелки прямо), то горит зелёный огонь.
    - Если на третьем входе 0 (стрелки на боковой путь), то включается жёлтый мигающий огонь.
    Жёлтый огонь должен мигать с частотой около 1 Гц, причём 2/3 периода он включен, а 1/3 - выключен.

    Вот так выглядит схема, реализующая этот алгоритм, на логических элементах.
    Нажмите на изображение для увеличения
Название: Схема на дискретных элементах.JPG
Просмотров: 139
Размер:	37.2 Кб
ID:	349965
    Здесь первый вход назван 11, второй - 12, третий - 13

    А вот как я хочу сделать на контроллере. Контроллер PIC12F629
    Нажмите на изображение для увеличения
Название: Схема на контроллере.JPG
Просмотров: 153
Размер:	22.7 Кб
ID:	349966
    На вход 17 не обращайте внимания, просто с помощью цепи питания я хочу сделать смену направления автоблокировки.

    Если найдётся специалист, напишите ассемблеровский файл, если можно, с комментариями. И потом я буду осваивать, что с ним делать дальше.

  8. #46

    Регистрация
    08.03.2009
    Адрес
    Великий Новгород
    Возраст
    45
    Сообщений
    856
    ИМХО, слишком сложные задачи ставите для начала. Или надежда на то, что кто-то за Вас напишет программу? Начинать нужно хотя-бы с одного светодитода типа помигать, кнопки на входе, типа поуправлять. И почитать что-то вроде вот этого http://avr123.nm.ru/, аналогов в сети полно, и по ПИКАм тоже.

  9. #47
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Виктор, такую простую задачу можно решить на PIC конроллере, а программу написать на PIC-Basic. Если ты знаком с языком Basic, который в школах преподавали раньше, то проще пареной репы! А на ассемблере писать, это нужно его знать, точнее знать архитекруту проца, на изучение у тебя уйдёт год или больше, и только потом ты сможешь написать такую прогу. А на PIС-Basic такая прога пишеться на 15 мин, и работает сразу!

    Ну вот типа такой пример:

    Код:
    '****************************************************************
    '*  Name    : TEST LED                                          *
    '*  Author  :                                                   *
    '*  Notice  : Copyright (c) 2010                                *
    '*          :                                                   *
    '*  Date    :                                                   *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '*          :                                                   *
    '****************************************************************
    
    ' Описание портов
    IN_0     VAR GPIO.0 
    LED      VAR GPIO.1 
    PORT_2   VAr GPIO.2 
    PORT_3   VAR GPIO.3 
    PORT_4   var GPIO.4 
    PORT_5   VAR GPIO.5 
    
    
    '         76543210
    TRISIO = %00000001		' 1 - Вход
    						' 0 - Выход
    						
    CMCON = %00000111	' Отключение компаратора битами 0,1,2											
    
    CLEAR ' Отчистка RAM
    
    main:
      IF IN_0 = 1 THEN GOSUB LED_BL  ' Если на входе IN_0 лог. 1 тогда переход на процедуру LED_BL
    GOTO main ' Зацикливание процедуры main 
    
    
    LED_BL:
      LED = 1     ' Включить светодиод
      PAUSE 666   ' Пауза 666 мс (2/3 от секунды)
      LED = 0     ' Выключить светодиод
      PAUSE 333   ' Пауза 333 мс (1/3 от секунды)
    RETURN        ' Возврат к оператору GOSUB LED_BL
    
    END
    Эта программа мигает светодиодом если на порт GPIO.0 приходит лог. 1 если лог. 0 значит не мигает. Светодиод висит на порте GPIO.1. Кстати я сделал что бы он мигал, как светофор.

    Вот это пример. Всё остальное, ещё проще.

    По PIC-Basic есть книга: Чак Хелибайк "Программирование PIC-микроконтроллеров на PIC-Basic", там описаны все комманды.

    Есть сайт, там эта книга есть в электронном виде: http://www.picbasic.ru/

  10.  
  11. #48
    Учит правила
    Регистрация
    15.05.2009
    Адрес
    Москва
    Возраст
    54
    Сообщений
    1,672
    Цитата Сообщение от ubd Посмотреть сообщение
    Виктор, такую простую задачу можно решить на PIC конроллере, а программу написать на PIC-Basic.
    ...И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM. С миганием светодиодов и переключением сигналов на входе.

  12. #49
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM
    Нет ну это само собой, для отладки программы.

  13. #50

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Я думал, сейчас начнутся реплики типа "Это слишком просто, делай на дискретных элементах", а оказывается это что-то сложное. Не ожидал.
    Однако, мне понравилось, что появились компиляторы на основе Бэйсика, я пытался несколько лет назад что-то такое найти, но у меня ничего не получилось. Наверное, это новые компиляторы.

    Мне удалось скачать компилятор Proton и книжку про PIC-Basic, подскажите, где можно скачать сам PIC-Basic и книжку про Proton.

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

    А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?

  14. #51
    Учит правила
    Регистрация
    15.05.2009
    Адрес
    Москва
    Возраст
    54
    Сообщений
    1,672
    Algorithm Builder. Но - для Atmel'ов.

  15. #52
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?
    Там всё ровно нужно знать архитектуру проца. Конечно если просто светодиодом помигать, то архитектуру знать не нужно, а если что то серьёзнее то нужно.

    В этом отношении проще всего PIC-Basic, там архитектуру знать не нужно. Всё просто и очень стабильно работает. Я на этом языке уже наделал кучу полезных схем, из них есть регулятор хода с реверсом, и многое другое.

    Мне удалось скачать компилятор Proton и книжку про PIC-Basic, подскажите, где можно скачать сам PIC-Basic и книжку про Proton.
    Книг по Протону на русском языке нет в природе. Это так и есть. Я искал и узнавал, оказывается нет. На английском что то есть вроди бы. Но скажу что Протон сильно не отличается от PIC BASIC PRO, так что разницы нет. В протоне есть только какие то дополнительные команды, без которых можно обойтись.
    На русском много есть только по PIC Basic PRO.
    Вот среда программирования: http://www.picbasic.ru/load/microcod...full/3-1-0-133
    Вот компилятор: http://www.picbasic.ru/load/kompilja...p_26/3-1-0-135
    Вот полезные книги: http://www.picbasic.ru/load/3-1-0-50
    http://www.picbasic.ru/load/10-1-0-83
    Там же есть и Протеус и много много другого: http://www.picbasic.ru/load/

    УДАЧИ в изучении!

  16. #53

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Я видел этот сайт, скачать с него нельзя, ссылки зациклены - сказка про белого бычка.

    Что образуется на выходе Pic-Basic? Как это зашить в контроллер?

    Algorithm Builder. Но - для Atmel'ов.
    Когда хорошо знаешь контроллеры, легко работать с разными типами, брать программы для одного, зашивать в другой... Но я пока только осваиваю, выбрал для освоения PIC - вот и буду с ним работать. Изучу - возьмусь за Atmel и прочие.

    А какие существуют правила для ассемблера? Имена регистров можно так и писать, как они названы в документации к контроллеру? Как там ставить метки? Что значит инициализировать порт, просто обозначить какая ножка будет выходом а какая входом?
    Последний раз редактировалось Vitec; 02.06.2010 в 03:55.

  17. #54
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Я видел этот сайт, скачать с него нельзя, ссылки зациклены - сказка про белого бычка.
    Причём тут бычёк, зарегистрироваться нужно и всё.

    Что образуется на выходе Pic-Basic? Как это зашить в контроллер?
    Как всегда, любой компилятор любого языка программирования, для микроконтроллеров, генерит файл с расширением .hex Вот его то и прошивают в контроллер.

    Для прошивки контроллера, нужен программатор. Зашивается просто, нажимаешь кнопку и зашивается, hex файл. Ещё биты конфигурации нужно установить. Для разных типов процов, разные программаторы и программы. Для PIC есть хороший и не сложный программатор ExtraPIC. Если будешь делать дам схему. Для Atmel программатор проще, называется STK-200, есть ещё STK-300 и 500. Но достаточно STK-200. Выше о нём писали.

    А какие существуют правила для ассемблера? Имена регистров можно так и писать, как они названы в документации к контроллеру? Как там ставить метки? Что значит инициализировать порт, просто обозначить какая ножка будет выходом а какая входом?
    Так ты ассемблер изучать собрался или что? Определись.

  18. #55

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Вообще хочу изучить ассемблер, но рассмотрю и другие варианты, такие, как Pic-Basic.

    Цитата Сообщение от ubd Посмотреть сообщение
    Для прошивки контроллера, нужен программатор
    Есть программатор, называется PICPROG. Осталось только научиться писать программы.
    Есть несколько задач, которые я хотел бы возложить на контроллер, одна из них - перед вами.
    Есть пару контроллеров, чтобы потренироваться, один из них PIC12F629. К нему есть перевод заводской микрочиповской документации. В нём по отдельности всё понятно, но когда нужно написать программу, мозг вскипает и как писать - непонятно. Поэтому я и спрашиваю, может кто поможет? Кроме того, всё дело тормозит отсутствие информации о правилах самого ассемблера, его дерективах. Во всех источниках это преподносится как само собой разумеющееся, но я-то этого не знаю.

  19. #56
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Я так понял PICBаsic вы проигнорировали. Почему?

    Нужно вам искать книгу по ассемблеру с нуля. Или зайдите на http://www.microchip.su/ Там на форуме очень много обсуждают ассемблер.

    А почему именно ассемблер? Что бы на нём написать вашу простую задачу, нужно много знать.

  20. #57

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Да не-е-ет, не проигнорировал, просто ещё не скачал PIC-Bаsic. Идея программировать на Бэйсике мне очень нравится. Я помню в университете, в ещё раньше в техникуме, когда изучали Бэйсик, у меня получалось круче всех в группе писать на нём программы, может потому, что впервые я начал на нём писать ещё в детстве на ZX Spectrum. Но идею освоить ассемблер я тоже не оставил, поэтому заданные мной вопросы остаются открытыми. Я считаю, что чем ближе язык программирования к машинным кодам, тем копмактнее получается программа и тем точнее программа отвечает заданным требованиям. Кроме того, многие готовые программы написаны на ассемблере и в них можно будет разобраться, владея этим языком.
    За ссылку на микрочип спасибо, обязательно почитаю.
    Вот когда скачаю PIC-Bаsic, если сам не разберусь - тогда и буду спрашивать про него, чтобы было более предметно.

  21. #58
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    у меня получалось круче всех в группе писать на нём программы, может потому, что впервые я начал на нём писать ещё в детстве на ZX Spectrum.
    Вот кстати по этой же причине и у меня получалось круче всех. То же начинал с Spektrum`a.

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

    и тем точнее программа отвечает заданным требованиям.
    Не факт, на других языках так же может точно отвечать требованиям. Только есть разница, что бы написать то же самое на ассме, трубется асм знать от и до, и время на написание программы может уйти раз в 5 больше. В отличии от языков высогого уровня. Поэтоум сейчас очень распространён СИ. Прога пишеться быстро и работает быстро, а времени уходит меньше на написание и отладку.

    Кроме того, многие готовые программы написаны на ассемблере и в них можно будет разобраться, владея этим языком.
    Но если есть исходник, а не hex файл.

  22. #59

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Ура, товарищи! Я скачал PIC-Basic и описание к нему.
    В этом документе иногда встречается странное слово DEFINE, например, в такой строчке:
    DEFINE BUTTON_PAUSE 50 ‘ Дребезг кнопки задерживается на 50ms
    Что означает это слово?

    Цитата Сообщение от ubd Посмотреть сообщение
    время на написание программы может уйти раз в 5 больше
    Почитав это руководство, я понял, что это действительно так,особенно если дело касается протоколов передачи данных или звуковых эффектов. Но в случае ввода вывода на ассемблере дело может ограничится несколькими строками, а бэйсик сделает это за несколько сотен байт. Становится страшно, влезет ли код в контроллер?
    Последний раз редактировалось Vitec; 17.06.2010 в 16:44.

  23. #60
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Становится страшно, влезет ли код в контроллер?
    Собственно влезает нормально. Если он одне операцию делает за несколько сотен байт, то добавив ещё одну программа увеличивается всего на 10-15 байт, так что он использует одну и ту же библиотеку.
    Например взяв проц 2К памятью, можно написать серьёзную программу. Я написал на нём реверсивный регулятор хода, с отсечкой по разряду аккума и защита от пропадания сигналла. Прога заняла 80% пространства в памяти. Но работает идеально! Ту же прогу я умещал в 1К памяти, убрав все понтовые примочки.

    DEFINE BUTTON_PAUSE 50 ‘ Дребезг кнопки задерживается на 50ms
    Это по моему к ProtonBasic относиться.

    Ты какое описание скачал? И какой компилятор?

    Я же выкладывал ссылки в 52 посту. Там по Протону ничего.

  24. #61

    Регистрация
    04.10.2004
    Адрес
    Балашиха
    Возраст
    42
    Сообщений
    2,892
    Цитата Сообщение от Vitec Посмотреть сообщение
    В этом документе иногда встречается странное слово DEFINE,
    Что означает это слово?
    Это присвоение чему-нибудь буквенного обозначения. К примеру:
    дефайн первое_слагаемое 3
    дефайн второе_слагаемое 5

    Тут мы присвоили константам 3 и 5 символьные обозначения. Далее в программе мы можем использовать эти самые обозначения, отвлекшись от цыфр.

    Сумма = первое_слагаемое + второе_слагаемое.
    В переменной "Сумма" окажется результат сложения (3+5=8)

    Очень удобно присваивать символьное обозначение портам ввода вывода. Например:
    Пусть к ноге 3 бита порта А мы подсоединили светодиод.
    дефайн светодиод портА.3
    дефайн вкл=1
    дефайн выкл=0

    Далее в программе включаем светодиод:
    Светодиод=вкл
    Пауза
    И выключаем.
    Светодиод=выкл

    Зачем это надо: Вот ты сделал устройство и отладил его на макете. Потом разводишь печатную плату и оказывается неудобным подключать светодиод именно к третьей ноге порта А, а на плате удобней его развести на портС.5 .
    Разводишь как удобнее, а в программе изменяешь льшь одну строчку дефайн и все. Тебе не нужно ползать по всей программе и искать где ты светодиод зажегал, а где гасил.

  25. #62

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Зачем нужен DEFINE в той строчке, которую я привёл в качестве примера? Разве нельзя обойтись без него?
    Как ни странно, но в описании также отсутствует слово VAR. Из контекста я догадываюсь, что это тоже присвоение. Это так?

    Какое описание скачал? И какой компилятор?
    Файл описания называется PBP manual rus - это явно машинный перевод.
    Приложение компилятора называется MicroCode Studio

    Когда я указываю компилятору свой контроллер (PIC12F629), он подключает файл PBPPIC14.RAM, в котором определено куча переменных, размером WORD. Но я не собираюсь в своей программе использовать такое количество длиннющих переменных. Можно ли убрать строчку, подключающую этот файл? Какие могут быть последствия? И вообще, могу ли я поудалять всякие назначенные переменные, которые сами появляются вместе с подключаемыми файлами и описаниями контроллера или это служебные переменные для самого PIC-Basic?

    Могу ли я использовать в комментариях кирилицу?

    Также при указании компилятору моего контроллера, вначале появляются строчки:
    BANK0 $0020, $005F
    EEPROM $2100, $217F
    LIBRARY "PBPPIC14"
    Поясните, что это значит?
    Последний раз редактировалось Vitec; 18.06.2010 в 13:15.

  26. #63

    Регистрация
    04.10.2004
    Адрес
    Балашиха
    Возраст
    42
    Сообщений
    2,892
    Ну... Вот у тебя программа из 5 файлов по 10 экранов. И понадобилось тебе задержку поменять. Сделать не 50мс, а 55, к примеру. Ты через месяц эту элементарную задачу будешь выполнять в течении пары часов. Будешь перерывать все исходники, искать нужные задержки, вспоминать алгоритм и соображать то-ли это место, та-ли задержка... А тут у тебя в дефайнах, прямо в начале программы все критичные константы заданы (ну или вобще в отдельном файле), в проге они вполне понятно называются - алгоритм читается легко и т.д. Это же удобно. Но чтобы осознать - надо начать что-то делать, наступить на грабли, получить полбу и осознать.

    Var - это объявление переменных (чтобы компилятор знал что это переменные, и их тип).

    Если задаете такие вопросы - то какой язык изучать - вам всеравно. Изучайте С! Он более стандартизирован, более кросплатформен. Берете любую книжку "С для чайников" и вперед! Пытаться писать на ассемблере - это только в случае острой необходимости при ограниченном быстродействии. Смысла в этом не много. Вдруг придется на другой контроллер перескакивать - и опять все сначала. А если на С писать - практически ничего менять в программе не придется, если к примеру с пика на Авр перепрыгивать.

  27. #64
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Файл описания называется PBP manual rus - это явно машинный перевод.
    Там я выкладывал книгу Чака Хелибайка. Поищи на том сайте, она была в нормально отсканированном виде. Если не найдёшь, могу выслать на почту.

    MicroCode Studio
    Да это PIC Basic PRO

  28. #65

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Конечно, лучше на почту. Здесь можно писать адрес электронной почты?

    надо начать что-то делать, наступить на грабли...
    Сейчас наступим. Я начну ту задачку, что приводил ранее.

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

    А по русски можно писать в комментариях?

  29. #66

    Регистрация
    04.10.2004
    Адрес
    Балашиха
    Возраст
    42
    Сообщений
    2,892
    ну попробуйте закомментировать. Ошибки не появится - значит не нужны. Тут же все просто.

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

  30. #67

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Вобщем, попробовал я написать небольшую программку на ту тему, что задал ранее. Напоролся на следующие грабли:
    - компилятор отказывается компилировать мою программу. Он пишет: "fatal: out of memory (pbpw.exe)",хотя программка у меня получиласть довольно маленькая. Чего теперь делать?
    - в описании контроллера написано, чтобы включить внутренний тактовый генератор 4МГц, нужно задать режим INTOSC (xx000xxxxxx100) в слове конфигурации. Но в оболочке программатора нет такого режима. Там есть такие: LP, XT, HS, EC, IRC, IRC+, ER, ER+. Какой нужен, чтобы использовать внутренний генератор, а все физические выводы - как порты ввода-вывода?

  31. #68

    Регистрация
    04.10.2004
    Адрес
    Балашиха
    Возраст
    42
    Сообщений
    2,892
    Если бы вы пытались в CVAVR, то я бы вам помог, а так - ищите саратников....

  32. #69
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Он пишет: "fatal: out of memory (pbpw.exe)",хотя программка у меня получиласть довольно маленькая. Чего теперь делать?
    Ты всё установил что бы MicroCode Studio работала? Это только оболочка, среда программирования, нужно установить сам компилятор.
    Вот этот http://www.picbasic.ru/load/kompilja...p_26/3-1-0-135 Установил его?
    Он у меня в корневом каталоге.
    При первом запуске MicroCode Studio, прога начинает искать этот компилятор на винте. Как находит, запускается.
    Зайди View > Compile and program options
    Там на первой вкладке, должна быть указана папка куда установлен компилятор.

    Биты конфигурации тут вообще не причём. Компилятору по барабану какие они. Прога должна всё ровно скомпилироваться. В программе их устанавливать я не знаю как. Спрашивал об этом у многих, никто не ответил. По этому биты ставлю при прошивки проца. В теле программы биты не нужны.

    Какой проц выбрал?

    а все физические выводы - как порты ввода-вывода?
    В битах это не устанавливается. На это влияют регистры.
    Кинь мне в личку своё мыло, я тебе книгу вышлю. Там всё расписано.

  33. #70

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    Так, я добился того, чтобы компилятор компилировал. И мне удалось зашить код в контроллер. Но остаётся открытым вопрос о внутреннем тактовом генераторе.

    Всякие разнообразные мигалки работают, но когда в программе есть проверка условий, то всё компилируется и зашивается, но контроллер заданным образом не работает.
    Можно ли условия проверять таким образом?
    IF [условие] THEN
    [инструкции если да]
    ENDIF
    [и т.д.]
    Я предположил, что если слова ELSE нет, то будет выполнено то, что ниже ENDIF. Хотя я вообще-то пробовал применять слово ELSE - один фиг не работает.

    Какой проц выбрал?
    Так ведь PIC12F629.

  34. #71
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Так, я добился того, чтобы компилятор компилировал. И мне удалось зашить код в контроллер. Но остаётся открытым вопрос о внутреннем тактовом генераторе.
    Для проца 12F629.
    IntRC OSC - это внутренний тактовый генератор. У тебя наверное IRC. Ещё у тебя есть IRC+, видимо это с выходом тактовой частоты на какую то ногу, тебе это не нужно.
    Можно ещё выключить MCLR, что бы освободить 4-ю ногу. Её можно сделать как вход. Если включен, то на 4ю ногу нужно подать +5В через резистор 1К.

    Ещё у этого проца, что бы работал внутренний тактовый генератор, нужно что бы обязатально была калибровочная константа в конце памяти программ. Некоторые программаторы её затирают. Считай свой проц и посмотри что в последней ячейке. Там должно быть к примеру 34С0, или близко. Но ни как не 3FFF!

    Можно ли условия проверять таким образом?
    IF [условие] THEN
    [инструкции если да]
    ENDIF
    [и т.д.]
    Да можно.

    Я предположил, что если слова ELSE нет, то будет выполнено то, что ниже ENDIF. Хотя я вообще-то пробовал применять слово ELSE - один фиг не работает.
    Правильно мыслишь, но тут в чём то другом дело.
    Покажи свою программы, так я ничего сказать не могу.

    Ещё обязательно для PIC12F629, нужно отключить компараторы. В начале программы нужно вставить вот это:
    CMCON = %00000111

    В 47 посту я приводил пример проги для 629, там эта строка есть.

    Ну и правильно выставить регистор TIRS. Он отвечает за то, какие порты будут входами а какие выходами.

    ' 76543210
    TRISIO = %00000001 ' 1 - Вход
    ' 0 - Выход

    Сдесь порт GPIO.0 включен как вход, а остальные порты как выход.

    За частую это основные ошибки и причины, по которым простые программы не работают.

  35. #72

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    У тебя наверное IRC.
    Значит, я правильно догадался, путём шаманских вычислений именно к этому я пришёл.

    Можно ещё выключить MCLR
    А это, кстати, мысль. Ведь я пробовал к мигалке добавить кнопку и кнопка была как раз на 4 ноге. Контроллер на кнопку не реагировал, но после нажатия начинал мигать. Должно быть 4 вывод работал как MCLR. А как сделать портом?

    Покажи свою программы
    Вот та программа, которую я пишу для реализации поставленной выше задачи
    clear 'очистка памяти
    CMCON = %00000111 'Отключение компаратора
    TRISIO = %00111000 'установка выводов 0 - вых, 1 - вход.
    'младший бит - справа 76543210
    uch var GPIO.3 'uch - это участок пути за светофором. 1 если свободен
    sled var GPIO.4 'sled - это сигнал с следующего светофора. 1 если открыт
    strel var GPIO.5 'strel - положение стрелок за след. всетоф. 1 если прямо

    red var GPIO.2 'red - красный светодиод на выводе P2
    yel var GPIO.0 'yel - жёлтый - на выводе P0
    gr var GPIO.1 'gr - зелёный - на выводе P1

    start:
    if uch = 0 then 'если блок участок занят
    pause 200 'делаем задержку
    yel = 0: gr = 0 'гасим желтый и зелёный светодиод
    pause 300 'небольшая задержка (светофор погашен)
    red = 1: goto start 'включаем красный светодиод, переходим на start
    endif

    if sled = 0 then 'если след. светоф. зактыт
    red = 0: gr = 0 'гасим красный и зелёный светодиод
    pause 300 'небольшая задержка (светофор погашен)
    yel = 1: goto start 'включаем жёлтый светодиод, переходим на start
    endif

    if strel = 1 then 'если стрелки установлены прямо
    red = 0: yel = 0 'гасим красный и жёлтый светодиод
    pause 300 'небольшая задержка (светофор погашен)
    gr = 1: goto start 'включаем зелёный светодиод, переходим на start
    endif

    '----------если условия не выполняются, то включается жёлтый мигающий огонь

    if red = 1 then 'если ранее горел красный светодиод, то
    red = 0: pause 300 'его выключаем, делаем задержку (светофор погашен)
    endif
    if gr = 1 then 'если ранее горел зелёный светодиод, то
    gr = 0: pause 300 'его выключаем, делаем задержку (светофор погашен)
    endif
    if uch = 0 then start 'если во время предыдущих задержек участо за светофором
    'будет занят, то возвращаемся на start
    yel = 1: pause 330 'включаем жёлтый светодиод, делаем задержку
    if uch = 0 then start 'такая же проверка занятости пути
    pause 330 'ещё задержка, желтый всё ещё горит
    if uch = 0 then start 'опять проверка занятости пути
    yel = 0: pause 300 'гасим жёлтый светодиод, делаем задержку (светофор погашен)
    goto start 'проверяем все условия заново
    end
    Но сейчас программа не работает вообще. При подаче питания на светофоре просто горит красный и всё. Ни на что внешнее не реагирует.
    Про компаратор и направления выводов я догадался. Все переменные, которые заданы заранее, а также подключенные файлы я "закомментировал"
    И спасибо за книжки.
    Последний раз редактировалось Vitec; 19.06.2010 в 14:31.

  36. #73
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    А это, кстати, мысль. Ведь я пробовал к мигалке добавить кнопку и кнопка была как раз на 4 ноге. Контроллер на кнопку не реагировал, но после нажатия начинал мигать. Должно быть 4 вывод работал как MCLR. А как сделать портом?
    Просто в битах конфигурации, выключаешь MCLR, и он атоматически превращется в прот, только входа, как выход он работать не будет. Т.е. врегисторе TIRSIO, порт GP3, должен быть включен как 0.
    У тебя в программе как раз так и сделано.

    Но сейчас программа не работает вообще. При подаче питания на светофоре просто горит красный и всё. Ни на что внешнее не реагирует.
    Псмотрел программу. Всегда красный гореть и ни на что не реарировать, у тебя может только в том случае, если всегда на порт GP3 (ush), приходит лог 0. Видимо у тебя так и есть.

    В программе вроде бы всё правильно, должно работать. Дальше смотри схему включения. И биты конфигурации не забудь травильно выставить.

    У тебя с железной дороги лог единицы с развахом 5В приходят? А то я там на схеме +9В видел. Так можно проц сжечь. Лог единицы не должны быть выше напряжения питания. А лог ноль, ниже 2В должны быть.
    И что то у тебя задержки сильно маленькие по 300мс. Это всего 0,3сек.. В общем то ты сам смотри как всё заработает, то будет видно что нужно паузы увеличить.

    а также подключенные файлы я "закомментировал"
    Там никаких файлов не подключалось. О чём речь?

    Вот я подправил прогу, в плане оформления. Не нужно всё слеплять, не понятно что к чему, прога читается плохо. Есть как бы првила оформления, я их предерживаюсь.

    Код:
    CMCON = %00000111 'Отключение компаратора
    TRISIO = %00111000 'установка выводов 0 - вых, 1 - вход. 
    'младший бит - справа 76543210
    
    uch     var GPIO.3 'uch - это участок пути за светофором. 1 если свободен
    sled    var GPIO.4 'sled - это сигнал с следующего светофора. 1 если открыт
    strel   var GPIO.5 'strel - положение стрелок за след. всетоф. 1 если прямо
    
    red     var GPIO.2 'red - красный светодиод на выводе P2
    yel     var GPIO.0 'yel - жёлтый - на выводе P0
    gr      var GPIO.1 'gr - зелёный - на выводе P1
    
    clear 'очистка памяти
    GPIO = $00
    
    start:
    if uch = 0 then 'если блок участок занят
      pause 200     'делаем задержку
      yel = 0
      gr = 0    'гасим желтый и зелёный светодиод
      pause 300 'небольшая задержка (светофор погашен)
      red = 1   'включаем красный светодиод, переходим на start
      goto start 
    endif 
    
    if sled = 0 then 'если след. светоф. зактыт
      red = 0
      gr = 0     'гасим красный и зелёный светодиод
      pause 300  'небольшая задержка (светофор погашен)
      yel = 1
      goto start 'включаем жёлтый светодиод, переходим на start
    endif
    
    if strel = 1 then 'если стрелки установлены прямо
      red = 0
      yel = 0 'гасим красный и жёлтый светодиод
      pause 300 'небольшая задержка (светофор погашен)
      gr = 1
      goto start 'включаем зелёный светодиод, переходим на start
    endif
    
    '----------если условия не выполняются, то включается жёлтый мигающий огонь
    
    if red = 1 then 'если ранее горел красный светодиод, то
      red = 0
      pause 300  'его выключаем, делаем задержку (светофор погашен)
    endif
    
    if gr = 1 then 'если ранее горел зелёный светодиод, то
      gr = 0
      pause 300 'его выключаем, делаем задержку (светофор погашен)
    endif
    
    if uch = 0 then GOTO start 'если во время предыдущих задержек участок за светофором
                          'будет занят, то возвращаемся на start
    yel = 1
    pause 330 'включаем жёлтый светодиод, делаем задержку
    if uch = 0 then GOTO start 'такая же проверка занятости пути
    pause 330 'ещё задержка, желтый всё ещё горит 
    if uch = 0 then GOTO start 'опять проверка занятости пути
    yel = 0
    pause 300 'гасим жёлтый светодиод, делаем задержку (светофор погашен)
      
    goto start 'проверяем все условия заново
      
    end
    Оператор CLEAR, нужно ставить перед началом работы программы, т.е. после установки всех регистров и переменных.
    Я ещё поставил вот это - GPIO = $00. Это что бы все порты сбросить в 0. Это на всякий случай. А то бывает при включении на каком то выводе торчит лог 1, не понятно почему.

    Я бы биты конфигурации сделал такие: INT RC OSC, включены WDT и BODEN, всё остальное выключить.

  37. #74

    Регистрация
    14.04.2010
    Адрес
    Санкт-петербург
    Возраст
    37
    Сообщений
    46
    ...лог единицы с развахом 5В приходят? А то я там на схеме +9В видел...
    Лог единицы не должны быть выше напряжения питания. А лог ноль, ниже 2В должны быть.
    Я об этом знаю. Сейчас объясню, зачем так сделано
    Питание берётся с отделього провода, который будет проходить через все стрелки и светофоры. +9В нужно для электромагнитов стрелочных переводов (или даже +12В). Поэтому перед контроллером стоит 78L05. Он будет также стоять в датчике свободности пути, поэтому все логические уровни будут 5В.

    ...задержки сильно маленькие по 300мс. Это всего 0,3сек
    Светофоры на настоящих железных дорогах управляются релейными схемами. Более того, многие реле, применяемые в схемах управления светофорами, специально сделаны медленно действующими. Если будет интересно, то я могу объяснить зачем так сделано. Так вот, в моей программе с помощью таких задержек сымитировано медленное переключение управляющих реле, так светофор будет больше походить на настоящий.
    В блоке, где реализован жёлтый мигающий огонь я сделал так: светодиод включается, проходит 0,3 с, контроллер проверяет занятость пути, затем проходит ещё 0,3 с и светодиод он гаснет. Тут опять проверяется свободность пути, проходит ещё 0,3 с и он опять загорается (если за это время не изменились входные сигналы). Таким образом, светодиод горит в течении 0,6 с, а погашен - в течение 0,3 с. Получается примерно нужная мне частота мигания и скважность. А пока он там мигает, контроллер продолжает следить за входными сигналами.

    Я ещё поставил вот это - GPIO = $00
    Да, я об этом сначала не подумал, но когда писал мигалки, то предварительно устанавливал выходы на 0.

    биты конфигурации сделал такие: INT RC OSC, включены WDT...
    Всмысле в битах OSC задать знчение IRC?
    Зачем мне WDT, он же будет часто-часто сбрасывать контроллер прежде чем программа дойдёт до конца? Ведь никаких предделителей я не подключал.

  38. #75
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Всмысле в битах OSC задать знчение IRC?
    Ну да, ведь выше об этом разговаривали. Нужно включить внутренний тактовый генератор без выхода тактовой частоты наружу. Как назаван этот бит в твоём программаторе я не знаю, но я так понял что IRC.
    И про калибровочную константу не забудь.

    Зачем мне WDT, он же будет часто-часто сбрасывать контроллер прежде чем программа дойдёт до конца?
    Твоя прогррамма никогда не дойдёт до конца, т.к. она зацикленна.

    Сбрасывать он не будет. Хотя сколько я занимасю PICами так до сих пор и не понял, зачем этот бит WDT, т.к. все мои программы работают одинаково что с ним что без него.

    Я кстати тут ошибся. Я писал:
    Просто в битах конфигурации, выключаешь MCLR, и он атоматически превращется в прот, только входа, как выход он работать не будет. Т.е. врегисторе TIRSIO, порт GP3, должен быть включен как 0.
    У тебя в программе как раз так и сделано.
    В TIRSIO, порт GP3, нужно включить входм, занчит нужно записать 1, а не 0. (1 - это вход, 0 - это выход.)


    А ты протеусом пользуешься? Очень удобно для отладки программ.

    Ты разобрался почему прога не работает?

  39. #76

    Регистрация
    13.05.2009
    Адрес
    Королёв
    Возраст
    64
    Сообщений
    1,594
    Цитата Сообщение от ubd Посмотреть сообщение
    Хотя сколько я занимасю PICами так до сих пор и не понял, зачем этот бит WDT, т.к. все мои программы работают одинаково что с ним что без него.
    Ну это до поры - до времени.
    Пока не пойдут серьёзные проекты в промышленном масштабе.
    Не дай бог произойдет сбой от помехи (а он обязательно произойдет) и поменяется значение какого нибудь регистра или кучи регистров. Программа может подвиснуть. Вот тут сторож и перезапустит контроллер.
    Иначе кранты.
    Для авиамоделей тем более актуально.

  40. #77
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Вот тут сторож и перезапустит контроллер.
    Буду иметь в виду.
    По умолчанию WDT всегда стоит, я его и не убираю.

    Ну прога то работает?

  41. #78
    msv
    msv вне форума

    Регистрация
    05.03.2008
    Адрес
    Новокузнецк
    Возраст
    58
    Сообщений
    2,376
    Возможно просто не замечаешь, что проц периодически ресетится...
    Но это чревато, если не используешь, надо отключить.
    В принципе WD актуален для контроллеров в производстве, работающие непрерывно и круглосуточно многие месяцы и годы.. Там действительно есть вероятность сбоя от шайтана.. Для наших минутных дел, достаточно более-менее чисто написать код.

  42. #79

    Регистрация
    13.05.2009
    Адрес
    Королёв
    Возраст
    64
    Сообщений
    1,594
    Цитата Сообщение от msv Посмотреть сообщение
    Возможно просто не замечаешь, что проц периодически ресетится...
    Конечно не замечает!
    В силу специфики приборов, я в своих программах WDT сбрасываю в прерывании каждые 5 млс. И ещё восстанавливаю значения жизненно важных регистров.

  43. #80
    ubd
    ubd вне форума

    Регистрация
    17.03.2003
    Адрес
    г.Осинники, Кемеровская обл
    Возраст
    41
    Сообщений
    4,270
    Если бы он ресился то прога начинала работать за ново, это бы было явно заметно, но ведь этого не проиходит. А что может реситься и не сначала запускаться прога? Как бы реситься незаметно внешне?

Закрытая тема

Похожие темы

  1. Карта программирования от Turnigy
    от Gulfstream в разделе Электродвигатели, регуляторы, мотоустановки
    Ответов: 40
    Последнее сообщение: 12.12.2009, 11:18
  2. Программирование bk controller
    от GriffinRU в разделе Электродвигатели, регуляторы, мотоустановки
    Ответов: 0
    Последнее сообщение: 27.07.2006, 04:00
  3. Программирование контроллера Pilotage
    от Партизан в разделе Электродвигатели, регуляторы, аккумуляторы, зарядники
    Ответов: 0
    Последнее сообщение: 16.06.2005, 15:17
  4. программирование PICа
    от gennady в разделе Самодельная электроника, компьютерные программы
    Ответов: 24
    Последнее сообщение: 23.02.2005, 10:56

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения