Например TDA7294

Форум РадиоКот :: Просмотр темы - проблема с программрованием Attiny261V
Форум РадиоКот
https://radiokot.ru/forum/

проблема с программрованием Attiny261V
https://radiokot.ru/forum/viewtopic.php?f=57&t=171272
Страница 1 из 1

Автор:  SergL [ Пт июн 12, 2020 18:30:04 ]
Заголовок сообщения:  проблема с программрованием Attiny261V

сразу извиняюсь что создал отдельную тему - вдруг уже было похожее, но тут уже нужно вопрос решить срочно (вчера)...
есть плата (проверена на всё уже что только можно) - управление водой (в саду) для полива и водопровода
программу пишу на 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;
то всё работает, в смысле "тестовый" светодиод моргает как положено, если расскомментировать и залить в контроллер - даже светодиод не моргает.
где и что не так ?

Автор:  Самсусамыч [ Пт июн 12, 2020 22:35:27 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Предполагаю что алгоритм простой. Интересно было бы его узнать. :)

Автор:  SergL [ Сб июн 13, 2020 08:36:48 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Предполагаю что алгоритм простой. Интересно было бы его узнать. :)

алгоритм действительно простой (три поплавковых датчика, реле давления, два электроклапана и насос), и его нет в тексте сверху только по одной причине, как только что-то "пополняется" в программе перестаёт работать всё. Вот методом исключения добился устойчивого глюка на практически ровном месте. Куда "копать" уже просто не представляю.

Автор:  Самсусамыч [ Сб июн 13, 2020 08:55:09 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Я спрашивал за алгоритм, чтобы написать свой вариант по вашему словесному описанию. Вы лишь озвучили какая используется периферия. О самом алгоритме ни слово. :roll: Схему платы тоже желательно показать… и саму плату тоже… так как часто бывает, что проблемы возникают ещё и при неправильной разводке ПП. Ещё - МК на какой частоте тактируется?

Автор:  SergL [ Вс июн 14, 2020 21:13:58 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Я спрашивал за алгоритм, чтобы написать свой вариант по вашему словесному описанию. Вы лишь озвучили какая используется периферия. О самом алгоритме ни слово. :roll: Схему платы тоже желательно показать… и саму плату тоже… так как часто бывает, что проблемы возникают ещё и при неправильной разводке ПП. Ещё - МК на какой частоте тактируется?

будет и схема, и если надо плата, я чё-та уперся в мертвое место... ...как только я делаю присвоение к переменной типа volatile uint8_t - всё встаёт в ступор

Автор:  Самсусамыч [ Вс июн 14, 2020 21:27:46 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Я не знаю Си… пишу совсем на другом языке… потому мне важен просто словесное описание ваших хотелок… далее напишу тестовый вариант, а Вы его проверите в железе… и если всё будет работать нормуль, то расскажу как я организовал свой вариант. :) Короче без Вашего описания и схемы, помощи от меня ждать бессмысленно. Ваша программа из первого поста, для меня не читабельна. :dont_know:

Автор:  SergL [ Вс июн 14, 2020 22:11:27 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Ваше предложение я понял и буду иметь ввиду )) но мну очень интересует использование atmel studio... ...и похоже тут что-то встаёт клином, что-то посоветуете попроще может быть ? на С ? ...что бы были варианты при вот таком вот затыке

Добавлено after 1 minute 38 seconds:
на "совсем другом языке" - ассемблер ? ...я чёт тяжело его воспринимаю ))

Автор:  Самсусамыч [ Вс июн 14, 2020 22:22:22 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

на "совсем другом языке" - ассемблер ?

Algorithm Builder

Автор:  BOB51 [ Пн июн 15, 2020 10:38:17 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Attiny261V - для любительских поделок весьма редковстречающийся...
Ставить его предпочтительно или из-за недостатка лапок в других моделях или для применения имеющихся там полезностей -
• 3 High Frequency PWM Outputs with Separate Output Compare Registers
• Programmable Dead Time Generator
и/или
• 16 Differential ADC Channel Pairs
• 15 Differential ADC Channel Pairs with Programmable Gain (1x, 8x, 20x, 32x)
:dont_know:
:roll:

С атмел студией - разве под ассемблером помочь можно...
Си - у меня под адуринку рассчитан, а там Attiny261V нету...
В принципе посмотреть общую схемку с "хотелками" - может чего и придумается...
8)

Автор:  Dimon456 [ Пн июн 15, 2020 11:13:39 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

SergL, вы скомпилируйте проект со строчкой b200=!b200; из первого сообщения этой темы.
Проект полностью в архив zip и сюда выложите.

Автор:  NStorm [ Пн июн 15, 2020 18:06:42 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Вы уверены, что привели весь код? У вас же b200 нигде не используется больше. И никаких timed sequence в цикле рядом я не вижу, чтобы он как-то мешал работать. Где #include <stdbool.h>, <stdint.h> ? У вас без них по идее ругнулось бы.

Автор:  SergL [ Вт июн 16, 2020 19:42:36 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

спасибо за все ответы... ...а вообще контроллеры бракованые часто попадаются в магазинах ?
...тот что уже впаяный в плату - глючит "на ровном месте", нашёл в загашнике такой же второй (покупал сразу два), собрал "макетку" - всё работает как запрограммировано, но (!!!) частота нифига не 8МГц, а где-то ~1МГц.
вот думаю чего поделать - пойти ещё что-ль в другой магазин попробовать купить ))) или остановиться на втором и "на глаз" счётчик использовать

Добавлено after 2 minutes 4 seconds:
Вы уверены, что привели весь код? У вас же b200 нигде не используется больше. И никаких timed sequence в цикле рядом я не вижу, чтобы он как-то мешал работать. Где #include <stdbool.h>, <stdint.h> ? У вас без них по идее ругнулось бы.

хм... ...не знаю, всё отлично компилится (Atmel Studio 7)

Автор:  ARV [ Вт июн 16, 2020 20:45:44 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

SergL писал(а):
частота нифига не 8МГц, а где-то ~1МГц
новые микроконтроллеры идут с завода с запрограммированным фьюзом CKDIV8 и активным внутренним генератором 8МГц, таким образом эти МК работают на частоте 1 МГц "из коробки"

Автор:  SergL [ Вт июн 16, 2020 21:32:26 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

SergL писал(а):
частота нифига не 8МГц, а где-то ~1МГц
новые микроконтроллеры идут с завода с запрограммированным фьюзом CKDIV8 и активным внутренним генератором 8МГц, таким образом эти МК работают на частоте 1 МГц "из коробки"

о как... ...а в даташите:
The device is shipped with CKSEL = “0010”, SUT = “10”, and CKDIV8 programmed. The default
clock source setting is therefore the Internal Oscillator running at 8 MHz with longest start-up
time and an initial system clock prescaling of 8. This default setting ensures that all users can
make their desired clock source setting using an In-System or High-voltage Programmer

и при чтении фьюзов из CKSEL только CKSEL1 выставлен
а я же сам выставляю деление частоты

Добавлено after 3 minutes 8 seconds:
пока программа выглядит так:

/*
* 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 // есть вода +5V
#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 iSens500 = 0;

volatile bool isWork = false;
volatile bool Pump200Work = false;
volatile bool PumpShowerWork = false;
volatile bool bNeed200 = false;

volatile bool bTest = false;

ISR ( TIMER0_COMPA_vect)
{
c_sec++;
if (c_sec>999){ //999
c_sec=0;

if (iSens500>0) {
iSens500--;
}

isWork=true;
}
c_msec++;
}

void delay(uint16_t msec)
{
c_msec=0;
while (c_msec!=msec){

}
}

bool Pin500Bottom()
{
return !(PINA & (1 << Pin_Sens500Bottom));
}

void PumpOn()
{
PORTB |= _BV(Port_Pump);
}

void PumpOff()
{
PORTB &= ~_BV(Port_Pump);
}

void Valve200On()
{
PORTB |= _BV(Port_Run200);
Pump200Work=true;
}

void Valve200Off()
{
PORTB &= ~_BV(Port_Run200);
Pump200Work=false;
}

void ValveShowerOn()
{
PORTB |= _BV(Port_RunShower);
PumpShowerWork=true;
}

void ValveShowerOff()
{
PORTB &= ~_BV(Port_RunShower);
PumpShowerWork=false;
}

void AllOff()
{
PumpOff();
Valve200Off();
ValveShowerOff();

}

int main(void)
{
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 = (1<<CS02)|(0<<CS01)|(1<<CS00);//0x05; // делитель 1024
TCNT0L = 0;
OCR0A = 1; // число для сравнения счетчика
TIMSK = (1<<OCIE0A);
sei();
//delay(1000);
while (1)
{
if (isWork){
isWork=false;

if (bNeed200) {
bNeed200 = bNeed200 && (PINA & (1 << Pin_Sens200Top));
} else {
bNeed200 = (PINA & (1 << Pin_Sens200Top)) && (PINA & (1 << Pin_Sens200Bottom));
}
if (Pin500Bottom()) { // уровень резервного бака ! нельзя включать насос.
AllOff();
iSens500 = 5; // ожидаем наполнение нижнего бака - 1 минуту.
}

if (iSens500>0) {
continue;
}

bTest=!bTest;
if (bTest){
PORTA |= 1 << Port_Reserv;
} else {
PORTA &= ~1 << Port_Reserv;
}
// сначала проверяем реле давления - для поддержания давления воды
if (PINA & (1 << Pin_SensShower)) {
ValveShowerOn();
PumpOn();
if (bNeed200) { // если было включено наполнение верхнего бака - отключаем клапан
Valve200Off();
}
continue;
}
if ((!(PINA & (1 << Pin_SensShower))) && PumpShowerWork) { // реле давления отключилось - выключаем накачку
if (bNeed200) { // требуется наполнение верхнего бака - переключаем клапаны
Valve200On();
ValveShowerOff();
} else { // иначе - отключаем клапаны и насос
AllOff();
}
continue;
}
// проверяем необходимость наполнения верхнего бака
if (bNeed200) {
Valve200On();
PumpOn();
} else { // иначе - выключаем насос
Valve200Off();
PumpOff();
}

}
}
}


с делителем и другими настройками таймера пока буду "играться"

Добавлено after 57 seconds:
...блин, все табы "испортились"

Автор:  NStorm [ Ср июн 17, 2020 00:26:02 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Цитата:
The device is shipped with CKSEL = “0010”, SUT = “10”, and CKDIV8 programmed. The default
clock source setting is therefore the Internal Oscillator running at 8 MHz with longest start-up
time and an initial system clock prescaling of 8. This default setting ensures that all users can
make their desired clock source setting using an In-System or High-voltage Programmer

и при чтении фьюзов из CKSEL только CKSEL1 выставлен

Ну и? Никаких противоречий. CKSEL1 = 1 === CKSEL = 0010
Частота МК получается 1 МГц, за счет включенного CKDIV8, который ставит предделитель Fclk. Вы же ставите в коде делитель таймера. Это ж разные вещи.

Чтобы "табы" не съезжали, надо в тег [code] запихивать.

Автор:  SergL [ Ср июн 17, 2020 06:17:59 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Ну и? Никаких противоречий. CKSEL1 = 1 === CKSEL = 0010
Частота МК получается 1 МГц, за счет включенного CKDIV8, который ставит предделитель Fclk. Вы же ставите в коде делитель таймера. Это ж разные вещи.

что-то я реально затупил... ...всё из-за хренового знания английского языка. Большое спасибо !!!

Автор:  SergL [ Чт июн 18, 2020 19:53:14 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

ну... ...вроде всё, закончил
вырезал косячный контроллер (в прямом смысле вырезал - выпаивал по одной ноге), впаял новый, прошитый, провёл тестирование (вместо датчиков - джамперы) - работает как часы ))

Самсусамыч, Вам действительно нужна схема ? )) ...видел по разным темам что Вы и так очень хорошо в них разбираетесь, уж такую "мелочь" собрать даж напрягаться Вам не придётся ))

Автор:  Самсусамыч [ Чт июн 18, 2020 21:00:56 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Схема мне нужна была, чтобы для Вас написать программу. А так как Вы и сами справились, то я рад, что у Вас всё получилось. :) Вот есть такой таймер для полива… https://radiokot.ru/forum/viewtopic.php?f=2&t=167311 посмотрите, может пригодится.

Автор:  SergL [ Чт июн 18, 2020 21:15:01 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

А так как Вы и сами справились, то я рад, что у Вас всё получилось.

ой не сглазьте ) работает пока только всё дома, в выходные если всё будет благополучно - опробую при всём подключении датчиков/клапанов/насоса... ..а вообще планируется ещё более интересная история - капельный полив (но он плохо управляемый простыми трубками) с измерением влажности включением/перекрытия воды, измерением температура и возмохно автоматическим открытием "окон"... ...но эт чёт дофига ресурсов, надо посчитать, помидоры/огурцы могут не стоить того ) ...хотя время/силы родителей это очень много съэкономит ))

Автор:  dgrett [ Пт июн 19, 2020 09:48:22 ]
Заголовок сообщения:  Re: проблема с программрованием Attiny261V

Огурцы да помидоры по сравнению с какими испанскими... Как сравнить? А опыт, а удовольствие? Нечего тут сомневаться, ДЕЛАЙТЕ!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/