Страница 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
}
Всё работало как часы :)

А что же мне всё таки с портом то сделать не реагирует :o совсем.

Добавлено: Вт июн 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 штук :) ) и какими программами при этом лучше пользоваться(для прошивки)!На сайте много информации по этому делу но ни в обучалке ни в статьях точного ответа не нашел!!Помогите кто знает