Страница 80 из 386

Re: Вопросы по С/С++ (СИ)

Добавлено: Сб мар 24, 2012 14:34:11
DX168B
Походу разобрался сам. Так работает (через преобразование типов):

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

			unsigned int in = 2601;
			float flt =  0.0f;
			flt = static_cast<float>(in)*0.01f;
результат = 26,01

И обратное преобразование:

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

			unsigned int in = 0;
			float flt = 26.02f;
			in = static_cast<int>(flt/0.01f);
результат = 2602

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн мар 26, 2012 16:59:26
techlab
что-то я совсем запутался с указателями, после асма тяжко писать на С, но затягивает...
подскажите, как организовать функцию вывода строки на дисплей имея функцию вывода байта?

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн мар 26, 2012 17:12:30
vitalik_1984
А про стандартные функции ввода/вывода не слышали?Есть scanf()/printf().
Почитайте про них

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн мар 26, 2012 17:33:23
techlab
vitalik_1984 писал(а):А про стандартные функции ввода/вывода не слышали?Есть scanf()/printf().
Почитайте про них
каким образом я могу применить их для микроконтроллера?

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн мар 26, 2012 19:13:05
Мастер Ломастер
techlab писал(а):что-то я совсем запутался с указателями, после асма тяжко писать на С, но затягивает...
подскажите, как организовать функцию вывода строки на дисплей имея функцию вывода байта?

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

void put_char(char c); // это функция вывода символа

// а вот это функция, которую вы хотите - вывод строки
void put_str(char *str){
   while(*str) put_char(*str++);
}

Re: Вопросы по С/С++ (СИ)

Добавлено: Пн мар 26, 2012 19:49:56
techlab
спасибо, именно это я и имел ввиду, просто с указателями запутался что-то.

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 18:36:21
alexey6522
Может кто-нибудь помочь с прерываниями на меге128, вот кусок кода для приема информации для этого я использовал вектор USART0_RX_vect

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

ISR(USART0_RX_vect) //USART_RXC_vect, прием для Atmega128
{
   if (cnt == 0)
   {   
    RecendMas[cnt] = UDR0;
	cnt++;
   }
   if (cnt == bytes){ //Если все байты приняты установить cRx в 1
    cRx = 1; 	
  }
}
Cуществует еще вектор передачи информации USART0_TX_vect как им пользоваться? Пробовал так, ничего не получилось

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

ISR(USART0_TX_vect)
{
UDR0 = str;
}

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 19:19:35
vitalik_1984
что такое str в вашем коде?

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 19:39:21
alexey6522
это просто переменная, содержащая строку. Я уже разобрался почему у меня не получалось, забыл поставить флаг TXCIE - разрешение прерываний при пустоте буфера передачи и установке TXC.

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 19:56:45
AI_Disable
alexey6522 писал(а):переменная, содержащая строку.
O_o Wut?

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 21:37:42
Babulesnik
Доброго времени суток.У меня остро возник вопрос.Мне нужно сохранять данные при выключенном питании МК.Это счетчик баланса заброшенных денег.Где лучше хранить,в flash или eeprom ? или есть другой вариант.Если в флеш,то использовать PROGMEM/pgm_read_ для записи/чтения ??? Подскажите пожалуйста как правильно решить даную проблему.

Заранее благодарен,Дмитрий.

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 21:38:19
vitalik_1984
ПЕРЕМЕННАЯ СОДЕРЖАЩАЯ СТРОКУ
вы хотели сказать байт массива содержащего строку?
AI_Disable писал(а):O_o Wut?
Это что за слово может what?

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 22:21:40
Jack_A
Babulesnik писал(а):Где лучше хранить,в flash или eeprom ? или есть другой вариант.Если в флеш,то использовать PROGMEM/pgm_read_ для записи/чтения ??? Подскажите пожалуйста как правильно решить даную проблему.
Отлично, Сусанин, в болото их ! Какой МК хоть? AVR? PIC или вообще STM ?

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 22:27:47
Аlex
сохранять данные при выключенном питании МК
При выключенном МК данные нельзя никак сохранить - питания нет...

Re: Вопросы по С/С++ (СИ)

Добавлено: Ср мар 28, 2012 23:57:04
vitalik_1984
Аlex писал(а):При выключенном МК данные нельзя никак сохранить
Шутники :)
Я тоже заметил ошибку,но зачем же так подтрунивать то?
Babulesnik писал(а):Мне нужно сохранять данные при выключенном питании МК.Это счетчик баланса заброшенных денег.Где лучше хранить,в flash или eeprom ?
Читаем из даташита:
During periods of low V_CC, the EEPROM data can be corrupted because the supply voltage is
too low
for the CPU and the EEPROM to operate properly.
Отсюда делаем вывод, что детектировать пропажу питания нужно раньше, чем напряжение упадет ниже,чем допустимо для надежной работы EEPROM
Там еще написано про BOD почитайте может найдете нужную информацию.
Babulesnik писал(а):Если в флеш,то использовать PROGMEM/pgm_read_ для записи/чтения ???
Тут есть ремарочка аттрибут PROGMEM действует только на вашем компьютере,но не на контроллере.
Процедур записи интерактивно в PROGMEM в библиотеке я не нашел.Если только сами напишете(теоретически это возможно если контроллер содержит области памяти доступных для записи при чтении.)
задействовав
Read-While-Write Self-Programming mechanism
но опять же я не уверен, что получится это сделать интерактивно, тем более при угасающем питании :dont_know:
Babulesnik писал(а):или есть другой вариант.
1.другой вариант есть просто тупо записывать каждый акт пополнения в EEPROM и все.про CRC не забывая(это же деньги, а не мухи в котлетах)
2.Можно поставить батарейку- тогда точно все запишете и отправите спать контроллер.Зачем нам работать без сети...
3.Можно также подключить к проекту флеш карту и записывать на нее по интерфейсу спи.Примеры есть в интернете.
4.Любая комбинация из выше приведенных/неприведенных примеров.

Re: Вопросы по С/С++ (СИ)

Добавлено: Чт мар 29, 2012 00:01:46
Аlex
Я тоже заметил ошибку,но зачем же так подтрунивать то?
Какая же это ошибка ? :)
Мне нужно сохранять данные при выключенном питании МК
Чётко и внятно написано.
Может человек, действительно, хочет сохранять данные при выключеном питании МК :)

А вообще, подобные вопросы никак не относятся к Си. Ну никаким боком....

Re: Вопросы по С/С++ (СИ)

Добавлено: Чт мар 29, 2012 00:17:12
DX168B
Тогда пусть кондер и диод в питании МК использует. Где то я уже выкладывал схему. Может позже выложу, просто не с компа сейчас сижу. Суть была в том, что надо запитать МК через диод и между МК и диодом соединить электролит на минус питания МК. До диода можно подключить линию внешнего прерывания через делитель на резисторах. Внешнее прерывание настроить на реакцию по спаду уровня на нем. В обработчике прерывания выводим все линии I\O в Z-состояние и производим запись в EEPROM. Только необходимо включить фьюзами BOD-схему МК и кондер побольше емкостью. Не очень надежно это решение, но у меня уже как год исправно работает.
:)

Re: Вопросы по С/С++ (СИ)

Добавлено: Чт мар 29, 2012 00:20:00
Babulesnik
При выключенном МК данные нельзя никак сохранить - питания нет...
Извиняюсь,некорректно выразился.Я имел ввиду,что-бы при отключении питания данные хранились в памяти.При поступлении денег,каждый раз баланс должен сохраняться в память.

Все ответившим спасибо,но я так и не понял где именно хранить(флеш/епром) и как это реализовать програмно.

ЗЫ МК мега8

Re: Вопросы по С/С++ (СИ)

Добавлено: Чт мар 29, 2012 00:24:35
DX168B
Такие данные лучше хранить во внешних EEPROM. А во встроенной в мк EEPROM лучше хранить настройки девайса.

Re: Вопросы по С/С++ (СИ)

Добавлено: Чт мар 29, 2012 00:31:02
Babulesnik
DX168B писал(а):Такие данные лучше хранить во внешних EEPROM. А во встроенной в мк EEPROM лучше хранить настройки девайса.
Спасибо.А в флеш памяти можно хранить? Заранее извиняюсь за нубский вопрос.И если хранить в епроме,то можно пример кода С или подсказку,куда копать.По сути мне нужно хранить только одну переменную типа int.