Программирование контроллеров
позволяющая получать отладочную информацию по линиям SPI
А как это он делает? Мож по JTAG-гу? Но там линии другие.
Делал JTAG - программатор отсюда. Возможность отладки кода прям в железе и прочие прелести.
icd2clone.narod.ru
А как это он делает? Мож по JTAG-гу?
Нет, именно по шинам ISP. С точки зрения программы на Си, переопределяется putchar. Эта функция начинает выдыхать в MISO/MOSI/SCK. Стандартный рrint(f) работает через putchar - и меняет режим работы автоматически.
Вот, для моей любимой ATMega8535:
#define _ALTERNATE_PUTCHAR_ //Объявление: будет использоваться альтернативная процедура вывода
#define MOSI PORTB.5
#define MISO PORTB.6
#define SCK PORTB.7
#define MMS_OutNull 0b11100000 //MOSI, MISO, SCK = Out, Null
void init_debug(void)
{
PORTB=0x00;
DDRB=MMS_OutNull; //MISO, MOSI, SCK = Out, Pullup //0x38
MOSI=1; //сигнал MOSI = используется как SS
delay_us(500);
MOSI=0;
delay_us(500);
}
void putchar( char c)
{
unsigned char n;
for (n=0;n<8;n++)
{
if (c & 1) MISO=1; // сигнал MISO = данные
else MISO=0;
SCK=0; // сигнал SCK = clock
delay_us(30);
SCK=1;
delay_us(30);
c=c>>1;
}
}
Программатор, стало быть, умеет слушать ISP и транслировать в RS232. Если настроить встроенный терминал CVAVR на виртуальный COM-порт, появляющийся при подключении дивайса с FT232, в терминале появляются выдохнутые символы.
Имеется только маленький неудобняк: программатор и терминал в СVAVR назначены при этом в один и тот же порт; поэтому:
- Каждый раз при запуске терминала CVAVR выдает предупреждение, что прерывание уже занято. Но далее исправно работает;
- Кнопка “Reset chip” в терминале не функционирует.
Но меня это не напрягает.
Что особенно интересно: эти процедуры не затрагивают аппаратный U(S)ART. Так что есть все шансы использовать их параллельно и независимо. Отладочная информация будет идти через ISP в виртуальный СOM, а железка будет работать с реальным RS232 вашего же компьютера, или мобильника и т.д. Только тогда SPIшная putchar должна быть отдельной функцией с уникальным именем, а не переопределять стандартную.
Полезная фишка для камней без джитега. Возьмем на заметку. Но джитег конечно рулит.
Поясняю: я собирал себе этот программатор потому, что в ветке “Микроконтроллеры” на форуме телесистем нашлась прошивка, позволяющая получать отладочную информацию по линиям SPI и позволяющая “подкручивать” версию фирмвари до совместимости с AStudio.
обьясните теперь обычным смертным…о чем вы?
о чем вы?
О том, что Вам еще учиться и учиться.
Господа эмбеддеры! если человек с трудом отличает MOSI от SCK, какие могут быть JTAG и USB? Тема из разряда: “Футаба хамно, я спаяю круче. Как прошить контроллер?”
Я удаляюсь.
Теперь расскажите, что такое эмбеддер… 😃 То, что человек просит нарисовать схему, написать прогу, прошить, расстолковать на пальцах даташит итп. было понятно с первого поста… 😃 2nigyl не обижайтесь, но ваших вопросах пока нет вопроса, а что-то типа ‘научите меня жить…’.
Когда-то давно я сделал несколько проект-примеров для желающих разобраться в азах AVR. Именно по комплексу CVAVR+Протеус.
Я уже не помню порядок следования что за чем, сорри. Примерно в таком порядке:
Пошаговая отладка. Вывод [отладочной] информации в RS232
Программатор Altera/STK
Опрос кнопок и вывод на HD44780-совместимый LCD-дисплей
Работа с ADC и внешней памятью (интерфейс I2C)
Еще есть небольшой мануал по созданию/редактированию футпринтов Протеуса, но после этого Halex07 написал свой прекрасный FAQ и, думаю, что этот мануальчик уже можно и прибить.
P.S. Посмотрел - на архивах стоит ноябрь 2004 года… Как давно это было… ☕
Добрый день!
я в этом деле новичок… но знаю основы электроники и С++…
Цель такая к АЦП контроллера подвести датчики и при уровне сигнала ниже необходимого нужно подать 3В на выход…
Всё что Вы спрашиваете описано очень хорошо в цикле статей.
Микроконтроллеры AVR, 10 ступеней. С. М. Рюмик просто и занимательно вводит читателя в мир AVR.
mirknig.com/…/1181195209-mikrokontrollery-avr-10-s…
Здесь можно посмотреть USB программатор не требующий предварительной прошивки. (правда сам пока делать его не пробовал)
этот вариант мне понравился…
eagle, интересно услышать ваше мнение о нем…
Мне не нравится вот это (первый же вопрос в разделе FAQ):
В: Из CVAVR он работает ? Какой прогер в настройках ставить - stk500 ?
О: Пока работает только с ПРОПАТЧЕННЫМ Avrdude - www.reddylab.eu/rclab/#7
И еще доводилось слышать про дуду, что она отказывается работать с некоторыми типами контроллеров.
Нравится - сделайте. Попробуйте.
Если не уверены до конца, то делайте его двухмодульным. На одном модуле соберите FT232 со входными цепями и индикацией RX-TX, и сделайте на ней нормальные удобные выходы TTL (желательно полный набор).
На второй - соберите кусок с буфером.
Если не понравится, кусок с буфером легким движением руки превратится в Altera/STK (можете даже заранее соответствующие цепи на плате развести, но компоненты и/или перемычки не ставить), а кусок с FT232 станет половиной тугсграфикса или кого угодно, кто начинается с FT232. Или просто можете его использовать как конвертер TTL<=>RS232_over_USB для общения своих будущих конструкций с компьютером. Наверняка где-нибудь пригодится.
P.S.
reddylab.eu/rclab/
этот вариант мне понравился…
Это уже тритий (или даже можно считать, что четвертый) вариант, который Вам понравился за последние три дня. 😒
Я советую для начала сделать то, что проще и не трудозатратно. Но не примитивно и надежно. Наиболее подходящей для этого я по-прежнему считаю Altera/STK. Если, конечно, есть порт LPT.
P.P.S. Заметьте, при всем богатстве выбора все варианты сводятся к набору из трех микросхем: FT232, буфера и ATMEGA8 в разных комбинациях (кстати, ATMEGA8 уже становится раритетом… Меняется на ATMEGA88). Это я к чему? К тому, что как вы эту детскую коляску не собирайте, а получится все равно автомат Калашникова. Пргорамматор ISP - он и в Африке программатор ISP.
Это уже тритий (или даже можно считать, что четвертый) вариант, который Вам понравился за последние три дня.
вы конечно правы…
но я так и не выбрал что паять…а заказывать все необходимое… буду в понедельник…
мне понравился этот программатор тем что его ненадо прошивать… но что он не поддерживает CVAVR это конечно громадный минус…
LPT у меня нет…я конечно могу купить переходник…но не вижу смысла собирать то …что мне надо будет чтобы собрать программатор с usb))
пока я еще в поисках… может кому то на глаза попался usb программатор,который работает с CVAVR … и который не надо прошивать?..
STK500
У меня он есть на базе AVR Butterfly и на базе Bus Pirate
Я 100 лет назад собрал “протоса”. С прошивкой STK-500 имел глюки в виде необходимости практически при каждом действии с программатором “перетыкать” его в усб ноута (может ноут у меня кривой какой?). С прошивкой “протоса” - AVR910 проблем нет. Но есть несколько “но”. Из под кодевижин не поддерживается страничный режим, т.е. контроллер прошивается, но медленнее, чем мог бы. Поэтому я использую аврпрог от аврстудии. Подпихнул его в кодевижин в свойствах проекта на запуск после компиляции. Вполне удобно. Все хочу, но ленюсь попробовать STK-500 v2, т.е. с аппаратным, а не софтовым усб. Думаю, глюк описанный выше - в кривой реализации софтового усб.
кстати …только вспомнил… у меня есть ЦАП\АЦП… работающее от усб… имеюще и аналоговые и цифровые входы выходы…
а может есть смысл на базе него сделать программатор?
Честно скажу, всю ветку я не прочитал, но к первому сообщению, хочу посоветовать проект arduino (и его клоны - freeduino, boarduino), поглядите - уверен, что заинтересует.
Я тоже хочу освоить программирование микроконтроллеров, но что-то не за что зацепиться. Может кто-нибудь показать как это делается на конкретном примере.
Вот, например, для начала у меня есть такая минимальная задачка.
Нужно сделать контроллер, который будет управлять проходным светофором железнодорожной автоблокировки. Светофор имеет 3 огня (кто угадает, какие?). Логика его работы такая:
- Если ограждаемый светофором блок участок занят (на первом входе 0), то горит красный. При этом состояние других входов можно и не проверять.
- Если этот блок участок свободен (на первом входе 1), то проверяется состояние следующего светофора, от которого тянется отдельный провод, подходит ко второму входу.
- Если следующий светофор зактыт (на втором входе 0), то горит жёлтый огонь.
- Если сдедующий светофор открыт (на втором входе 1), то проверяется положение стрелок с помощью третьего входа.
- Если на третьем входе 1 (стрелки прямо), то горит зелёный огонь.
- Если на третьем входе 0 (стрелки на боковой путь), то включается жёлтый мигающий огонь.
Жёлтый огонь должен мигать с частотой около 1 Гц, причём 2/3 периода он включен, а 1/3 - выключен.
Вот так выглядит схема, реализующая этот алгоритм, на логических элементах.
Здесь первый вход назван 11, второй - 12, третий - 13
А вот как я хочу сделать на контроллере. Контроллер PIC12F629
На вход 17 не обращайте внимания, просто с помощью цепи питания я хочу сделать смену направления автоблокировки.
Если найдётся специалист, напишите ассемблеровский файл, если можно, с комментариями. И потом я буду осваивать, что с ним делать дальше.
ИМХО, слишком сложные задачи ставите для начала. Или надежда на то, что кто-то за Вас напишет программу? Начинать нужно хотя-бы с одного светодитода типа помигать, кнопки на входе, типа поуправлять. И почитать что-то вроде вот этого avr123.nm.ru, аналогов в сети полно, и по ПИКАм тоже.
Виктор, такую простую задачу можно решить на 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”, там описаны все комманды.
Есть сайт, там эта книга есть в электронном виде: www.picbasic.ru
Виктор, такую простую задачу можно решить на PIC конроллере, а программу написать на PIC-Basic.
…И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM. С миганием светодиодов и переключением сигналов на входе.
И смоделировать работу всей конструкции (не прикасаясь к железу) на Proteus VSM
Нет ну это само собой, для отладки программы.
Я думал, сейчас начнутся реплики типа “Это слишком просто, делай на дискретных элементах”, а оказывается это что-то сложное. Не ожидал.
Однако, мне понравилось, что появились компиляторы на основе Бэйсика, я пытался несколько лет назад что-то такое найти, но у меня ничего не получилось. Наверное, это новые компиляторы.
Мне удалось скачать компилятор Proton и книжку про PIC-Basic, подскажите, где можно скачать сам PIC-Basic и книжку про Proton.
Я сначала хотел избежать использования компиляторов высокого уровня, я думал будут проблемы при сопряжении с программатором, поэтому и спрашивал про ассемблер. Да я и сейчас думаю, что неплохо бы его освоить.
А может кто-нибудь знает программы, которые компилируют код из графического алгоритма? Ну, знаете, в ромбиках - условия, в прямоугольничках - присвоение, в параллелограммах - ввод/вывод?