Страница 11 из 628
Добавлено: Ср июн 20, 2007 11:23:20
SfS
Vertel писал(а):Привет. Помогите разобраться, что означает данная строчка:
sprintf(lcd_buffer,"%d", x);
lcd_clear();
lcd_puts(lcd_buffer);
В принципе не понятно "%d", как, например, вывести на ЖК две переменные в первой и второй строке дисплея?
1. Мануалы по stdlib читать надо. В частности man sprintf:
Функция int sprintf(char *str, const char *format, ...); выводит данные ТОЧНО ТАК ЖЕ КАК И printf(), НО не в файл или порт, а в строку str;
То есть, гдето в программе есть определение массива символов lcd_buffer:
Код: Выделить всё
char lcd_buffer[0x20]; // 0x20 - размер буфера, от фонаря...
sprintf(lcd_buffer,"%d", x); // Печатаем число в строку lcd_buffer
// lcd_buffer - теперь содержит ASCIIZ-строку, то есть обычный набор символов, завершающуюся нулём.
lcd_clear(); // Насколько можно понять - очистка некоего индикатора.
lcd_puts(lcd_buffer); // Насколько можно понять - вывод этой строки на индикатор.
Добавлено: Чт июн 21, 2007 19:24:36
demxp
Мне случайно попался в руки МК типа AT89S8252-24PI - был в плате вместе с кварцем на 12.000. Можно ли его как-нибудь приспособить для использования в качестве жертвы при прочитывании Обучалки?
Добавлено: Чт июн 21, 2007 20:19:35
Aheir
Почему бы и нет?
Главное внимательно переносить на него код из обучалки и отслеживать все сделанные в нем изменения. Так даже эффективней будет - точно будете знать что и для чего сделали...
Так что - вперед!

Добавлено: Сб июн 23, 2007 13:14:18
demxp
Спасибо, Aheir, прочитал твой ответ и со всем пылом юности кинулся писать программу на основе Обучалки. На первой же строке решил проверить а файла 8252def.inc нет в помине! Перерыл кучу сайтов а так нигде и не нашел...

А без заголовочного файла все становится...
Потом решил и купил ATmegu8L с ней, надеюсь, будет попроще...
Добавлено: Пн июн 25, 2007 18:18:14
Tohey
А юзал кто часовой таймер в меге8 например? Как подключить внутренние кондеры к ногам TOSC1 TOSK2? Кварц я подключил, всё работает, но слышал что нужно ещё концеры подключать... Или я ошибаюсь?
Добавлено: Пн июн 25, 2007 19:58:11
moLCHec
Я юзал на 16-й меге кондёры подключаются установкой соответствующих битов надо смотреть доку. А на 8-й меге TOSC1 TOSK2 совпадают с выводами кварца т.е. сам контроллер получается должен работать от внутреннего генератора иначе 32кГц будет основной частотой процессора.
Добавлено: Пн июн 25, 2007 20:01:58
moLCHec
Уже второй час бьюсь не могу сообразить у Меги 64 порт F не выводит и всё, фьюз JTAGEN установил в 1, АЦП отключил, короче всё что можно сделал нифига. порты A C D E работают остальные пока не проверял. Работу с внешним ОЗУ и т.п. отключил.
Добавлено: Пн июн 25, 2007 20:49:32
tych
Код то какой ?
Добавлено: Пн июн 25, 2007 23:41:07
Tohey
moLCHec, да так и есть, использую внутренний rc генератор, а таймер от кварца 32кгЦ. Помоему нашел, нужно установить фуз scopt, завтра попробую. Только не понял, почему не рекомендуется внешний источник тактирования - "Applying an external clock source to TOSC1 is not recommended". Выше ведь пишут что этот таймер оптимизирован для внешнего кварца 32кгц

Добавлено: Пн июн 25, 2007 23:52:42
tych
Не рекомендуют такт из вне подавать.
Добавлено: Вт июн 26, 2007 09:03:59
moLCHec
Tohey фьюз CKOP отвечает не за то, прочитал кондёры подключают если у тебя часовой кварц как основной т.е. когда он подключен к XTAL1 XTAL2. Нашёл как я на 16-й меге делал инициализацию таймера
void timer2_init(void)
{
ASSR = 0x08; //set async mode
TCNT2 = 0xE0; //setup
TCCR2 = 0x07; //start
}
Всё работало как часы
А что же мне всё таки с портом то сделать не реагирует
совсем.
Добавлено: Вт июн 26, 2007 17:02:01
Tohey
Я также делал, ток не подгонял TCNT(TCNT=0). С какой частотой он у тебя тикал? Я делю на 128 и получаю 1-секундные прерывания, но когда сверяю по windows-часам, то немного расходятся... Наверно надо подгонять TCNT.
з.ы. Может у тебя просто порт згорел?
Добавлено: Вт июн 26, 2007 17:42:09
moLCHec
Я делал на 2 Гц, т.е. 500 мс. Может и сгорел. Я об этом подумываю. Просто не верится что такое бывает. Остальные порты проверил все работают. PORTA PORTB PORTC PORTD PORTE PORTG все кроме PORTF
Добавлено: Сб июл 21, 2007 11:37:13
механик
Скажите, как можно написать команды для таймера и счетчика вместе.
Например, завершается минута и тут надо, чтоб таймер и счетчик заново начали работать
Типа таково
Добавлено: Сб июл 21, 2007 12:18:49
Tohey
если я правильно понял вопрос - обнули счетчик.
Добавлено: Сб июл 21, 2007 12:59:24
механик
да
Добавлено: Ср авг 01, 2007 13:50:45
Fighter
Делаю девайс на at89s8252 контроллере у которого на вход p3.2 (он же INT0) поступают импульсы различной длительности и нужно програмно подсчитать длительность импульсов. Видел на atmege на C процедуру обработки прерывания INT0 которая срабатывает по фронту импульса и по спаду, но вот не могу понять в 51 семействе такое было? и если было, то как это выглядит на ассемблере? (нужно по фронту запустить таймер, а по спаду остановить и считать сколько прошло времени)
вот С-шная процедура которая отрабатывает по фронту и спаду? но для atmega16:
#pragma vector = INT1_vect
__interrupt void MY_INT1 (void)
{
if ((MCUCR & Bit(ISC10)) != 0)
{ TCCR1B = Bit(CS11);
MCUCR &= ~Bit(ISC10);
}
else { TCCR1B = 0;
MCUCR |= Bit(ISC10);
//тут выполняем различные действия
} }
Добавлено: Ср авг 01, 2007 22:57:13
Tohey
Для спидометра писал такое, но на асме...
Добавлено: Чт авг 02, 2007 07:41:56
Fighter
Вопрос снимается, как говорится, RTFM.
таймер можно запускать высоким уровнем на INT(0,1) и остановит он счет когда импульс кончится.... а это именно то что мне нужно
Добавлено: Вс авг 12, 2007 18:36:02
Степаныч
Добрый день господа!У меня как у новичка в программировании микроконтроллеров возник вопрос: какой программатор лучше собрать и пользоваться особенно для ATTiny 2313 20PU(намутил аж 6 штук

) и какими программами при этом лучше пользоваться(для прошивки)!На сайте много информации по этому делу но ни в обучалке ни в статьях точного ответа не нашел!!Помогите кто знает