это откуда вы взяли?*Trigger* писал(а):Из PORTx ничего не прочитать, там всегда нули.
а как же вы тогда применяете конструкцию
Код: Выделить всё
PORTB =PORTB|(1 << PB1); это откуда вы взяли?*Trigger* писал(а):Из PORTx ничего не прочитать, там всегда нули.
Код: Выделить всё
PORTB =PORTB|(1 << PB1);
слева!Код: Выделить всё
PORTB |= (1 << PB1);
PORTB |= (1 << PB2);
PORTB |= (1 << PB3);
слева!На самом деле, если PB1 - не опечатка, то это просто число 1. PB0=0, PB1=1, PB2=2 и т. д. Кстати, с этими PBx код в CVAVR, скорее всего, не будет скомпилирован.Volgol_555 писал(а):Это конечно ясно. Но дело вот в чем. Когда pwm_counter станет=163 все порты B в 0. Тогда как дальше будет выставляться 1 с помощью PORTB |= (1 << PB1);??? это неясно становится и возникает вопрос....как разработчик задал такое условие выставления 1 на определенном порту, когда я лично вообще здесь логики не вижу((. и это условие не будет ли вот таким:
PORTB.1!=PORTB.1?
слева!
слева!Совсем забыл указать, компилятор CVAVRValek3306 писал(а):Посмотрите пожалуйста на код моей программы и объясните мне почему она не работает и что надо исправить?
В смысле не работает сканф.
Код
Помогите пожалуйста!
но я не понимаю как данными калькуляторами пользаваться, объясните пожалуйста на моем примере.Volgol_555 писал(а):Есть калькулятор фьюзов
http://avr.roboforum.ru/
Там выберешь настройки, что были в какой-либо проге и увидишь флажки необходимые для CV
Вообще не понимаю людей, у которых возникает вопрос по фьюзам в программе AVR studiofoxghost писал(а): PS Сильно не ругайте если ошибся веткой, читая форум запорол по не знанию 3 мк, остался последний мк(шанс).
А востанавливать еще не научился с тактированием. Спасибо.
Вот вам логика :Volgol_555 писал(а):как разработчик задал такое условие выставления 1 на определенном порту, когда я лично вообще здесь логики не вижу((. и это условие не будет ли вот таким:
Код: Выделить всё
/*** прерывание по переполнению Т0 ***/
ISR (TIMER0_OVF_vect)
{
if (pwm_counter++ > 163) //конец зоны дискретизации шим
{
PORTB = 0x00;//тушим все при достижении конца зоны
pwm_counter = 0;//обнуляем счетчик
}
if (pwm_counter>pwm_r) Если счетчик стал больше, чем число красного
PORTB |= (1 << PB1); //зажигаем красный свд
if (pwm_counter>pwm_g)// аналогично красному для других диодов
PORTB |= (1 << PB2);
if (pwm_counter>pwm_b)
PORTB |= (1 << PB3);
}
/*** красныйцвет ***/
void red (unsigned int time)
{
for (char a = 0; a<165; a++) //цикл увеличения числа а
{
pwm_r = 164 - a; // тут получается чем Больше значение а тем Раньше зажигаем светодиод
pwm_g = 164;//// тут получается значение а = 0,значит свд не горит.
pwm_b = 164;
delay_ms(time);
}
слева!Код: Выделить всё
void mathematics(unsigned char sec, min)