есть плата (проверена на всё уже что только можно) - управление водой (в саду) для полива и водопровода
программу пишу на atmel studio, прошивку заливаю через progisp.
текст программы:
/*
* pump_comtrol_2.cpp
*
* Created: 21.05.2019 16:10:37
* Author : lsv_general
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#define Port_Sens200Top PA5
#define Pin_Sens200Top PINA5
#define Port_Sens200Bottom PA6
#define Pin_Sens200Bottom PINA6
#define Port_Sens500Bottom PA7
#define Pin_Sens500Bottom PINA7
#define Port_SensShower PA4
#define Pin_SensShower PINA4
#define Port_Reserv PA3
#define Pin_Reserv PINA3
#define Port_Run200 PB4
#define Port_RunShower PB6
#define Port_Pump PB5
volatile uint16_t c_sec = 0;
volatile uint16_t c_msec = 0;
volatile uint8_t isWork = 0;
volatile uint8_t timer_500 = 0;
//volatile uint8_t Pump200Work = 0;
volatile bool Pump200Work = false;
volatile bool PumpShowerWork = false;
volatile bool b200 = false;
volatile bool bTest = false;
void delay(uint16_t msec);
ISR ( TIMER0_COMPA_vect)
{
c_sec++;
if (c_sec>999){
c_sec=0;
isWork=1;
}
c_msec++;
}
int main(void)
{
Pump200Work=false;
PumpShowerWork=false;
MCUCR = (1<<PUD);
DDRA = (0<<Port_Sens200Top)|(0<<Port_Sens200Bottom)|(0<<Port_Sens500Bottom)|(0<<Port_SensShower)|(1<<Port_Reserv);
DDRB = (1<<Port_Run200)|(1<<Port_RunShower)|(1<<Port_Pump);
TCCR0A = (0<<ICEN0)|(0<<TCW0)|(1<<CTC0)|(0<<ICNC0)|(0<<ICES0)|(0<<ACIC0); // 8-bit CTC mode
TCCR0B = 0x05;//0x05; // делитель 1024
TCNT0L = 0;
OCR0A = 3; // число для сравнения счетчика
TIMSK = (1<<OCIE0A);
sei();
while (1)
{
if (isWork==1){
isWork=0;
bTest=!bTest;
//continue;
if (timer_500>0) {
timer_500--;
}
b200=!b200;
if (bTest){
PORTA |= (1<<Port_Reserv);
} else {
PORTA &= ~(1<<Port_Reserv);
}
}
}
}
void delay(uint16_t msec)
{
c_msec=0;
while (c_msec!=msec){}
}
проблема возникает на простом месте - если комментировать строку
b200=!b200;
то всё работает, в смысле "тестовый" светодиод моргает как положено, если расскомментировать и залить в контроллер - даже светодиод не моргает.
где и что не так ?


