Страница 8 из 8
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:21:00
vitalik_1984
hfelyx писал(а):как объединить два порта PORTD и PORTB в один ,для последующего использования его в световых эффектах,с помощью одной переменной?
интересный вопрос...какой средой пользуетесь язык какой
так то несложно
Код: Выделить всё
insigned int ports_control;
#define PORTS_Hbyte PORTB
#define PORTS_Lbyte PORTC
void ports_out(insigned int ports_control){
PORTS_Lbyte= ports_control & 0x00ff;
PORTS_Hbyte= ports_control>>8;
}
//проделали операции с нужной переменной
//вызвали функцию для вывода
ports_control=0x0001;
while(ports_control){
ports_control++;
ports_out(ports_control);
_delay_ms(500);
}
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:35:07
hfelyx
Задача: С помощью портов В и Д микроконтроллера ATtiny 2313,реализовать световой эффект, например ,бегущей точки.От PINB.0 до PINB.7 могу ,а как передать управление от PINB.7(когда бегущая точка дойдет до него) на PIND.0 ,для продолжения светового эффекта внутри порта Д???
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:39:13
ploop
Тот же самый сдвиг, только с переносом.
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:40:26
hfelyx
ploop писал(а):Тот же самый сдвиг, только с переносом.
А как это написать в программе на Си?
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:40:52
ploop
На Си не знаю, на ассемблере подсказал бы...
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:44:20
vitalik_1984
Код: Выделить всё
#define PORTS_Lbyte PORTB
#define PORTS_Hbyte PORTC
void ports_out(insigned int ports_control){
PORTS_Lbyte= ports_control & 0x00ff;
PORTS_Hbyte= ports_control>>8;
}
hfelyx писал(а):А как это написать в программе на Си?
Это итак на си написано
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 21:48:51
hfelyx
vitalik_1984 писал(а):#define PORTS_Lbyte PORTB
#define PORTS_Hbyte PORTC
void ports_out(insigned int ports_control){
PORTS_Lbyte= ports_control & 0x00ff;
PORTS_Hbyte= ports_control>>8;
}
hfelyx писал(а):А как это написать в программе на Си?
Это итак на си написано
А можно как то прокоментировать программу,а то я новичек....или литературу посоветовать для ознакомления???
Re: Микроконтроллер от и до.......
Добавлено: Вс фев 05, 2012 23:27:56
vitalik_1984
керниган и риччи -основатели языка.
или просто вводите в поиске книги для языка Си
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 11:20:42
Alexeyslav
Вот тут в теме говорилось про работу портов, хотелось бы добавить. Если внимательно посмотреть в даташит то там ясно написано что PINx представляет собой именно состояние выводов контроллера независимо от того в каком режиме они находятся, ввода или вывода. Это очень важно, поскольку иногда может быть такая ситуация что на выходе порта установлена "1" но он принудительно замкнут на общий провод, в таком случае PINx будет выдавать "0" на этом выводе.
PORTx - помещает переданное значение в регистр-защелку и даже если вывод находился в режиме ввода его состояние хранится в регистре, и как только переключить его на выход - оно тут же проступит наружу.
К чему это все. А к тому что есть такие команды для работы с отдельными битами порта, но аппаратно микроконтроллер не поддерживает побитный доступ - поэтому такие команды реализованы как операции над всем портом целиком, даже если меняем 1 бит - сначала СЧИТЫВАЕТСЯ значение всех 8 бит с порта, потом меняется бит и записывается в регистр. Вот здесь и кроется засада. Считывается то реальное состояние выводов - а значит если в регистре-защелке была записана "1" но снаружи этот вывод порта надежно сидит на "0"(кнопка например), то при следующей попытке изменить любой отдельный бит порта туда запишется "0" что может оказаться несколько неожиданным.
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 11:40:07
ploop
К чему это все. А к тому что есть такие команды для работы с отдельными битами порта, но аппаратно микроконтроллер не поддерживает побитный доступ - поэтому такие команды реализованы как операции над всем портом целиком, даже если меняем 1 бит - сначала СЧИТЫВАЕТСЯ значение всех 8 бит с порта, потом меняется бит и записывается в регистр.
Теперь открываем даташит, смотрим на команды CBI/SBI, и видим, что они выполняются за два такта. Как это еще можно провернуть, кроме как на аппаратном уровне?
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 12:23:43
vitalik_1984
Alexeyslav писал(а):Если внимательно посмотреть в даташит то там ясно написано что PINx представляет собой именно состояние выводов контроллера независимо от того в каком режиме они находятся, ввода или вывода. Это очень важно, поскольку иногда может быть такая ситуация что на выходе порта установлена "1" но он принудительно замкнут на общий провод, в таком случае PINx будет выдавать "0" на этом выводе.
правильно,а если порт при этом настроен на выход,то он еще и сгореть может
Alexeyslav писал(а):
PORTx - помещает переданное значение в регистр-защелку и даже если вывод находился в режиме ввода его состояние хранится в регистре, и как только переключить его на выход - оно тут же проступит наружу.
К чему это все. А к тому что есть такие команды для работы с отдельными битами порта, но аппаратно микроконтроллер не поддерживает побитный доступ - поэтому такие команды реализованы как операции над всем портом целиком,
что за чушь?есть такие функции,как выше уже было написано.только они не для всего диапазона вроде работают,там где много портов могут не работать в дальних портах (смотрим список распределения адресов в памяти)
Alexeyslav писал(а):Вот здесь и кроется засада. Считывается то реальное состояние выводов - а значит если в регистре-защелке была записана "1" но снаружи этот вывод порта надежно сидит на "0"(кнопка например), то при следующей попытке изменить любой отдельный бит порта туда запишется "0" что может оказаться несколько неожиданным.
вообще при изменении бита данных порта учитывается состояние того регистра,который меняется,а не регистра входа.тогда таких "ошибок"не будет.меняем состояние ног порта,значит считываем портх,а не пинх.а менять пинх смысла не имеет,поэтому его просто считываем там,где нам нужны эти данные.
тоже самое про ддрх если нужно считываем,меняем,заполняем .а никак не пинх .
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 12:35:27
ploop
а менять пинх смысла не имеет,поэтому его просто считываем там,где нам нужны эти данные.
Имеет. На новых сериях. Запись единицы в PINx приводит к инверсии в PORTx.
Простой генератор меандра будет выглядеть так:
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 14:31:56
vitalik_1984
а новые это какие? мега8 к ним относится?
Поправка к моему посту выше
только они не для всего диапазона вродерегистров работают,там где много портов могут не работать в дальних портах (смотрим список распределения адресов в памяти)
I/O registers within the address range $00 - $1F are directly bit-accessible using the SBI and CBI instructions. In these reg-
isters, the value of single bits can be checked by using the SBIS and SBIC instructions.
в портах ввода вывода на всех должны работать они чаще в начале таблицы регистров стоят(к нашей радости)
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 14:38:52
Engineer_Keen
Нет

В 8-16-32, 8515-8535 мегах нет. Есть например в 13-х4-х5-2313 тиньках и х8-х14 мегах.
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 14:39:01
ploop
классическая 8 не знаю, 8А должна.
48/88/168 и тини2313 работают точно, штук пять проектов, где этот приём использую.
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 14:43:40
МитяРа
ploop писал(а): где этот приём использую.
На правах оФФФтопа..
"Бедные AVR-щики.."
Битовый процессор и все операции с битами у МК51-х изначально: были, есть и будут есть..

Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 16:24:57
Engineer_Keen
ploop писал(а):
классическая 8 не знаю, 8А должна.
Че-то я в описалове этого не видел... Да и как-же программная совместимость с не-А?
МитяРа писал(а):"Бедные AVR-щики.."
Битовый процессор и все операции с битами у МК51-х изначально: были, есть и будут есть..

Ну да, первое время после 51 не удобно, потом быстро приспосабливаешься. Да и AVR все равно быстрее считает-изменит-запишет нужный бит, пока классический 51-й его одной командой проинвертирует

Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 16:33:35
МитяРа
Engineer_Keen писал(а):AVR все равно быстрее считает-изменит-запишет нужный бит, пока классический 51-й его
Ещё один оФФФтоп и всё..
Раз пошла такая "пьянка", то надо сравнивать AVR-ки не с классикой, а с уже тогда имеющимися 51-ми с укороченным циклом..
Это, например, серия LPC9хх от Филлипса и МК от Cygnal-а, теперь SiLabs, а даже с той-же LPC-серией 51-х от того-же Атмела..
Re: Микроконтроллер от и до.......
Добавлено: Чт фев 09, 2012 17:18:41
ploop
Че-то я в описалове этого не видел... Да и как-же программная совместимость с не-А?
Я тоже не видел, просто предположил. А проверить не на чем.
На счет совместимости - код из "не А" 100% будет работать на "А". Обратное верно частично, т.к. запись в PINx никто не запрещал, она просто не приведёт к желаемому эффекту. А может приведёт, просто эту возможность проще не документировать, чем специально изменять аппаратную часть, т.к. есть подозрение, что у x8 и новых "А"-серий она очень похожа.
Это всё чисто мои предположения, т.к. лень бесцельно рыть документацию...
Re: Микроконтроллер от и до.......
Добавлено: Пт фев 10, 2012 08:59:37
Gudd-Head
ploop писал(а):А проверить не на чем... Это всё чисто мои предположения, т.к. лень бесцельно рыть документацию...
Почему бесцельно? Для самообразования: вот
Figure 22. General Digital I/O на восьмёрку и 8А (справа) и тиньку2313 (слева):
