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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Я делаю так:

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

flash  unsigned char kirilTable[64]= { 
0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8, 
0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 0xAD, 0xAF, 0xB0, 0xB1, 
0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE, 
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7}; 
void dd_lcd(  unsigned char *mas )
{
unsigned char ii, mas1[33]; 
for(ii=0;ii<33;ii++) mas1[ii]=0;
for (ii=0;mas[ii]!=0; ii++)
  if(mas[ii]>=0xC0) mas1[ii]=kirilTable[mas[ii]-0xC0];
  else  mas1[ii]=mas[ii]; 
lcd_puts(mas1); 
} 
Нашёл где-то в Интернете, немного переделал под себя. Использовать так:

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

dd_lcd("Какой-то русский текст"); 
Максимальная длина строки - 32 символа, если надо больше - увеличивайте размер массива в функции (там, где сейчас 33, поставьте на 1 больше, чем макс. длина строки.

Можно попробовать так (хотя этот вариант я не проверял):

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

flash  unsigned char kirilTable[64]= { 
0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8, 
0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 0xAD, 0xAF, 0xB0, 0xB1, 
0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE, 
0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7}; 
void dd_lcd(  unsigned char *mas )
{
unsigned char ii; 
for (ii=0;mas[ii]!=0; ii++)
  if(mas[ii]>=0xC0) lcd_putchar(kirilTable[mas[ii]-0xC0]);
  else  lcd_putchar(mas[ii]); 
} 
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Реклама
ra6fnq
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт июл 22, 2010 12:35:01

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

Сообщение ra6fnq »

Подскажите пожалуйста чайнику.
ATTINY25 PB3, 4 настроены на вход (кнопки) PB0, 1, 2 на выход и притянуты к 0. Пытаюсь запустить ШИМ только на PB1 (в принципе можно на PB0), но получаю тоже и на PB0. Можно как либо сделать ШИМ только на 1 ноге, или придётся брать более многоногий камешек?
Кто возьмётся помочь, ответьте в личку.
Реклама
Аватара пользователя
*Trigger*
Друг Кота
Сообщения: 3059
Зарегистрирован: Пн май 11, 2009 14:15:00
Откуда: СПб

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

Сообщение *Trigger* »

Зачем же сразу в личку? Пусть тут будет, может, кому ещё пригодится.
За выдачу сигналов ШИМ отвечают биты COM0A0, COM0A1, COM0B0, COM0B1 регистра TCCR0A (см. ДШ). Первые два - выход OC0A (PB0), вторые два - OC0B (PB1). Значит, если сейчас у Вас ШИМ на обеих ногах, Вам достаточно поменять значение регистра TCCR0A, обнулив биты COM0A0 и COM0A1, а остальные биты не трогать. Тогда PB0 станет обычным портом, отключившись от таймера.
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Аватара пользователя
pashaumnov
Прорезались зубы
Сообщения: 236
Зарегистрирован: Чт июн 25, 2009 16:00:25
Откуда: нижний новгород

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

Сообщение pashaumnov »

Чем пользоваться это решать только вам.в любом случае придётся разбираться в любой программе.без этого не как сам рисую в диптрейсе.очень нравиться. В протеусе мне показалось по сложнее.не знаю как в протеусе но в дипе можно создавать собственную базу.все компоненты учесть не возможно поэтому для меня это удобно.чем рыскать по базе ища нужный компонент..что касаемо 3д вида.для меня не принципиально.в дипе можно в ручную ставить компоненты.каких нет можно скачать в интернете с нужным расширением. Плюс протеуса если схему нарисовал и проверил автомотически перевёл в плату. В дипе схему нужно перерисовывать внимательно что бы не допустить ошибки.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Вполне пригоден, 3D отображение там тоже есть.
Реклама
Tenken
Встал на лапы
Сообщения: 93
Зарегистрирован: Чт янв 17, 2013 21:25:30
Откуда: Тула

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

Сообщение Tenken »

Здравствуйте. Ковыряю 1 wire не используя стандартных библиотек . нашел вот такую функцию для передачи информации.(есть аналогичная для приема)Подключил #include <stdint.h>
// Отправляет один бит
// bit отправляемое значение, 0 - ноль, любое другое значение - единица
void onewire_send_bit(uint8_t bit) {
onewire_low();
if (bit) {
_delay_us(5); // Низкий импульс, от 1 до 15 мкс (с учётом времени восстановления уровня)
onewire_high();
_delay_us(90); // Ожидание до завершения таймслота (не менее 60 мкс)
} else {
_delay_us(90); // Низкий уровень на весь таймслот (не менее 60 мкс, не более 120 мкс)
onewire_high();
_delay_us(5); // Время восстановления высокого уровня на шине + 1 мкс (минимум)
}
}

// Отправляет один байт, восемь подряд бит, младший бит вперёд
// b - отправляемое значение
void onewire_send(uint8_t b) {
for (uint8_t p = 8; p; p--) {
onewire_send_bit(b & 1);
b >>= 1;
}
}

не могу понять чем заменить' bit 'в значении аргументов функции.(по идее это должно быть название переменной?)Как его представить в аргументе и как он вообще сравнивается в операторе if?если это просто переменная? "if (bit)... "(С чем??)Или это какой-то наворот работающий в других компиляторах?
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

bit - это зарезервированное слово в CV.
Достаточно bit заменить на b, тогда не будет ошибок.
if bit сравнивается с 0, это прописано в стандарте языка.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

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

Сообщение dm211 »

Пытаюсь вычислить экспоненту, если вот так- x=exp(6.24) работает, а так- x=exp(-6.24) -нет,зависает в этом месте программы. Почему отрицательное число не вычисляет?
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Можно попробовать
pow(2.71828, -6.24)
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

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

Сообщение dm211 »

Странно,и pow с минусом не работает. :cry:
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

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

Сообщение dm211 »

float exp(float x);
а float бывает отрицательным?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

dm211 писал(а):x=exp(6.24) работает, а так- x=exp(-6.24) -нет
1) А x, часом, не целое ли число? Кода-то не предоставлено, вдруг там деление на ноль туо, а не в экспоненте дело.

2) Что мешает вместо exp(-6.24) использовать 1/exp(6.24)?

3) И вообще, использовать с 8-бит МК что-то кроме сложения-вычитания и умножения - плохая идея. Я и представить боюсь, сколько требуется тактов процессора на то, чтобы вычислять экспоненты, да ещё и с рациональными числами.
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

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

Сообщение Dimon49773 »

Всем привет,

Прошу помощи,

есть проект в CodeVision 3.12, и момент преобразования числа в массив. Как бы я не пробовал, не хочет и всё, максимум это только первые 4 цифры переводит.

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

uint8_t *first = calloc(8, sizeof(uint8_t));
uint32_t SerialNr = 12345678;
D2printf("SerialNr  = %lu\n", SerialNr); 

// toArray(SerialNr, first);  
    ltoa(SerialNr, first); 
// snprintf(first, 8, "%lu", SerialNr);  
// sprintf(first, "%lu", SerialNr);  

    D2printf("first = ");
    for(i=0;i<9;i++)    
    {
        D2printf("%c ", first[i]);
    }   
    D2printf("\n");   
    free(first);
В терминале вижу:

SerialNr = 12345678
first = 1 2 3 4 <\0> <\0> <\0> <\0> <\0>

Почему только переводит только первые 4 цифры? может нужны какие-то настройки проекта? Я перепробовал уже всё.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

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

Сообщение Pnjom-Penb »

Dimon49773 писал(а):Почему только переводит только первые 4 цифры?
ЦВ сейчас под руками нет, но минимум 67% за то, что это еще один из его многочисленных глюков. Попробуйте тот же код в другом компиляторе запустить.
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

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

Сообщение Dimon49773 »

Pnjom-Penb писал(а):
Dimon49773 писал(а):Почему только переводит только первые 4 цифры?
ЦВ сейчас под руками нет, но минимум 67% за то, что это еще один из его многочисленных глюков. Попробуйте тот же код в другом компиляторе запустить.

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

D2printf("first = ");
    for(i=0;i<9;i++)    
    {     
        first[i] = i;
        D2printf("%u ", first[i]);
    }   
    D2printf("\n");
Даже такая простая операция выдаёт: first = 0 1 2 3 0 0 0 0 0

Разве есть ограничения на присвоения значений массиву?

С радостью перешёл бы на другой компиляьятор на проект начат на CV и нет возможности перехода.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

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

Сообщение Pnjom-Penb »

Во-первых - зачем весь проект? Попробуйте именно этот кусок кода.
Во-вторых - зачем заставлять себя ходить по минному полю? Есть какие-то сверхважные коврижки, ради которых нужно заставлять себя давиться, но есть это гуано?
Belerafon
Встал на лапы
Сообщения: 110
Зарегистрирован: Вс май 10, 2009 18:23:45

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

Сообщение Belerafon »

Подскажите из за чего в CodeVision при стирании МК иногда стирается за секунду, а иногда столько же сколько заливает всю флешь. Не могу понять от чего зависит.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Dimon49773 писал(а):Разве есть ограничения на присвоения значений массиву?
по-моему, у вас однозначно есть проблема и кроме CVAVR.
Dimon49773 писал(а):uint8_t *first = calloc(8, sizeof(uint8_t));
вот здесь вы 8 байтов выделяете, а для строкового представления числа 12345678 нужно ДЕВЯТЬ, а для unsigned long вообще - и того больше.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Dimon49773
Встал на лапы
Сообщения: 108
Зарегистрирован: Ср янв 18, 2012 16:33:58

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

Сообщение Dimon49773 »

ARV писал(а):uint8_t *first = calloc(8, sizeof(uint8_t)); вот здесь вы 8 байтов выделяете, а для строкового представления числа 12345678 нужно ДЕВЯТЬ, а для unsigned long вообще - и того больше.
Пробовал и 9, и 16, и даже 32.

Но вдруг решил попробовать uint8_t first[8] и всё заработало как нужно.

Но всё же странно почему динамический массив так себя ведёт.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

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

Сообщение Pnjom-Penb »

Dimon49773 писал(а):и всё заработало как нужно.
Что не менее странно, так как цикл отрабатывает девять раз - от нуля и до восьми.
Ответить

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