Enkelt experiment med 16F628A:Tänd en lysdiod

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Enkelt experiment med 16F628A:Tänd en lysdiod

Inlägg av v-g »

Ja så har man då börjat treva lite i denna DIL18 och kommit en bit.

Vad som gjorts då? Jo man trycker på en knapp som är kopplad till en ingång så tänds en lysdiod på en annan utgång i c:a 1 sekund. Avancerat till 1000 :D

Nåväl eftersom jag började på noll så tog det cirka 5 timmar. Barnen bråkade också rätt mycket <--skyller på :roll:

Sen upptäckte en annan att MPSIM är långt ifrån perfekt och inte överensstämmer med verkligheten allt för mycket.

Men skam den som ger sig till slut fungerade det! Dessutom fuskkikade jag inte på andra utan har själv listat ut varför det aldrig funkade med andra ord så blev det en del :wall: :jimmyhacker:

Koden bjuder jag på för den som vågar sig på detta våldsamt avancerade projekt.

Kod: Markera allt

;***************************************************************
	list	p=16F628a
	#include	<p16F628a.inc>
	__CONFIG	_CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF &_INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF
	ERRORLEVEL -302
;***************************************************************
z1	equ	2Ah
z2	equ	2Bh
z3	equ	2Ch
;***************************************************************
	org	0x0000
	GOTO	INIT
	NOP
	NOP
	NOP
	NOP
	org	0x0005

INIT
	BANKSEL PORTA	;Select Bank 0
	MOVLW b'111'	;Set W to 00000111
	MOVWF CMCON		;Turn OFF the comparators
	CLRF PORTA		;Initiate PORTA
	CLRF PORTB		;Initiate PORTB
	BANKSEL TRISA	;Select Bank 1
	CLRF TRISA		;Initiate TRISA
	CLRF TRISB		;Initiate TRISA
	MOVLW b'10'		;Set W to 00000010
	MOVWF TRISA		;Which means RA1 as input
	BANKSEL PORTA	;Select Bank 0
	MOVLW	b'1000'	;Set W to 00001000
	MOVWF	PORTB	;Set PORTB to the value stored in W (00001000
	CALL Delay		;Call the delay routine
	CLRF PORTB		;Clear PORTB (turn off the diode)
	
Main
	BTFSC PORTA,1	;If the button is pressed skip the next statement
	GOTO Main		;Repeat

	MOVLW	b'1000'	;Set W to 00001000
	MOVWF	PORTB	;Set PORTB to the value stored in W (00001000
	CALL Delay		;Call the delay routine
	CLRF PORTB		;Clear PORTB (turn off the diode)
	GOTO	Main	;Repeat
;***************************************************************
;***************************************************************
	subtitle	"Delayroutine"
Delay
	movlw	0x5
	movwf	z3
	movlw	D'137'
	movwf	z2
	decfsz	z1,f
	goto	$-1
	decfsz	z2,f
	goto	$-3
	decfsz	z3,f
	goto	$-5
	return
	END
Och såhär kan det se ut uppkopplat(notera i bildens ovankant att det finns roligare saker på G :hacker: ): RA1 är ingång och RB3 är utgång.

Bild

Så kommentarer: Vad är fel och vad är rätt?
Användarvisningsbild
JimmyAndersson
Inlägg: 26571
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Grattis!! :)
Välkommen till en ny värld, kan man nog också säga. :D

Jag har inte pysslat särskillt länge med assembler, men jag tycker det ser bra ut. Sedan att man kunde ha gjort några enstaka saker på ett annat sätt är bara en parantes.


Nu vet jag inte vilka instruktioner som 16F628A har, men några förslag:
T.ex för att sätta/clerara bit 3 (RB3) skulle du kunna använda BTG istället för MOVLW, MOVWF och CLRF. En annan grejj är att använda interrupt för att kolla RA1. Men för att bara göra det som koden gör så räcker det gott med ditt sätt. :)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Du menar BSF eller? (Bit Set f). Jag flyttade runt en del på labbdäcket innan det fungerade och då var det enklaste att använda mov för attt sätta alla höga. Tack för tipset dock! Man spar ju en instruktion på så sätt :)

Har kodat assembler i nåt halvår men då för en annan processor (med 250 instruktioner) Känns lite som en :shock: med så få nu.

Assembler är ju en aningens annan sak än när man sitter där uppe i C/basic/etc. Men rackars vilken respons!

Dags att koda vidare :jimmyhacker:
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> skulle du kunna använda BTG istället

PIC18-only, om jag inte minns *helt* fel...

> Sen upptäckte en annan att MPSIM är långt ifrån perfekt och inte överensstämmer med verkligheten allt för mycket.

Som t.ex ?

Återkommer senare i dag om koden, hinner inte nu
(ska fixa slutbetalningen och få nyckeln till våran nya bostadsrätt i Söderköping...)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

sodjan:Det som funkar perfekt i MPSIM funkar inte precis som man önskade i PIC'en (dvs inte alls). Troligen är det mer fel handhavandefel än MPSIM's fel.

Men funktionen (som man ser i registren) har sett likadan ut hela tiden i MPSIM.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Det som funkar perfekt i MPSIM funkar inte precis som man önskade i PIC'en (dvs inte alls).

Som t.ex ?

> Troligen är det mer fel handhavandefel än MPSIM's fel.

Svårt att veta utan att ha svar första frågan ovan.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Bitarna stegar som de ska i registren men det fungerade inte då. Efter ändrande i koden (och bitarna stegar likadant) så fungerar det. Bla funktionen av BTFSC fungerar i koden men INTE i picen. Kanske är fel att köra med "stimulus kontroller" för att sätta port hög/låg.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Kanske är fel att köra med "stimulus kontroller" för att sätta port hög/låg.

Nja, det är ju ett sätt att försöka efterlikna något *externt* till processorn
som händer. Någon trycker på en knapp eller liknande. Vad använde
du den till ? Du ska *inte* använda den funktionen till *utgångar* så klart !
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Finns det andra sätt att efterlikna (förrutom att sätta rakt i registren då) externa kontroller? Kan ju inte verktyget sååå bra precis.
Använde det bara för att simulera knappen. En rad för sätt RA1 hög nästa rad för att sätta den låg. (två rader bara för att det kändes snabbare :roll:)

Utgångarna/registrena kollade jag med SFR och watch.

Aldrig några fel/varningar vid quick build. (finns det förresten någon snabbknapp/möjlighet att fixa en till denna funktion?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om du använda stimulus funktionen för att simulera t.ex en knapp,
så är det väl helt rätt.

Ska ladda din kod i MPSIM lite senare och kolla.
Är koden i tråden fortfarande den aktuella ?
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Svar: JA

(den fungerar ju bra nu alltså så så är det inga problem)
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Svar: JA

Aha ! *Nu* förstår jag !
Koden du visade *från början* har alltså fungerat *hela tiden* !?

Ja ja. Jag är väl bara van vid att kod som visas normalt *INTE* fungerar... :-)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Rätt uppfattat, det var en beskrivning av problem som uppkom medan jag höll på.

Att fråga är en sak att själv finna på råd en annan så jag gav mig fanken på att lyckas och tillslut så.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Bra inställning! :tumupp: :tumupp: :bravo:

Förvänta dig dock att din omgivning kan finna dig ..... besvärlig ... till vissa tider.
Skriv svar