Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Плавное мигание светодиода

Страниц (4): « 1 2 [3] 4 »
 

31. cjA - 29 Января, 2014 - 03:48:34 - перейти к сообщению
maratino, а точнее PB0 и PB1 отвечают (вроде) за аппаратный шим в мега8 и тини2313. Но я уже эти ножки отдал для реверса двигателей, и поэтому буду делать програмный шим (скорось моторов) на PC0 и PC1. Вотьсь...
перепояяние для меня - лучше сто пудов рывнуть, не вижу нихера
32. maratino - 29 Января, 2014 - 11:29:49 - перейти к сообщению
Спасибо! я понял суть проблемы. Всем спасибо за отзыви.
У меня есть второй вопрос. а как можно в БЕЙСИКЕ сделать так, что бы два св-диода работали одновремено, но с разными параметрами. Например: Один мигает резко, и в то же время, паралельно, другой плавно. Это для звездного неба.
33. elmot - 29 Января, 2014 - 19:28:15 - перейти к сообщению
считать времена, как тут еще сделаешь
34. Петр Киселев - 29 Января, 2014 - 22:02:05 - перейти к сообщению
maratino, вспомни способность глаза еще видеть то, что уже погасло!
А еще вспомни про гармоники и их наложение друг на друга. Светодиод не лампа накаливания! Его быстродействие гораздо больше.
35. elmot - 29 Января, 2014 - 23:16:00 - перейти к сообщению
Не парь человека.
36. Петр Киселев - 30 Января, 2014 - 00:08:01 - перейти к сообщению
Не понял! Я, наоборот, пытаюсь подтолкнуть к решению его проблемы.
Ведь можно на одном порту создать две гармоники. Одну - просто мигание светодиода, другую - длительную синусоиду. Подключить на зтот один порт два светодиода по разному повернутых. Один работает от положительной составляющей, другой - от отрицательной.
Мне кажется это и будет решение его желания засветить два светодиода. Верхнюю часть синусоиды убрать простым диодом.
Впрочем, можно задействовать и два порта.
37. elmot - 30 Января, 2014 - 00:14:40 - перейти к сообщению
Нихт. Здесь рыбы нет. Программный ШИМ или как я рассказал, только с 2 диодами.
У человека проблема с алгоритмами, а не с дифицитом ног.
38. maratino - 30 Января, 2014 - 13:59:02 - перейти к сообщению
Я так поимаю, что МК и сам язык программироваия, то же влияют на возможности. Скорее всего, надо как то переорентироваться на Си. У Си , я как понял, больше возможостей
39. Vladimir72 - 30 Января, 2014 - 14:28:10 - перейти к сообщению
На Си много уроков. Язык Си на 2-м месте среди языков программирования,
первое место всегда меняется С++.С#,Java. А Си стабильно на 2-м месте его можно рассматривать как базовый. Для AVR проще программировать на Си
40. Predator - 30 Января, 2014 - 19:56:15 - перейти к сообщению
ну больше возможностей всё-таки у ассемблера, и код компактнее и прямое использование инструкций процессора и ....
только если программка более-менеее серьезная, то на ассемблере это выливается в пару тысяч строк кода против двух сотен Сишных - и сам черт ногу сломит (скомпилированный сишный код будет еще больше, но в нем разбираться и не надо).
41. Vladimir72 - 30 Января, 2014 - 21:14:53 - перейти к сообщению
Predator все правильно, ассемблер язык сложный, и если кому-то захочется по дрыгать ножкой микроконтроллера, то Си самый раз. Представим мышцы человека, на ассемблере нужно прописать как работает каждое мышечное волокно, а их тысячи. На Си пишем как работает каждая группа мышц, куда короче. Конечно знать ассемблер круто ближе к машине.
42. maratino - 01 Февраля, 2014 - 10:21:46 - перейти к сообщению
Vladimir72 скажи пожалуйста. в баском авр реально реализавать такой трюк. два вывода рабтотают автономно и в то же время, паралельно? то есть, один св-диод быстро мигает, а другой в то же время, плавно мерцает
43. Vladimir72 - 01 Февраля, 2014 - 21:41:53 - перейти к сообщению
maratino c баском не работал не подскажу.
44. elmot - 01 Февраля, 2014 - 23:50:40 - перейти к сообщению
Реально, конечно. Надо голову напрячь и все будет
45. Иван_Жихарев - 16 Февраля, 2014 - 21:30:28 - перейти к сообщению
CODE:
#include <tiny2313a.h>
#include <delay.h>
int i;
int a;
int b;
// Declare your global variables here

void main(void)
{
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

i=0;
a=0;

while(1){
b=202;

for (i=0;i<100;)
{
PORTB.0 =1;
delay_ms(a);
PORTB.0 = 0;
b=b-2;
delay_ms(b);
a=a+2;
i++;
};

PORTB.0=0;
i=0;
b=0;
a=100;
for (i=0;i<100;)
{
PORTB.0 =1;
delay_ms(a);
PORTB.0 = 0;
b=b+1;
delay_ms(b);
a=a-1;
i++;
};

PORTB.0=0;
i=0;
a=0;
delay_ms(100);
}
}


Вот мой пример кода в Code Vision AVR
(если ещё кому-то нужен Улыбка )