Решил попробовать собрать платку для пылесоса,когда собрал возникло кучу проблем((
хотелось бы :
1.чтобы при нажатии на кнопку включался пылесос при повторном выключался--
впринципе это еще как то работает если ставить прерывание по низкому уровню ,но если ставить по изменению фронта с 0 на 1 или с 1 на 0,почему то происходят ложные срабатывания.
2. ПЯТЬ стадии когда мигают оба светодиода пылесос полностью заряжен от сети,когда не мигают то просто стоит не работающий- напряжение чуть упало после зарядки, дальше горение 1 светодиода мигание 1 светодиода когда напряжение чуть упало,также с красным светодиодом когда напряжение на аккумуляторе еще ниже.
Когда напряжение падает ниже определенного уровня пылесос должен выключиться,тут то и пошли проблемы:
если напряжение ниже 4 вольт почему то светодиод мигает хотя в программе он должен гореть PORTB.0=1;
и МОЖНО ЗАПУСКАТЬ ПЫЛЕСОС((( хотя PORTB.3=0 -выключен
Код: Выделить всё
if((adc_data[0]>0)&(adc_data[0]<=54)) {PORTB.0=1;PORTB.3=0;} else PORTB.0=0; Код: Выделить всё
#include <tiny13.h>
#include <delay.h>
#define FIRST_ADC_INPUT 1
#define LAST_ADC_INPUT 1
interrupt [EXT_INT0] void ext_int0_isr(void)
{
delay_ms(100);
PINB.3=1;
}
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x20
interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR
{
static unsigned char input_index=0;
adc_data[input_index]=ADCH;
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
delay_us(10);
ADCSRA|=0x40;
}
void main (void)
{
PORTB=0xA;
DDRB=0x19;
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
MCUCR=0x00;
GICR=0x40;
#asm("sei")
while(1)
{
if((adc_data[0]>0)&(adc_data[0]<=54)) {PORTB.0=1;PORTB.3=0;} else PORTB.0=0;
if((adc_data[0]>54)&(adc_data[0]<=72)) {PORTB.0=1;delay_ms(10);PORTB.0=0;delay_ms(10);}
if((adc_data[0]>72)&(adc_data[0]<=75)) {PORTB.4=1;delay_ms(10);PORTB.4=0;delay_ms(10);}
if((adc_data[0]>75)&(adc_data[0]<=80)) PORTB.4=1;else PORTB.4=0;
if (adc_data[0]>=90) {PORTB.0=1;delay_ms(1);PORTB.0=0;delay_ms(1);PORTB.4=1;delay_ms(1);PORTB.4=0;delay_ms(1);}
}
}- Вложения
-
- пылесос.JPG
- (175.06 КБ) 196 скачиваний


