Страница 340 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 08, 2015 20:02:59
Misha119
доброго времени суток
проблема такая, не могу вывести число
вот код из codevisionavr
Код: Выделить всё
#include <mega8.h>
#include <alcd.h>
#include <stdio.h>
float Kp_step = 5.1;
char lcd_buffer[33];
void main(void)
{
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
lcd_init(16);
while (1)
{
lcd_clear();
sprintf(lcd_buffer,"%.1f", Kp_step);
lcd_puts(lcd_buffer);
}
}
и при эмуляции в протеусе почемуто показывает 1f
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 08, 2015 20:31:19
Аlex
Этот вопрос тут уже задавали множество раз. Мне вот интересно, в хелпе на CV есть на него ответ ?
Реально уже начинают раздражать одни и те же глупые вопросы, ответы на которые можно найти без труда в документации на инструмент.
Сейчас, ради интереса, качну мануал на CV и посмотрю....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 08, 2015 20:53:56
Misha119
всё, разобрался
есть в документации, я с энглиш не дружу, но общую суть уловил
даже и не знаю что сказать товарищу модеру, с одной стороны хочется сказать "засранка" за флуд и наезды какой я муд..к, а с другой стороны спасибо за то что направил туда где написано что к чему
как то так
пс: без обид
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 08, 2015 21:01:56
Аlex
Ну значит многабукаф в моём посте были не зря

Удачи !
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт июн 09, 2015 08:04:39
Dr.Seldom
Dr.Seldom писал(а):Есть ли у кого опыт работы с дисплеем ILI9325 и CodeVision?
Сам спросил, сам разобрался...
остался непонятным вопрос : как штатными библиотеками CVAVR в частности для ILI9325 повернуть вывод на 90гр.
обыскался....
нашел
Код: Выделить всё
#define ILI9325_CMD_DRIVER_OUT 0x01 // Driver output control
// Driver output control bits positions
#define ILI9325_SS_BIT 8 // SS bit pos. selects the output
// shift direction of source driver
#define ILI9325_SM_BIT 10 // SM bit pos. gate scan sequence interlaced or not
а вот где и как этим битам что-нить присвоить не пойму
и тут разобрался... нужна версия 3.15 или новее
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс июн 14, 2015 17:03:58
amd9800
Хочу подключить дисплей 1602A (HD4470) через регистр сдвига 595. Существует ли библиотека для CodevisinAVR для работы с дисплеем через регистр?
Пытаюсь работать с дисплеем без библиотек, но есть одна проблема.
Делал по данной
ссылке
Но возникла проблема - не переводится строка
Код: Выделить всё
void lcd_set_cursor(char line,char pos) {
pos |= 0b10000000;
if (line == 1) {
pos += 0x40;
}
lcd_write_cmd(pos);
}
Если меняю позицию без проблем, а вторую строку выбираю текст туда не пишется.
Выбираю обратно 0 строку и все ок.
В чем может быть ошибка?
У автора переменные int у меня char - но в начале я все скопипастил проблема та же была.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 15, 2015 00:18:31
Rtmip
Может быть в инициализации проблема.
Разные производители предлагают немного разные последовательности.
У вас, похоже, установлена одна строка.
Попробуйте в коде инициализации эту команду:
передать дважды, а не один раз как в том примере, по которому делаете.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 15, 2015 00:37:11
amd9800
решил вот так
Код: Выделить всё
lcd_write_nibble(0x20);
delay_ms(1);
lcd_write_data(0x28);
вместо
и все заработало
теперь можно делать библиотеку под регистр 595
Только вот думаю как быть с паузами. Крутить зря процессорное время через delay_ms или сделать по другому?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 15, 2015 01:04:50
Rtmip
Смысл тот же, дважды идет команда работы на 4 бита, во второй указание о работе на 2 строки.
Если использовать опрос дисплея, но это плюс один провод, то задержки не нужны, конечно.
Но на регистре это лишняя морока?

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июн 15, 2015 19:19:46
amd9800
чтоб много не возится решил сделать надстройки над старыми функциями.
Вот что получилось
Код: Выделить всё
#define PORTSS PORTB
#define PINSS 2
#define SS_UP PORTSS |=(1<<PINSS)
#define SS_DN PORTSS &=(~(1<<PINSS))
#define STROBE SS_UP;#asm("nop");#asm("nop");SS_DN
#define PUT_PORT SPDR=LCD_PORT
#define RS_ENABLE LCD_PORT|=0b00000001;PUT_PORT
#define RS_DISABLE LCD_PORT&=0b11111110;PUT_PORT
#define E_ENABLE LCD_PORT|=0b00000010;PUT_PORT
#define E_DISABLE LCD_PORT&=0b11111101;PUT_PORT
unsigned char LCD_PORT=0;
Новые макросы вместо старых и переменная LCD_PORT которая заменит регистр порта.
потом настройка SPI и команда в функции прерывания.
А дальше в функции lcd_write_nibble выставил правильное смещение данных просто эти 4 бита ровно по середине байта, а не в конце как раньше.
Код: Выделить всё
interrupt [SPI_STC] void spi_isr(void)
{
STROBE;
}
void lcd_write_nibble(char data) {
//LCD_PORT |= data;
data=data>>2;
LCD_PORT = LCD_PORT | data;PUT_PORT;
delay_ms(5);
E_ENABLE;
delay_ms(5);
E_DISABLE;
delay_ms(5);
LCD_PORT &= ~(data);PUT_PORT;
delay_ms(5);
}
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт июн 16, 2015 03:10:31
pokk
Только вот думаю как быть с паузами. Крутить зря процессорное время через delay_ms или сделать по другому?
Я настроил таймер на 1ms и запихал туда всю работу с LCD. Т.е задержки в 20, 5ms сводится к подсчёту количества входа в таймер.
А в главном цикле просто происходит обновление массива(с периодом Т>Тзаписи) который надо отображать на LCD.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср июн 17, 2015 22:59:42
mixon46
Помогите понять на практике программы. Вот пишу задержку. Объявляю ее до объявления портов и прочих
Void delay (void)
{TCNT1=0;
while (TCNT<a) {};
}
void main (void)
{
int a;
...
...
...
while (1)
{PORTB.0=1;
delay ();
PORTB.0=0;
delay ();
a=a+300;
}
Пишет ошибку undefined sumbol 'a'
Что за косяк? Потому что не объявлена переменная раньше?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 05:34:12
WiseLord
В функции Delay() вызывается нигде ранее не объявленная переменная a.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 14:06:49
Сериг
Всем здрям! Коты, подскажите, что же значит звездочка в данных строках, про указатели на функцию читал, но что-то допереть не могу...
Вот здесь * до исполнительного слова (*fun[T2]) ();
А вот здесь - после. sprintf ((char*)...)
Буду весьма признателен!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 14:39:43
ARV
звездочка означает в данном контексте "разименование указателя".
судя по всему fun[] - это массив указателей, соответственно *fun[10] - это то, на что указывает 10-й указатель в этом массиве
(char*) - это явное приведение типа переменной. что там после этого у вас - неведомо, но очевидно там должно быть имя массива. скорее всего подобный код - следствие непонимания или ошибки.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 15:27:56
ipf
Подскажите пожалуйста, мне на attiny15 нужно сделать чтобы порт сбрасывался каждые 40 секунд. То есть при подаче питания на порту , любом появляется единичка, через 40 секунд появляется 0 и через секунду опять единичка. и так по кругу. Спасибо
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 16:47:36
mixon46
WiseLord писал(а):В функции Delay() вызывается нигде ранее не объявленная переменная a.
Если в функции задержки void del (void) объявить переменную а то почему то выдает ошибку функция void main (void) . Вроде как то что переменная не объявлена в void main (void). А если объявить в обеих функциях то как я понял задерка будет изменятся. Как сделать что бы посредством переменной изменять время задержки?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 17:44:41
WiseLord
Передать параметром в функцию. Объявить в глобальной области видимости, а не внутри каждой из функций. Вариантов хватает, причём очевиднейших. Вы же упорно пытаетесь объявить внутри каждой функции свою собственную переменную - естественно, одна функция не видит переменных другой функции.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт июн 18, 2015 18:57:41
mixon46
Мне следовало бы у вас взять пару уроков по программираванию на си. Можно мне в виде примера на коде показать а то вроде понятно то что нужно объявить не в функциях а глобально. Я новичек просто. Мне бы еще потом немного рассказать про массивы. Как читать ячейку. Как другую выбирать потом. ну это потом
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб июн 20, 2015 09:35:12
Аlex