Получил задание на диплом запрограммировать систему управления роботом. Система управления на базе МК ATmega16.
Схема есть в протеусе. Смысл в том, чтобы по нажатию на кнопки клавиатуры загорался определённый светодиод на схеме. На реальной собранной плате вместо светодиодов помоему будут стоять электромагниты, управляющие клапанами пневмодвигателей.
Сама программа есть, написана на Си и даже скомпилирована и есть файл прошивки. Вся проблема в том, что при симуляции в протеусе, схема ведёт себя непредсказуемо: бывает, что сигналы на входах МК и на кнопках меняются как то хаотически, а бывает протеус выдаёт такую ошибку: Time step too small(скрин приложил). Так же бывает, что светодиоды загораются самопроизвольно, внезависимости от нажатия кнопок.
Где то читал, что это может быть связано с фьюзами (на схеме используется внешний тактовый генератор) или чем то таким, но толком так и не смог разобраться.
Схемка в архиве, текст программы, а так же .hex файл в прикреплённых файлах.
Если кто то поможет разобраться хотябы с одной парой кнопок и светодиодов - буду очень благодарен.
Программа:
#include <delay.h>
#include <avr/io.h>
#include <avr/iom16.h>
main(void)
{
DDRC = 255;
DDRA = 0;
DDRB = 255;
while (1)
{
PORTC = 0b00000100;
if (PINA = 00000001) PORTB = 00000001;
if (PINA = 00000010) PORTB = 00000000;
if (PINA = 00000100) PORTB = 00000010;
if (PINA = 00001000) PORTB = 00000000;
delay_ms(1000);
PORTC = 0b00001000;
if (PINA = 00000001) PORTB = 00000100;
if (PINA = 00000010) PORTB = 00000000;
if (PINA = 00000100) PORTB = 00001000;
if (PINA = 00001000) PORTB = 00000000;
delay_ms(1000);
PORTC = 0b00010000;
if (PINA = 00000001) PORTB = 00010000;
if (PINA = 00000010) PORTB = 00000000;
if (PINA = 00000100) PORTB = 00100000;
if (PINA = 00001000) PORTB = 00000000;
delay_ms(1000);
PORTC = 0b00010000;
if (PINA = 00000001) PORTB = 01000000;
if (PINA = 00000010) PORTB = 00000000;
if (PINA = 00000100) PORTB = 10000000;
if (PINA = 00001000) PORTB = 00000000;
delay_ms(1000);
}
}
Прикрепленные файлы
-
diplom_last_version.rar (32,79К)
Количество загрузок:: 281 -
diplom1.c (1,08К)
Количество загрузок:: 285 -
diplom1.hex (1,18К)
Количество загрузок:: 277