Страница 258 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 18:08:34
BerZerK-ku
demiurg301 писал(а):Народ посоветуйте AVRку c 3мя UARTами :)) Мож есть какая?
А не проще было заглянуть на сайт atmel.com?
ATmega640/1280/2560

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 18:49:52
TRIOD
А какие мелкосхемы флэш пямяти с интерфейсрм I2C есть акромя 24CXXX.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 18:53:17
МитяРа
TRIOD писал(а):акромя 24CXXX.
24-я серия это и есть с шиной I2C..

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 19:10:09
TRIOD
Я имею ввиду маркировка других производителей.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 19:12:53
МитяРа
TRIOD писал(а):маркировка других производителей.
Маркировка та-же, только перед 24 буквы другие..

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 19:20:28
Gudd-Head
BerZerK-ku писал(а):
demiurg301 писал(а):Народ посоветуйте AVRку c 3мя UARTами :)) Мож есть какая?
А не проще было заглянуть на сайт atmel.com? ATmega640/1280/2560
Плюс почти каждая Xmega:
http://www.efo.ru/components/atmel/tables/avr.htm
TRIOD писал(а):Да купилбы 5-ти вольтовую да нетути.
Бред какой-то. Не верю что в Нерезиновске нет 5-ти вольтовой памяти.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Ср ноя 30, 2011 22:49:45
RadTechNo
Ребят! Изучаю сейчас PIC МК и никак не пойму следующее:
1)Почему частота тактирования в 4 раза меньше частоты генератора? Препод объяснял, что мол за первый такт идет чтение первой команды, потом одновременно идет выполнение первой команды и чтение второй команды, а потом выполнение второй команды.
Вот так ведь чтение и выполнение одной команды выполняется за 2 такта =>и делить нужно на два!
2)Чем отличаются регистры TRIS, LAT и PORT?
Если я правильно понял мануал, то TRIS - позволяет програмно установить, будет ли работать порт на вход или на выход.
PORT позволяет установить вход/выход, но уже физически, т.е надо смотреть какой сигнал в данный момент на ножке МК.
С LAT'Ом не понял...сказано, что выполняет функцию "защелки"...что это значит?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт дек 01, 2011 05:35:26
Chettuser
2) TRIS - установка направления порта: ВХОД-ВЫХОД.
LAT - защёлка для выставления "1" или "0" на выход.
PORT - чтение порта "1" или "0"

2-е последние были специально предусмотрены с целью минимизации ошибок при работе с портами, чтобы не было модификации его состояния.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт дек 01, 2011 07:30:37
КРАМ
1. Для выполнения отдельной команды в МК необходимо проделать НЕСКОЛЬКО ПОСЛЕДОВАТЕЛЬНЫХ действий:
- чтение и дешифрация команды из программной памяти
- чтение операндов из ОЗУ
- исполнение команды в АЛУ
- запись результата в ОЗУ
Для команд с переходами еще кроме всего необходимо записать в счетчик команд адрес перехода.
Чтобы сделать все это ПОСЛЕДОВАТЕЛЬНО, необходимо ТАКТИРОВАНИЕ. И это тактирование должно быть более быстрым, чем машинный цикл.
В разных архитектурах тактирование внутри команды делают по разному. В ПИКах для этого применяют сам осциллятор МК, а машинные циклы образуются путем деления этой частоты на 4 (или на 2 в 16-разрядных ПИКах). Цифра четыре происходит от количества необходимых для исполнения одной команды тактов (речь тут о командах в один машинный цикл).
Для повышения тактовой частоты МК применять высокочастные кварцы не слишком удобно, поэтому в МК может присутствовать умножение частоты кварца для повышения частоты тактирования (коэффициент умножения может быть разный, даже дробный). Либо применение внутреннего генератора для тактирования внутри команды. Все это не так уж важно...
Все равно все сводится к производительности МК выраженной в мипсах (MIPS - million instructions per second - миллионах инструкций в секунду). А какой для этого нужен кварц - не имеет никакого значения.
2. Защелка LAT.
В простейшем варианте этой защелки нет. На выходе имеется обычный триггер с выходом, подключенным прямо к пину контроллера. В этот триггер записываются выходные состояния этого пина (разряда порта). К этому же пину ПОСТОЯННО подключена ВХОДНАЯ логика этого разряда порта.
В архитектуре Мк и вообще вычислительных машин не предусмотрена адресация ОТДЕЛЬНОГО разряда регистра или порта. Дешифраторы адреса построены только по байтному формату. Соответственно и адрес в команде адресует минимум 1 байт. Для выполнения БИТНЫХ команд приходится сначала прочитать весь байт, а затем проделать операцию над ОТДЕЛЬНЫМ битом. Результат будет записан опять в виде ЦЕЛОГО БАЙТА. Т.е. на самом деле в битных командах происходит действие над ПОЛНЫМ БАЙТОМ.
В этих условиях при команде изменения отдельного бита порта будет прочтен выход триггеров порта, а как уже ранее писалось, это одновременно и вход. И если на НЕИЗМЕНЯЕМЫХ в данной команде разрядах по каким то аппаратным причинам на пине окажется отличный от состояния триггера уровень, то он будет перепесан в этот триггер после этой команды. Модифицируемый разряд окажется верным, а этот, у которого вход отличался от состояния выходного триггера окажется записанным несанкционировано (неверно).
Эта процедура называется RMW (read-modification-write) чтение-модификация-запись.
Чтобы избежать такого бага применяют как программные способы с потерей производительности, так и аппаратные. Аппаратным способом и является создание специальной защелки LAT, выход которой НЕ ПОДКЛЮЧЕН к выходному пину и при командах модификации состояние порта читается НЕ С ВЫХОДНЫХ ПИНОВ, А С ЭТОЙ ЗАЩЕЛКИ.
Таким образом есть ДВА регистра у каждого порта в контроллере: PORT - входной регистр(запись в него на самом деле производит запись в LAT), LAT - выходной регистр. TRIS - отключает выходной буфер выходного регистра порта, чтобы не влиять на входные линии этого же порта и сделать этот разряд ТОЛЬКО ВХОДОМ.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Чт дек 01, 2011 22:04:29
igorka
Ребят,привет.Выложите пожалуста печатку STK200 которая помещается в LPT вилки(можно под SMD,без разницы).Спасибо.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:27:18
vbif87
Добрый вечер! Подключил датчик DS18B20, индикатор пишет "датчик ds18b20 отсутствует".
Датчик подключен к порту PC0. Vdd и DQ через резистор 5,6к.
Где искать косяк? Датчик новый. МК Mega8535, внутр. частота 1 Мгц, внешних кварцев не вешал, фьюзы не трогал.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:29:21
МитяРа
vbif87 писал(а):Vdd и DQ через резистор 5,6к.
Ты и питание через резистор подключил?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:35:55
vbif87
Питание подаю то же, что и на микроконтроллер, резистр только между + и DQ

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:39:38
МитяРа
Вывод GND, тоже подключил?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:42:00
vbif87
подключил так: + к + питания, GND к общему, DQ к порту PC0.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:43:05
МитяРа
А обмен на РС0 идёт, хоть какой нить?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:43:11
vbif87
если можно выложить код, выложу.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:44:05
vbif87
а как проверить обмен?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 18:57:26
МитяРа
vbif87 писал(а):а как проверить обмен?
Осциллографом или тестером, да хоть светодиодом с резистором..
Если яркость будет меняться - обмен какой-то идёт..

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пт дек 02, 2011 19:06:21
vbif87
спасибо, попозже проверю.
а в коде ошибки нет, может намутил с портами:
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#include <lcd.h>
#asm
.equ __lcd_port=0x12; PORTD
#endasm
#include <ds18b20.h>
#asm
.equ __w1_port=0x15; PORTC
.equ __w1_bit=0
#endasm

int temper; //Переменая для хранения значения температуры
unsigned char lcdBuff[16]; //Массив для хранения фоматированной строки

#pragma rl+
char *str1="найден датчик ds18b20";
char *str2="датчик ds18b20 отсутствует";
#pragma rl-

void main( void )
{
lcd_init( 16 );
lcd_clear( );

if( ds18b20_init( 0, 30, 60, DS18B20_12BIT_RES ) ) //инициализация датчика. Анализ присутствия датчика
{
lcd_clear( ); lcd_puts( str1 ); delay_ms( 1000 );

while( 1 ){

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 ); }

}else{ lcd_clear( ); lcd_puts( str2 ); }
}