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

Вывод на ЖКИ значений переменных.

Да это я Вас запутал, извините. Всё правильно там со сдвигом. Только при работе с портом надо учитывать особенность операций чтение-модификация-запись, а то иногда могут быть сюрпризы, связанные с чтением из порта не того, что туда записано.

 

А Вы не допускаете, что всё зависит от задачи? У ТС, например, совершенно правильно использован оператор присваивания =, а не |=, чтобы "горящий" светодиод двигался по линейке. И, например, для портов AT91SAM7S Ваша запись совершенно бессмысленная, ибо выполняет лишнюю работу по чтению порта :) А для АВРок при настройке оборудования я пользуюсь именно простым присваиванием, чтобы быть уверенным, что в порт попадёт нужное мне значение, а не значение OR неизвестно_что ;)

Да, верно, уже сам заметил. :rolleyes: Думал о другом и утратил внимательность...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде разобрались :rolleyes: И все-таки, что делать с предупреждением компилятора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

unsigned char array[10];

Компилятор выдает предупреждение pointer targets in passing argument 1 of 'sprintf' differ in signedness.

'может он хочет чтоб был просто char array[10]; ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста как правильно отображать переменные на lcd типа 1602. Конкретно надо данные с АЦП. Вот примерный урок тут printf и uart, но все равно не понятно как работает. Не понимаю как отображать переменные на экране, вроде как делить по разрядам 1000 100 10 1 (также как на 7сегментниках) затем прибавить 0х30 чтобы превратить в коды. Но чет на практике затык.

Также кусок кода из библиотеки которую приделал для вывода на lcd.

void lcd_out(char * txt) {
    while(*txt) {
        lcd_send(*txt,DATA);
        txt++;
    }
////////
lcd_out("Hello world");
////////

Контроллер STM32F100RB, coocox ide.

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вам понятен пример, который вы привели, тогда как функция printf знает в какой uart выводить символы? Как перенаправить ее вывод на другой uart?

 

Напишите сами свои функции вывода типа как у Чана http://elm-chan.org/fsw/strf/xprintf.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообщем частично разобрался. Функция

sprintf(buf, "%d", value);
вывод на дисплей переменной buf

работает. Также работает функция

snprintf(buf, buf_size, "%d", value);
hd44780_write_string(&lcd, buf);

взял из готовой библиотеки для hd44780.

но ни то ни то не работает вместе с ADC зависает отладчик на выполнение строчки snprintf именно тогда когда АЦП вместе с ДМА, когда просто

readADC1(u8 channel)
    {
      ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_1Cycles5);
      // Start the conversion
      ADC_SoftwareStartConvCmd(ADC1, ENABLE);
      // Wait until conversion completion
      while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
      // Get the conversion value
      return ADC_GetConversionValue(ADC1);
    }

то все показывает как надо.

 

(но при этом в коде с ДМА данные в буфер АЦП записываются корректно и отладчик не виснет)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...