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

Proteus - вопросы и ответы


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

IMXO

К сожалению, __EEPROM_DATA работает только во внутреннем симуляторе MPLAB.

А вот функции eeprom_read и eeprom_write работают с Proteus VSM.

Спасибо за наводку.

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

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

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

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

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

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

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

Немного не так выразился, но проблемы именно с плагином для MPLAB - "Proteus VSM viewer".

В самом Proteus другая беда. Где-то после половины секунды симуляции выскакивает куча предупреждений о том, что адрес вне памяти программы(!) и симуляция останавливается. (Опять в симуляторе MPLAB всё работает замечательно, а тут беда.)

В описании предупреждения написано про PIC12. Но я использую PI16F676. Может я что-то где-то не выбрал?

2015-11-11-23-37-42-skrinshot-ehkrana2275451.jpg

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

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

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

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

Где-то после половины секунды симуляции выскакивает куча предупреждений о том, что адрес вне памяти программы(!) и симуляция останавливается.
это не протез... у тебя массив на 400 элементов.... правда не понятно чего... если констант, то это уже пол килобайта памяти программ и нужно смотреть начало его расположения в коде.... для епром и озу такой размер вообще не имеет смысла...

ЗЫ только причем здесь тема по работе протеза....

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

Собственно увидел надпись, что:

Все вопросы возникающие при работе с Proteus задавайте только здесь!

и подумал, что здесь помогут.

Тем более, что проблема именно в протезе, поскольку в MPLABX работает.

Массив всего на 40 элементов. И непонятно, даже если на 400, как это даёт повод протезу так глючить, что заблудится в программной памяти? В версии 7.8 такая же беда.

Вот полный код:

#include <xc.h>
#include <stdint.h>
// CONFIG
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF	 // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF	 // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF	 // RA3/MCLR pin function select (RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF	 // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF		 // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF	 // Data Code Protection bit (Data memory code protection is disabled)
#define _XTAL_FREQ 1000000 //1Mhz FRC internal osc
#define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/1000000.0)))
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/1000.0)))
#define RS PORTCbits.RC4
#define E	 PORTCbits.RC5
#define SIG PORTAbits.RA0
#define AUTO PORTAbits.RA1
#define F_KEY PORTAbits.RA4
#define S_KEY PORTAbits.RA5

// Массив, содержащий побитно "свои" буквы
const uint8_t FLibr[4][8]={{0b11110,
						 0b00001,
						 0b00001,
						 0b00110, // Буква З
						 0b00001,
						 0b00001,
						 0b11110,
						 0b00000},

						 {0b00111,
						 0b01001,
						 0b10001,
						 0b10001, // Буква Л
						 0b10001,
						 0b10001,
						 0b10001,
						 0b00000},

						 {0b10001,
						 0b10101,
						 0b10101,
						 0b01110, // Буква Ж
						 0b10101,
						 0b10101,
						 0b10001,
						 0b00000},

						 {0b01110,
						 0b11111,
						 0b11111,
						 0b11111, // Точка
						 0b11111,
						 0b11111,
						 0b01110,
						 0b00000}};

uint8_t *FLPoint; // Указатель на массив FLibr
//Масссив содержащий длины импульсов при различных сигналах, измеренные в десятках милисекунд
const uint8_t Code_Leight[5][6]={{0,0,0,0,0,0},		 //Авто режим
							 {35,12,24,12,24,79}, //Зелёный
							 {35,12,60,79},		 //Жёлтый
							 {30,63,30,63},		 //КЖ
							 {255,255,255,255,255,255}}; //Непрерывный
//Счетчик секунд на различных сигналах на различ. порядках работы при режиме Auto
//Первое измерение (справа налево) - сигнал (1-Зел, 2-Жел, 3-КЖ)
//Второе измерение - порядок Auto
static uint8_t Signal_Sec[3][4] = {{255,40,70,80}, {150,35,60,75,}, {30,30,30,20}};

void data_enter(uint8_t data)
{
E = 1;
PORTC = PORTC & 0b110000 | data;
__delay_us(30);
E = 0;
PORTC &= 0b110000;
}
// Фукнкция подачи данных на шину дисплей при 4-битном режиме работы
void divide_n_enter(uint8_t data)
{
data_enter(data>>4);
data_enter(data&0b1111);
}
// Функция вывода на экран записанных в память символов
void lcd_write_str(char*str)
{
do{
 divide_n_enter(*str);
} while(*++str);
}
void init()
{
ANSEL = 1;				 // Включение входа AN0(PORTA,0) как аналогового
TRISA = 0b1111;			 // RA0 - аналоговый вход, RA1 - вход с кнопки выбора сигнала,
						 // RA2 - вход с кнопки выбора длительности авто сигнала,
TRISC = 0;				 // RC4 - RS, RC5 - E;
ADCON1 = 0b1010000;		 // АЦП настроен на работу со скоростью 1/16 от Fosc
ANSEL = 1;				 // RA0 - аналоговый вход
OPTION_REG = 0b010;		 // Включ. подт. резисторов, TMR0 от Fosc, преддделитель 1/8
INTCONbits.T0IE = 1;	 // Включение прерываний по переполнению TMR0
T1CONbits.TMR1ON = 1;	 // Включение TMR1
// **********Инициализация дисплея***********
RS = 0;
__delay_ms(50);
data_enter(0b11);		 // Установка на работу в 8-битном режиме
__delay_ms(20);
data_enter(0b10);		 // Установка на работу в 4-битном режиме
__delay_ms(20);
divide_n_enter(0b1000); // Выключение дисплея
__delay_ms(20);
divide_n_enter(0b1);	 // Стирание дисплея
__delay_ms(20);
divide_n_enter(0b110); // Включение автоинкремента адреса
__delay_ms(20);
divide_n_enter(0b1100); // Включение дисплея
__delay_ms(20);
divide_n_enter(0b101000); // Символы 5х7, кол-во линий - 2
__delay_ms(20);

// Запись "своих" букв в память CGRAM
divide_n_enter(0b1001000);	 // С какого адреса CGRAM начать запись своих букв. Выбрана вторая ячейка (адрес 8) для облегчения в дальнейшем вывода символов)
RS = 1;
for(uint8_t a; a<4; a++)
 for(uint8_t b=0; b<8; b++)			 // Запуск счётчиков записи.
	 divide_n_enter(FLibr[a][b]);		 // Запись своих символов в CGRAM
}
uint8_t Mode; // 0-Авто, 1-Зеленый, 2-Жёлтый, 3-КЖ, 4-непрерывный
uint8_t Count_50Hz; // При Fosc=4МГц, предделитель TMR=1/8, переполнение каждые 2 милиСек. При Count_50Hz=5 F_KEY переключается в противоположное состояние
uint8_t Sec; //Переменнная хранящая кол-во секунд наличия сигнала на выходе шлейфа
uint8_t Auto_Mode; //Порядок работы режима Auto. Существуют 3 порядка его работы.
uint8_t Reset_to_White; //Если значение переменной больше 50 (1сек), то в режиме Auto будет сброс на белый с З и Ж)
uint8_t Code_Count;	 //Счётчик кол-ва 2милиСек для подсчёта переключений кодового транзистора S_KEY
uint8_t Edge_Count; //Счётчик перепадов кодового сигнала
char ZEL[4] = {1,69,2,0};
void main ()
{
init();
TMR0=T0IF=0;
ei();
while(1)
{
 if(Mode)
	 if(Code_Count >= Code_Leight[Mode][Edge_Count])
	 {
			 S_KEY=~S_KEY;
			 Edge_Count++;
	 }
 if(Edge_Count>79)
 {
	 Edge_Count=0;
	 S_KEY=1;
 }
 if(!SIG) while(TMR0==200);
 if(!SIG) Mode++;
 Mode = Mode>4 ? 0 : Mode;


 if(!Mode && !AUTO)
 {
	 Auto_Mode++;
	 Reset_to_White++;
 }
 Auto_Mode = Auto_Mode>=3 ? 0 : Auto_Mode;



 RS=0;
 divide_n_enter(0b10000000); // Выбор адреса экрана куда будет написана буква
 RS=1;
// divide_n_enter(0x1); // Выбора адреса в DDRAM (или CGRAM) откуда брать букву
lcd_write_str(ZEL);
}
}
void interrupt isr(void)
{
Count_50Hz++;
if(Count_50Hz==5)
{
 Code_Count++;
 Count_50Hz=0;
 F_KEY=~F_KEY;
}
T0IF=0;
}

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

Я не понял. Просто намереваюсь засунуть константы в EEPROM, если не хватит программной памяти.

Может быть проблема в том, что он coff файл загружает для PIC18, и ещё пишет, что "PIC12 model release 8.3.00 (Build 19454) simulating PIC16676 device.".

bezymyannyjj2275641.jpg

Если у тебя восьмой протез, попробуй пожалуйста запустить у себя проект из вложения. Интересно заработает ли.

Спасибо.

Shleif_ALSN.zip

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

Приношу извинения за горе-вопрос. Это моя ошибка. Я опрашивал несуществующие элементы статического массива Code_Lenght.

if(Code_Count >= Code_Lenght[Mode][Edge_Count])
{
    S_KEY=~S_KEY;
    Edge_Count++;
}
if(Edge_Count>79)
    {

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

ну говорили что дело не в протезе....

И непонятно, даже если на 400, как это даёт повод протезу так глючить, что заблудится в программной памяти?
это не протез может глючить а компилятор... если создаются массивы констант на 253 и более элементов, головы массивов помещаются в первые 255 адресов памяти программ, ну а там живет вектор сброса, вектор прерываний... и при большем кол-ве таких массивов , первых 255 адресов может не хватить
Ссылка на комментарий
Поделиться на другие сайты

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

Всем доброго времени суток. Ребята, кто нибудь встречался в протеусе с BMP180 или 085 датчиками давления? Я что-то не обнаружил, может его и нет вовсе?

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

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

Наверное некорректно (неправильно) задал вопрос.

Попытаюсь объяснить. Хочу в режиме отладки (пошагово) проверить свой проект, но надо добавить файл (.асм) и выбрать инструменты для генерации...

Есть ли возможность подключить .с файл? Если есть то как?

Спасибо.

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

в проекте вместо .HEXса подсовываете микроконтроллеру .COF , а коф сам подтянет .с если оный в той же папке, что и коф...

Да нет там COFa, есть ELF.

Пытаюсь в инструментах для генерации кода использовать GCC,

e695aee9c74ct.jpg

но выдает ошибку

f795b8618f8et.jpg

Натолкните на путь....

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

АтмелСтудия не умеет генерить COF???

Во всяком случаи, я не нашел как это сделать. Я чайник (и даже не теплый)...

А всесильный гугл пока не помог.

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

народ стоит proteus 7.7 немогу там найти светодиодную матрицу 16х16 есть тока MATRIX-8X8 скинте кто ни буть библиотеку с светодиодной матрицей.

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

Помагите!!!! Программа для создания программ для контроллеров студия 6. Помагите в протеус добавить поддержку СИ, очень надо и никак не получается

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

все, с си разобрался. Подскажите есть ли для протеуса библиотека с двухцветными светодиодами RG и тремя выводами?

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

Надо файл "Led_3Color.DLL" закинуть в папку MODELS установленного Протеуса. Все заработает!

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

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

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

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

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

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

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

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

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

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

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

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

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