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

МК 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 пользователей онлайн

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