Вопрос по использованию портов
|
|
Участник
14 сообщений
Мужчина
|
Он выделяет только строку с ошибкой, а где в этой строке я пропустил эту скобку?
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
выложите код программы на сайт codepad.org или подобный, и сюда ссылку киньте.
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
Да //Прерывание _____________________________________________________________________________________Добавлено (15.10.2012, 23:46) --------------------------------------------- http://codepad.org/pRnYwgFC
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Я вот не помню точно, но что за нумерация прерываний в коде программы ? Скиньте еще и ссылку на то откуда этот код взят плз.
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
Ну программу я написал сам по примеру из видео курса Микроконтроллеры Первые шаги, его можно найти в поисковике или я выложил его в контакт http://vk.com/videos-43882563
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
ьам в курсе точно круглые скобки ? По другим примерам вроде как [ ] Судя по примерам так ~ быть должно
Quote interrupt [EXT_INT0] void ExtInt0(void)
Видео проверьте...
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
И точно, хех) Но вылезла вторая проблема, в сточке №2 (пронумеровал сам чтоб понятно было где)
Error: C:\cvavreval\Проекты\Обработка прерываний\Обработка прерываний.c(8): '{' not expected
1.interrupt[2] void ExtInt0(void); // Обработка прерываний на рорте Int0 (порт PD2, Вывод 4) 2. { 3. PORTC=0b1; delay_ms(200); 4. PORTC=0b10; delay_ms(200); 5. }
Добавлено (16.10.2012, 00:26) --------------------------------------------- Блин, замучился уже х)
Добавлено (16.10.2012, 00:26) --------------------------------------------- не одно так другое(((
Добавлено (16.10.2012, 00:30) --------------------------------------------- Убрал точку с запятой после interrupt[2] void ExtInt0(void)
Другая ошибка Error: C:\cvavreval\Проекты\Обработка прерываний\List\Обработка прерываний.asm(773): Undefined symbol: mcucr
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (ShiNi) Другая ошибка Error: C:\cvavreval\Проекты\Обработка прерываний\List\Обработка прерываний.asm(773): Undefined symbol: mcucr
- ну дк тутже в конце и указывается причина - "Undefined symbol: mcucr" Открываем гугл переводчик и переводим весь текст\строку или то что поле : идет.
переводчик скажет что символ "mcucr" не опознан. Причина ? Либо неправильно записана переменная MCUCR... либо не объявленя вообще нигде. Компилятор не из воздуха же берет и понимает типа "А, да - символ "А" равен 10, а символ "Б" равен 0. А знает это он только оттуда, что где-то вн ачале программы объявленны эти значения.
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
Эм, и где он объявляется? Там в начале где написано #include? И как его объявить?
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Названия регистров надо писать всегда заглавными буквами. Вообще Си язык регистрозависимый поэтому MCUCR и mcucr это 2 разных слова. Quote Эм, и где он объявляется? Там в начале где написано #include? И как его объявить? MCUCR объявлен в mega*.h, где звездочка - это цифра, соответствующая модели микроконтроллера. Твоя программа компилируется без ошибок: http://codepad.org/F4fsMzPh Не надо писать" магические числа" не понятно откуда взявшиеся: Code interrupt[2] void ExtInt0(void) // Обработка прерываний на рорте Int0 (порт PD2, Вывод 4) {... Есть специальные константы: Code interrupt[EXT_INT0] void ExtInt0(void) // Обработка прерываний на рорте Int0 (порт PD2, Вывод 4) {...
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
Всем спасибо, программа компелировась. Прошил м.к. и первое что я сказал "Че за хрень?" м.к. взбесился и на обум выполнял программы, на нажатия кнопок не реагировал (провода были длинной примерно 15 мс) начал реагировать на прикосновения к проводам от прерываний, ещё реагировал когда я просто проводил рукой над м.к. Отключил его от компа и сам комп вырубил, выключил все приборы из розетки и он начал по стабильней работать, но всё равно логике не поддавался >.< Попробовал перепрошить, та же фигня. отпаял провода от кнопок и в ручную замыкал провода, иногда м.к. на это срабатывал. Отпаял от выводы м.к. провода с прерыванием. После этого м.к. начал стабильно выполнять основную программу, дотронулся проводом (+5) до выводов прерывания м.к. и только тогда он начал правильно выполнять свою программу с редкими сбоями. Разве м.к. может так сильно реагировать на помехи в воздухе??
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Quote (ShiNi) Разве м.к. может так сильно реагировать на помехи в воздухе?? - ну а ты как думал ? Точнее проходил в школе на уроках физики... или еще не проходил... -Воздух пронизывает куча различных, эээмм, сред. А ты тоже... проводник. У человека же есть токи, если бы их не было - твои мышцы были бы как копчик - остатком от прошлого )))
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
Это мы не проходили но это я и так знаю из практики, я гитарист и немного занимался с аудио аппаратурой, примочками... усилителями... Я практик а не теорик, всё узнаю на практике, на своих опытах. Я предпологал что помехи будут влиять на м.к. поэтому поставил экранированный провод от компа до м.к. Но чтобы так сильно м.к. реагировал на эти помехи.... не ожидал))Добавлено (16.10.2012, 21:59) --------------------------------------------- Короче сделаю печатную плату, а то эти провода все помехи ловят >.<
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Порт сконфигурирован на вход как высокоомный. Электромагнитное поле от ближайшего трансформатора, мобильника, пейджера (0_О) без проблем наводит в проводе, который подключен к этому входу ЭДС, в итоге на входе то ноль, то еденица, вообщем черти что. Надо вход его либо к земле, либо к плюсу подключить через резистор. Либо использовать встроенный резистор, который подключается к + питания при настройке порта на вход и установке соответствующих битов в регистре PORTx в еденичку. Code DDRx =0; PORTx = 0b00000001; //Нулевой пин на вход, с подтяжкой к + при помощи встроенного резистора на ~56 кОм
|
|
|
|
|
Участник
14 сообщений
Мужчина
|
Да, про подтягивающий резистор я знаю)) Ну теперь у меня есть вся информация на первое время, буду экспериментировать)) Дальше хочу понять как управлять "роботом"без прерываний, тоесть м.к. как я понял сравнивает напряжение на выводах и принимает решение, как это делать на данный момент я даже понятия не имею х)
|
|
|
|
|