CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Misha119
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Re: CodeVision AVR в вопросах и ответах

Сообщение 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
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Этот вопрос тут уже задавали множество раз. Мне вот интересно, в хелпе на CV есть на него ответ ?
Реально уже начинают раздражать одни и те же глупые вопросы, ответы на которые можно найти без труда в документации на инструмент.
Сейчас, ради интереса, качну мануал на CV и посмотрю....
Misha119
Нашел транзистор. Понюхал.
Сообщения: 192
Зарегистрирован: Пт май 15, 2015 22:13:00

Re: CodeVision AVR в вопросах и ответах

Сообщение Misha119 »

всё, разобрался
есть в документации, я с энглиш не дружу, но общую суть уловил
даже и не знаю что сказать товарищу модеру, с одной стороны хочется сказать "засранка" за флуд и наезды какой я муд..к, а с другой стороны спасибо за то что направил туда где написано что к чему
как то так :))
пс: без обид
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Ну значит многабукаф в моём посте были не зря :)
Удачи !
Аватара пользователя
Dr.Seldom
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Ср окт 21, 2009 11:10:53
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение 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 или новее
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: CodeVision AVR в вопросах и ответах

Сообщение 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 - но в начале я все скопипастил проблема та же была.
Rtmip
Держит паяльник хвостом
Сообщения: 963
Зарегистрирован: Чт апр 03, 2014 23:16:55
Откуда: Россия

Re: CodeVision AVR в вопросах и ответах

Сообщение Rtmip »

Может быть в инициализации проблема.
Разные производители предлагают немного разные последовательности.
У вас, похоже, установлена одна строка.
Попробуйте в коде инициализации эту команду:

Код: Выделить всё

lcd_write_nibble(0x28);
delay_ms(20);
передать дважды, а не один раз как в том примере, по которому делаете.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: CodeVision AVR в вопросах и ответах

Сообщение amd9800 »

решил вот так

Код: Выделить всё

    lcd_write_nibble(0x20);
    delay_ms(1);
    lcd_write_data(0x28);


вместо

Код: Выделить всё

    lcd_write_nibble(0x28);


и все заработало

теперь можно делать библиотеку под регистр 595

Только вот думаю как быть с паузами. Крутить зря процессорное время через delay_ms или сделать по другому?
Rtmip
Держит паяльник хвостом
Сообщения: 963
Зарегистрирован: Чт апр 03, 2014 23:16:55
Откуда: Россия

Re: CodeVision AVR в вопросах и ответах

Сообщение Rtmip »

Смысл тот же, дважды идет команда работы на 4 бита, во второй указание о работе на 2 строки.
Если использовать опрос дисплея, но это плюс один провод, то задержки не нужны, конечно.
Но на регистре это лишняя морока? :))
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: CodeVision AVR в вопросах и ответах

Сообщение 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);
}
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: CodeVision AVR в вопросах и ответах

Сообщение pokk »

Только вот думаю как быть с паузами. Крутить зря процессорное время через delay_ms или сделать по другому?

Я настроил таймер на 1ms и запихал туда всю работу с LCD. Т.е задержки в 20, 5ms сводится к подсчёту количества входа в таймер.
А в главном цикле просто происходит обновление массива(с периодом Т>Тзаписи) который надо отображать на LCD.
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение 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'
Что за косяк? Потому что не объявлена переменная раньше?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

В функции Delay() вызывается нигде ранее не объявленная переменная a.
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

Всем здрям! Коты, подскажите, что же значит звездочка в данных строках, про указатели на функцию читал, но что-то допереть не могу...
Вот здесь * до исполнительного слова (*fun[T2]) ();
А вот здесь - после. sprintf ((char*)...)
Буду весьма признателен!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

звездочка означает в данном контексте "разименование указателя".

судя по всему fun[] - это массив указателей, соответственно *fun[10] - это то, на что указывает 10-й указатель в этом массиве

(char*) - это явное приведение типа переменной. что там после этого у вас - неведомо, но очевидно там должно быть имя массива. скорее всего подобный код - следствие непонимания или ошибки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
ipf
Встал на лапы
Сообщения: 131
Зарегистрирован: Вт сен 20, 2011 18:41:41
Откуда: Вьетнам

Re: CodeVision AVR в вопросах и ответах

Сообщение ipf »

Подскажите пожалуйста, мне на attiny15 нужно сделать чтобы порт сбрасывался каждые 40 секунд. То есть при подаче питания на порту , любом появляется единичка, через 40 секунд появляется 0 и через секунду опять единичка. и так по кругу. Спасибо
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

WiseLord писал(а):В функции Delay() вызывается нигде ранее не объявленная переменная a.

Если в функции задержки void del (void) объявить переменную а то почему то выдает ошибку функция void main (void) . Вроде как то что переменная не объявлена в void main (void). А если объявить в обеих функциях то как я понял задерка будет изменятся. Как сделать что бы посредством переменной изменять время задержки?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение WiseLord »

Передать параметром в функцию. Объявить в глобальной области видимости, а не внутри каждой из функций. Вариантов хватает, причём очевиднейших. Вы же упорно пытаетесь объявить внутри каждой функции свою собственную переменную - естественно, одна функция не видит переменных другой функции.
Аватара пользователя
mixon46
Говорящий с текстолитом
Сообщения: 1644
Зарегистрирован: Сб фев 18, 2012 15:42:29
Откуда: Курск

Re: CodeVision AVR в вопросах и ответах

Сообщение mixon46 »

Мне следовало бы у вас взять пару уроков по программираванию на си. Можно мне в виде примера на коде показать а то вроде понятно то что нужно объявить не в функциях а глобально. Я новичек просто. Мне бы еще потом немного рассказать про массивы. Как читать ячейку. Как другую выбирать потом. ну это потом
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Ответить

Вернуться в «AVR»