Всё, код готов, проверен, испытан в бою, так сказать. Некоторые детали всё же придётся дорабатывать вам, Semen8991, такие как время работы откачивающегося насоса, в программе я укажу место, где можно изменять время работы мотора. Мотор, который будет откачивать воду будет подключён к порту C (PC2, PC3), к стати, один вопрос, закачивать воду вы будите тоже при помощи него?, основной мотор будет подключён к PC1, PC0. (Схему я по позже выложу).
P.S. код сделан согласно вашим пожеланиям:
Semen8991 пишет:Стирка закончилась (10мин!) и включился насос, слилась вода, недолгий отжим, потом набралась вода и полоскание, потом опять насос, и в конце уже работает насос и очень сильно крутится мотор (на полную мощность!), а на стирке и полоскание не очень большая скорость! Спасибо огромное заранее!
поэтому кнопка только одна, включение, подключена к порту PD0.
CODE:#include <avr/io.h> // подключаем библиотеку АВР
#include <util/delay.h> // подключаем библиотеку задержек
#define nop() {asm("nop");}
int main (void) {
unsigned int f;
f=0;
int t;
t=0;
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
TCCR1A |= (0<<WGM11)|(1<<WGM10)|(1<<COM1A1)|(0<<COM1A0);
TCCR1B |= (0<<WGM12)|(0<<WGM13)|(0<<CS11)|(1<<CS10);
ICR1 = 0x00;
OCR1A = 0x00;
while (1==1) {
if (!(PIND&(1<<PIND0))) {
if (f==0) {
f=f+1;
_delay_ms(100);
}
else {
f=0;
_delay_ms(100);
}
}
if (f==1) {
for (int r=0; r<30; r++) {
t=125;
OCR1A = t;
PORTC = (1<<PC0)|(0<<PC1);
_delay_ms(2000); // изменяя параметр в скобках можно изменять время, которое основной мотор мотор вращается в определённую сторону, здесь указывается время в милисекундах
PORTC = (0<<PC0)|(1<<PC1);
_delay_ms(2000); // здесь значение в скобках должно совпадать со значением в предыдущей задержке
}
PORTC = (1<<PC2)|(0<<PC3);
_delay_ms(10000); // регулируя это значение можно изменять время работы насоса для откачки воды
PORTC = (0<<PC2)|(1<<PC3);
for (int o=0; o<10; o++) {
t=255;
OCR1A = t;
PORTC = (1<<PC0)|(0<<PC1);
_delay_ms(2000);
PORTC = (0<<PC0)|(1<<PC1);
_delay_ms(2000);
}
// здесь нужно набрать воды в барабан для полоскания, определитесь как будите набарать воду, если при помощи того же мотора, каким выкачивали воду, то нужно добаить один фрагмент:
//PORTC = (0<<PC2)|(1<<PC3);
//_delay_ms(10000); // регулируя это значение можно изменять время работы насоса для откачки воды
//PORTC = (1<<PC2)|(0<<PC3);
for (int p=0; p<16; p++) {
t=255;
OCR1A = t;
PORTC = (1<<PC0)|(0<<PC1);
_delay_ms(2000);
PORTC = (0<<PC0)|(1<<PC1);
_delay_ms(2000);
}
for (int k=0; k<10; k++) {
t=255;
OCR1A = t;
PORTC = (1<<PC0)|(0<<PC1)|(1<<PC2)|(0<<PC3);
_delay_ms(2000);
PORTC = (0<<PC0)|(1<<PC1);
_delay_ms(2000);
}
PORTC = 0x00;
}
else {
PORTC = 0x00;
}
}
} |