
Asm. Funderingar hos en nybörjare.
Re: Asm. Funderingar hos en nybörjare.
En roterande enkoder med inbyggd tryckknapp eller en knapp bredvid räcker till mycket.
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
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.
Re: Asm. Funderingar hos en nybörjare.
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..
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.
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
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!!!
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!!!
Re: Asm. Funderingar hos en nybörjare.
Ganska så...Hur "lätt" är det att använda en roterande encoder då?
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
Men gör du som jag föreslås behövs inga exakta delays, se annars:Tror jag skall börja med att fundera hur jag skriver delayrutinerna.
http://www.piclist.com/techref/piclist/ ... /delay.htm
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
Jag antar att du syftar på detta.

Vilken bra sida du länkade till. In med ett par värden och VIPS, där var koden! Tack!
Just nu är det dock väldigt mycket grekiska för mig.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.

Vilken bra sida du länkade till. In med ett par värden och VIPS, där var koden! Tack!

Re: Asm. Funderingar hos en nybörjare.
> 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 ?
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...
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 ?
Notera att *moderna* PIC's alltid reset'ar till första program adressen (somThe 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.
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...
- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
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.

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.

Re: Asm. Funderingar hos en nybörjare.
> 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.
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.
- 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.
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
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
Re: Asm. Funderingar hos en nybörjare.
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.
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 det kan den inte rent mekaniskt. Den har knäpplägen.Men säg att din encoder stannar precis i omslagsområdet för kanal A
Re: Asm. Funderingar hos en nybörjare.
> 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...
)
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...

- Housepainter
- EF Sponsor
- Inlägg: 1318
- Blev medlem: 19 juli 2006, 18:50:38
- Ort: Borås
Re: Asm. Funderingar hos en nybörjare.
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!
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!

Re: Asm. Funderingar hos en nybörjare.
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.
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.