Sida 2 av 4

Postat: 17 maj 2007, 19:47:32
av bengt-re
Visst har funderat på att använda PIC16F886-I/SO men det finns ju ingen som har den hemma så får förbli 16f876a ett tag till... Verkar som grossisterna inte fattat att den finns...

Postat: 17 maj 2007, 20:42:59
av squiz3r
:dead: Nu har jag tänkt helt fel! :S Jag har hela tiden menat 887, jag har bara blandat ihop dem :S:S Också har jg bestält en uppsättning med 877A :verysad:

Har du något blink-a-LED program till 887 också??

//Daniel A

Postat: 17 maj 2007, 21:05:14
av bengt-re
Det skall inte vara någon större skillnad på dem. Troligen går koden rakt av om du ändrar referenserna. Möjligen måste du confa något SFR som hör klockorna till, men kör du kristall så går det troligen rakt av.

Postat: 17 maj 2007, 22:30:32
av sodjan
OK... :-)
Man skulle kunna önska att de ändade lite mer i numrena på dom... :-)

887 är väldigt lik 877(A).

__CONFIG raden behöver sannolikt kompletteras/justeras.
Kolla INC filen och sidan om CONFIG registret i databladet.

Sedan kan det vara så (har inte kollat) att 887 (*om* man kör med
INTOSC) går igång med lite konstig hastighet. Även om INTOSC kan köra
upp till 8 MHz, så är det inte alla modeller som har det som default. Så en
liten justering av OSCCON kan behövas.

Jag tror att 887 har fler pinnar med analoga funktionen än vad 877A
har/hade, så kolla vad det står på POTRx sidorna om att stänga av ADC
och komparatorer.

Postat: 26 maj 2007, 17:22:30
av squiz3r
Jag ska ta mig i nack skinnet o göra det nu snart.

//Daniel A

Postat: 10 juni 2007, 11:49:06
av squiz3r
Jag tänkte köra lite med 877A eftersom jag har ett lager hemma nu. Men jag såg precis att det inte finns någin internOSC (?) :S Hur stabilt kan man köra med RC tekniken?? Hur snabb kan man få den? Eller ska jag direkt gå o köpa lite kristaller av dig (sodjan)??

Edit: Skulle jag kunna köra med en sån här: 74-640-01 och 65-848-58 (http://www.Elfa.se)

Edit 2: Eller klarar den bara 20Mhz kristal??


//Daniel A

Postat: 10 juni 2007, 12:47:43
av squiz3r
Jag har hittat en exempel kod til 887 :happy:

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PIC16F887. This file contains the basic code               *
;   building blocks to build upon.                                    *
;                                                                     *
;   If interrupts are not used all code presented between the ORG     *
;   0x004 directive and the label main can be removed. In addition    *
;   the variable assignments for 'w_temp' and 'status_temp' can       *
;   be removed.                                                       *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional            *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


	list		p=16f887	; list directive to define processor
	#include	<p16f887.inc>	; processor specific variable definitions


; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

	__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V



;***** VARIABLE DEFINITIONS
w_temp		EQU	0x71		; variable used for context saving
status_temp	EQU	0x72		; variable used for context saving
pclath_temp	EQU	0x73		; variable used for context saving

;**tle spodaj daš vse blabla EQU 0xZZ, kje jih lahko daš, poglej v datasheet.

stevec		EQU	0x20		;general purpose stevec
stevec_1	EQU	0x21		;števec, ko delam z RAMom

;**tle spodaj daš vse #define krneki neki druzga, kar jih maš.

#define		RS		PORTE,0
#define		E		PORTE,1

;tle spodaj daš pa še tabele za EPROM, èe ga tvoj PIC ima. Narediš tako:

		org  		0x2100       
		de  		"ASCII v tabeli"

;ali pa tako

		org  		0x210E       
		de  		0x00,0x01,0xFF


;**********************************************************************
	ORG     0x000             ; processor reset vector

	nop
  	goto    main              ; go to beginning of program


	ORG     0x004             ; interrupt vector location

	movwf   w_temp            ; save off current W register contents
	movf	STATUS,w          ; move status register into W register
	movwf	status_temp       ; save off contents of STATUS register
	movf	PCLATH,w	  ; move pclath register into w register
	movwf	pclath_temp	  ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere
;sem noter grejo interrupti. Rutine kveèjemu jih poklièeš od tle,
;ne pa uporabljat GOTO.

	movf	pclath_temp,w	  ; retrieve copy of PCLATH register
	movwf	PCLATH		  ; restore pre-isr PCLATH register contents
	movf    status_temp,w     ; retrieve copy of STATUS register
	movwf	STATUS            ; restore pre-isr STATUS register contents
	swapf   w_temp,f
	swapf   w_temp,w          ; restore pre-isr W register contents
	retfie                    ; return from interrupt



main

; remaining code goes here


;Tle noter pa naprej kuckaš, kaj bo kje. Zaèneš nekako tako


;PORTA ON
;Nastavi PORTA na digitalen input

		BCF 		STATUS,RP0 			;Bank 0
		BCF 		STATUS,RP1 			;
		CLRF 		PORTA 				;Init PORTA
		BSF 		STATUS,RP0 			;Bank 1
		BCF 		STATUS,RP1 			;
		MOVLW 		0x07 				;Set RA<2:0> to
		MOVWF 		CMCON0 			;digital I/O
		CLRF 		ANSEL 				;Make all PORTA I/O
		MOVLW 		0xFF 				;Set RA<7:0> as inputs
		MOVWF 		TRISA 				;
		BCF 		STATUS,RP0 			;Bank 0
		BCF 		STATUS,RP1 			;
;in tako nastaviš vso periferijo, ki jo misliš rabit. 
;Vse inicializacije, tudi za LCD, daš tle, ali kot rutina
;ali kot klic rutine.
;potem narediš pa
start

;nekaj kode, ki more skoz laufat
;in se ti izvaja skozi. Kot while(1){} v C - ju
		call		subrutina1

		goto		start
;potem pa tu pišeš subrutine
subrutina1
		;kup ukazov
		nop

		return


	END                       ; directive 'end of program'
Jag ska försöka rensa upp koden och göra ett enkelt blink-a-LED program till den :)

//Daniel A

Postat: 10 juni 2007, 13:35:09
av sodjan
> Edit 2: Eller klarar den bara 20Mhz kristal??

*Det* är en sak där databladet brukar vara helt 100% kristallklart...
Var det inte det i detta fall ??

Postat: 10 juni 2007, 13:59:47
av squiz3r
Helt kristalklart tycker jag inte det var.. Men jag fick syn på det efter att jag hade "edit 1" därför skrev jag "edit 2".

Mvh. Daniel A

Postat: 10 juni 2007, 14:25:33
av sodjan
> Men jag fick syn på det efter att jag hade "edit 1" ...

OK, men om du fick syn på det då, så förstår jag inte frågan i "Edit 2".
Eller var det bara en dubbelkoll att det du hade fått syn på stämmde ?

Generellt sätt gäller att PIC16 har 20 Mhz som max hastighet
och PIC18 40 Mhz (med ett par undantag)...

Postat: 10 juni 2007, 17:37:27
av squiz3r
Det var för att dubbelkolla, eftersom jag hade för mig att nano-watt prylarna kunde ha snabbare kristal, men nu kom jag på att jag hade förväxlat dem igen, 877A har ju inte nano-watt... :wacko:

Varför är 32,7....Mhz så billiga?? Den billigaste 20Mhz är ju många många ggr dyrare.. :cry:

//Daniel A

Postat: 10 juni 2007, 17:43:47
av sodjan
> att nano-watt prylarna kunde ha snabbare kristal

Nja, en skillnad är att nanowatt modellerna normalt har en 8 MHz
INTOSC, mot 4 MHz för de med den äldre interna oscillatorn, för
de som har den. Kristall alternativen är dock de samma.

På vissa nyare PIC18 med nanowatt så kan denna 8 MHz INTOSC
även "växlas upp" till 32 Mhz via en 4x PLL. Trevligt...
Jag har dock inte sett denna finnes på någon PIC16 (än)...

Postat: 1 juli 2007, 22:04:18
av squiz3r
Jag känner mig minst saggt lite korkad.. Först nu förstår jag att PIC'en bara vill ha fasta världen på kristallen.... Är det någon som har testat köra på något annat värde, tex. 19,1700Mhz?

//Daniel A

Postat: 1 juli 2007, 22:10:11
av bos
squiz3r skrev:Jag känner mig minst saggt lite korkad.. Först nu förstår jag att PIC'en bara vill ha fasta världen på kristallen.... Är det någon som har testat köra på något annat värde, tex. 19,1700Mhz?
På vad sätt, menar du, att t.ex 19.1700MHz inte skulle vara ett fast värde?

Postat: 1 juli 2007, 22:16:19
av squiz3r
Jag menar att i data bladet står det att 4 8 och 20Mhz går.

Mvh. Daniel A