Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
26.12.2006, 09:09
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Сообщение от paha1956
|
Вот, сбацал тут по-быстрому. Компилятор IAR 3.20.
Код:
|
#include ‹string.h›
#include ‹iom8.h›
void Out_LCD(unsigned char);
__flash unsigned char decode[10]="0123456789";
void main(void)
{
char Vr_level, i, V_string[15];
float Vr_level_f;
strcpy (V_string, "U= . V");
ADCSR=0x9f; // Инициализация АЦП (постоянное преобразование)
ADMUX=0x61;
SFIOR=0x00;
PORTB=0xff; // Инициализация порта B
DDRB=0xff;
PORTC=0x80; // Инициализация порта C
DDRC=0x80;
ADCSR|=(1‹‹ADSC); // Запуск преобразования
while (1)
{
while ((ADCSR & 0x10) == 0) // Ожидание окончания преобразования АЦП
Vr_level=ADCH; // Считывание значения АЦП
Vr_level_f=Vr_level/204.4; // Учёт коэффициента
// Перевод напряжения в двочно-десятичный вид
V_string[3]=decode[(unsigned char)(Vr_level_f -Vr_level_f/10*10)];
V_string[5]=decode[(unsigned char)(Vr_level_f/10 -Vr_level_f/100*10)];
V_string[6]=decode[(unsigned char)(Vr_level_f/100 -Vr_level_f/1000*10)];
PORTB&=~0x04; // Установка режима ввода команд в LCD
Out_LCD(0x24); // Вывод команды установки курсора
в позицию (1,1) (данные взяты
"от балды", т.к. кодов команд
не знаю)
Out_LCD(0x01);
Out_LCD(0x01);
// Вывод данных на LCD
PORTB|=0x04; // Установка режима ввода данных
i=0;
while (V_string[i] != 0)
{
Out_LCD(V_string[i]);
}
}
}
void Out_LCD(unsigned char data)
{
unsigned int k;
PORTB=data & 0x0f; // Младшая часть данных
PORTB|=0x08; // Запись данных
for (k=0; k‹1000; k++) {;}
PORTB&=~0x08; // Снятие сигнала записи данных
PORTB=(data››4) & 0x0f; // Старшая часть данных
PORTB|=0x08; // Запись данных
for (k=0; k‹1000; k++) {;}
PORTB&=~0x08; // Снятие сигнала записи данных
} |
Получилось 1480 байт кода. Делал не проверяя, чисто чтоб размер посмотреть и сравнить. Стандартных функций не использовал, поэтому текст получился большой.
|
Что то я откомпилер в IARе v4.12A, и то пришлось почему-то заменить ADSC на 6. Получил hex но ничего не работает в Proteus?
|
|
|
|
27.12.2006, 07:48
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Ну кто-нибудь подскажет как сделать так, чтобы эта прога в протеусе заработала?
И почему IAR не делает cof файл?
Выдает ошибку
Fatal Error[e92]: Cannot use the 'coff' output format with this cpu
|
|
|
|
27.12.2006, 10:08
|
|
Прохожий
Регистрация: 18.10.2006
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от moyaproba
|
Ну кто-нибудь подскажет как сделать так, чтобы эта прога в протеусе заработала?
И почему IAR не делает cof файл?
Выдает ошибку
Fatal Error[e92]: Cannot use the 'coff' output format with this cpu
|
С Proteus следует использовать формат Ubrof. В настройках линкера IAR следует выбрать строчку Ubrof-8 (forced). Кроме того, необходимо поставить галочку Override default и заменить расширение выходного файла на .d90. Что интересно, для PIC расширение должно быть .ubf.
|
|
|
|
27.12.2006, 10:23
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Сообщение от wolfram
|
Сообщение от moyaproba
|
Ну кто-нибудь подскажет как сделать так, чтобы эта прога в протеусе заработала?
И почему IAR не делает cof файл?
Выдает ошибку
Fatal Error[e92]: Cannot use the 'coff' output format with this cpu
|
С Proteus следует использовать формат Ubrof. В настройках линкера IAR следует выбрать строчку Ubrof-8 (forced). Кроме того, необходимо поставить галочку Override default и заменить расширение выходного файла на .d90. Что интересно, для PIC расширение должно быть .ubf.
|
если делать hex то работает, а cof нет и протеус ошибку выдает
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/27122006/2531622.JPG" frameborder="0" name="fr3480789" scrolling="yes" width="470" height="533" align="bottom"›[img]nuke/users_images/27122006/2531622.JPG[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/27122006/544068.JPG" frameborder="0" name="fr3317604" scrolling="yes" width="470" height="498" align="bottom"›[img]nuke/users_images/27122006/544068.JPG[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
|
|
|
|
27.12.2006, 11:13
|
|
Прохожий
Регистрация: 18.10.2006
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Я же говорю, не надо использовать cof. Замените расширение .cof на .d90: ledchaiser.d90. В Proteus в свойствах контроллера выберете для свойства Program File соответствующий файл, т.е. в вашем случае ledchaiser.d90. В help по Proteus не рекомендуют пользоваться cof. Дословно:
COFF
This format, while supported, is not recommended where an ELF/DWARF option is available. This is because, unlike ELF/DWARF, the COF format is somewhat compiler dependant and open to interpretation. This means for example, that a PIC compiler may represent a float in COF as an IEEE float or in Microchip’s float format and provides no explicit information as to which format it has used. More information on supported compilers for the COF format can be found on the website. To use with Proteus specify COF as the debug format within the compiler and then use the .COF file in the program property of the processors Edit Component dialogue form.
|
|
|
|
27.12.2006, 11:46
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Сообщение от wolfram
|
Я же говорю, не надо использовать cof. Замените расширение .cof на .d90: ledchaiser.d90. В Proteus в свойствах контроллера выберете для свойства Program File соответствующий файл, т.е. в вашем случае ledchaiser.d90. В help по Proteus не рекомендуют пользоваться cof. Дословно:
COFF
This format, while supported, is not recommended where an ELF/DWARF option is available. This is because, unlike ELF/DWARF, the COF format is somewhat compiler dependant and open to interpretation. This means for example, that a PIC compiler may represent a float in COF as an IEEE float or in Microchip’s float format and provides no explicit information as to which format it has used. More information on supported compilers for the COF format can be found on the website. To use with Proteus specify COF as the debug format within the compiler and then use the .COF file in the program property of the processors Edit Component dialogue form.
|
Спасибо заработало!!!
|
|
|
|
28.12.2006, 07:46
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Сообщение от paha1956
|
Вот, сбацал тут по-быстрому. Компилятор IAR 3.20.
Код:
|
#include ‹string.h›
#include ‹iom8.h›
void Out_LCD(unsigned char);
__flash unsigned char decode[10]="0123456789";
void main(void)
{
char Vr_level, i, V_string[15];
float Vr_level_f;
strcpy (V_string, "U= . V");
ADCSR=0x9f; // Инициализация АЦП (постоянное преобразование)
ADMUX=0x61;
SFIOR=0x00;
PORTB=0xff; // Инициализация порта B
DDRB=0xff;
PORTC=0x80; // Инициализация порта C
DDRC=0x80;
ADCSR|=(1‹‹ADSC); // Запуск преобразования
while (1)
{
while ((ADCSR & 0x10) == 0) // Ожидание окончания преобразования АЦП
Vr_level=ADCH; // Считывание значения АЦП
Vr_level_f=Vr_level/204.4; // Учёт коэффициента
// Перевод напряжения в двочно-десятичный вид
V_string[3]=decode[(unsigned char)(Vr_level_f -Vr_level_f/10*10)];
V_string[5]=decode[(unsigned char)(Vr_level_f/10 -Vr_level_f/100*10)];
V_string[6]=decode[(unsigned char)(Vr_level_f/100 -Vr_level_f/1000*10)];
PORTB&=~0x04; // Установка режима ввода команд в LCD
Out_LCD(0x24); // Вывод команды установки курсора
в позицию (1,1) (данные взяты
"от балды", т.к. кодов команд
не знаю)
Out_LCD(0x01);
Out_LCD(0x01);
// Вывод данных на LCD
PORTB|=0x04; // Установка режима ввода данных
i=0;
while (V_string[i] != 0)
{
Out_LCD(V_string[i]);
}
}
}
void Out_LCD(unsigned char data)
{
unsigned int k;
PORTB=data & 0x0f; // Младшая часть данных
PORTB|=0x08; // Запись данных
for (k=0; k‹1000; k++) {;}
PORTB&=~0x08; // Снятие сигнала записи данных
PORTB=(data››4) & 0x0f; // Старшая часть данных
PORTB|=0x08; // Запись данных
for (k=0; k‹1000; k++) {;}
PORTB&=~0x08; // Снятие сигнала записи данных
} |
Получилось 1480 байт кода. Делал не проверяя, чисто чтоб размер посмотреть и сравнить. Стандартных функций не использовал, поэтому текст получился большой.
|
Да кстати, почему эта прога после компиляции не работает в протеусе? что за глюки?
|
|
|
|
28.12.2006, 09:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
проверьте прошивку в VMLAB.nm.ru
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
28.12.2006, 09:56
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Сообщение от avr123-nm-ru
|
проверьте прошивку в VMLAB.nm.ru
|
Это еще зачем? В протеусе всегда до этого все работало, даже прога которая на бейсике написана выше...
А здесь где-то глюк...
|
|
|
|
28.12.2006, 12:59
|
|
Временная регистрация
Регистрация: 14.09.2006
Сообщений: 58
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 1 сообщении
|
Неужели никто не знает, как сделать чтобы прога заработала?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:22.
|
|