Страница 237 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 11:53:18
Gmp
Есть. Но нет ограничений на 8-разрядный адрес.
у меня тогда такой вопрос, кто или что, устанавливает разрядность адреса?
не пойму как цитаты вставлять правильно..
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 12:16:50
Gmp
Gudd-Head писал(а):Gmp писал(а):так а сколько же?
2 байта. Просто старший байт адреса ОЗУ полагается равным нулю.
правильно ли я понимаю:
1. адреса регистровой памяти записываются числом в 1 байт- с размером информации по каждому адресу в 1 байт
2. адреса SRAM - 2 байта, с размером информации по каждому адресу в 1 байт
3. FLASH- ячейки адресов не имеют, но в каждую из них нужно записать 2 байта информации.. или имеют адреса?
4. EEPROM - аналогично FLASH?
простите за терминалогию
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 12:30:07
GP1
Gmp писал(а):Gudd-Head писал(а):
2 байта. Просто старший байт адреса ОЗУ полагается равным нулю.
правильно ли я понимаю:
1. адреса регистровой памяти записываются числом в 1 байт- с размером информации по каждому адресу в 1 байт
2. адреса SRAM - 2 байта, с размером информации по каждому адресу в 1 байт
3. FLASH- ячейки адресов не имеют, но в каждую из них нужно записать 2 байта информации.. или имеют адреса?
4. EEPROM - аналогично FLASH?
простите за терминалогию
1. так и есть
2. если SRAM превышает 256 байт, как в старших моделях
3. FLASH имеют словную (2 байта) адресацию, команды занимают минимум 1 слово
4. аналогично SRAM
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 12:47:19
Gmp
спасибо за ответы
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 19:01:01
Челюскин
Нет, в отладчике не пробовал. на макетке проще - схема не велика. может кто-нить поможет все таки?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 19:05:58
zvykov
Привет всем!!!!!!Назрел такой вопросец: сколько виртуальных шин i2c можно организовать в мк, и можно ли вовсе это сделать, знаю, что если есть аппаратная шина i2c можно сделать еще одну виртуальную, дак вот вопрос можно ли более одной виртуальной шины организовать. Просто есть 4 микрухи с одинаковыми адресами (адрес не меняется), но писать в них надо не одновременно. можно использовать и коммутатор шин, но хотелось бы все же задействовать ноги мк, а не приделывать левые микрухи. Подскажите кто чего думает, контроллер еще не выбран, так что можете чего посоветовать, если это можно вообще реализовать, Заранее благодарен.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 19:18:32
Мастер Ломастер
программно можно реализовать сколько угодно шин I2C - на сколько ног МК хватит.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 19:35:06
zvykov
а это сильно усложнит код программы??? и еще можно ли будет иметь функцию одновременной записи данных во все микрухи, или если они будут на разных шинах то писать в них одновременно нельзя, сильно прошу не пинать за вопросы, еще только учусь программированию.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Пн окт 17, 2011 22:22:27
просто КОТ
Собрал програматор, а КониПрог его не видит. Всё проерил, перепаял, просмотрел, обдумал, третий раз пробую -- ничего!!!!!!!!!
Что мне делать?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 18, 2011 20:53:44
Челюскин
Подскажите пожалуйста, как сделать генератор импульсов на микроконтр., чтобы заданное число импульсов выдавал, например при подсоединении к нему клавиатуры и нажатии на соотв. кнопку.. вникаю в таймеры - ниче пока не понимаю, с чего начинать, куда смотреть?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вт окт 18, 2011 23:17:55
ploop
zvykov писал(а):а это сильно усложнит код программы??? и еще можно ли будет иметь функцию одновременной записи данных во все микрухи, или если они будут на разных шинах то писать в них одновременно нельзя, сильно прошу не пинать за вопросы, еще только учусь программированию.
Да как хочешь, так и делай. Хочешь одновременно, хочешь - последовательно. А усложнит или нет - реализуй один программный канал, и сам поймёшь

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 08:56:36
Леонид Иванович
zvykov писал(а):а это сильно усложнит код программы?
Программный порт I2C выглядит примерно так:
Код: Выделить всё
//------------------------------ Константы: ----------------------------------
#define I2C_QP_DELAY 2.5 //I2C quarter period delay 2.5 us
#define I2C_HP_DELAY 5.0 //I2C half period delay 5 us
//--------------------- Генерация условия "Старт": ---------------------------
void I2C_Start(void)
{
Port_SDA_0; //force SDA low
Delay_us(I2C_QP_DELAY); //quarter period delay
}
//----------------------- Передача байта по I2C: -----------------------------
bool I2C_Wr(char b)
{
bool ask = 0;
for(char i = 0; i < 8; i++)
{
Port_SCL_0; //force SCL low
if(b & 0x80)
Port_SDA_Z; //release SDA
else Port_SDA_0; //force SDA low
b = b << 1;
Delay_us(I2C_HP_DELAY); //half period delay
Port_SCL_1; //release SCL
Delay_us(I2C_HP_DELAY); //half period delay
}
Port_SCL_0; //force SCL low
__delay_cycles(2); //delay
Port_SDA_Z; //release SDA
Delay_us(I2C_HP_DELAY); //half period delay
Port_SCL_1; //release SCL
Delay_us(I2C_HP_DELAY); //half period delay
if(!Pin_SDA) ask = 1; //receive ASK
Delay_us(I2C_HP_DELAY); //half period delay
return(ask);
}
//-------------------- Чтение байта данных по I2C + ACK: ---------------------
char I2C_RdAck(void)
{
char data;
for(char i = 0; i < 8; i++)
{
Port_SCL_0; //force SCL low
__delay_cycles(2); //delay
Port_SDA_Z; //release SDA
Delay_us(I2C_HP_DELAY); //half period delay
Port_SCL_1; //release SCL
Delay_us(I2C_HP_DELAY); //half period delay
data = data << 1; //shift data
if(Pin_SDA) data |= 0x01; //input data bit
}
Port_SCL_0; //force SCL low
__delay_cycles(2); //delay
Port_SDA_0; //force SDA low (ASK=0)
Delay_us(I2C_QP_DELAY); //quarter period delay
Port_SCL_1; //release SCL
Delay_us(I2C_HP_DELAY); //half period delay
return(data);
}
//-------------------- Чтение байта данных по I2C + NAK: ---------------------
char I2C_RdNak(void)
{
char data;
for(char i = 0; i < 8; i++)
{
Port_SCL_0; //force SCL low
__delay_cycles(2); //delay
Port_SDA_Z; //release SDA
Delay_us(I2C_HP_DELAY); //half period delay
Port_SCL_1; //release SCL
Delay_us(I2C_HP_DELAY); //half period delay
data = data << 1; //shift data
if(Pin_SDA) data |= 0x01; //input data bit
}
Port_SCL_0; //force SCL low
Delay_us(I2C_HP_DELAY); //half period delay
Port_SCL_1; //release SCL
Delay_us(I2C_HP_DELAY); //half period delay
return(data);
}
//------------------------ Генерация условия "Стоп": -------------------------
void I2C_Stop(void)
{
Port_SCL_0; //force SCL low
__delay_cycles(2); //delay
Port_SDA_0; //force SDA low
Delay_us(I2C_HP_DELAY); //half period delay
Port_SCL_1; //release SCL
Delay_us(I2C_QP_DELAY); //quarter period delay
Port_SDA_Z; //release SDA
Delay_us(I2C_HP_DELAY); //half period delay
}
//----------------------------------------------------------------------------
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 11:52:11
К@Т
Добрый день коты и кошечки.Начал изучать си,в мплаб впихнул компилятор без оганичения кода и получил следующую картину

Что я не так сделал?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 12:03:22
ploop
Ничегонеработает писал(а):zvykov писал(а):а это сильно усложнит код программы?
Программный порт I2C выглядит примерно так:
Вот так на ассемблере (тут пример для DS1307, но работа практически полная - чтение/запись):
Код: Выделить всё
;=========================
; Работа с IIC
;=========================
iic_10clock: ; даёт 10 тактовых импульсов на линию
ldi rx1,10 ; для приведения в чувства slave'а
iic_10_1: ; после перезагрузки или подачи питания
pull_scl
rcall iic_delay
release_scl
dec rx1
brne iic_10_1
ret
;-------------------------------------------------------------------------------
iic_full_reset:
ldi XH,high(clock_buf) ; полный сброс часов
ldi XL,low(clock_buf)
ldi rx1,7
full_res1:
st X+,null
dec rx1
brne full_res1
rcall transmit_iic
rjmp reset
ret
;-------------------------------------------------------------------------------
iic_test_sda: ; проверка занятости SDA
clt ; устанавливает флаг Т если линия занята
sbis sda_pin,sda_bit
set
ret
;-------------------------------------------------------------------------------
iic_test_scl: ; проверка занятости SCL
clt ; устанавливает флаг Т если линия занята
sbis scl_pin,scl_bit
set
ret
;-------------------------------------------------------------------------------
iic_test2line: ; проверка занятости двух линий
rcall iic_test_sda ; если хоть одна занята, ставится флаг T
brtc iic_test2line0
ret
iic_test2line0:
rcall iic_test_scl
ret
;-------------------------------------------------------------------------------
iic_delay: ; простая задержка
ldi del,delay
i2c_delay0:
dec del
brne i2c_delay0
ret
;-------------------------------------------------------------------------------
iic_start: ; даёт на линию команду start
pull_sda
rcall iic_delay
pull_scl
rcall iic_delay
release_sda
ret
;-------------------------------------------------------------------------------
iic_stop: ; даёт на линию команду stop
pull_sda
rcall iic_delay
release_scl
rcall iic_delay
release_sda
ret
;-------------------------------------------------------------------------------
iic_check_ask: ; Проверяет сигнал ASK на линии
release_sda ; Если есть - ставит бит T
rcall iic_delay
release_scl
rcall iic_delay
rcall iic_test_sda
pull_scl
pull_sda
ret
;-------------------------------------------------------------------------------
transmit_iic: ; Передача 7-ми байтного буфера
ldi XH,high(clock_buf)
ldi XL,low(clock_buf)
rcall iic_test2line ; если хоть одна линия занята
brts iic_error0 ; выводится ошибка 0 и зацикливается
rcall iic_start ; даётся на линию start
ldi rx1,write1307adr ; ; передаётся адрес и команду на запись
rcall send_byte
clr rx1 ; адрес, с какого писать (ноль)
rcall send_byte
ldi rx9,7
tr_iic_0: ; пересылаем весь буфер
ld rx1, X+
rcall send_byte
dec rx9
brne tr_iic_0
rcall iic_stop ; отправляется stop на линию
ret
;-------------------------------------------------------------------------------
send_byte: ; отправка байта
; в rx1 должен быть пересылаемый байт
ldi rx2,8 ; обе линии в нуле
send_byte_0:
mov rx3,rx1
andi rx3,128 ; выделим старший бит.
breq send_byte_1 ; если он в нуле, оставляем линии как есть
release_sda ; иначе поднимаем SDA
send_byte_1:
rcall iic_delay
release_scl
rcall iic_delay
pull_scl
rcall iic_delay
pull_sda
lsl rx1
dec rx2
brne send_byte_0
rcall iic_delay ; Слушаем ASK. Если нет - ошибка 1
rcall iic_check_ask
brtc iic_error1
ret
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 12:16:17
Soir
К@Т писал(а):Начал изучать си,в мплаб впихнул компилятор без оганичения кода и получил следующую картину

Что я не так сделал?
#include <pic.h>
void main() {
}
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 12:23:33
К@Т
Soir писал(а):К@Т писал(а):Начал изучать си,в мплаб впихнул компилятор без оганичения кода и получил следующую картину

Что я не так сделал?
#include <pic.h>
void main() {
}
тоже самое выдаёт

void-пустое с англ.,т.е функця main ни чего ни кому не передаёт,значит можно это не писать(хотя я проверил и этот вариант).Ещё есть какие-нибуть идеи?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 12:28:51
ploop
Ещё есть какие-нибуть идеи?
А если на ошибку посмотреть, ничего не проясняется? Или нафиг не надо на них смотреть?
Компилятор-то активирован?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 12:33:58
К@Т
ploop писал(а):
Компилятор-то активирован?
Не понял вопроса

Я сделал так как в инструкции написано
Запускаем HI-TECH_PICC_9.50_PL2.exe. Папка назначения «C:Program Files» + Извлечь. Происходит распаковка. После распаковки запускаем
C:\Program Files\HI-TECH Software\PICC\9.50\resources\PICC9.50PL2_REG.reg
и добавляем информацию в реестр. Далее запускаем конфигуратор
C:\Program Files\HI-TECH Software\PICC9.50\bin\MPLABConfig.exe
В окне указывается расположение папки C:\HTSOFT\MPLAB_toolsuites + Install . В следующем окне стоит галочка и предлагается сразу же запустить MPLAB IDE ; галочку оставляем и жмем Finish. Автоматически запускается оболочка MPLAB IDE.
Или ещё надо чтото делать чтобы его активировать?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 12:46:26
Antifritz
Помогите, пожалуйста, запустить ШИМ на ATTiny261A, а то уж очень он там навороченный. Мне нужен обычный Fast-PWM с выходами на ОС1А и ОС1В со сбросом, когда TCNT1 становиться больше OCR. Прочитал несколько раз даташит - с трудом запустил сам таймер (кто ж знал что ТОР хранится в ОСR1C), а вот на выходах ШИМ ничего не меняется. Можете кто-нибудь написать что должно находится в каком из регистров? Заранее благодарен!
Разобрался уже сам
так и не понял где ошибка была, может кому понадобится:
Код: Выделить всё
DDRB = 0b00001010;
TCCR1A = 0b10100011;
TCCR1B = 0b00000001;
TCCR1C = 0;
TCCR1D = 0;
OCR1C = 0xFF;
ну а OCR1А и OCR1В какие нам нужно выставляем.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Ср окт 19, 2011 13:20:21
ploop
Не понял вопроса Я сделал так как в инструкции написано
Я не знаю, что за хренью вы пользуетесь, но он пишет явно, что не активирован. Дальше уж сами разбирайтесь. Или покупайте по честному.