roboforum.ru

Технический форум по робототехнике.

Магический кристалл

Re: Магический кристалл

Angel71 » 12 мар 2010, 19:02

можно и фоново, но лучше в это не лезть. проверяеться может там же, где вы проверяете, подсоединён ли он или переодически в таймере проверять.

Re: Магический кристалл

rig » 12 мар 2010, 20:32

один миллион операций в секунду куда еще быстрее?
что тут можно пропустить? мало? можно 8 миллионов оп. в секкунду!\!

Re: Магический кристалл

GrayHunter » 12 мар 2010, 20:43

Объясните мне, пожалуйста, а то я не уверен вот в чём:
например, если запрограммировать МК проверять перемычку - если она есть (контакты замкнуты), то светить светодиодом 5 секунд, а потом проверить снова. Если же нет, то проверить снова.

Так вот, если на третьей секунде свечения перемычку сняли/контакты разомкнули, то МК ведь продолжит питать светодиод, хотя мне нужно, чтобы он перестал это делать, т.е. повёл бы себя так же, как если бы он проверил перемычку, а её бы не оказалось.

Вот этот момент я не понимаю. Это только некой одновременностью (питания светодиода и постоянной проверки) можно сделать или как?


P.S.- я задаю вопросы по маленьким примерам, а получив ответ - делаю по аналогии уже со своим кодом, чтобы не нагружать вас лишний раз :)

Re: Магический кристалл

Duhas » 12 мар 2010, 20:46

проверку на наличие перемычки мона делать тысячи раз в секунду..

Re: Магический кристалл

yak-40 » 12 мар 2010, 20:58

GrayHunter писал(а):Это только некой одновременностью (питания светодиода и постоянной проверки) можно сделать или как?

Если питать светодиод через аппаратный ШИМ, то ему(светодиоду) до лампочки что в это время МК делает. На то он и аппаратный, что-бы ресурсы не занимать.

Re: Магический кристалл

GrayHunter » 12 мар 2010, 22:10

Почитал про "аппаратный ШИМ" и пришёл к мнению, что нужно просить вас пример кода как сделать так, чтобы светодиод "дышал", иначе пока сложно понять, не от чего не отталкиваясь :)

P.S.- теперь уже на С. :Bravo:

Re: Магический кристалл

=DeaD= » 12 мар 2010, 22:11

Если бы вы соскочили с асма - тут наверное давно бы уже написали всю программу :wink:

Re: Магический кристалл

EdGull » 12 мар 2010, 22:23

особенно если писать на васике :P

Re: Магический кристалл

=DeaD= » 12 мар 2010, 22:31

Подписываешься? Вот поймают на слове - что делать будешь? :D

Re: Магический кристалл

EdGull » 12 мар 2010, 22:42

меня никогда никто не переубедит что на васике писать быстрей чем на сях, а уж тем более на асме. :P

Re: Магический кристалл

GrayHunter » 12 мар 2010, 23:27

Решил, как обычно, начать с маленького примерчика, чтобы мне проще было понять.
Почему вот это не работает:
Код: Выделить всёРазвернуть
#include <C:\Documents and Settings\123\Рабочий стол\Программатор\inc\mega8.h>  // подключаем заголовочный файл для ATmega8(L)
#include <C:\Documents and Settings\123\Рабочий стол\Программатор\inc\delay.h>  /* файл содержит функции для создания пауз в программе,
                                                               Например: delay_ms(x); /* сделать паузу x милиСек
                                                               x - может быть переменная, выражение или число от 0 до 65535 (тип unsigned int) */

   // Функция в которой описано начальное конфигурирование МК:
(void)_init_mk(void){
   // Инициализация Port_B:
DDRB=0b00000001;  // определение ножек МК портов B (1 = вывод | 0 = ввод).
PortB=0b00000000;

   // Главная функция - с неё начинается выполнение программы:
void main(void){
_init_mk();  /* Вызываем функцию инициализации, настроийки аппаратуры МК.
            Выполнив её программа вернется сюда и будет выполнять следующую строку */
again:  // метка "again"
PortB=0b00000001; // подаём напряение на светодиод
delay_ms(500);  // задержка 1/2 секунды
PortB=0b00000000; // обесточиваем светодиод
delay_ms(500);  // задержка 1/2 секунды
goto again;  // переход к метке "again"
}

Прошивать пытаюсь в Студии. Что я неправильно сделал?

Re: Магический кристалл

=DeaD= » 12 мар 2010, 23:34

И что пишет? :D

Что-то вы наворотили всего, должно быть что-то типа:

Код: Выделить всёРазвернуть
#include "delay.h"

void main(void){
  DDRB=0x01;
  while(1=1){
    PORTB^=0x01;
    _delay_ms(500);  // задержка 1/2 секунды
  };
}

Re: Магический кристалл

yak-40 » 12 мар 2010, 23:35

GrayHunter писал(а):Прошивать пытаюсь в Студии.

Чего за студия?
PortB наверное надо писАть PORTB

Re: Магический кристалл

=DeaD= » 12 мар 2010, 23:38

Поправил, сначала "^" у меня куда-то потерялся :)

Re: Магический кристалл

GrayHunter » 12 мар 2010, 23:51

попробовал код ниже и в CVAVR и в AVRStudio - не работает...
Код: Выделить всёРазвернуть
#include "mega8.h"  // подключаем заголовочный файл для ATmega8(L)
#include "delay.h"

void main(void){
  DDRB=0x01;
  while(1=1){
    PORTB^=0x01;
    _delay_ms(500);  // задержка 1/2 секунды
  };
}

Можно плз работающий код в AVRStudio? :roll:
З.Ы.- хотелось бы определение DDRB в двоичной форме - мне так нагляднее будет.


Rambler\'s Top100 Mail.ru counter