![]() |
|
|
#1 |
|
Junior Member
Регистрация: 11.03.2016
Сообщений: 3
Вес репутации: 0 ![]() |
Код:
void setup() {
//digitalWrite(3, HIGH);
}
void loop() {
analogWrite(3, 1);
delay(10000);
}
Написал свою функцию analogWrite(aWrite). Код:
void setup() {
DDRD |= B00001000;
}
/*
* pwm коэффициент заполнения
*/
void aWrite(volatile uint8_t *port, uint8_t pin, uint8_t pwm){
int i = 0;
while(i < pwm){
*port = pin;
i++;
}
int j = 0;
while(j < 256 - pwm){
*port = B00000000;
j++;
}
}
void loop() {
//3 pin ATmega328
aWrite(&PORTD, B00001000, 1);
delay(10000);
}
Как можно заставить его постоянно гореть используя delay()? |
|
|
|
|
|
#2 |
|
Senior Member
Регистрация: 25.11.2013
Сообщений: 116
Вес репутации: 0 ![]() |
Понять бы для чего это нужно?
Не понимаю что это будет, могу предложить использовать таймер, а в прерывании таймера обрабатывать Ваш ШИМ Последний раз редактировалось cyberlab; 11.03.2016 в 15:53. |
|
|
|
|
|
#3 |
|
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
Очень странный подход к моделированию ШИМ.
Вы скорость работы МК себе представляете? Передаете в качестве ШИМ "1" и думаете что вы способны заметить одиночный импульс меньше микросекунды среди 10 секундных задержек? Для справки: МК с частотой в 16Мегагерц исполняет в среднем 1 команду за 1.5 такта (многие за 1, некоторые за 3 и редко чуть больше) .. соответственно за 1 мегагерц (миллион раз в сек) он исполняет в среднем 10-12 команд. Ваши циклы имеют длительность в несколько команд МК .. и?
|
|
|
|
|
|
#4 | ||
|
Junior Member
Регистрация: 11.03.2016
Сообщений: 3
Вес репутации: 0 ![]() |
Цитата:
Цитата:
С таймерами, что то ничего не вышло. За справку спасибо, буду знать теперь. Код переделал на такой и всё работает. Код:
void setup() {
int start;
int i;
Serial.begin(9600);
Serial.print("Start test: ");
start = millis() ;
for (i = 0 ; i < 30000 ; i++){
bitSet(DDRB, 3); //pin 11
bitSet(DDRD, 3); //pin 3
//pinMode(11, OUTPUT);
//analogWrite(3, 0);
TCCR2A |= _BV(COM2B1);
OCR2B = 0;
}
Serial.print(millis() - start);
Serial.println(" msec \nend test");
}
void loop() {
PORTB |=B00001000;
OCR2B=255;
delay(10);
if(PINB & B00001000) Serial.println("Gorit") ;
delay(1000);
PORTB &=B11110111;
OCR2B = 0;
delay(10);
if(!(PINB & B00001000)) Serial.println("Ne gorit") ;
delay(1000);
}
Последний раз редактировалось Tatarin; 12.03.2016 в 10:15. |
||
|
|
|
|
|
#5 |
|
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
Своеобразно конечно .. но без знания что и зачем Вы хотите сделать, что-то сказать ещё - нереально.
|
|
|
|
|
|
#6 |
|
Junior Member
Регистрация: 11.03.2016
Сообщений: 3
Вес репутации: 0 ![]() |
Хочу сделать проект без использования Wiring и использовать более быстрые функции и команды.
------ Предыдущий пост обновил. Код:
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20); Код:
TCCR2A |= _BV(COM2B1); |
|
|
|
|
|
#7 |
|
Senior Member
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0 ![]() |
analogWrite() и многое другое есть в моей библиотеке, тут по соседству. Смотрите, пользуйтесь.
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|