Например TDA7294

Форум РадиоКот • Просмотр темы - CodeVision AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 15:38:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8273 ]     ... , , , 392, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 30, 2017 20:48:45 
Друг Кота
Аватар пользователя

Карма: 81
Рейтинг сообщений: 1377
Зарегистрирован: Пн май 11, 2009 14:15:00
Сообщений: 3059
Откуда: СПб
Рейтинг сообщения: 0
Медали: 1
Мявтор 3-й степени (1)
Также, проблема может быть в слишком высокой частоте на линии SCL. Для этой микросхемы - не более 100 кГц. Попробуйте сделать 20 кГц, ну или 50.

_________________
Этот пост оказался полезен? Не поленись, нажми Изображение слева!
:) :)) :)))
Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб сен 30, 2017 20:59:15 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
WiseLord, большое спасибо за подсказку!
Проблема действительна была в адресе. Я как-то и упустил, что с префиксом чипы имеют другой. Поставил 0х70 и всё заработало!

Спасибо!

PS. за неполноценный "плюс" я знал, заранее подкинул всё через транзистор.

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 02, 2017 01:07:36 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб июл 18, 2009 21:38:43
Сообщений: 85
Рейтинг сообщения: 0
Сеньоры, столкнулся со странностью...
CV 3.12
Объявляю переменную:
Код:
#define COEFFICIENT       (0.89)     
#define EEPROM_VAL        ((unsigned int)((COEFFICIENT * 1024.0) + 0.5))  // получается 911   

eeprom unsigned int division_factor = EEPROM_VAL;
unsigned long K_div;


В eep файле вижу:
Код:
:020000008F036C


Ну ок. Читаю переменную:
Код:
K_div = division_factor;


ИЧСХ, читается она тоже как 0x8F03 или 36611 вместо 911! Перевод K_div в uint не помогает.

Почему так? Для еепрома задан другой "индеец"? Где это поправить?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 02, 2017 08:27:42 
Родился

Зарегистрирован: Вс окт 25, 2015 19:09:46
Сообщений: 17
Рейтинг сообщения: 0
DataLife писал(а):
ИЧСХ, читается она тоже как 0x8F03 или 36611 вместо 911! Перевод K_div в uint не помогает.

Неверно используете приведение к типу при вычислении eeprom_val .


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 02, 2017 08:49:46 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
Вообще-то, последовательность двух байтов 8F03 в eeprom - это как раз 911


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 02, 2017 13:46:23 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб июл 18, 2009 21:38:43
Сообщений: 85
Рейтинг сообщения: 0
DataLife писал(а):
ИЧСХ, читается она тоже как 0x8F03 или 36611 вместо 911! Перевод K_div в uint не помогает.

Неверно используете приведение к типу при вычислении eeprom_val .

А как надо?

WiseLord писал(а):
Вообще-то, последовательность двух байтов 8F03 в eeprom - это как раз 911

В протеусе считывается 36611. В реальном железе, судя по поведению программы - тоже.

Добавлено after 57 minutes 46 seconds:
Тут фишка в том, что если я просто делаю
Код:
K_div = EEPROM_VAL;

в обход eeprom, то всё прекрасно работает.
Но стоит пропустить число через eeprom и всему капец.
Причём и в протеусе, и в железе. То есть состояние чипа роли не играет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 02, 2017 17:02:52 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
AVR - LittleEndian. Поэтому последовательность байтов, например, 134679AB в EEPROM - это число 0xAB794613.

В avr-gcc eeprom_write_word() и eeprom_read_word() работают нормально. Число пишется "с LE-перевёртыванием" в eeprom, но оно же и читается оттуда с перевёртыванием, в итоге всё ОК.

Возможно, у CV какой-то глюк при работе с EEPROM на предмет записи-чтения мультибайтовых переменных. Потому что
Код:
K_div = division_factor;

Должно читаться как из eeprom (:020000008F036C) как число 0x038F

Возможно, глюк связан ещё и с тем, что двухбайтовая переменная читается в четырёхбайтовую.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт окт 03, 2017 02:19:52 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб июл 18, 2009 21:38:43
Сообщений: 85
Рейтинг сообщения: 0
AVR - LittleEndian.
---
Возможно, глюк связан ещё и с тем, что двухбайтовая переменная читается в четырёхбайтовую.

Дык если он литл эндиан, то он и читать и писать должен одинаково. А получается, читает наоборот. Может, глюк версии CV?

Я пробовал делать K_div двухбайтной - та же фигня.


Добавлено after 1 hour 51 minute:
так, кажется разобрался.
Гадский протеус 1 раз подсасывает eeprom в проект и более не обновляет его из файла, даже если останавливать симуляцию полностью или перезагружать протеус.
Сброс делается командой Debug => Reset Persistent Model Data
Вроде помогло - стало работать правильно в симуляции.
Почему не работало в железе - отдельный вопрос... Буду проверять дальше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср окт 04, 2017 00:07:54 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Сб июл 18, 2009 21:38:43
Сообщений: 85
Рейтинг сообщения: 0
в железе работает
протеус на мыло


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср окт 04, 2017 05:05:24 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
Proteus ведёт себя вполне адекватно, эмулируя реальный МК. В который точно так же eeprom лишь при прошивке (= из файла) записывается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс окт 08, 2017 13:51:03 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
Доброго времени суток, друзья.

Собрал двухдатчиковый термометр на DS18B20 и дисплее 1602.

Положительный диапазон измеряет отлично, но вот с "минусом" проблема. Целые выводятся правильно, а десятые как-бы нет ...

Изображение

Вот часть кода:

Спойлер
Код:
/*****************************************************
Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega8.h>

#include <1wire.h>
#include <ds18b20.h>
#include <stdio.h>
#include <delay.h>
#include <alcd.h>

#define MAX_DS18B20 2

unsigned char ds18b20_devices;
unsigned char ds18b20_rom_codes[MAX_DS18B20][9];

unsigned char lcd_buffer_1[16];
unsigned char lcd_buffer_2[16];

/*температурная функция*/
int temper[2];
int H;
void temperature(void) // функция по работе с термо-датчиком
{
for (H=0;H<ds18b20_devices;H++)
  {
    temper[H]=ds18b20_temperature(&ds18b20_rom_codes[H][0])*10;     // специально умножил на 10 для вывода десятых частей
    if (temper[H]>10000)                      //если датчик выдаёт больше 1000*10
    {               
        temper[H]=40960-temper[H];            //отнимаем от данных 4096*10
        temper[H]=-temper[H];                //и ставим знак "минус"
    }

    delay_ms(10);
  }
}

void main(void)
{

w1_init();
ds18b20_init(0,-30,80,DS18B20_12BIT_RES);

// Determine the number of DS1820 devices
// connected to the 1 Wire bus
ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes);

lcd_init(16);

lcd_clear();

if (ds18b20_devices == 0)
    {
    lcd_gotoxy(0,1);
    lcd_putsf("No sensors!"); 
    }

while (1)
      {
      temperature();
     
        sprintf(lcd_buffer_1, "T1 = %i.%u\xdfC", temper[0]/10, temper[0]%10);
        sprintf(lcd_buffer_2, "T2 = %i.%u\xdfC", temper[1]/10, temper[1]%10);
        lcd_gotoxy(0,0);
        lcd_clear();
        lcd_puts(lcd_buffer_1);
        lcd_gotoxy(0,1);
        lcd_puts(lcd_buffer_2);                         
        }
           
}

Даже не знаю. Код простой и по всему интернету именно так и делают.

Пробовал не умножать на 10 в температурной функции и писать так в выводе на экран:
sprintf(lcd_buffer_1, "T1 = %i.%u\xdfC", temper[0], temper[0]%1);

Так много источников в интернете пишут, но выводятся так только целые, после точки всегда 0.

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс окт 08, 2017 17:19:16 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
"%u" - это беззнаковое целое (unsigned int). Отсюда и число такое. -5 - это 65530 в беззнаковом представлении (для двухбайтового int, соответственно).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс окт 08, 2017 18:44:35 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
Аlex, спасибо, это уяснил.
Однако уже час бьюсь в вариантами вывода минусовой температуры.
Максимум могу вывести что-то вроде: -5.-7 градусов. Убрать знак "минус" не получается. Даже ввёл отдельную переменную для хранения не отрицательной десятичной доли температуры - не помогло.

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс окт 08, 2017 19:02:24 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
То, что Вам нужно - abs

Добавлено after 3 minutes 48 seconds:
Можно без всяких stdlib и им подобным :
Код:
#define abs(v)    ((v)<0?-(v):(v))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс окт 08, 2017 20:12:10 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пт фев 13, 2009 20:58:13
Сообщений: 601
Откуда: Донецк
Рейтинг сообщения: 0
Аlex, спасибо за дополнительную инфу.
Нашёл в сети пример поинтересней и проще, наверное.

Код:
if (temper[H]>10000)                      //если датчик выдаёт больше 1000
    {               
    temper[H]=~ temper[H]+1;            //инвертируем
    sig = 1;                                         // выбрасываем флаг того, что у нас минусовая температура
    }

В цикле проверка флага sig . если 1, то ставим минус в строке форматирования.
В сумме - работает. Правда в момент перехода от плюса к минусу есть секундный "зависон".

_________________
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс окт 08, 2017 21:36:38 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
DataLife писал(а):
Код:
    temper[H]=ds18b20_temperature(&ds18b20_rom_codes[H][0])*10;     // специально умножил на 10 для вывода десятых частей
    if (temper[H]>10000)                      //если датчик выдаёт больше 1000*10
    {               
        temper[H]=40960-temper[H];            //отнимаем от данных 4096*10
        temper[H]=-temper[H];                //и ставим знак "минус"
    }
Какая-то абсолютно ненужная магия чисел. Зачем? Датчик в первых двух байтах ROM уже выдаёт нормальное число (с точки зрения знака) для температуры: 16 * T.

Не нужна дробная часть - просто поделить готовое число на 16 и вывести на экран.

Нужна дробная часть - умножить готовое число на 5 (получим 80 * T) и поделить на 8 (получим 10 * T). Ну и выводим на экран, вставив точку перед последним знаком.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 09, 2017 10:20:16 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
WiseLord писал(а):
в первых двух байтах ROM
только никак не ROM - то, что выдает датчик, это содержимое так называемой блокнотной памяти - scratchpad

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 09, 2017 10:23:38 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
Виноват...

Там, правда, намешано всего в этом scratchpad - и RAM байты с температурой, и ROM (EEPROM) байты с конфигурациями.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн окт 09, 2017 10:48:31 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
нет, scratchpad - это исключительно ОЗУ, а байты конфигурации - это кэш в озу ячеек EEPROM... так что читается всегда ОЗУ.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт окт 10, 2017 15:56:06 
Родился
Аватар пользователя

Зарегистрирован: Вт окт 10, 2017 10:23:15
Сообщений: 1
Откуда: Пенза
Рейтинг сообщения: 0
Здравствуйте, не знаю в правильную ли тему я пишу но попрошу Вас помочь, пытался найти решение в уже созданных темах но не нашел. Возникла проблема в работе программы cvavr 3.12, можете посмотреть в приложенной картинке. В краце: 2 месяца работал в этой программе, все хорошо шло, сделал перерыв на неделю, зашел и тут такие дела. Решил снести переустановить, тоже самое. Скачал поставил версию 3.10 ничего не поменялось. Подумал, что какие нибудь настройки остаются или другие программы конфликтуют, потому удалил весь комплекс программ avr, atmel, proteus и тд., почистил временные фалы, почистил реестр клинером, а потом ручками, но все тоже самое. Дополнительно к скрину скажу, что при старте программы подгружаеться весь интерфейс и затем просто сворачивается. Кто знает решение, у кого какие мысли подскажите.

Добавлено after 2 hours 4 minutes 12 seconds:
Все проблема решена запуском десяток совтин по очистке ненужных файлов и реестра, какая точно помогла не известно.


Вложения:
cvavr bug.png [51.71 KiB]
Скачиваний: 404
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8273 ]     ... , , , 392, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Starichok51 и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y