Мелкие вопросы по МК и ПЛИС.
- Сообщения: 5
- Зарегистрирован: Чт фев 03, 2011 21:20:18
Ещё такой вопрос. у меня на контроллере висит кварц 8Мгц. Смотрю по даташиту, что передача с наименьшей ошибкой при BaudRate = 250k. Но во всех терминалах в стандартном ряду BaudRates не конкретно такого значения, а только 256k. Как быть?
- Реклама
Кварц под нужную частоту поставить.
Не боды подгонять под кварц, а наоборот. Как все обычные люди.
Не боды подгонять под кварц, а наоборот. Как все обычные люди.
Docendo discimus
Возможно, слишком плавно напряжение проседает. Или не успевает просесть до лог. 0 до того как отрубается программатор.AVT-28 писал(а):я контролирую выводом RA5 питание общей шины до этого диода.
И как тока там 0, прога за эти 1 сек записывает установки аппарата.
Если в ручную выдергивать перемычку и создавать 0 на выводе, то все работает.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 209
- Зарегистрирован: Ср ноя 03, 2010 14:46:17
Подскажите пожалуйста, у ATtiny 2313V чтобы пользоваться портом А( он трехразрядный!!!) нужно какие-то особенные команды для настройки на ввод-вывод, или все теже, что и для полноразрядных порты? Вот так например правильно будет:
;-------------настройка портов
ldi temp, 0b00000111 ;
out DDRA, temp ;порт А на вывод
ldi temp, 0 ;
out DDRB, порт Б на ввод
out DDRD, порт Д на ввод
out PORTA, temp ;вывод в порт А лог. 0
ldi temp, $FF ;
out PORTB, temp ;включ. резисторы
out PORTD, temp ;---//---
;-------------настройка портов
ldi temp, 0b00000111 ;
out DDRA, temp ;порт А на вывод
ldi temp, 0 ;
out DDRB, порт Б на ввод
out DDRD, порт Д на ввод
out PORTA, temp ;вывод в порт А лог. 0
ldi temp, $FF ;
out PORTB, temp ;включ. резисторы
out PORTD, temp ;---//---
Лень - двигатель прогресса!
Код: Выделить всё
я контролирую выводом RA5 питание общей шины до этого диода.
И как тока там 0, прога за эти 1 сек записывает установки аппарата.
Если в ручную выдергивать перемычку и создавать 0 на выводе, то все работает.
2. Выключить бор.
- Реклама
подскажите пожалуйста, как сделать запись в двумерный массив в компиляторе winavr?
я думаю, как-то так. (но полюбому придется что-то допилить)
где - номера элемента массива и элемент для записи, соответственно
на сколько я далек от истины?
я думаю, как-то так. (но полюбому придется что-то допилить)
Код: Выделить всё
eeprom_write_byte(&date_mem[date_number][data_number], number);Код: Выделить всё
date_number, data_number, numberна сколько я далек от истины?
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
А 3 батарейки (SR626, например) от часов/калькуляторов поставить дозволяется?AVT-28 писал(а):Как заставить проработать 16f887 еще 1-2 секунды после отключения питания устройства?
Что делать в таких случаях?
Код: Выделить всё
Error [141] C:\osa\osa.c; 37.16 can't open include file "OSA.h": No such file or directoryСмотря какая нагрузка, а то и электролита хватит.Chettuser писал(а):А 3 батарейки (SR626, например) от часов/калькуляторов поставить дозволяется?AVT-28 писал(а):Как заставить проработать 16f887 еще 1-2 секунды после отключения питания устройства?
Искать файл "OSA.h" видимо...Chettuser писал(а):Что делать в таких случаях?Код: Выделить всё
Error [141] C:\osa\osa.c; 37.16 can't open include file "OSA.h": No such file or directory
Ничего особенного не нужно.Челюскин писал(а):Подскажите пожалуйста, у ATtiny 2313V чтобы пользоваться портом А( он трехразрядный!!!) нужно какие-то особенные команды для настройки на ввод-вывод, или все теже, что и для полноразрядных порты?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 3
- Зарегистрирован: Пт окт 14, 2011 09:38:22
кто-нибудь собирал это: http://cxem.net/mc/mc9.php
Меня интересует прошивка МК, ну или хотя бы помощь в разработке, потому как с автором этого устройства у меня связатся не получается
Меня интересует прошивка МК, ну или хотя бы помощь в разработке, потому как с автором этого устройства у меня связатся не получается
Не зная формата мелодии и протокола вписывания оной в мк, бяку придется делать с нуля.
Docendo discimus
Дык он в той же папке прячется...ploop писал(а):Искать файл "OSA.h" видимо...
Имя файла точно заглавными буквами написано? Расширение точно .h ?
Этот пост оказался полезен? Не поленись, нажми
слева!

Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
слева!Куплю индикаторы ИТС-1А, ИТС-1Б, ИГВ1-8х5Л, ИГПС1-222/7, ИГПС1-111/7 и подобные.
Без разницы - большими или маленькими, та же ошибка, на всякий случай исправил на маленькие. Точно osa.h.
Нужно ли подключать его в виде #include <osa.h>
Нужно ли подключать его в виде #include <osa.h>
- Сообщения: 378
- Зарегистрирован: Вс сен 11, 2011 12:35:11
Я немного не понял наверное. У меня RA5 настроен как цифровой вход, не как аналоговый. Как понять АЦП контролировать?urry писал(а):1.контролировать нужно ацп, а не просто 0-1. Запись в еепром при пониженном напряжении - не самый легкий способ, нужно пакет обязательно закрывать контрольной суммой и дублировать его.Код: Выделить всё
я контролирую выводом RA5 питание общей шины до этого диода. И как тока там 0, прога за эти 1 сек записывает установки аппарата. Если в ручную выдергивать перемычку и создавать 0 на выводе, то все работает.
2. Выключить бор.
Конденсатора сто пудово хватает на 3 сек до 2 вольт сажается.
До кондера и до диода падает мгновенно.
я через каждые 10 мс смотрю через ацп напряжение на конденсаторе до диода. Когда оно меньше порога, отключаю все нагрузки и веду запись.
Записываю 3 идентичных блока в еепром и каждый закрывается контрольной суммой.
при включении считаю контрольную сумму и если совпадает - результату верить
Еще - нагрузка кренки такой емкостью ведет к постепенному ее убиванию большим стартовым током (в момент включения). Нужно принимать определенные меры для защиты - скажем, резистор ом 10 последовательно с диодом.
Записываю 3 идентичных блока в еепром и каждый закрывается контрольной суммой.
при включении считаю контрольную сумму и если совпадает - результату верить
Еще - нагрузка кренки такой емкостью ведет к постепенному ее убиванию большим стартовым током (в момент включения). Нужно принимать определенные меры для защиты - скажем, резистор ом 10 последовательно с диодом.
Код: Выделить всё
extern gVarsSave_ gVarsSave;
#define EE_ADR0 10
#define EE_ADR1 40
#define EE_ADR2 70
#define TEST0 0
#define TEST1 1
#define TEST2 2
#define TEST_ALL ((1<<TEST0) + (1<<TEST1) + (1<<TEST2))
// прототипы функций
void fnEpReadArr(unsigned char cAdr);
void fnEpSaveArr(unsigned char cAdr);
//------------------------------------------------------------------
unsigned char fnCalcCrc (unsigned char *cArr, unsigned char cCount)
{
unsigned char i,data,crc,fb,st_byt;
st_byt=0;
crc=0;
do{
data=cArr[st_byt];
for (i=0;i<8;i++)// счетчик битов в байте
{
fb =crc ^ data;
fb&=1;
crc >>= 1;
data >>=1;
if (fb == 1)crc^=0x8c;// полином, dallas
}
st_byt++;
}while (st_byt != cCount);// счетчик байтов в массиве
return crc;
}
//---------------------------------------------------
void fnEepRead(void)
{
volatile unsigned char cAdr;
volatile unsigned char crcL,crcRez;
//---------------
crcRez=0;
// проверка 1 записи
cAdr=EE_ADR0;
fnEpReadArr(cAdr);
crcL=Read_b_eep(EE_ADR0+gVarMax);
if((fnCalcCrc (gVarsSave.cArr,gVarMax) == crcL))
{
BITSET(crcRez,TEST0);
}
// повторяем для всех трех записей
cAdr=EE_ADR1;
fnEpReadArr(cAdr);
crcL=Read_b_eep(EE_ADR1+gVarMax);
if((fnCalcCrc (gVarsSave.cArr,gVarMax) == crcL))
{
BITSET(crcRez,TEST1);
}
// повторяем для всех трех записей
cAdr=EE_ADR2;
fnEpReadArr(cAdr);
crcL=Read_b_eep(EE_ADR2+gVarMax);
if((fnCalcCrc (gVarsSave.cArr,gVarMax) == crcL))
{
BITSET(crcRez,TEST2);
}
if(!crcRez)
{
gVarsSave.Var.lSoftMax=lSoftMaxDef;
gVarsSave.Var.lHardMax=lHardMaxDef;
gVarsSave.Var.TmSoftMax=TmSoftMaxDef;
gVarsSave.Var.TmHardMax=TmHardMaxDef;
gVarsSave.Var.lCurSoft=lCurSoftDef;
gVarsSave.Var.lCurHard=lCurHardDef;
gVarsSave.Var.lCap=lCapDef;
fnEepSave();
}
if(crcRez == TEST_ALL){return;}// все хорошо считалось, переписывать не нужно
else
{
if(BITTST1(crcRez,TEST0))
{
cAdr=EE_ADR0;
fnEpReadArr(cAdr);
fnEepSave();
return;
}
if(BITTST1(crcRez,TEST1))
{
cAdr=EE_ADR1;
fnEpReadArr(cAdr);
fnEepSave();
return;
}
if(BITTST1(crcRez,TEST2))
{
cAdr=EE_ADR2;
fnEpReadArr(cAdr);
fnEepSave();
return;
}
}
}
//-------------------------------------------------
void fnEpReadArr(unsigned char cAdr)
{
unsigned char i;
for(i=0;i<gVarMax;i++)
{
gVarsSave.cArr[i]=Read_b_eep(cAdr+i);
}
}
//--------------------------------------
void fnEpSaveArr(unsigned char cAdr)
{
char crc;
unsigned char i;
for(i=0;i<gVarMax;i++)
{
Write_b_eep(cAdr+i, gVarsSave.cArr[i]);
}
crc=fnCalcCrc (gVarsSave.cArr,gVarMax);
Write_b_eep(cAdr+gVarMax, crc);
}
//----------------------------------------
void fnEepSave(void)
{
unsigned char cAdr;
cAdr=EE_ADR0;
fnEpSaveArr(cAdr);
cAdr=EE_ADR1;
fnEpSaveArr(cAdr);
cAdr=EE_ADR2;
fnEpSaveArr(cAdr);
}
//----------------------------------------
В инструкции указано, что OSA не будет работать с ПРО-версиями компилятора (не важно, в PRO-mode или в STD-mode)Chettuser писал(а):Осваиваю OSA для PIC'ов.
...
ЗЫ: Ах да! Компилятор у меня PRO mode. А в инструкции чтото писалось про STD.
Эти требования выполнены? (особенно п.4)Chettuser писал(а):Без разницы - большими или маленькими, та же ошибка, на всякий случай исправил на маленькие. Точно osa.h.
Нужно ли подключать его в виде #include <osa.h>
кто знает наверняка у PIC16F874 ROM=4 килобайта или килослова ??? 
Tell Me The Truth


