Перейти к содержанию

Управление полевиком на основании данных с АЦП


oner

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

В 14.6.2017 в 23:44, Goodefine сказал:

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

Вы не поверите...

В 13.6.2017 в 20:57, IMXO сказал:

терминал и есть виртуальный юарт компютера

А как сделать так, чтобы секунды с двадцатой контроллер включал дополнительно PORTB.1 на длительное время? Мне для реле. Обязательно ли для этого включать встроенный таймер контроллера? Или все же встронный таймер можно как-то обойти?

 

Или, если испльзовать встроенный таймер в том числе для работы ШИМа (того, который в моей версии с PORTB.0), то как обойтись без delay? А то, насколько я понимаю, delay во внутреннем таймере будет смотреться крайне странно.

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

  • 3 недели спустя...

Мои фантастические приключения продолжаются. Возникла необходимость подключить LCD, поэтому было решено перейти на контроллер с бОльшим числом портов. Выбор, ясное дело, пал на Atmega32, но после переписывания ссылок на соответствующую библиотеку, а также другие выходные порты система в протеусе стала творить непонятно что. Особо смущает то, что один из портов, несмотря на объявление оного в коде, вообще отказывается выдавать сигнал. Что за фигня? Скрин, а также файлы исходника и протеуса прилагаю.

 

kQYQzf3AXHQ.jpg

 

111.7z

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, Dan'nah сказал:

Нужно отключить JTAG (fuse JTAGEN), который висит на PORTC

Простите, но где это делается? Насколько я знаю, фьюзы выставляются только при прошивке контроллера в реале. А что Вы имеете в виду?

Ссылка на комментарий
Поделиться на другие сайты

В настройках контроллера, очевидно. Странно что не можете самостоятельно найти методом тыка.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, COKPOWEHEU сказал:

В настройках контроллера, очевидно. Странно что не можете самостоятельно найти методом тыка.

Да у меня тут всё через...

MI9TY4JNKlo.jpg

6 минут назад, proekt07 сказал:

Как прошивать Протеусом я не знаю,не пользуюсь им.Пользуюсь обычными прошивальщиками,например avrdudeshell

Прежде, чем делать в железе, я всё прогоняю на компьютере. В частности - через протеус. А шью тоже через AVRDudeShell.

Ссылка на комментарий
Поделиться на другие сайты

Значит Протеус не симулирует JTAG. Простейшая прошивка говорит что с PORTC все в порядке на дефолтных фузах. Значит у вас проблема не в протеусе а в коде.

#include <avr/io.h>

int main(){
  DDRC = 0xFF;
  while(1)PORTC ^= 0xFF;
}

 

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, COKPOWEHEU сказал:

Значит Протеус не симулирует JTAG. Простейшая прошивка говорит что с PORTC все в порядке на дефолтных фузах. Значит у вас проблема не в протеусе а в коде.


#include <avr/io.h>

int main(){
  DDRC = 0xFF;
  while(1)PORTC ^= 0xFF;
}

 

Может, тогда все же

    DDRC = 0x01;
    while(1)PORTC ^= 0x00;

ведь PORTC используется, как выход.

Ссылка на комментарий
Поделиться на другие сайты

Я писал простейшую тестовую программу, мигающую всем портом: на PC2-PC5 может висеть JTAG, на PC6,PC7 - внешний кварц для RTC.

Запись x ^= 0x00; вообще бессмысленна. Операция XOR инвертирует те биты первого аргумента, которым соответствуют биты второго, равные 1. В моем случае все биты второго аргумента равны 1, то есть инвертируются все биты первого, он же PORTC.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Я тут уже паниковать начинаю - программа, тикавшая, как часы с Atmega8 при переносе на Atmega32 реагирует или полным неадекватом, или портами с нулевым выходом.Что с JTAG, что без него. Полдня шил живой контроллер, в панике перебрал все возможные варианты и пришел к такому результату на брэдборде со светодиодами:

При high fuses D9

DDRC = 0x01;
while(1)PORTC ^= 0x00;

на выходах порта С светятся PC2 и PC3 

При     high fuses 99

DDRC = 0x01;
while(1)PORTC ^= 0x00;

на выходах порта С светятся PC1, PC2 и PC4.

При     high fuses 99

DDRC = 0xFF;
while(1)PORTC ^= 0xFF;


на выходах порта С светяся PC0, PC1, PC6 и PC7.

При high fuses D9

DDRC = 0xFF;
while(1)PORTC ^= 0xFF;

на выходах порта С светятся все, секунд через 5 PC1 и PC7.

Особо смущает, что нет засвечивания PORTC.5 через 21 секунду, как указано в коде и, повторюсь, чо без проблем происходило в Atmega8 как в протеусе, так и на реальном контроллере.

2 часа назад, COKPOWEHEU сказал:

Я писал простейшую тестовую программу, мигающую всем портом: на PC2-PC5 может висеть JTAG, на PC6,PC7 - внешний кварц для RTC.

Запись x ^= 0x00; вообще бессмысленна. Операция XOR инвертирует те биты первого аргумента, которым соответствуют биты второго, равные 1. В моем случае все биты второго аргумента равны 1, то есть инвертируются все биты первого, он же PORTC.

Кварц я повесил на XTAL1 и XTAL2, а зачем вешать кварц на PC6 и PC7? 

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, oner сказал:

Кварц я повесил на XTAL1 и XTAL2, а зачем вешать кварц на PC6 и PC7? 

для RTC, кварц 32768 Гц для часов реального времени, работающих даже когда ядро спит.

 

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, COKPOWEHEU сказал:

для RTC, кварц 32768 Гц для часов реального времени, работающих даже когда ядро спит.

 

А почему в случае с Atmega8 у меня без часового кварца все работало? В смысле - а так ли он нужен в данном случае? Поставить его - не проблема, но занимать два пина на то, без чего получалось обойтись, не хотелось бы.

Переписал порты к виду:

{
    s++; // увеличиваем переменную каждую секунду
         if (s<21000) { // Режим 0 (Разрядка)
            o++;
        if(o>20)  
            {  
                PORTC.5=1;
            }
        if(o>(20+n))
            {   
                o=0;
                PORTC.5=0;   
            }
            }
        if (s>21000) // Переключение режимов разрядки и зарядки    
        {    
            PORTC.5=0;
            PORTC.4=1;
            ss++;
             
                 if(ss>20)  
            {  
                PORTC.3=1;
            }
                if(ss>(20+m))
            {   
                ss=0;
                PORTC.3=0;   
            }
        } 
    TCNT1=0; //обнуляем таймер
}

Что с часовым кварцем, что без него - постоянно горит PORTC.5

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

У ATmega8 выводы часового кварца объединены с выводами обычного, то есть нельзя использовать одновременно асинхронный таймер и кварцевую стабилизацию частоты ядра.

Использовать таймер в асинхронном режиме или нет - решать вам. Обычно он нужен для точного отсчета времени и экономии энергии. В вашем случае это скорее всего не требуется. Подробнее можно почитать в разделе "асинхронные таймеры" даташита.

10 часов назад, oner сказал:

Переписал порты к виду:

Вместо того чтобы разобраться что именно не работает, переписываете одно и то же. Достаточно-то было найти участок кода, который не работает, воспроизвести ошибку на тестовом примере, исправить ее и, наконец, перенести исправленный вариант обратно в рабочий проект.

s++;
o++;
PORTC.5 = 1;

Желательно без этого. Не то чтобы оно неправильно, но переменные стоит называть осмысленно (хотя бы sec) и не стоит использовать нестандартные языковые конструкции.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, COKPOWEHEU сказал:

 


s++;
o++;
PORTC.5 = 1;

 

Зачем же Вы так объединяете время время выполнения обоих условий со временем выполнения первого из условий? За большой временной интервал, который отсчитывает переменная s у меня условие, выполняемое время o, условие выполнится s/o раз, что и было на Atmega8. А здесь первое условие прокрутится 1 раз.

17 минут назад, COKPOWEHEU сказал:

воспроизвести ошибку на тестовом примере

Что Вы имеете в виду под "тестовым примером"? Особенно в условиях, когда я изначально не знаю о том, что именно не работает?

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, COKPOWEHEU сказал:

У ATmega8 выводы часового кварца объединены с выводами обычного, то есть нельзя использовать одновременно асинхронный таймер и кварцевую стабилизацию частоты ядра.

Самое забавное, что я вообще не использовал кварц с Atmega8, а использовал время от внутреннего таймера (см.код). 

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

Люди, что происходит?

Дабы полностью разобраться с тем, как работает JTAG и PORTC контроллера atmega32, я упростил код программы до 

#include <mega32.h> 

#include <delay.h> 

void main(void) 
{ 
#asm("sei")
  
PORTC=0x00;
DDRC=0x01;
while (1) 
{ 


   PORTC.7=1; //включаем 0 ножку порта В
   delay_ms(100); // ждем 100 мс
   PORTC.7=0; //выключаем 0 ножку
   delay_ms(100); //ждем 100 мс
}
}

В результате у меня светятся PORTC.3 и PORTC.5. Невероятно, но PORTC.7 соизволил мигать.

Пардон. В данном случае дело действительно во фьюзе JTAG. Однако, программа, работавшая на Atmega8 при таких же фьюзах не работает.

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...