Вт май 17, 2022 16:31:59
Вт май 17, 2022 16:42:53
Вт май 17, 2022 18:06:51
Вт май 17, 2022 18:36:39
Вт май 17, 2022 18:55:55
Вт май 17, 2022 19:22:47
Вт май 17, 2022 22:26:21
Ср май 18, 2022 10:49:42
#define F_CPU 9600000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR (INT0_vect)
{
//_delay_ms(500);
PORTB|=(1<<PB2);
//_delay_ms(500);
}
int main(void)
{
DDRB|=(1<<PB0); //setting port to out
DDRB &=~(1<<PB1);
//DDRB &=~(1<<PB3);
DDRB|=(1<<PB2);
PORTB &=~(1<<PB0);
PORTB |=(1<<PB1);
//configure PWM mode (38 kHz) 9600000/125/2 = 38400 Hz
TCCR0A |= (1<<WGM01) | (1<<COM0A0); //CTC with toggle
TCCR0B |= (1<<CS00); // Start timer with no prescaler
OCR0A = 125; // timer reaches 125 and toggles OC0A/PB0 pin
//----------
//PORTB|=(1<<PB3);
//configure ext int mode
//MCUCR |=(1<<ISC01)|(1<<ISC00); upping front
//MCUCR |=(1<<ISC01); falling front
//MCUCR |=(1<<ISC00); any logical toggle
//if MCUCR == 0 default 1 to 0 toggle
GIMSK|=(1<<INT0); // external interrupts INT0 - pin PB1
sei(); //allow global interrupts
//----------
while(1)
{
PORTB &=~(1<<PB2);
}
}
Ср май 18, 2022 10:57:55
// TIMER_MODE - константа, задающая режим работы таймера
// функция выдачи модулированного импульса 1 мс
void pulse(void){
TCCR0 = TIMER_MODE; // включили генерацию
_delay_ms(1); // задержка 1 мс
TCCR0 = 0; // выключили генерацию
// тут для страховки установить 0 на нужном пине
}
// функция выдачи пачки импульсов из N штук
void pulse_block(uint8_t N){
for(;N; N--){
pulse();
_delay_ms(1);
}
}
Ср май 18, 2022 14:16:51
Опорный сигнал я настроил, мне теперь бы понять как обработать сигнал с датчика, много читал но торможу.
Ср май 18, 2022 14:45:35
Ср май 18, 2022 15:11:47
Видимо у Вас не те настройки установлены во вкладке компилятора…
установите фьюзами контроль питания (если будете использовать изучение клавиши пульта)
Или если хотите, то я могу Вам скомпилировать тот вариант или с какими ни будь изменениями…
Ну если Вам это чем-то поможет, я могу описать все процедуры в прерывании по INT, своими словами.
// TIMER_MODE - константа, задающая режим работы таймера
// функция выдачи модулированного импульса 1 мс
void pulse(void){
TCCR0 = TIMER_MODE; // включили генерацию
_delay_ms(1); // задержка 1 мс
TCCR0 = 0; // выключили генерацию
// тут для страховки установить 0 на нужном пине
}
// функция выдачи пачки импульсов из N штук
void pulse_block(uint8_t N){
for(;N; N--){
pulse();
_delay_ms(1);
}
}
Ср май 18, 2022 15:15:26
Ср май 18, 2022 17:36:28
Об ошибке у меня в АВ
Мои фьюзы, я устанавливаю через аврдуду
Если можно скомпилируйте вариант где как в примере PB0 выход "ШИМ"
светодиод зажигается мгновенно на входе РВ2 при отражении сигнала
и сделать то же самое для РВ3 только к нему я буду реле или транзистор подключать.
Остальные выходы останутся не задействованы.
Про процедуры в прерывании расскажите)
Ср май 18, 2022 18:20:55
Ср май 18, 2022 21:06:13
Чт май 19, 2022 04:44:10
Чт май 19, 2022 09:24:43
Чт май 19, 2022 09:48:56
Чт май 19, 2022 14:43:29
Если возникнут вопросы – задавайте. Попробую ответить, если это в моей компетенции. Кстати в АВ есть справка в формате PDF на русском языке... всё подробно там описано...
if (stat)
{
PORTB|=(1<<OUT); // включаем
// _delay_ms(10); вот эта задержка
PORTB|=(1<<REL_OUT);
} else
{
PORTB&=~(1<<OUT); // отключаем
// _delay_ms(10); и эта
PORTB&=~(1<<REL_OUT);
}