О блоге
Описание ядра, периферии и фич контроллеров семейства PIC от Microchip.
Администраторы (1)
Модераторы (0)
Модераторов здесь не замеченоЧитатели (62)
XANDER WildCat kest Vga Alprad mzw Reverb kvm ZiB labor XuMuK neiver Leopoldius LuckyLex akaChewy bdpcvit Lifelover fehtr Flash ElectronВсе читатели блога
Микроменю на ассемблере PIC12/16 на основе индексов
Хочу поделится своим никому не нужным творением — микроменю на ассемблере PIC12/16.
При создании этого микроменю преследовалось 2 цели:
1. Спортивный интерес — вместить «полноценное» меню + работу с знаковым дисплеем и крестовиной кнопок в 1 кБ (1К слов, если быть точнее), именно столько в PIC16F84, который и был использован.
2. Сделать меню достаточно гибким в настройке, чтобы иметь возможность применять его в простеньких проектах, без необходимости влезать в его дебри, и понимать, как оно написано.
Читать дальше
При создании этого микроменю преследовалось 2 цели:
1. Спортивный интерес — вместить «полноценное» меню + работу с знаковым дисплеем и крестовиной кнопок в 1 кБ (1К слов, если быть точнее), именно столько в PIC16F84, который и был использован.
2. Сделать меню достаточно гибким в настройке, чтобы иметь возможность применять его в простеньких проектах, без необходимости влезать в его дебри, и понимать, как оно написано.
Читать дальше
- 0
- 15 декабря 2018, 13:56
- Gnusmas
- Оставить комментарий
- 1
Подключение экрана ILI9341 к pic24
Недавно приехал ко мне этот девайс, подключил к pic24fj64gb004, нарисовал линии, круги, как то все уныло, захотел выводить изображение, зря что ли покупал, тем более что контроллер позволяет работать с USB флешкой, выкопал микрочиповское демо, поправил под свой контроллер, дописал прошивку, подпаял экран, воткнул флешку и все заработало, описание экрана можно без проблем найти в сети так что вдаваться в дебри что там и как вдаваться не буду, шина работает на частоте 16 мгц, все это конечно скоростями не поражает, все таки 16мгц и отсутствие DMA скорости не прибавляют :-).
видео процесса вывода
youtu.be/ezIEmxJ4txk
вследствии недостаточного размера памяти и быстродействия контроллера, картинки переконвертированы в формат RGB565 и записаны на флешку, программа читает содержимое файлов и выводит на экран,
в main
если устройство подключилось, инициализируем файловую систему, потом по таймеру выводим изображения.
видео процесса вывода
youtu.be/ezIEmxJ4txk
вследствии недостаточного размера памяти и быстродействия контроллера, картинки переконвертированы в формат RGB565 и записаны на флешку, программа читает содержимое файлов и выводит на экран,
в main
while(1)
{
USBTasks();
if(USBHostMSDSCSIMediaDetect())
{
deviceAttached = TRUE;
LED0_IO=1;
if(FSInit())
{
if(TickGet() - t >= TICK_SECOND*2)
{
t = TickGet();
i++;
}
switch(i){
case 1:TFT_FillScreen(BRIGHTGREEN);
break;
case 2:TFT_FillScreen(BRIGHTBLUE);
break;
case 3:TFT_FillScreen(BRIGHTCYAN);
break;
case 4: TFT_FillScreen(MAGENTA);;
break;
case 5: TFT_FillScreen(YELLOW);
break;
case 6: TFT_FillScreen(BLACK);;
break;
case 7:TFT_FillScreen(CYAN);;
break;
case 8:TFT_FillScreen(DARKGRAY);;
break;
case 9:TFT_FillScreen(BRIGHTRED);
break;
case 10:
myFile = FSfopen("1.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 11:
myFile = FSfopen("2.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 12:
myFile = FSfopen("3.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 13:
myFile = FSfopen("4.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 14:
myFile = FSfopen("5.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 15:
myFile = FSfopen("6.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 16:
myFile = FSfopen("7.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 17:
myFile = FSfopen("8.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 18:
myFile = FSfopen("9.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 19:
myFile = FSfopen("10.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 20:
myFile = FSfopen("11.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
break;
case 21:
myFile = FSfopen("1.raw","r");
do{
charsRead = FSfread((WORD *)myData,2,1024,myFile);
WriteDisplayPicture(myData,charsRead);
}
while(charsRead==1024);
FSfclose(myFile);
i=1;
break;
}
если устройство подключилось, инициализируем файловую систему, потом по таймеру выводим изображения.
Arriba. Ещё одна IDE.

На сайте микрочипа появилась IDE Arriba, основанная на Eclipse. Для любителей оригинального Eclipse есть возможность установить Arriba-plugin + Arriba Connect отдельно (некий софт, связывающий GDB и микрочиповские программаторы-отладчики).

Всё бы хорошо, но…
Бесплатная версия поддерживает только PicKit 3 + Simulator. Для обладателей шайб (ICD2, 3) требуется Enterprise Edition по прекрасной цене 495$.
Что можно сказать? Сначала микрочип взяли опен-сурсный gcc и перепилили его в свою серию компиляторов XC и теперь продают за денежку, но и этого оказалось недостаточно. Теперь можно к опен-сурс IDE продавать ПО для работы с их контроллерами. Браво чтоль…
Из плюсов: возможно в скором это ограничится не только прикручиванием к Eclipse, но и к другим IDE, например QtCreator, C::B и т.д.
PIC32MX конвейер
В прошлой статье осталась некоторая недосказанность по поводу инструкции «nop» сразу после вызова функции.
Такое поведение связано с особенностью архитектуры MIPS32 — «branch delay slot». Как всё это работает?
Читать дальше
Такое поведение связано с особенностью архитектуры MIPS32 — «branch delay slot». Как всё это работает?
Читать дальше
Код запуска (startup) на PIC32
Продолжаем углубляться в процесс загрузки контроллеров PIC32MX. В этой части будет станет понятно как запускается функция main.
Читать дальше
Читать дальше
Линковка и стартовый код в PIC32.
Транслятор с ассемблера в машинные коды, а значит и наши знания assembler MIPS32, были бы безполезны, без способности превратить код в прошивку микроконтроллера. Эта статья описывает скрипт линковки для 32MX320F128L. Ассемблера не очень много, в основном описываются сами процессы и структура файлов.
Читать дальше
Читать дальше
Изучение ассемблера на PIC32: COM, буферизованная запись
Учимся работать со структурами данных, вложенными функциями. Использование препроцессора языка C совместно с ассемблером. На этот раз микроконтроллер PIC будет выводить «Hello World» через COM порт.
Читать дальше
Читать дальше
Изучение ассемблера на PIC32: последовательный порт (COM)
Передаем один байт с платы Chipkit Uno32 на компьютер через UART. Углубляемся в архитектуру процессоров MIPS32.
Читать дальше
Читать дальше
Изучение ассемблера на PIC32: моргаем светодиодом
Постижение программирования под микроконтроллеры требует, если не навыка работы с ассемблером, то хотя бы понимания ассемблера. Я буду использовать Arduino совместимую плату, чтобы показать, как работать с ассемблером на контроллерах PIC32. Начну, по традиции, с мигающего светодиода, который уже распаян на плате.
Читать дальше
Читать дальше