CodeVision AVR в вопросах и ответах
Все верно, внешнее прерывание при переходе через ноль - INT0. Попробую изменять тики таймера, после чего попробую завязать это все на кнопки UP-DOWN.. По сути это будет регулятор мощности на МК + Симистор, в нете как-то не густо примеров реализации... Особенно в CV.
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Реклама
- Сообщения: 261
- Зарегистрирован: Ср авг 01, 2012 10:45:42
Добрый день!
В интернете нашел что существуют уже аналог atmega128 (1887ВЕ7Т, 1887ВЕ8Т) непонятно код написанный для atmega128 нужно переделывать под аналог или нет?
Приношу извинение за глупые вопросы.
В интернете нашел что существуют уже аналог atmega128 (1887ВЕ7Т, 1887ВЕ8Т) непонятно код написанный для atmega128 нужно переделывать под аналог или нет?
Приношу извинение за глупые вопросы.
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Да уж...Jman писал(а):... в нете как-то не густо примеров реализации...
http://radiokot.ru/forum/viewtopic.php?f=57&p=2353634
http://radiokot.ru/forum/viewtopic.php?f=21&t=13259
http://megashemes.appspot.com/shemy-pay ... iy-na.html
http://prosje.be/CO/Schemas/slides/ATtiny13Dimmer.html
http://forum.easyelectronics.ru/viewtopic.php?t=9865
http://forum.easyelectronics.ru/viewtop ... ектор+нуля
http://electronix.ru/forum/index.php?sh ... ntry261548
Да, туда ему и дорога.Jman писал(а):... Особенно в CV.
Ну это ваше личное мнение....Да, туда ему и дорога
[color=#4080FF]- Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует![/color]
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
О, сколько вам открытий чудных готовит... © ну, и далее по тексту.Jman писал(а):Ну это ваше личное мнение....
Штука в том, что это да-ле-ко не только мое мнение.
- Реклама
- Сообщения: 261
- Зарегистрирован: Ср авг 01, 2012 10:45:42
Добрый день!
Подскажите есть код, работает все как надо, но иногда бывает сбой, программа перегрузится и начинает сначала. В чем причина в коде дела, может с таймером что-то, нужно его сбрасывать (не силен в этом) или из-за питания, микроконтроллер управляет двумя моторами мощными.
Даже когда кнопка включена
Код во вложениях
Заранее спасибо
Подскажите есть код, работает все как надо, но иногда бывает сбой, программа перегрузится и начинает сначала. В чем причина в коде дела, может с таймером что-то, нужно его сбрасывать (не силен в этом) или из-за питания, микроконтроллер управляет двумя моторами мощными.
Даже когда кнопка включена
Код: Выделить всё
if(PINC.2==0)
{
TCCR2=0x00;
OCR1BL=0xC0;
blinkFlag = 0;
blinkFlag1 = 0;
blinkFlag2 = 0;
}Заранее спасибо
- Вложения
-
- 123.rar
- (33.2 КБ) 115 скачиваний
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
Привет котам!
Пытаюсь посчитать CRC структуры в EEPROME (мега 128, КодВижн 2.05.3) но не выходит взять указатель на структуру. Лебедева смотрел - не помогло.
попробуйте кто нить у себя плз
Что делаю не так? Спасибо.
Пытаюсь посчитать CRC структуры в EEPROME (мега 128, КодВижн 2.05.3) но не выходит взять указатель на структуру. Лебедева смотрел - не помогло.
попробуйте кто нить у себя плз
Код: Выделить всё
typedef struct
{
float Pol_min;
float Pol_max;
float Stop;
float Start;
float Min;
float Max;
float correct_1;
float correct_2;
float correct_3;
unsigned int u16_Bit_Cfg_2;
unsigned int u16_Bit_Cfg_1;
unsigned int u16_TimerValue;
unsigned int u16_TempInterval;
signed int i16_TempAlarm;
unsigned char u8_Path_point_1;
unsigned char u8_Path_point_2;
unsigned char u8_TimeRoute;
unsigned char u8_DTemper;
unsigned char u8_Start_Speed;
unsigned char u8_TimePOL;
}ConfStr;
eeprom ConfStr CfgDev;
eeprom ConfStr *pCfgDev;
//int eeprom *CfgDev; //так тоже не работает, ошибка та же, когда пытаешься взять адрес структуры.
pCfgDev = &CfgDev; //<<---матюкается на эту строку "Error: G:\111.c(23): '(' expected"
//pCfgDev = &CfgDev.Pol_min; //и так не хочет работать
Код: Выделить всё
typedef struct{
...............
...............
...............
}ConfStr;
ConfStr CfgDev, *pCfgDev;
.................
.................
pCfgDev=&CfgDev;
Тогда так :
Код: Выделить всё
ConfStr CfgDev;
int* pCfgDev;
.................
.................
pCfgDev = (int*)&CfgDev;
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
Да, хочу подсчитать CRC16 (код взят из вики) для расположенной в еепроме структуры.Аlex писал(а):
Только зачем вам для чтения памяти указатель на структуру ? Наверное, нужен указатель на char (или int, если CRC16).
Тогда так :Код: Выделить всё
ConfStr CfgDev; int* pCfgDev; ................. ................. pCfgDev = (int*)&CfgDev;
по вашему коду тоже не работает - ошибка та же, ругается на строку взятия адреса. Обновился до CV версии 3, думал поможет.
Код: Выделить всё
eeprom ConfStr CfgDev;// @0x10;
int *pCfgDev;
//int eeprom *pCfgDev; //с таким обьявлением тоже самое
pCfgDev = (*int)&CfgDev; //----------------------------- на эту строку и ругается. "Error: G:\Proekt\Proekts\crc16\111.c(24): '(' expected"
unsigned int Crc16(unsigned char *pcBlock, int len)
{
unsigned int crc = 0xFFFF;
unsigned char i;
while (len--)
{
crc ^= *pcBlock++ << 8;
for (i = 0; i < 8; i++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc;
}
...Заработало вот так. Мой косяк, я пытался инициализировать указатель не в теле ф-ции майн (двоешник я
Код: Выделить всё
eeprom ConfStr CfgDev;// @0x10;
ConfStr eeprom *pCfgDev;
main
{
pCfgDev = &CfgDev;
...
}wellcom писал(а):осталось теперь его привести к 16 битному (если он не такой вдруг).
Код: Выделить всё
eeprom ConfStr CfgDev;// @0x10;
int eeprom *pCfgDev;
main
{
pCfgDev = (int eeprom *)&CfgDev;
...
for(i=0;i<sizeof(CfgDev)/2;i++){
data = pCfgDev[i];
}
}
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
подскажите плз еще по указателям...что то туго ко мне доходит
ф-ция CRC16 принимает char указатель, однако указатель на EEPROM int -овый, когда ставлю преобразование на входе в ф-цию при компилляции есть 3 предупреждения
думал заменить на 16 битные указатель pcBlock, но размер структуры равен 61 байт.
как быть в таком случае?
ф-ция CRC16 принимает char указатель, однако указатель на EEPROM int -овый, когда ставлю преобразование на входе в ф-цию при компилляции есть 3 предупреждения
Код: Выделить всё
unsigned int Crc16(unsigned char *pcBlock, int len)
{
unsigned int crc = 0xFFFF;
unsigned char i;
while (len--)
{
crc ^= *pcBlock++ << 8; // здесь говорит что результат здвига будет 0 или переполнение "Warning: ......c(22): shift result will be 0" и "....CRC16.c(22): overflow is possible in 8 bit shift left, casting shifted operand to 'int' may be required"
for (i = 0; i < 8; i++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc;
}
unsigned int u16_CRC_CFG;
eeprom ConfStr CfgDev;// @0x10;
ConfStr eeprom *pCfgDev;
main
{
pCfgDev = &CfgDev; //указ на ст-ру в еепроме, книги говорят что указ на еепром только 16 бит могут быть
u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться преобразование "Warning: G:.......111.c: suspicious pointer conversion"
}
как быть в таком случае?
1) crc ^= *pcBlock++ << 8; // здесь говорит что результат здвига будет 0 или переполнение
Однозначно переполнение т.к. операнды 8-разрядные. Сделайте так:
crc ^= ((uint16_t)*pcBlock++) << 8;
2)u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться
Странно что не ошибка. Нельзя приводить тип указателя на другой сегмент памяти(не путать RAM-EEPROM).
Однозначно переполнение т.к. операнды 8-разрядные. Сделайте так:
crc ^= ((uint16_t)*pcBlock++) << 8;
2)u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться
Странно что не ошибка. Нельзя приводить тип указателя на другой сегмент памяти(не путать RAM-EEPROM).
Указателю грубо говоря фиолетово на какой размер данных он указывает. В CVAVR его разрядность 16 бит, ни больше, ни меньше.думал заменить на 16 битные указатель pcBlock, но размер структуры равен 61 байт.
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
не проходит ваш вариант, т.к. оперирование идет с 8 разр указателем, и CV ето не по душе как то. Пробовал и ставить интовые указатели в параметрах ф-ции со спецификатором eeprom, всеравно не идет. На сколько я понимаю нет состыковки указатель на структуру в еепром, сам указатель в озу и он 16 бит, а операции я пытаюсь проводить как с 8 битным указателем.... в общем я уже сам запутался окончательно.uk8amk писал(а):1) crc ^= *pcBlock++ << 8; // здесь говорит что результат здвига будет 0 или переполнение
Однозначно переполнение т.к. операнды 8-разрядные. Сделайте так:
crc ^= ((uint16_t)*pcBlock++) << 8;
2)u16_CRC_CFG= Crc16((unsigned char*)pCfgDev, sizeof(CfgDev)); //здесь компилятору не нравиться
Странно что не ошибка. Нельзя приводить тип указателя на другой сегмент памяти(не путать RAM-EEPROM).
Указателю грубо говоря фиолетово на какой размер данных он указывает. В CVAVR его разрядность 16 бит, ни больше, ни меньше.думал заменить на 16 битные указатель pcBlock, но размер структуры равен 61 байт.
Спойлер
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
В общем подсказали мне так
ошибок и предупреждений нету, CRC вроде вычисляет, но не уверен правильно ли.
Код: Выделить всё
eeprom ConfStr CfgDev;// @0x10;
ConfStr eeprom *pCfgDev;
unsigned int Crc16(unsigned char eeprom *pcBlock, int len)
{
unsigned int crc = 0xFFFF;
unsigned short i;
while (len--)
{
i=(unsigned short)*pcBlock;
i<<=8;
crc ^= i;
pcBlock++;
for (i = 0; i < 8; i++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc;
}
main{
pCfgDev = &CfgDev; //указ на ст-ру в еепроме
u16_CRC_CFG_AFS = Crc16((unsigned char eeprom*)pCfgDev, sizeof(CfgDev));
}
Мой Вам совет - откажитесь от этого дурацкого квалификатора. Он не стоит того, чтобы из-за него наживать такой геморрой.
Создайте нормальные функции чтения/записи ЕЕПРОМ и работайте с ними.
Создайте нормальные функции чтения/записи ЕЕПРОМ и работайте с ними.
- Сообщения: 16
- Зарегистрирован: Пт ноя 07, 2014 20:34:56
Подскажите, пожалуйста, cvavr v3 не понимает, когда я записываю букву в кавычках в переменную char. Судя по обучалкам на ранних версиях он воспринимал это как ascii код. Может есть какая настройка в его компиляторе, или как-то по другому надо записать, чтоб он работал как мне надо?
Может, для начала, покажите код и ругательство компилятора ?
Зы: А вообще, в кавычках пишется строка, а не символ.
Зы: А вообще, в кавычках пишется строка, а не символ.
символ в апострофах, в кавычках - строка.
'c' - символ
"c" - строка
'c' - символ
"c" - строка
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Неизвестно, кто тут более матери ценен - обучалки или ЦВ - однако, лишний раз подтверждает, что ЦВ одинаково непригоден и 'пироги печь', и 'сапоги тачать'. В дополнение к вышепосоветованному, предложу такое:gis писал(а):... букву в кавычках в переменную char. Судя по обучалкам на ранних версиях он воспринимал это как ascii код.
Код: Выделить всё
char *s="Строка, мля.", c;
c = *s;- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
А разве сработает? Указатель не выделяет себе память при создании. Лучше так
Код: Выделить всё
char str[]="Вот это строка", *p;
p=str;


