Перейти к содержанию

Demonrostov

Members
  • Постов

    149
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Ростов-на-Дону

Электроника

  • Стаж в электронике
    Более 20 лет

Посетители профиля

1 122 просмотра профиля

Достижения Demonrostov

Стажер

Стажер (3/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

5

Репутация

  1. Я тоже так пробовал))), причем ttt=0, но условие все равно выполняется согласно битам, то же самое и в протеусе происходит, значение в ttt не заносится, но условия согласно битам выполняются.
  2. Там в функции это проверяется и остальные цифры переносятся на следующую строчку. Я же говорю, функция вывода работает правильно. Этот код правильно отрабатывает и в массив залетает то что нужно. А этот, вот что в студии получается, ну и в железе тоже самое, в сам массив при проверке битов записываются нули. Причем первые два байта как вроде правильно считываются, а вот последний нет, точнее трабл с 15 бита начинается.
  3. void SSD1306_Print_text(char *text,uint8_t x, uint8_t y,uint8_t size)// saize=0 varx16, saize=1 varx16x24 { uint8_t W; switch(size) { case 0: while(*text) { W=Read_pgm_var(*text,0); if ((x+W)>SSD1306_LCDWIDTH)//следим за окончанием строки { x = 0;//0-63 y=y+2;if (y>SSD1306_LCDHEIGHT/8-1){y=y-SSD1306_LCDHEIGHT/8-1;}//0-3 следим за окончанием страниц } SSD1306_Print_(x,y,*text,size,W); text++; x=x+W; }break; case 1: while(*text) { W=16; if ((x+W)>SSD1306_LCDWIDTH)//следим за окончанием строки { x = 0;//0-63 y=y+3;if (y>SSD1306_LCDHEIGHT/8-1){y=y-SSD1306_LCDHEIGHT/8-1;}//0-7 следим за окончанием страниц } SSD1306_Print_(x,y,*text,size,W); text++; x=x+W; }break; } } Все верно, размер массива 25, последняя ячейка DATA_bin[24]=0, я ее и не трогаю. uint8_t x, uint8_t y координаты Я со синтаксисом в таких сложных оборотах плохо разбираюсь, как в голове складывается так и пишу))), если работает то ничтяк, нет пишу вам. Спасибо, попробую так.
  4. SSD1306_Print_text((char*)&DATA_bin[0],0,0,0);//передаем в функцию адрес первой ячейки массива и выводим символы, по достижению ячейки с /0 выходим из функции Шиворот, потому что проверку начинаем делать с младшего бита, а вывод в Print_text организован со старшего, ну по другому с первого([0]) байта массива ранее писал // потом DATA_bin выводим на экран итог b0000 0000 1111 1111 1111 1111, вот эта последовательность записывается в моем коде в Data_bin она же и выводится, здесь с самим выводом массива проблем нет. Вот куда девается старший 3-й байт?
  5. если int a, то 0-1=-1 Я вроде все написал, в самом первом посту, старший байт в массиве DATA_bin заполняется нулями (48)
  6. сделать int a и оставить самый первый вариант int8_t a; for (a=23; a>=0; a--) { DATA_bin[a] = (adc_value_1_sum & 1)? 49 : 48; adc_value_1_sum = adc_value_1_sum >> 1; }
  7. Ну тогда так adc_value_1_sum=8388607u; for (a=24; a>0; a--) { DATA_bin[a-1] = (adc_value_1_sum & 1)? 49 : 48; adc_value_1_sum = adc_value_1_sum >> 1; } 24-й байт массива должен быть = /0, признак конца строки.)))
  8. А как вы думаете что представляет для компилятора это число. Для компилятора , не знаю)). Для меня- сдвигаем влево 1 на "а" значений, ну либо установить бит "а" в 1. Ну и соответственно побитное & делаем, if(adc_value_1_sum & (1<<a)) если>0, значит тру.
  9. Привет знатокам). Пытаюсь вывести прочитанное 24 битное значение в двоичном коде, но столкнулся с тем, что старшие 8бит выводит нули. Не могу врубится почему, помогите разобраться! uint8_t a; uint32_t adc_value_1_sum; uint8_t DATA_bin[25]; adc_value_1_sum=8388607;//выводим условное число в виде двоичного кода, должно получится b0111 1111 1111 1111 1111 1111 for (a=0;a<24;a++) { if(adc_value_1_sum & (1<<a)) {DATA_bin[23-a]=49;}// если бит =1, пишем код числа"1"- 49 else {DATA_bin[23-a]=48;}// если бит !=1, пишем "0"- 48 } // потом DATA_bin выводим на экран итог b0000 0000 1111 1111 1111 1111 Как это исправить? AtmelStudio 6
  10. Я понимаю так, момент сравнения попадает под прерывание, с переносом данных трабл получается вот и результат. Если изменить время прерывания то и результат скорее всего будет другой(но это не точно). Я думал, что компилятор данные волатиле корректно обрабатывает, и всегда напрямую использовал эти переменные, на такое недоразумение ни разу не попадал.
  11. Вы лучше как правильно надо сделать напишите, а не удивляйтесь, это и я умею делать)
  12. Так я не додумался сделать)). Подтверждаю, работает)). Спасибо приму на вооружение!
  13. конечно, иначе ругаются)). В файле KEY.C volatile uint16_t timer_16; в файле KEY.h extern volatile uint16_t timer_16; ну и инклюдами все притянуто, тут же прикол другой, что сравнение в виде равно работает, а если больше, больше или равно нет. бес понятия, пишу только факты, ничего не придумываю, как некоторые думают)). Вчера весь вечер голову ломал, ответа явного не нашел, потому сюда написал. Рабочий варик кода я уже установил, так что пишем дальше
  14. Ну да,сидел такой, кого бы по троллить, решил на форум написать))). тогда прерывание не срабатывает, не успевает)), пробовал. Вот так работает)) timer1_init();timer_16=0; sei();//разрешить прерывания Set_KEY;//установка кнопок, активный 1 nach: if((timer_16==3000)){ if(KEY_()==power_key) {goto start;}} else {goto nach;} start: PWM_ON;// включаем питание
×
×
  • Создать...