Steget från en PICkit2 -> "Riktigt projekt"

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av sodjan »

Fundera lite på hur DECFSZ fungerar så ser du nog att det fungerar utmärkt.
Kör det t.ex i MPALB/SIM och studera värderna i registren.

> Hur blir det då så att det blir 256 loopar?

Från "noll" och tillbaka till "noll" är 256 steg.

> [ 0001 0000 0000 = 256 ]

Det där är fler än 8 bitar. Hur menar du ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9076
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av AndersG »

Du har aldeles rätt i att variabler bör ges ett värde explicit, även om vissa register har definierade värden efter en powerup. Detta finns beskrivet i handboken, se tex TABLE 2-1: PIC16F685/687/689/690 SPECIAL REGISTERS SUMMARY BANK 0
lolzor
Inlägg: 16
Blev medlem: 12 januari 2009, 16:40:46

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av lolzor »

> Fundera lite på hur DECFSZ fungerar så ser du nog att det fungerar utmärkt.
Kör det t.ex i MPALB/SIM och studera värderna i registren.

Vet att DECFSZ minskar värdet med 1 tills dess att den blir 0 då den hoppar över, och nu har jag kommit underfund med hur ni menar tror jag ;D
Delay räknas ner från 255-0 -> 256 steg, och sen går den på nästa instruktion. Således borde delay alltså ha binära värdet [ 1111 1111 = 255 ] , och 8 bitar långt? :D var det som inte gick in helt i skallen först ;p

OT: Hittade för övrigt en mycket bra förklaring på detta när ja googlade det; http://www.pictutorials.com/INCFSZ-DECFSZ.htm
Är iofs en sida för "PIC16x84 - basics", men tyckte att de förklarade det väldigt lättsamt och lättförståeligt (är alltså själva assembler programmeringen, och en förklaring av kodspråket m.m)!

Edit: hela instruktionsserien http://www.pictutorials.com/Flash_Tutorials.htm
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av sodjan »

> Således borde delay alltså ha...

Var är "delay" ? Det finns inget som heter så i den kod du postade.

> alltså ha binära värdet [ 1111 1111 = 255 ]...

menar du delay1 och/eller delay2 ?

Flest "varv" i loopen blir det om man startar med [0000 0000] (h'00') från början.
Och det är det ju garanterat f.o.m *andra* varvet och framåt...

> Du har aldeles rätt i att variabler bör ges ett värde explicit,

Ja, om det har någon betydelse, det har det inte i detta fall (i praktiken). Om
inte fördröjningen *första* gången är viktig. I detta fall betyder det bara att
första "blinket" kan bi lite vad som helst, men det borde inte spela någon roll...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9076
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av AndersG »

Ja, om det har någon betydelse
Det är helt enkelt "defensive programming" att alltid initiera variabler, även om det inte alltid behövs som i detta fall.
lolzor
Inlägg: 16
Blev medlem: 12 januari 2009, 16:40:46

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av lolzor »

Älskar det faktum att tredje året på gymnasiet överlag erbjuder ett fantastiskt schema med långa sovmorgnar så man kan sitta och nöta PIC;s ;)
Jag är helt euforisk just nu! Har lyckats få ihop ett välfungerande program som ger en "ljusvåg" från tredje lampan till höger, så att lamporna i tur och ordning släcks åt vänster för att sedan börja om igen från höger lampa tre" :-D (lite svårt att förklara, måste ses, haha )

Det som känns ännu bättre är att detta har gjorts UTAN att jag har läst igenom mer än den lektionen för hur man satte igång en lampa på PIC-kiten i "manualen" (och förstås med lite trevande hjälp/självlärningsuppmanande om delayloopar härifrån :) .), och att jag hade tillgång till ett "kommandoregister", med vad var kommando gör/gjorde. Helt enkelt enligt metoden "trial and failure" förr eller senare lyckas man ju! :)
Som sagt, helt euforisk inombords när PIC;en gjorde som jag ville, efter jag vet inte hur många 10-tals minuters arbete (minst en timme i alla fall ;p )

Ska nämnas att jag är mycket medveten om att mitt program knappast är optimalt kodat, och att jag troligen har gjort bra mycket mer jobb än vad som kanske egentligen behövs, men man måste ju börja någonstans :)

( Tog för övrigt bort delar av "template-koden" från MPLAB, så att det blir en avsevärt kortare post, och bara relevant, egenskriven kod nedan ) :

Kod: Markera allt


; HELT Hemmasnickrat program som blinkar LED;s från tredje lampan till höger åt vänster, och  det funkar!!! :-D 

main

BSF STATUS,RP0	; till register 1, där TRISC finns
BCF TRISC,2		; Gör C2 till output
BCF TRISC,1		; Gör C1 till output
BCF TRISC,0		; Gör C0 till output
BCF STATUS,RP0	; tillbaka till register 0

;Definera variabler/Fil-värden

ADDLW D'2000
ADDWF 0x7C,F
ADDWF 0x7B,F
CLRW 		; Rensar ut W-registret.

; Själva "LED-blinkandet"

Lolboll

BCF PORTC,0
BCF PORTC,1
BSF PORTC,2 ; sätter på LED;en vid C2
goto Delay


nasta

BCF PORTC,2 ; borde stänga av LED...
BSF PORTC,1 ; Och sätta på nästa...
goto Annuendelay	; Om "goto nasta" sätts efter att C1 har gjorts till output och man är tillbaka vid register 0, lyers LED två från vänster som planerat...
BCF PORTC,1 ; borde stänga av LED;en efter delay...

Tranbär

goto Mesta

Mesta

BCF PORTC,1
BSF PORTC,0 ; Och sätta på nästa...
goto Forsening	; Om "goto nasta" sätts efter att C1 har gjorts till output och man är tillbaka vid register 0, lyers LED två från vänster som planerat...
BCF PORTC,0 ; borde stänga av LED;en efter delay..

blåbär
goto Lolboll ; gå till starten av blinkandet igen




;----------------------------------------------------------;

;Delayloopar

Delay
DECFSZ 0x7C,F
goto Delaytva
goto nasta

Delaytva		; Förlänger delayen ännu mer
DECFSZ 0x7B,F 
goto Delaytva
goto Delay

;--------------------------------------------------------;

;Delayloop för "nasta" 

Annuendelay

Trötter
DECFSZ 0x7C,F
goto Prosit  	; Födröj delayen lite mera genom att gå till pros.
goto Tranbär

Prosit		; Förlänger delayen ännu mer
DECFSZ 0x7B,F 
goto Prosit		; Sackar ner 2000/loopning och sedan går till trötter
goto Trötter

;---------------------------------------------------------------------;


; Delay variant nr två / FÖR "Mesta" . 

Forsening

Forseningett
DECFSZ 0x7C,F
goto Forseningtva
goto blåbär	; Tillbaka till blåbär // start efter Elayen

Forseningtva		; Förlänger delayen ännu mer
DECFSZ 0x7B,F 
goto Forseningtva
goto Forseningett

;--------------------------------------------------------;

Wiiieeee! Erik går mot nya höjder!
Nu ska jag sova, lycklig och ännu mer taggad på att fortsätta lära mig! :)
God natt!
Användarvisningsbild
korp
Inlägg: 1216
Blev medlem: 30 maj 2006, 02:21:18
Ort: Strömstad

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av korp »

Det är kul när grejorna fungerar :) Lite av samma känslosvall som infann sig på julafton när man var liten. Det är inte så många saker som berör på det viset när man blir äldre.
Vet inte om jag förstår det där rätt med Tranbär och blåbär, men labels med svenska tecken bör du nog undvika.
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av sodjan »

Några småsaker...

> ...och bara relevant, egenskriven kod nedan...

Nja, det saknas minst en *mycket* rellevant del i din kod-postning.
Bl.a hela CONFIG delen och rederna där PIC-modell specificeras.
Eftersom du ändå postade ganska mycket så finns det ju ingen
anledning att plocka bort det.

Eller generellt...
Om du inte vill posta hela koden, så redigera och *testkör* det som
du vill visa först, innan det postas. D.v.s att det som du postar fortfarande
är en komplett *körbar* kod. Bara om det gäller specifika frågor kring en
speciell instruktion eller liknande så fungerar det med några enstaka rader.

Att *inte* använda åäö i labels eller liknande är ganska självklart.

> BSF STATUS,RP0 ; till register 1, där TRISC finns

Först så är "register" helt fel.
Notera att på de flesta moderna processorer (där det finns 4 banker)
så är korrekt kommentar "till bank 1 eller 3". Om det blir 1 eller 3
beror på hur RP1 är satt vid detta tillfälle.

Generellt, sätt *aldrig* RP0/RP1 "för hand", använd BANKSEL.

> Gör C2 (C1, C0) till output

Heter RC2, RC1 och RC0 och inget annat.

> ADDLW D'2000

W är ett 8-bitars register och kan *aldrig* ha värdet D'2000 !!!

> goto Mesta
>
> Mesta

Lite onödigt... :-)
lolzor
Inlägg: 16
Blev medlem: 12 januari 2009, 16:40:46

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av lolzor »

Ska ta åt mig det ni har skrivit :), inte förvånad över att det är mycket fel, men blev bara så lycklig över att det funka haha ;D
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av sodjan »

Ja, inget av det jag skrev hindrar sannolikt att det skulle fungera. :-)
Det jag pekade på är mer sådant som ger ett intryck av ett det var
mest tur att det fungerade, inte p.g.a av genomtänkt design... :-)

En annan liten sak förresten... :

> CLRW ; Rensar ut W-registret.

Varför ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9076
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Steget från en PICkit2 -> "Riktigt projekt"

Inlägg av AndersG »

Ska ta åt mig det ni har skrivit
Ta det inte på fel sätt, vi försöker bara ge konstruktiv kritik.
Skriv svar