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

МК ATMEGA16 и индикаторы ( После запуска программы, выдает кучу ошибок )


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

Дана следующая программа и следующая схема.
После запуска, циклично выдает одни и те же ошибка и до такой степени, что ПК не выдерживает нагрузку и приходится принудительно закрывать программу ( когда обычно, запустил программу и она не продолжает запускаться, а сразу указывает на ошибку в коде, а тут она даже не останавливается )
При создании проекта выбираю WINAvr!!!

 

#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\delay.h>

char data[]="04122013";
int i=0;

void test(void){
int k=0;
while (k<2){
for (int i=0; i<6;i++){
PORTC=0b00000000;
PORTA=(1<<i);
_delay_ms(100);
}
k++;}
PORTA=0xFF;
_delay_ms(200);
PORTA=0x00; }
                                                                                                                     


//Functia DECOD
char decod(char c){
switch (c){
case '0': {c=0b00111111; break; }
case '1': {c=0b00000110; break;       }
case '2': {c=0b01011011; break;       }
case '3': {c=0b01001111; break;       }
case '4': {c=0b01100110; break;       }
case '5': {c=0b01101101; break;       }
case '6': {c=0b01111101; break; }
case '7': {c=0b00000111; break; }
case '8': {c=0b01111111; break;       }
case '9': {c=0b01101111; break; }
default: c=0x00;
}
return c;
}
                                                                                                                      // Functia MAIN
void main(void){

// Waveform Generation Mode setarea regimului Normal
TCCR0=(0<<CS00)|(1<<CS01)|(0<<CS02)|(0<<WGM01)|(0<<WGM00);  // CK/8
TIMSK = (1<<TOIE0);                                   // permiterea intrerupeti in situatia de owerflov a TCNT0
DDRA=0xFF;
DDRC=0xFF;
PORTA=0x00;
PORTC=0x00;
test();
sei();                // permitera intreruperi
while(1){  }
}

ISR(TIMER0_OVF_vect){
if ((i<7) & (i>=0))
i++;
else i=0;
            PORTC=~(1<<i);
            if (i==1) PORTA=decod(data[i])|(1<<7);
            else if (i==3) PORTA=decod(data[i])|(1<<7);
            else      PORTA=decod(data[i]);
}



Я не могу остановить симуляцию, приходится закрывать принудительно.
image.png.3efe10cf33974b0cdf3d5343cd8dbee1.pngimage.png.960ef8b72f00195ba9aac618598c34c7.pngZ

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

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

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

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

15 минут назад, Alexeyslav сказал:

. Разберись с первой ошибкой

redefinition of 'decod' или какая? 
И как мне с ней разобраться, не я код писал)))) я даже не знаю что мне делать с этим, всегда код работал, а тут ошибки

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

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

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

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

7 минут назад, Sambler сказал:

И как мне с ней разобраться, не я код писал

Так ведь и я не писал. Темболее этот. Скажи, ошибку показывавет на какую строчку какого файла? подсказка: Delay.h

Учение - изучение правил. Опыт - изучение исключений.

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

Странно. У меня всё сразу запустилось. Я сделал так:

Запустил Programmer's Notepad. Скопировал в пустое окно исходник. Потом сохранил как mega16.c в папку mega16 (которую создал в корне WinAVR-20100110).

Потом запустил MFile. В MakeFile ->Main file name установил mega16. В MakeFile ->MCU type->ATmega->atmega16. Потом сохранил как Makefile в папку mega16 (в которой исходник).

Потом перешёл в Programmer's Notepad, нажал Tools->Make Clean, потом Tools->Make All. В папке mega16 появился файл mega16.hex, его подключил к МК в Proteus и в настройках МК установил внутренний тактовый генератор 8MHz (CKSEL 0100). Дисплей: 7SEG-MPX8-CC-BLUE.

Удачи!

 

mega16.jpg

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

15 минут назад, x-revers сказал:

Потом запустил MFile.

Я собственно всё вроде понял, Но вот, что за MakeFile, я никак найти не могу программу или что это такое, Нашел только, что это утилита от Visual Studio или не то?
Может есть что то подобное этому?

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

Может Вашу средУ нужно подстроить. Может Tools->Add Tools? У меня содержание вкладки Tools отличается. Ну или как вариант можно скачатьWinAVR здесь

 

image.jpg

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

Ну, что ж так через ж*пу то всё.

1. Для  @Sambler. Если тупо копируете чужой код, то озаботтесь тем, что и где у Вас стоит. Ругань компилятора в первую очередь идёт из-за delay.h, которая у WinAVR давно уже расположена в util (можете проверить на своём компе) в папке avr только файл перенаправления полностью закомментированный. Замените инклюд  делея в начале на следующую строку:

#include <util\delay.h>

2. После этого получшает, но не совсем. Компиллятор начнет ругаться на строку 11, где внутри цикла for объявляется целочисленная переменная, которая в нём же и используется: 

for (int i=0; i<6;i++){

Такая конструкция "прокатывает" только в С++, в чистом С переменная должна быть объявлена за пределами цикла, о чём вас нежно по аглицки и предупредит компилятор. Она в принципе уже и объявлена несколькими строками выше, поэтому достаточно просто убрать int в 11-й строке и насладится нормальной компиляцией проекта.

А удалять гланды через ж*пу, как предлагает @x-revers - это чисто "русская народная забава", но вовсе не обязательная.

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

Изменено пользователем Алексей Христианчик
Добавлена важная информация
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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

    • Имел дело с зарядкой батареек еще с советских времен. Тогда еще в магазине (!) купил специальную зарядку для ртутно-цинковых батареек, очень миниатюрная, зарядка шла от встроенного солнечного элемента (и это еще в советские времена!). Использовал для зарядки батареек для наручных часов, после первой зарядки батарейки хватало примерно на полгода, потом на 3-4 месяца. Потом (когда батарейка служила меньше двух месяцев) батарейка отправлялась на упокой. Спасала студента тогда очень эта вещица. Жалею что тогда не срисовал ее внутренности. А вот с зарядкой щелочных батареек пришлось заниматься уже значительно позже. Мне кто-то подарил такой набор (зарядка с комплектом перезаряжаемых батареек) - вот его обзор https://aphnetworks.com/reviews/pure_energy_xl  Все было нормально, но у всех этих батареек ресурс очень ограничен, примерно 25 циклов максимум. После чего емкость уменьшается и нет смысла их дальше использовать. После каждой зарядки емкость уменьшается, но не сильно. Реально раз десять заряжать можно точно без проблем. После того как выработался ресурс последней батарейки стал вопрос - а можно ли заряжать обычные батарейки тоже? Зарядка-то осталась... И как раз в то время приобрел обычные (т.е. "незаряжаемые") батарейки той же фирмы (PureEnergy). Оказалось что они заряжаются точно также, как и "незаряжаемые"! Возможно что у них та же химия... Пробовал батарейки разных фирм, степени разряда. Короче говоря, фирменные всякие Дюраселлы и Энержайзеры не заряжаются вообще, и даже могут потечь во время зарядки. А вот самые дикие и дешевые нонейм чаще всего заряжаются без проблем. Насчет емкости - конечно емкость полностью не восстанавливается, но для работы в беспроводной клаве,, мышке или пульте вполне хватает и достаточно надолго.  Но занимаюсь этим нечасто, просто когда лень ехать в магазин за очередной партией батареек.  А если есть возможность, то предпочитаю переделывать питание под литий. Очень сильно достает саморазряд всяких Ni-Cd, Ni-MH - разряжаются даже те, которые якобы должны долго держать заряд. Схему зарядки еще не срисовывал (лень было разбирать), но схема сложнее чем все что я видел в Интернете. Напряжение заряда примерно 1,7в. xlaa_tds.pdf
    • Я делаю ставку на контакты NC реле запуска и NO реле торможения. Тем более они такие хлипенькие.
    • Раз смогли срисовать схему "силы", то и решить проблему для вас вряд ли сложно будет... Проверьте емкость и ЭПС C-20мкФ и сопротивление контактов этих двух реле в on/off
    • Как? Вы ж никакой информации для работы мозга не дали. Ну, что-то собрали, как-то подключили, подаёте 220 на схему с незапаянным трансформатором, лампочка моргает, защита не срабатывает... Единственный вариант - вас отодвинуть и посмотреть, что там происходит. Но вы даже где обитаете не указали... Единственное, что можно вытянуть из вашего текста: Как может работать микросхема, если у неё замкнуто питание? Перед подачей 220 вы эту перемычку сняли?  
    • Если тут нет необходимой инфы, на это можно забить. Вот если он отвечает на АТ несколькими строками, то стоит разбирать на лету (во время приема) из кольцевого буфера.
    • Так что? Помогите реализовать, нужно за меня реализовать, подскажите как реализовать?? "Барыня лягли и просють..." Вас что в школе, дома, на улице никто не учил диалог вести. 
  • Похожий контент

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