Asm. Funderingar hos en nybörjare.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: Asm. Funderingar hos en nybörjare.

Inlägg av BJ »

Okej. :)
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Asm. Funderingar hos en nybörjare.

Inlägg av E85 »

En roterande enkoder med inbyggd tryckknapp eller en knapp bredvid räcker till mycket.
Användarvisningsbild
Housepainter
EF Sponsor
Inlägg: 1318
Blev medlem: 19 juli 2006, 18:50:38
Ort: Borås

Re: Asm. Funderingar hos en nybörjare.

Inlägg av Housepainter »

Hur "lätt" är det att använda en roterande encoder då? Det hade ju varit en "snyggare" lösning. Men jag kommer få kämpa med varje del av programmeringen så det får inte vara för avancerat.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Asm. Funderingar hos en nybörjare.

Inlägg av E85 »

Finns kod för det mesta på nätet bara man söker... det är inte speciellt avancerat om det inte är jättenoga att den absolut inte tappar steg. Du sätter upp µC:n att få interrupt vid stigande flank på ena av enkoderns utgångar och i interruptrutinen kollar du ifall den andra utgången är hög eller låg. Är den hög har den snurrat åt ena hållet och låg så är det andra hållet. Alternativt samplar du den hela tiden och kollar efter förändringar.

edit: (död länk borttagen)
Det är lättare i C.. ;)
Senast redigerad av E85 31 mars 2010, 02:01:16, redigerad totalt 2 gånger.
Användarvisningsbild
Housepainter
EF Sponsor
Inlägg: 1318
Blev medlem: 19 juli 2006, 18:50:38
Ort: Borås

Re: Asm. Funderingar hos en nybörjare.

Inlägg av Housepainter »

Skall kolla upp detta närmre senare. Tack för tipset!

Tror jag skall börja med att fundera hur jag skriver delayrutinerna.

Men än så länge sitter jag och läser på om asm i allmänhet. Korvstoppning!!!
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9118
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Asm. Funderingar hos en nybörjare.

Inlägg av AndersG »

Hur "lätt" är det att använda en roterande encoder då?
Ganska så...

Kod: Markera allt

; Alps EC12 series rotary encoder connected to RA4, RA5
;
check_rbif
	BTFSS 	INTCON, RBIF 	; Was the cause PortB interrupt?
	GOTO 	other_int 		; no, check other interrupt

	MOVF 	ENC_PORT, W 	; Port B change caused interrupt.Read PortA
	andlw	b'00010000'		; Check if RB4 high
	btfsc	status,z
	goto	check_rbif_exit ; Nope

	call	delay_500us
	MOVF 	ENC_PORT, W 	; Read PortB again
	movlw	new
	andlw	b'00010000'		; Check if RB4 high
	btfsc	status,z
	goto	check_rbif_exit
							; RA4 was apparently still high, what about Rb3?
	MOVF 	ENC_PORT, W 			;
	andlw	b'00001000'		; Check if Rb3 high to determine direction
	btfsc	status,z
	goto	decrement
increment
	;incf	value
	movlw	value
	call	inc32z
	goto	check_rbif_exit
decrement
	;decf	value
	movlw	value
	call	dec32z

check_rbif_exit	
	BCF 	INTCON, RBIF 	; Clear the RAB interrupt flag.
	goto	exit_interrupt
Tror jag skall börja med att fundera hur jag skriver delayrutinerna.
Men gör du som jag föreslås behövs inga exakta delays, se annars:

http://www.piclist.com/techref/piclist/ ... /delay.htm
Användarvisningsbild
Housepainter
EF Sponsor
Inlägg: 1318
Blev medlem: 19 juli 2006, 18:50:38
Ort: Borås

Re: Asm. Funderingar hos en nybörjare.

Inlägg av Housepainter »

Jag antar att du syftar på detta.
AndersG skrev: Om du t ex har en 1MHz klocka och en 16-bits timer och sätter interrupt on overflow så får du en tick varje 0,262 sek (anta att timern matas med fosc/4). Då behöver du bara räkna upp till 329595 för 24 h :)
Med en 32-bitars räknare klarar du det elegant.
Just nu är det dock väldigt mycket grekiska för mig. :)

Vilken bra sida du länkade till. In med ett par värden och VIPS, där var koden! Tack! :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Asm. Funderingar hos en nybörjare.

Inlägg av sodjan »

> I dessa exempel så skrivs koden för PIC12F509

Det är ju lite trist att de börjar med en "base line" modell.
Det är väldigt få som jobbar med dom i dag och arkitekturen
(och därmed den nödvändiga programmeringen) har en del
konstigheter för sig som inte finns i de moderna PIC arkitekturerna.
Eftersom du även skriver att du har tillgång till 16F688 så är
den ett betydligt bättre val. En del av det som de skriver kring
12F509 kanske är rellevant, men mycket av det är det inte.

> Här är det tris jag undrar om. Varför skriver man inte movwf?

Det var så i de gamla PIC aktitekturerna. Om du vill slippa det
så är det enklast att undvika dom. Om inte, så är det bara att
läsa i listan med instruktioner i databladet. En fråga bara, du
försöker väl inte läsa den där tutorialen *utan* att sitta med
aktuellt datablad för 12F509 bredvid !?

> Vore tacksam för svar, även om frågorna berör grunderna i asm.

Vadå, "även om" ? :-)

Sen var det mycket bladder och gissningar kring det där med OSCCAL.
Det korrekta svaret finns i kapitel "4.7.1 EFFECTS OF RESET" i databladet
och det stämmer inte med något av inläggen i frågan här. Varför kollar inte
alla bara upp det i databladet innan man sprider desinformation här ?
The PC is set upon a Reset, which means that the PC addresses the last
location in the last page (i.e., the oscillator calibration instruction). After
executing MOVLW XX, the PC will roll over to location 00h and begin
executing user code.
Notera att *moderna* PIC's alltid reset'ar till första program adressen (som
man kanske förväntar sig)... *Dessutom* så är hela denna diskussion kring
laddning av OSCCAL bara rellevant för lite äldre arkitekturer. Använder du
en rimligt modern PIC så kan du glömma det helt...
Användarvisningsbild
Housepainter
EF Sponsor
Inlägg: 1318
Blev medlem: 19 juli 2006, 18:50:38
Ort: Borås

Re: Asm. Funderingar hos en nybörjare.

Inlägg av Housepainter »

Tack för dina svar! Har väntat på att PIC-kungen skulle vakna. :)

Nej, jag har faktiskt inte databladet till PIC12F509 bredvid mig. Av den enkla anledningen att jag inte kommer att jobba med den. Jag antog att man kunde lära sig en hel del utav koden ändå.
Sen tycker jag att det är lite meckigt att sitta och läsa på skärmen. Jag vill gärna ha papper att läsa på, och kunna stryka under partier som är viktiga och lärorika. Jag har skrivit ut delar av databladen till de PIC som jag har hemma. Men typiskt nog så har jag knappt något papper kvar till skrivaren. :?

Det finns säkert många saker som är självklart, men som jag inte har en aning om! :)

Tack för upplysningen om OSCCAL!

Just nu känns hela projektet som en bunt med godissnören som trasslat ihop sig! Men med er hjälp så lyckas jag lossa på dem, ett efter ett. :humm:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Asm. Funderingar hos en nybörjare.

Inlägg av sodjan »

> Jag antog att man kunde lära sig en hel del utav koden ändå.

Men koden var/är skriven för en 12F509 och då behöver du *det* databladet.
Det är där dina frågor kring koden besvaras (det gick ju inte så bra *här*... :-) )

Att bara ta kod för en 12F509 och försöka förstå den genom att titta i ett
datablad för (t.ex) en 16F688 är helt galet !

För att sedan avgöra hur rellevant det är för *din* processor, så får du jämföra
de aktuella delarna av databladen med varandra. Men personligen är jag tveksam
till att lära sig "PIC" genom en tutorial som är så pass över "bäst före" datumet...

Att skriva ut ett par datablad tycker jag är helt rätt i början. Dock kan du
med fördel hoppa över t.ex kapitlet med instruktionsuppsättningen och hela
sista delen med "electrical specifications" (eller vad det kallas). Även kapitlet
med "Development tools" kan du hoppa över. De viktiga delarna är de som finns
i början av databladen.

> Tack för upplysningen om OSCCAL!

Förralldel, det var ju bara att slå upp... :-)
Slutligen bara, ifall det inte framgick, koden i den PDF som du länkade till
var alltså helt korrekt. En del andra inlägg var lite tveksamma till det.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Asm. Funderingar hos en nybörjare.

Inlägg av Swech »

Det är inte helt lätt att läsa av en encoder.
Din kod har en bugg Anders G. Har själv fallit i den gropen

Du tittar bara på ena flanken på en av kanalen.
Utifrån denna flank avgör du om det kommit en puls och med andra kanalen avgör du riktning.
Men säg att din encoder stannar precis i omslagsområdet för kanal A
Och så börjar den att toggla A sporadikt
A: 001111000110011110010100011110101
B: 000000000000000000000000000000000
P 0 1 2 3 4 5 6 7 8

För felfri funktion så måste du räkna på båda flanker

A: 001111000110011110010100011110101
B: 000000000000000000000000000000000
P 0 1 0 10 1 0 1010 1 0101

Swech
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9118
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Asm. Funderingar hos en nybörjare.

Inlägg av AndersG »

OK. Sodjan, du har rätt som vanligt. Kan villigt erkänna att jag aldrig jobbat med de äldsta PIC-modellerna och nyare har som du noga påpekar ingen OSCCAL (med väl en OSCTUNE).

Kanske smartare att vår nybörjare startar med en 16F690 (som förjer med PICKit2 starterkittet) eller liknande, hellre än en 12F509.

Anyway... Och jag säger det varje gång: Starta med de PICKIT Lessons man kan ladda ned från Microchip. Man behöver inte ens ngn hårdvara, utan man kan simulera direlt i MPLAB.
Men säg att din encoder stannar precis i omslagsområdet för kanal A
Men det kan den inte rent mekaniskt. Den har knäpplägen.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Asm. Funderingar hos en nybörjare.

Inlägg av sodjan »

> Men säg att din encoder stannar precis i omslagsområdet för kanal A

Det måste då vara en encoder utan "snäpp". De flesta enkla encoders för
vanligt panelmontage för manuell inmatning brukar ha mer eller mindre
tydliga snäpp, och de stannar alltid i "stabila" lägen.

(AndersG han lite före... :-) )
Användarvisningsbild
Housepainter
EF Sponsor
Inlägg: 1318
Blev medlem: 19 juli 2006, 18:50:38
Ort: Borås

Re: Asm. Funderingar hos en nybörjare.

Inlägg av Housepainter »

Jag har sökt på Google efter tutorials i asm och PIC, och det är inte lätt att hitta något som är skrivet igår! Men jag är glad över det jag hittat.
Jag förstår att jag inte kan gå efter allt i dessa exempel. Men jag antar att en hel del är "standard". Det är trots allt i dessa "föråldrade" guider som jag har lärt mig grunderna, och även att få en lysdiod att blinka, och då med en 12F629. Men jag fick givetvis kolla i det aktuella databladet för att 'få till det'.

Finns det någon annan guide som tar upp asm-programmering till PIC som är nyare? Tipsa mig gärna!

Nu har jag räknat lite. :)
Om jag skall ha en display(7 pinnar?), två knappar(eller en rotary encoder), en kristall, MCLR, VDD och VSS så blir det 14 pinnar. Alltså borde detta projekt gå att utföra med en PIC16F688.
Detta givetvis på villkoret att jag lyckas skriva en kod som får plats i minnet.
Och storleken på minnet och hur mycket plats en kod tar har jag verkligen inget grepp om. Det var inte längesedan jag fick grepp på vilket som var bit och vilket som var byte.

Då var frågan vilken tråd jag skall börja dra i nu.. :)

Nu blev det liv i luckan! :)
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9118
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Asm. Funderingar hos en nybörjare.

Inlägg av AndersG »

Sodjan kommer att skälla på mig för denna:
http://www.covingtoninnovations.com/nop ... em2004.pdf

Japp, den är "dated" men ganska bra. Annars:

http://ww1.microchip.com/downloads/en/D ... %20(b).zip

Om du bara skriver koden och debuggar i MPLAB så berättar den även hur stor plats den tar. Koden således.
Skriv svar