на что годится pic16f74?

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

на что годится pic16f74?

Post by 7400 »

Code: Select all

[size=9]Память программ, байт 4096x14
ОЗУ данных 192
Част., МГц 20
Порты вв./выв. 33
Послед. интерфейс USART/ SSP /I2C	
АЦП/ЦАП	 8/0
ШИМ 2
Перезап. по сбою питания есть
Таймеры 3+WDT
Програм. на плате есть[/size]
допустим есть I2C тобиж можно подключить клаву
можно вроди как подключать параллельную память реализовано вроди как железно но вот на сколько максимум? на 64кб? поставить еще какой регистра и еще рамы добавить
может можно всунуть этот контроллер в скар к телевизору? и питание от туда взять? или он слишком медленный(в смысле микроконтроллер)?

ах да кстати на нем всего лиш немногим за 30 команд и в основном все выполняются за 1 такт вроди довольно неплохо

может можно разогнать этот микроконтроллер допустим до 30мгц?

хочу реализовать что-нибудь типа самого слабого компьютера
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

а кстати с этим пиком есть небольшая несостыковка
к примеру по даташиту озу192 байта а в среде программирования 80
и еще по даташиту 4 кб а программатор видит 8 кб но все программы вроди работают нормально
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

что за среда программирования такая?
у этих пиков должно быть 192 в двух банках и 4К программы (8K в старших модельках того же семейства pic16f76,pic16f77)
внешнюю память напрямую подключать вроде бы нельзя - только если программно к ней обращаться
развёртку ТВ он должен справиться (см. тут)
разогнать немножко можно, но вряд ли до 30...
Я тут за главного - если что шлите мыло на me собака shaos точка net
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

среда конечно неочень - mikroPascal PRO for PIC
переводит код в ассемблер а потом компилит уже ассм код на производительность пока не жалуюсь(но видимо придется учить ассм т.к для телика нужно приличная частота)

я прошелся по подключению к телику но чтот схемки не нашел только код выводящий квадратики)

на счет памяти у этого мк есть подозрительный порт е на который отводится всего 3 ноги и которые называются rd wr cs эт вродь как для подключения параллельной памяти?

кстати что такое psp(на порте д) это типа ацп? хотя давно читал писали что для работы с внешней памятью

а сколько нужно памяти под 'видюху' выделять в чб и в цветном режимах?(640*480*3 байта для цветного или неверные расчеты? а то олучается почти 1 мегабайт оперативы должно быть и это только под "видюху" а для работы раза в 3 больше оперативы может понадобится)

нужно попробовать покопатся в mikroPascal PRO for PIC может просто ошиблись и написали в конфиге 80 вместо 192)

ну хорошо а на что способны 20 мгц и 33 команды?) допустим по сравнению с приставкой? (допустим всякие спектрумы собирали на з80 хотя частота там была даже в турбо режиме почти в 3 раза меньше а вот команд там выло как раз таки во столько же раз больше

:) да и мой мк 8 битный а з80 16 и вообще в чем разница ? у з80 команды намного длинней чем у моей пики следовательно и на обработку должно тратиться большее время или я не прав? )

пока в проэкте клава + подключение к телику + внешняя память (наверное аля 24с256 просто нету параллельного программатора :( кстати если есть схемка то поделитесь)
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: на что годится pic16f74?

Post by Lavr »

7400 wrote:ах да кстати на нем всего лиш немногим за 30 команд и в основном все выполняются за 1 такт вроди довольно неплохо
может можно разогнать этот микроконтроллер допустим до 30мгц?
хочу реализовать что-нибудь типа самого слабого компьютера
Видео он и на 20 МГц способен изобразить - есть примеры видеоигр на одном PIC. Память - если по последовательному интерфейсу - всё весьма притормозит. До 30 МГц он может и не разогнаться - это зависит от того, как повезёт и как будет греться...
Плюс ещё клавиатурка притормозит процесс - я учитываю, что одновременно мы сами и видео сигнал формируем. Так что, если что и получится - то весьма слабенький компьютер, похожий вот на этот:
viewtopic.php?t=9407&start=0

Я бы посоветовал погуглить похожие проекты на PIC. Заодно и программатор подберёте на свой вкус... Да и mikroPascal, на мой взгляд, - не лучший софт для такого проекта.
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

7400 wrote:среда конечно неочень - mikroPascal PRO for PIC
переводит код в ассемблер а потом компилит уже ассм код на производительность пока не жалуюсь(но видимо придется учить ассм т.к для телика нужно приличная частота)
да - пакет не сильно популярный так что вполне может содержать ошибки для каких-то моделей пиков - лучше на ассембоере или в крайнем случае на микрочиповском си (бывший HI-TECH)
7400 wrote: на счет памяти у этого мк есть подозрительный порт е на который отводится всего 3 ноги и которые называются rd wr cs эт вродь как для подключения параллельной памяти?

кстати что такое psp(на порте д) это типа ацп? хотя давно читал писали что для работы с внешней памятью
а даташыт почитать слабо? ;)
или хотя бы погуглить...
PSP = Parallel Slave Port - в этом режиме пик может изображать из себя ведомый 8-битный порт для какого-то внешнего микропроцессора или микроконтроллера - и CS,WR,RD как раз являются управляющими входными (не выходными!) сигналами для этого порта - т.е. внешний проц может включать этот порт по CS, а затем читать из него по RD либо писать по WR (правда народ пишет что PIC16F74 имеет багу в PSP-имлементации, которая может привести к потере прерывания от порта)
Я тут за главного - если что шлите мыло на me собака shaos точка net
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

а если попробовать так
написать что-то наподобие лоадера для пика (где описывается выход на экран обработка клавиатуры и работа с ммс картой)
а потом сами программы записывать на ммс карту (а саму схему засунуть например в корпус клавиатуры и в нем вырезать дырку чтобы удобнее перезаписывать ммс карту)

есть еще 1 идея насчет 2 буферизации
берем 2 пика
1 будет постоянно перерисовывать экран и сравнивать данные из озу1 и озу2 а 2 пик будет изменять данные в озу 2 (наверное неочень понятно...) но тут маленькая проблемка нужно подключить 1 из озу сразу к 2 мк (хотя можно наверное попробовать когда 1 мк работает с озу то второй например спит (тобих подается управляющий сигнал на мк) )

кстати кинескоп такая штука не посадит? :)
и сколько оперативы нужно? с какой задержкой брать 120 ?

кстати прикольный компьютер viewtopic.php?t=9407&start=0 но там логика неочень продумана поставили из разных серий и наверное может привести к несовпадению лог уровней
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

яж вот и думаю почему на порте е не работают кнопки) хотя по даташину вроди можно настроить на вход и выход....
я на 2 дня уезжаю в деревню :cry:
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

стати может найдется 8битный дос какой или виртуальная машинка какая
допустим для меги 8 есть нано ява машина
http://www.harbaum.org/till/nanovm/index.shtml но там оперативы 1 кб :(
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

7400 wrote:стати может найдется 8битный дос какой или виртуальная машинка какая
допустим для меги 8 есть нано ява машина
http://www.harbaum.org/till/nanovm/index.shtml но там оперативы 1 кб :(
Самая неприятная часть проекта - управлять видеовыводом на телевизор.
Конечно это будет сажать кинескоп в той-же мере, как и обычный просмотр этого телевизора. :wink:

Задача управлять видеовыводом сжирает значительный ресурс производительности PIC и требует очень виртуозного программирования. Так что, если это первый проект - я бы не советовал связываться с телевизором, а посмотреть в сторону маленького ЖК диспея типа 3310.
Это очень всё упростит.

"8-битный дос какой" есть и называется СР/М, но обычно легче добиться совместимости с популярным любительским компьютером типа "РК-86". Для них были и упрощённые адаптированные ОС и собственные ОС, расточенные на работу с РАМ/РОМ-дисками, это может быть и ммс карта. Но придётся поработать с программами самому.

Вряд ли есть что-то готовое, подходящее без переделок...

PS. Приятного отдыха на лоне природы... :lol:
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

7400 wrote:а если попробовать так
написать что-то наподобие лоадера для пика (где описывается выход на экран обработка клавиатуры и работа с ммс картой)
а потом сами программы записывать на ммс карту (а саму схему засунуть например в корпус клавиатуры и в нем вырезать дырку чтобы удобнее перезаписывать ммс карту)
а программы будешь на самописной виртуальной машине эмулить?
или если хочешь настоящие программы в кодах пика, то тогда тебе другой пик нужен, который может сам себя перепрошивать (записывать в память программ) - например pic16f871, но у пиковской памяти программ ресурс очень ограниченный - всего 1000 циклов перезаписи - кому нужен компьютер, на котором можно запускать разные программки только 1000 раз? ;)

P.S. кстати про 16f7x и PSP уже было несколько топиков назад: viewtopic.php?t=9175
Я тут за главного - если что шлите мыло на me собака shaos точка net
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

вернулся из деревни
а где можно скачать компилятор микрочиповского си? и дос а то чегото найти немогу :)

а с ммс картой придется работать софтово? это тоже наверное сильно земедлит систему

вместо клавиатуры думаю поставить несколько(5-8) кнопок наверное обработка займет гораздо меньшее время

для отрисовки думаю задействовать микрух 20 логики (ну или еще 1 пик)

как думаете оперативу вообще стоит ставить? или может на пике взять 120 байт их изменять и отрисовывать в разных местах экрана?

ну это вроди как и не первый проэкт но в тоже время первый связанный с компьютерами

кстати как картинки добавлять ? сразу на сайт нельзя?
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

кстати пример работы паскаля
вот паскальный код

Code: Select all

program ffff;
var
konstantu:byte;
perisovka:byte;
jekran:byte;
yprjekran:byte;
ch1,ch2,min1,min2:byte;
begin
  TRISB := 0x00;
  TRISD := 0x00;
  TRISE0_bit := 1;
  jekran:=1;
ch1:=1;
ch2:=2;
min1:=0;
min2:=0;
  While TRUE do
    begin
     for perisovka:=0 to 125 do
    begin
     for jekran :=1 to 4 do
     begin
     delay_ms(2);
     case jekran  of
    1:begin konstantu:=ch1; PORTb := %00000001; end;
    2:begin konstantu:=ch2;PORTb := %00000010; end;
    3:begin konstantu:=min1;PORTb := %00000100; end;
    4:begin konstantu:=min2;PORTb := %00001000; end;
    end;
    case konstantu  of
    0:PORTd := %00010000;
    1:PORTd := %01011011;
    2:PORTd := %00000101;
    3:PORTd := %01000001;
    4:PORTd := %01001010;
    5:PORTd := %01100000;
    6:PORTd := %00100000;
    7:PORTd := %01011001;
    8:PORTd := %00000000;
    9:PORTd := %01000000;
    end;
    end;
    end;
    {код обработки времени}
    min2:=min2+1;
    if Button(PORTE, 0, 5, 0)then begin min2:=ch1+5; end;
    if Button(PORTE, 1, 5, 0)then begin ch2:=ch2+1; end;
    if min2>=10 then begin min1:=min1+1; min2:=0 end;
    if min1>=6 then begin ch2:=ch2+1; min1:=0 end;
    if ch2>=10 then begin ch1:=ch1+1; ch2:=0 end;
    if ((ch1>=2)and(ch2>=4)) then begin ch2:=0; ch1:=0 end;
    end;
end.

вот то что он генерирует перед компиляцией

Code: Select all

_main:

;ffff.mpas,8 :: 		begin
;ffff.mpas,9 :: 		TRISB := 0x00;
	CLRF       TRISB+0
;ffff.mpas,10 :: 		TRISD := 0x00;
	CLRF       TRISD+0
;ffff.mpas,11 :: 		TRISE0_bit := 1;
	BSF        TRISE0_bit+0, 0
;ffff.mpas,12 :: 		jekran:=1;
	MOVLW      1
	MOVWF      _jekran+0
;ffff.mpas,13 :: 		ch1:=1;
	MOVLW      1
	MOVWF      _ch1+0
;ffff.mpas,14 :: 		ch2:=2;
	MOVLW      2
	MOVWF      _ch2+0
;ffff.mpas,15 :: 		min1:=0;
	CLRF       _min1+0
;ffff.mpas,16 :: 		min2:=0;
	CLRF       _min2+0
;ffff.mpas,17 :: 		While TRUE do
L__main2:
;ffff.mpas,19 :: 		for perisovka:=0 to 125 do
	CLRF       _perisovka+0
L__main7:
;ffff.mpas,21 :: 		for jekran :=1 to 4 do
	MOVLW      1
	MOVWF      _jekran+0
L__main12:
;ffff.mpas,23 :: 		delay_ms(2);
	MOVLW      13
	MOVWF      R12+0
	MOVLW      251
	MOVWF      R13+0
L__main16:
	DECFSZ     R13+0, 1
	GOTO       L__main16
	DECFSZ     R12+0, 1
	GOTO       L__main16
	NOP
	NOP
;ffff.mpas,25 :: 		1:begin konstantu:=ch1; PORTb := %00000001; end;
	MOVF       _jekran+0, 0
	XORLW      1
	BTFSS      STATUS+0, 2
	GOTO       L__main20
	MOVF       _ch1+0, 0
	MOVWF      _konstantu+0
	MOVLW      1
	MOVWF      PORTB+0
	GOTO       L__main17
L__main20:
;ffff.mpas,26 :: 		2:begin konstantu:=ch2;PORTb := %00000010; end;
	MOVF       _jekran+0, 0
	XORLW      2
	BTFSS      STATUS+0, 2
	GOTO       L__main23
	MOVF       _ch2+0, 0
	MOVWF      _konstantu+0
	MOVLW      2
	MOVWF      PORTB+0
	GOTO       L__main17
L__main23:
;ffff.mpas,27 :: 		3:begin konstantu:=min1;PORTb := %00000100; end;
	MOVF       _jekran+0, 0
	XORLW      3
	BTFSS      STATUS+0, 2
	GOTO       L__main26
	MOVF       _min1+0, 0
	MOVWF      _konstantu+0
	MOVLW      4
	MOVWF      PORTB+0
	GOTO       L__main17
L__main26:
;ffff.mpas,28 :: 		4:begin konstantu:=min2;PORTb := %00001000; end;
	MOVF       _jekran+0, 0
	XORLW      4
	BTFSS      STATUS+0, 2
	GOTO       L__main29
	MOVF       _min2+0, 0
	MOVWF      _konstantu+0
	MOVLW      8
	MOVWF      PORTB+0
	GOTO       L__main17
L__main29:
L__main17:
;ffff.mpas,31 :: 		0:PORTd := %00010000;
	MOVF       _konstantu+0, 0
	XORLW      0
	BTFSS      STATUS+0, 2
	GOTO       L__main33
	MOVLW      16
	MOVWF      PORTD+0
	GOTO       L__main30
L__main33:
;ffff.mpas,32 :: 		1:PORTd := %01011011;
	MOVF       _konstantu+0, 0
	XORLW      1
	BTFSS      STATUS+0, 2
	GOTO       L__main36
	MOVLW      91
	MOVWF      PORTD+0
	GOTO       L__main30
L__main36:
;ffff.mpas,33 :: 		2:PORTd := %00000101;
	MOVF       _konstantu+0, 0
	XORLW      2
	BTFSS      STATUS+0, 2
	GOTO       L__main39
	MOVLW      5
	MOVWF      PORTD+0
	GOTO       L__main30
L__main39:
;ffff.mpas,34 :: 		3:PORTd := %01000001;
	MOVF       _konstantu+0, 0
	XORLW      3
	BTFSS      STATUS+0, 2
	GOTO       L__main42
	MOVLW      65
	MOVWF      PORTD+0
	GOTO       L__main30
L__main42:
;ffff.mpas,35 :: 		4:PORTd := %01001010;
	MOVF       _konstantu+0, 0
	XORLW      4
	BTFSS      STATUS+0, 2
	GOTO       L__main45
	MOVLW      74
	MOVWF      PORTD+0
	GOTO       L__main30
L__main45:
;ffff.mpas,36 :: 		5:PORTd := %01100000;
	MOVF       _konstantu+0, 0
	XORLW      5
	BTFSS      STATUS+0, 2
	GOTO       L__main48
	MOVLW      96
	MOVWF      PORTD+0
	GOTO       L__main30
L__main48:
;ffff.mpas,37 :: 		6:PORTd := %00100000;
	MOVF       _konstantu+0, 0
	XORLW      6
	BTFSS      STATUS+0, 2
	GOTO       L__main51
	MOVLW      32
	MOVWF      PORTD+0
	GOTO       L__main30
L__main51:
;ffff.mpas,38 :: 		7:PORTd := %01011001;
	MOVF       _konstantu+0, 0
	XORLW      7
	BTFSS      STATUS+0, 2
	GOTO       L__main54
	MOVLW      89
	MOVWF      PORTD+0
	GOTO       L__main30
L__main54:
;ffff.mpas,39 :: 		8:PORTd := %00000000;
	MOVF       _konstantu+0, 0
	XORLW      8
	BTFSS      STATUS+0, 2
	GOTO       L__main57
	CLRF       PORTD+0
	GOTO       L__main30
L__main57:
;ffff.mpas,40 :: 		9:PORTd := %01000000;
	MOVF       _konstantu+0, 0
	XORLW      9
	BTFSS      STATUS+0, 2
	GOTO       L__main60
	MOVLW      64
	MOVWF      PORTD+0
	GOTO       L__main30
L__main60:
L__main30:
;ffff.mpas,42 :: 		end;
	MOVF       _jekran+0, 0
	XORLW      4
	BTFSC      STATUS+0, 2
	GOTO       L__main15
	INCF       _jekran+0, 1
	GOTO       L__main12
L__main15:
;ffff.mpas,43 :: 		end;
	MOVF       _perisovka+0, 0
	XORLW      125
	BTFSC      STATUS+0, 2
	GOTO       L__main10
	INCF       _perisovka+0, 1
	GOTO       L__main7
L__main10:
;ffff.mpas,45 :: 		min2:=min2+1;
	INCF       _min2+0, 1
;ffff.mpas,46 :: 		if Button(PORTE, 0, 5, 0)then begin min2:=ch1+5; end;
	MOVLW      PORTE+0
	MOVWF      FARG_Button_port+0
	CLRF       FARG_Button_pin+0
	MOVLW      5
	MOVWF      FARG_Button_time+0
	CLRF       FARG_Button_activeState+0
	CALL       _Button+0
	MOVF       R0+0, 0
	BTFSC      STATUS+0, 2
	GOTO       L__main62
	MOVLW      5
	ADDWF      _ch1+0, 0
	MOVWF      _min2+0
L__main62:
;ffff.mpas,47 :: 		if Button(PORTE, 1, 5, 0)then begin ch2:=ch2+1; end;
	MOVLW      PORTE+0
	MOVWF      FARG_Button_port+0
	MOVLW      1
	MOVWF      FARG_Button_pin+0
	MOVLW      5
	MOVWF      FARG_Button_time+0
	CLRF       FARG_Button_activeState+0
	CALL       _Button+0
	MOVF       R0+0, 0
	BTFSC      STATUS+0, 2
	GOTO       L__main65
	INCF       _ch2+0, 1
L__main65:
;ffff.mpas,48 :: 		if min2>=10 then begin min1:=min1+1; min2:=0 end;
	MOVLW      10
	SUBWF      _min2+0, 0
	BTFSS      STATUS+0, 0
	GOTO       L__main68
	INCF       _min1+0, 1
	CLRF       _min2+0
L__main68:
;ffff.mpas,49 :: 		if min1>=6 then begin ch2:=ch2+1; min1:=0 end;
	MOVLW      6
	SUBWF      _min1+0, 0
	BTFSS      STATUS+0, 0
	GOTO       L__main71
	INCF       _ch2+0, 1
	CLRF       _min1+0
L__main71:
;ffff.mpas,50 :: 		if ch2>=10 then begin ch1:=ch1+1; ch2:=0 end;
	MOVLW      10
	SUBWF      _ch2+0, 0
	BTFSS      STATUS+0, 0
	GOTO       L__main74
	INCF       _ch1+0, 1
	CLRF       _ch2+0
L__main74:
;ffff.mpas,51 :: 		if ((ch1>=2)and(ch2>=4)) then begin ch2:=0; ch1:=0 end;
	MOVLW      2
	SUBWF      _ch1+0, 0
	MOVLW      255
	BTFSS      STATUS+0, 0
	MOVLW      0
	MOVWF      R1+0
	MOVLW      4
	SUBWF      _ch2+0, 0
	MOVLW      255
	BTFSS      STATUS+0, 0
	MOVLW      0
	MOVWF      R0+0
	MOVF       R1+0, 0
	ANDWF      R0+0, 1
	BTFSC      STATUS+0, 2
	GOTO       L__main77
	CLRF       _ch2+0
	CLRF       _ch1+0
L__main77:
;ffff.mpas,52 :: 		end;
	GOTO       L__main2
;ffff.mpas,53 :: 		end.
	GOTO       $+0
; end of _main
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

7400 wrote:...
а с ммс картой придется работать софтово? это тоже наверное сильно земедлит систему
вместо клавиатуры думаю поставить несколько(5-8) кнопок наверное обработка займет гораздо меньшее время
для отрисовки думаю задействовать микрух 20 логики (ну или еще 1 пик)
как думаете оперативу вообще стоит ставить? или может на пике взять 120 байт их изменять и отрисовывать в разных местах экрана?
Вариантов всего 2 - либо действительно работать в кодах пика, и тогда все проблемы, как описАл Shaos, либо на пике пишется интерпретатор команд Форта, Бейсика или i8080, тогда оперативка просто необходима.
Посмотрите пример вот здесь:
viewtopic.php?t=9286

С ммс картой можно найти готовый код, но, к сожалению, на ассемблере... Вобщем-то все проблемы уже так или иначе решались - только вот как их соединить вместе на паскале... :(

Так что примеры есть - а что получится, когда автор проекта всё соединит, это во многом зависит от автора... :wink:

Вопрос с картинками решает админ форума - Shaos.
7400
Maniac
Posts: 254
Joined: 14 Jul 2011 02:18
Location: Гомель

Post by 7400 »

i8080 думаю лучший вариант
а сколько оперативы понадобится?

вопрос с картинками актуален :-?