| Форум РадиоКот 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 |
Я спрашивал за алгоритм, чтобы написать свой вариант по вашему словесному описанию. Вы лишь озвучили какая используется периферия. О самом алгоритме ни слово. |
|
| Автор: | SergL [ Вс июн 14, 2020 21:13:58 ] |
| Заголовок сообщения: | Re: проблема с программрованием Attiny261V |
Я спрашивал за алгоритм, чтобы написать свой вариант по вашему словесному описанию. Вы лишь озвучили какая используется периферия. О самом алгоритме ни слово. будет и схема, и если надо плата, я чё-та уперся в мертвое место... ...как только я делаю присвоение к переменной типа volatile uint8_t - всё встаёт в ступор |
|
| Автор: | Самсусамыч [ Вс июн 14, 2020 21:27:46 ] |
| Заголовок сообщения: | Re: проблема с программрованием Attiny261V |
Я не знаю Си… пишу совсем на другом языке… потому мне важен просто словесное описание ваших хотелок… далее напишу тестовый вариант, а Вы его проверите в железе… и если всё будет работать нормуль, то расскажу как я организовал свой вариант.
|
|
| Автор: | 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) С атмел студией - разве под ассемблером помочь можно... Си - у меня под адуринку рассчитан, а там Attiny261V нету... В принципе посмотреть общую схемку с "хотелками" - может чего и придумается... |
|
| Автор: | 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 |
Схема мне нужна была, чтобы для Вас написать программу. А так как Вы и сами справились, то я рад, что у Вас всё получилось. |
|
| Автор: | 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/ |
|


