[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Ребят! Изучаю сейчас PIC МК и никак не пойму следующее: 1)Почему частота тактирования в 4 раза меньше частоты генератора? Препод объяснял, что мол за первый такт идет чтение первой команды, потом одновременно идет выполнение первой команды и чтение второй команды, а потом выполнение второй команды. Вот так ведь чтение и выполнение одной команды выполняется за 2 такта =>и делить нужно на два! 2)Чем отличаются регистры TRIS, LAT и PORT? Если я правильно понял мануал, то TRIS - позволяет програмно установить, будет ли работать порт на вход или на выход. PORT позволяет установить вход/выход, но уже физически, т.е надо смотреть какой сигнал в данный момент на ножке МК. С LAT'Ом не понял...сказано, что выполняет функцию "защелки"...что это значит?
1. Для выполнения отдельной команды в МК необходимо проделать НЕСКОЛЬКО ПОСЛЕДОВАТЕЛЬНЫХ действий: - чтение и дешифрация команды из программной памяти - чтение операндов из ОЗУ - исполнение команды в АЛУ - запись результата в ОЗУ Для команд с переходами еще кроме всего необходимо записать в счетчик команд адрес перехода. Чтобы сделать все это ПОСЛЕДОВАТЕЛЬНО, необходимо ТАКТИРОВАНИЕ. И это тактирование должно быть более быстрым, чем машинный цикл. В разных архитектурах тактирование внутри команды делают по разному. В ПИКах для этого применяют сам осциллятор МК, а машинные циклы образуются путем деления этой частоты на 4 (или на 2 в 16-разрядных ПИКах). Цифра четыре происходит от количества необходимых для исполнения одной команды тактов (речь тут о командах в один машинный цикл). Для повышения тактовой частоты МК применять высокочастные кварцы не слишком удобно, поэтому в МК может присутствовать умножение частоты кварца для повышения частоты тактирования (коэффициент умножения может быть разный, даже дробный). Либо применение внутреннего генератора для тактирования внутри команды. Все это не так уж важно... Все равно все сводится к производительности МК выраженной в мипсах (MIPS - million instructions per second - миллионах инструкций в секунду). А какой для этого нужен кварц - не имеет никакого значения. 2. Защелка LAT. В простейшем варианте этой защелки нет. На выходе имеется обычный триггер с выходом, подключенным прямо к пину контроллера. В этот триггер записываются выходные состояния этого пина (разряда порта). К этому же пину ПОСТОЯННО подключена ВХОДНАЯ логика этого разряда порта. В архитектуре Мк и вообще вычислительных машин не предусмотрена адресация ОТДЕЛЬНОГО разряда регистра или порта. Дешифраторы адреса построены только по байтному формату. Соответственно и адрес в команде адресует минимум 1 байт. Для выполнения БИТНЫХ команд приходится сначала прочитать весь байт, а затем проделать операцию над ОТДЕЛЬНЫМ битом. Результат будет записан опять в виде ЦЕЛОГО БАЙТА. Т.е. на самом деле в битных командах происходит действие над ПОЛНЫМ БАЙТОМ. В этих условиях при команде изменения отдельного бита порта будет прочтен выход триггеров порта, а как уже ранее писалось, это одновременно и вход. И если на НЕИЗМЕНЯЕМЫХ в данной команде разрядах по каким то аппаратным причинам на пине окажется отличный от состояния триггера уровень, то он будет перепесан в этот триггер после этой команды. Модифицируемый разряд окажется верным, а этот, у которого вход отличался от состояния выходного триггера окажется записанным несанкционировано (неверно). Эта процедура называется RMW (read-modification-write) чтение-модификация-запись. Чтобы избежать такого бага применяют как программные способы с потерей производительности, так и аппаратные. Аппаратным способом и является создание специальной защелки LAT, выход которой НЕ ПОДКЛЮЧЕН к выходному пину и при командах модификации состояние порта читается НЕ С ВЫХОДНЫХ ПИНОВ, А С ЭТОЙ ЗАЩЕЛКИ. Таким образом есть ДВА регистра у каждого порта в контроллере: PORT - входной регистр(запись в него на самом деле производит запись в LAT), LAT - выходной регистр. TRIS - отключает выходной буфер выходного регистра порта, чтобы не влиять на входные линии этого же порта и сделать этот разряд ТОЛЬКО ВХОДОМ.
Добрый вечер! Подключил датчик DS18B20, индикатор пишет "датчик ds18b20 отсутствует". Датчик подключен к порту PC0. Vdd и DQ через резистор 5,6к. Где искать косяк? Датчик новый. МК Mega8535, внутр. частота 1 Мгц, внешних кварцев не вешал, фьюзы не трогал.
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Осциллографом или тестером, да хоть светодиодом с резистором.. Если яркость будет меняться - обмен какой-то идёт..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
temper=ds18b20_temperature( 0 ); //Чтение температуры, адрес нуль delay_ms( 30 );
//Анализ на отрицательную температуру
if( temper>1000 ) { temper=4096-temper; temper=-temper; } //если переменая temper больше 1000 //То вычитаем от 4096 значение //переменой temper и далее //присваиваем ей знак минус
if( temper>60 ) { /* какая-либо функция, например alarm ( ); */ } //Аварийное состояние считанной температуры sprintf( lcdBuff,"t %u\xdfC", temper ); //помещаем форматированую строку в массив
//выводим на индикатор значение температуры lcd_clear( ); lcd_gotoxy( 0,0 ); lcd_puts( lcdBuff ); }