Пятница, 26.04.2024, 07:36
| RSS
[SEARCH_TITLE]
[SEARCH_FORM]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Архив - только для чтения
Форум » Программирование » Программирование на языке С, Бейсик и Асемблер » Вопросы по программированию CV AVR (Как работать с шимом, ацп и т. д.)
Вопросы по программированию CV AVR
SpaceДата: Пятница, 02.10.2009, 12:20 | Сообщение # 1








Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
Задавайте свои вопросы
 
SINOBIДата: Суббота, 10.10.2009, 07:23 | Сообщение # 2








Зарегистрирован 02.03.2009
Группа: Новички
Сообщений: 3
Город: Шурала
Статус: Offline
Не подскажете а как сделать опрос нескольких кнопок и чтоб после нажатия одной кнопки через определённое время зажигался светодиод.Светодиод будет один а на каждой кнопке разная задержка включения.мк атмега8.Спасибо

Все глупости в мире делаются с умным лицом
 
DeepBlackДата: Воскресенье, 11.10.2009, 23:13 | Сообщение # 3








Язык программированя: C/C++
Зарегистрирован 27.07.2009
Группа: Модераторы
Сообщений: 189
Город: Зеленоград
Статус: Offline
http://www.robotsspace.ucoz.ru/publ/podkljuchenie_knopki/9-1-0-62
если разберетесь, то сделать то же самое на несколько кнопок не составит труда.
а в плане разных задержек, надо . А затем перед включением диода вызвать функцию delay_ms() с разными значениями в скобках.
Например, так
Code
#include <delay.h>
#define LED1 PORTD.1
#define LED2 PORTD.2

//--где-то в main()
// после срабатывания 1 кнопки
delay_ms(100); //задержка 100мс
LED1 = 1;
delay_ms(50); //период горения светодиода
LED1 = 0;
// после срабатывания второй кнопки
delay_ms(200); //задержка 200мс
LED1 = 1;
delay_ms(50); //период горения светодиода
LED1=0;
 
SINOBIДата: Понедельник, 12.10.2009, 04:35 | Сообщение # 4








Зарегистрирован 02.03.2009
Группа: Новички
Сообщений: 3
Город: Шурала
Статус: Offline
насколько знаю <delay.h> задержка максимум чуть более минуты,а как реализовать от минуты и больше например 2,4,5 минут?

Все глупости в мире делаются с умным лицом
 
DeepBlackДата: Понедельник, 12.10.2009, 09:09 | Сообщение # 5








Язык программированя: C/C++
Зарегистрирован 27.07.2009
Группа: Модераторы
Сообщений: 189
Город: Зеленоград
Статус: Offline
можно в цикле многократно вызывать delay.
Например,
Code
...
for (int i=0; i<120; i++) { //делаем на 2 минуты
delay_ms(1000); //при каждом проходе задерживаемся на 1с
} //
итого получаем 2 минуты задержки.
Способ очень простой.
Недостаток в том, что ничего другого в это время происходить в программе не будет.
 
SINOBIДата: Понедельник, 12.10.2009, 10:19 | Сообщение # 6








Зарегистрирован 02.03.2009
Группа: Новички
Сообщений: 3
Город: Шурала
Статус: Offline
а по другому задержки через массивы и таймеры?

Добавлено (12.10.2009, 10:00)
---------------------------------------------

Code
#include <mega8.h>
#include <delay.h>
#define LED PORTD.1
#define BUT1 PINB.0
#define BUT2 PINB.1
void main(void)
{

// Port B
PORTB=0xFF;
DDRB=0x00;

// Port D
PORTD=0x00;
DDRD=0xFF;

while(BUT1==1)
{

}

while(BUT1==0)

{
while(1)
{

delay_ms(5000);
LED=1;

}
while(BUT2==0) {

while(1)
{

delay_ms(10000);
LED=1;
}

Вот сотворил что -то но не работает

Добавлено (12.10.2009, 10:19)
---------------------------------------------
может можно задержку как макросы оформлять и инклюдами подключать?


Все глупости в мире делаются с умным лицом
 
DeepBlackДата: Понедельник, 12.10.2009, 17:56 | Сообщение # 7








Язык программированя: C/C++
Зарегистрирован 27.07.2009
Группа: Модераторы
Сообщений: 189
Город: Зеленоград
Статус: Offline
Задержки через таймеры - отдельная тема, о которой я уже где-то тут писал. Через массивы - не очень понимаю, о чем речь, в виду того, что ни разу таким не пользовался.
по поводу макросов... а чем не устраивает способ, который я выше приводил? Особых требований к производительности я пока не вижу.
Теперь по Вашему коду.
Quote (SINOBI)

Code
#include <mega8.h>
#include <delay.h>
#define LED PORTD.1
#define BUT1 PINB.0
#define BUT2 PINB.1
void main(void)
{

// Port B
PORTB=0xFF;
DDRB=0x00;

// Port D
PORTD=0x00;
DDRD=0xFF;

while(BUT1==1){}  // все понятно, ждем отпускания первой кнопки. (вторая при этом не доступна)

while(BUT1==0)     // зачем этот цикл?

{
while(1)                 // ну а если программе все время все будет нравиться? будет постоянно гореть светодиод и все.
{

delay_ms(5000);
LED=1;

}
while(BUT2==0) {            почему опрос 2кнопки производится при нажатой первой? (находится в цикле while(BUT1==0)

while(1)
{

delay_ms(10000);
LED=1;
}

Записи LED=1 (включают диод) присутствуют. НО после горения его бы еще погасить надо (LED=0)
Опрос нескольких кнопок надо производить с использованием if. И при срабатывание одной из кнопок вызывать обработку этой кнопки.

например, так:

Code

.while (1) {
.      if (BUT1==0)                    // если сработала BUT1
.      {
.           LED1=1;                    // включили диод
.           for (int i=0; i<120; i++){          // задержка как описанная выше
.                 delay_ms(1000);                 
.           }
.           LED1=0;                     //выключили диод
.       }
.       if (BUT2==0)
.       {
.           LED1=1;
.           for (int i=0;i<180; i++){
.                delay_ms(1000);
.           }
.           LED1=0;
.        }
.}

(точки в начале строки ставлю что-бы положение не потерялось)

Добавлено (12.10.2009, 17:56)
---------------------------------------------
в данном случае (при очень больших задержках) дребезг мешать не будет.

 
Александр-=РУС=-Дата: Вторник, 10.11.2009, 22:07 | Сообщение # 8








Зарегистрирован 10.11.2009
Группа: Новички
Сообщений: 3
Город: Omsk
Статус: Offline
Разреши безтактный вопрос. Каким совтом пользовался во время создания и залития результата... как начал интересоваться экранами так вошол с полный ступор. Все время работал на меге8 на кварце 8мГц, програмное писал на "Programmers Notepad [WinAVR]" просто и удобно ейже заливал, с вашими примерами отказывается работать. =( Просто незнаю что делать, дельной информации никто не дает... посылает в поисковике искать... еслиб всеб так просто...
Пришли плиз список совта и ссылку с пошаговым описанием процесса...
Заранее спасибо
С уважением Александр

$IMAGE1$ собрано по аналогии.

Сообщение отредактировал Александр-=РУС=- - Вторник, 10.11.2009, 22:08
 
DimsanДата: Вторник, 10.11.2009, 22:18 | Сообщение # 9








Язык программированя: Си, Делфи
Зарегистрирован 18.06.2009
Группа: Опытные
Сообщений: 252
Город: Херсон
Статус: Offline
В каком смысле отказывается работать? Не компилируется?
 
Александр-=РУС=-Дата: Вторник, 10.11.2009, 22:26 | Сообщение # 10








Зарегистрирован 10.11.2009
Группа: Новички
Сообщений: 3
Город: Omsk
Статус: Offline
открывает, я ему :"Tools -> [WinAVR] Make All.", он мне :
Прикрепления: 7903000.gif (47.9 Kb)
 
DoniakДата: Вторник, 10.11.2009, 22:29 | Сообщение # 11








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
все потому что программа написана в CVAVR а вы её открываете в WinAVR.
 
Александр-=РУС=-Дата: Вторник, 10.11.2009, 23:07 | Сообщение # 12








Зарегистрирован 10.11.2009
Группа: Новички
Сообщений: 3
Город: Omsk
Статус: Offline
Спабибо, буду ее искать. Ее же на этом сайте найти можно?

Добавлено (10.11.2009, 23:07)
---------------------------------------------
Три последних глупых вопроса:Скачал "CodeVisionAVR C Compiler Evaluation (версия 2.04.4а)",(такой подойдет?) куда надо ткнуть, чтоб он залил в контроллер все что я нахимичю и где в настройках настроить чтоб он заливал через LPT (использую имитацию программатора STK200, самый простой +) )

Сообщение отредактировал Александр-=РУС=- - Вторник, 10.11.2009, 23:17
 
DimsanДата: Вторник, 10.11.2009, 23:30 | Сообщение # 13








Язык программированя: Си, Делфи
Зарегистрирован 18.06.2009
Группа: Опытные
Сообщений: 252
Город: Херсон
Статус: Offline
У меня стоит версия 1.25.7 поэтому отвечу относительно этой версии. Я думаю, что разница небольшая.
1) Чтобы выбрать программатор заходишь Settings - Programmer и там выбираешь свой STK200.
2) Заходишь Project - Configure, переходишь на вкладку After Make и устанавливаешь галочку Program the Chip. Тебе станут доступны настроки прошивания. Обрати внимание на галочку Program Fuse Bit(s).
3) Чтобы "собрать" проект и прошить МК нужно нажать Make the Project. Если компиляция прошла успешно, то доступна кнопка Program the Chip. Нажимаешь и в МК прошивается программа.
 
sashaДата: Воскресенье, 15.11.2009, 19:30 | Сообщение # 14








Язык программированя: Си и баском(учусь)
Зарегистрирован 16.02.2009
Группа: Новички
Сообщений: 371
Город: Актюбинск
Статус: Offline
вот проблема((( почему не компилируется? я понял так: это готовая прога?
http://robotsspace.ucoz.ru/publ/4-1-0-15 от здесь с дисплейем... мгите начало подскажите)))


-=Наша_зависимость_от_роботов_возрастает_с_каждым_днем=-
 
DimsanДата: Воскресенье, 15.11.2009, 19:58 | Сообщение # 15








Язык программированя: Си, Делфи
Зарегистрирован 18.06.2009
Группа: Опытные
Сообщений: 252
Город: Херсон
Статус: Offline
Программа написана в WinAVR. В чём ты компилируешь?
 
Форум » Программирование » Программирование на языке С, Бейсик и Асемблер » Вопросы по программированию CV AVR (Как работать с шимом, ацп и т. д.)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: