ARM7 с нуля

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Забыл про это-
IOPINx
FIOxPIN Регистр, из которого можно получить информацию о текущем состоянии портов ввода/вывода, независимо от направления ввода/вывода и назначения пинов. Нулевой бит соответствует порту Px.0 …. 31й – Px.31. Используется только для чтения.
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Каждая ножка МК может использоваться 4-мя перефирийными устройствами МК,например таймер, UART и т.д. PINSEL подключает вывод мк к нужному устройству. :P
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Для дальнейшего изучения нужно подключить на выходы что-то, светодиодами баловаться не будем,подключим 2-хстрочный LCD и темпер.датчик DS18B20. Ну тут может быть перерыв в несколько дней.. :write:
Аватара пользователя
romazan
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Чт май 21, 2009 13:54:07
Откуда: Москва
Контактная информация:

Re: ARM7 с нуля

Сообщение romazan »

Могу скинуть исходники для работы с ЛСД 3310, правда для AT91SAM7. Писал сам.
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Давай,мало ли что-пригодится,я всё что встречается по арм-ам собираю.
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Может у кого то есть исходник для нескольких DS18B20?
Аватара пользователя
romazan
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Чт май 21, 2009 13:54:07
Откуда: Москва
Контактная информация:

Re: ARM7 с нуля

Сообщение romazan »

Вот для дисплея:
Вложения
Blinky.rar
(66.42 КБ) 151 скачивание
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Спасибо, сохранил.
Блин, или Протеус тупит- в Протеусе на LPC2137 соединил 2-хстрочный LCD, нашел библиотеку для HD44780- но ножки не дергаются, если сам заставляю-моргают выводы, на симуляторе KEIL нормально бегает, может точно Протеус тупит? Вот код:

Код: Выделить всё

#include <lpc213x.h>

/* ЖК подключен к PORT0 выводы 4 битн данных P0.0..3
E - P0.4; RS - P0.5   */
#define E   4
#define RS   5
#define _BV(x)  (1<<x)
#define TIME 150 // задержка для F_cpu=72 MHz

void HD44780_data_send(unsigned char p);
void HD44780_com(unsigned char p);
void HD44780_dat(unsigned char p);
void HD44780_init(void);
void HD44780_puts(unsigned char *data);
void HD44780_3dig (unsigned long val, unsigned char pos);
void HD44780_4dig(unsigned long val, unsigned char pos);
void HD44780_5dig(unsigned long val, unsigned char pos);

void pause(unsigned int p)
{   
   unsigned int i=0;
   for (i=0;i<p;i++);
}

void HD44780_data_send(unsigned char p) //"p"-байт данных или команд
{
   FIO0CLR |=0x0000000f;
   //FIO0CLR |= ~(p>>4);
   FIO0SET |= (p>>4);  //Старший ниббл
   pause(TIME);
   FIO0CLR |= _BV(E);   //EN=0, запись информации в ЖКИ
   pause (TIME);
   FIO0SET |= _BV(E);    //Сигнал EN=1

   FIO0CLR |=0x0000000f;
  // FIO0CLR |= ~(p & 0x0f);
   FIO0SET |= (p & 0x0f);  //Младший ниббл
   pause (TIME);
   FIO0CLR |= _BV(E);   //EN=0, запись информации в ЖКИ
   pause (5*TIME);
   
}

void HD44780_com(unsigned char p)   
{
   FIO0CLR |= _BV(RS);
   FIO0SET |= _BV(E);    //RS=0, EN=1
   HD44780_data_send(p); //Вызов общей части функций lcd_com, lcd_dat
}   

void HD44780_dat(unsigned char p)     
{
  FIO0SET |= _BV(RS);
  FIO0SET |= _BV(E);             //RS=1, EN=1
  HD44780_data_send(p); //Вызов общей части функций lcd_com, lcd_dat
}
void HD44780_init(void)     //Режим 4-бит, мигающий курсор
{ HD44780_com(0x33); pause(500*TIME);        //Подготовка
  HD44780_com(0x32); HD44780_com(0x28);    //4-бит, две строки
  HD44780_com(0x08);           //Полное выключение дисплея
  HD44780_com(0x01); pause(1000*TIME);  //Очистка дисплея
  HD44780_com(0x06); //Направление сдвига курсора - вправо
  HD44780_com(0x0c);  //Включение дисплея,отсутствуют курсор
}
void HD44780_puts(unsigned char *data)     //"data"=стринг
{ while(*data) HD44780_dat(*(data++));    //Смена символов
}

//---------- вывода значений на ЖКИ--------------
void HD44780_5dig(unsigned long val, unsigned char pos)
{   
   HD44780_com(pos);   //Установка курсора
    HD44780_dat(val/10000 + 0x30);  //Индикация единиц
   HD44780_dat((val%10000)/1000 + 0x30);
    //HD44780_dat(',');                    //Индикация запятой
    HD44780_dat((val%1000)/100 + 0x30);    //Сотни
    HD44780_dat((val%100)/10 + 0x30);   //Десятки
    HD44780_dat(val%10 + 0x30);        //Единицы
   return;
}

void HD44780_4dig(unsigned long val, unsigned char pos)
{   
   HD44780_com(pos);   //Установка курсора в нижней строке
    HD44780_dat(val/1000 + 0x30);  //Индикация единиц
   // HD44780_dat(',');                    //Индикация запятой
    HD44780_dat((val/100)%10 + 0x30);    //Сотни 
    HD44780_dat((val/10)%10 + 0x30);   //Десятки
    HD44780_dat(val%10 + 0x30);        //Единицы 
   return; 
}

//---------- вывода значений на ЖКИ--------------
void HD44780_3dig (unsigned long val, unsigned char pos)
{   
   
    HD44780_com(pos);   //Установка курсора в нижней строке
   HD44780_dat((val/100)%10 + 0x30);    //Сотни
    HD44780_dat(val/10 + 0x30);  //Индикация единиц
    HD44780_dat(val%10 + 0x30);        //Единицы
   return;
}

int main(void)
{   
IO0DIR=0x0000003F;
 HD44780_init ();
 
//HD44780_4dig(1234,1);
while(1){

 //HD44780_data_send('D');
HD44780_3dig(567,3);
 
 /*    Если только это оставить-ножки моргают.
 IO0SET= 0x0000003F;
 pause(300);
 IO0CLR= 0x0000003F;
 pause(300);
 */
}}


Тем более сначала Прот ругался,что на выводе Vват не 3,3 в, а 5в, все настроил-без толку, потом на этот выв.питания соединил аккумулятор 3 вольта с большой емкостью- он питание до 3,2 вольа посадил и перестал ругаться.. :dont_know:
Аватара пользователя
romazan
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Чт май 21, 2009 13:54:07
Откуда: Москва
Контактная информация:

Re: ARM7 с нуля

Сообщение romazan »

Что-то мне твои нагромождения из вот этого |= _BV() не нравятся, в Atmel есть два регистра(только запись): один ставит в единицу вывод, другой в ноль. Думаю в этом камне тоже самое. Поэтому можно с - |= не парится, а просто слать через =.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: ARM7 с нуля

Сообщение Satyr »

да, |= для них абсолютно бестолку.

****VAL |= _BV(x) приобретает смысл ***SET = _BV(x)
а
****VAL &= ~_BV(x) приобретает смысл ***CLR = _BV(x)
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Ну убрал эти дурацкие |= _BV(x),сделал так
#define E 0x00000010
#define RS 0x00000020
Но не в этом было дело-а в этом-
IO0CLR = E;
т.е. вместо FIO - IO, ножки заморгали,а цифр и букв нет, что-то в инициализации или типа того неправильно,надо разбираться. :evil:
Mr.Denis
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Re: ARM7 с нуля

Сообщение Mr.Denis »

Всем привет! Я тут надумал изучать arm, но не знаю с какому МК начать.
Посоветуйте МК под который больши информации и примеров,
И вообще раскажите о первых шагах и отладочных платах.
Взаимное спасибо!
STM32F4 Discovery + KEIL + Windows 7
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: ARM7 с нуля

Сообщение Satyr »

без разницы. смотри что по параметрам, корпусу, цене больше нравится.

а начать бы советовал с копеечного комплекта, в котором есть сразу все для начала - и маленькая платка с контроллером, и программатор-отладчик, и триальная среда разработки и примеры

STM32DISCOVERY - около 500р за все сразу, чтоб сесть и пробоать.

Изображение
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: ARM7 с нуля

Сообщение Satyr »

Поглядел, уже даже не 500, а 320р.
http://www.terraelectronica.ru/news_postup.php?ID=2139
и почитать http://www.terraelectronica.ru/images/n ... 11_2_4.pdf
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Какие значения PLL ставить в KEIL, чтобы мк работал на 72 мгц,если кварц стоит 12 мгц?
Изображение
Первое-это умножение частоты кварца, а вот насчет второго я чё то не понял.
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: ARM7 с нуля

Сообщение SII »

А в словарь посмотреть и обнаружить, что Divider -- это делитель?
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Круто! А поточнее обьяснить..? Цитата-
PLL позволяет входную тактовую частоту, находящуюся в пределах от 10 до 25 МГц,
умножать, получая внутреннюю тактовую частоту в пределах от 10 до 60 МГц. Множитель должен
быть целым числом в диапазоне от 1 до 32 (для LPC2106 – от 1 до 6).
-Это ясно.
Частота работы внутреннего управляемого генератора должна находится в пределах от 1566 до 320 МГц, что требует наличия дополнительного делителя, для приведения в соответствие выходной частоты, рабочей частое кристалла. Выходной делитель может работать с коэффициентом 2,4,8 и 16. Минимальное значение для делителя – 2.-Вот тут непонятки..
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: ARM7 с нуля

Сообщение Satyr »

на pll Mul = 11 (+1), Div 0 (+1)
на clk делитель 4
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: ARM7 с нуля

Сообщение Satyr »

ARM7 писал(а):Круто! А поточнее обьяснить..? Цитата-
PLL позволяет входную тактовую частоту, находящуюся в пределах от 10 до 25 МГц,
умножать, получая внутреннюю тактовую частоту в пределах от 10 до 60 МГц. Множитель должен
быть целым числом в диапазоне от 1 до 32 (для LPC2106 – от 1 до 6).
-Это ясно.
Частота работы внутреннего управляемого генератора должна находится в пределах от 1566 до 320 МГц, что требует наличия дополнительного делителя, для приведения в соответствие выходной частоты, рабочей частое кристалла. Выходной делитель может работать с коэффициентом 2,4,8 и 16. Минимальное значение для делителя – 2.-Вот тут непонятки..

Элементарно.
частота PLL должна быть в диапазоне 156-320мхз
частота PLL = частота кварца * Mul / Div

частота ядра = PLL / N, где N =2,4,8,16
Аватара пользователя
ARM7
Встал на лапы
Сообщения: 85
Зарегистрирован: Пн мар 07, 2011 19:52:52

Re: ARM7 с нуля

Сообщение ARM7 »

Элементарно для вас, а для меня не ясно- почему нужен внутренний управляемый генератор, который должен находится в пределах от 1566 до 320 МГц, раз подключен 12 мгц кварц-умножитель ставим на 6=получается 72 мгц, и всё, а остальное зачем, что за "внутренний управляемый генератор, который должен находится в пределах от 1566 до 320 МГц", зачем это? обьясните мне(и не только мне наверно) тупому,только популярно :dont_know:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»