Nybörjarhjälp till pickit 2 sökes

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 8592
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av AndersG »

Varför lära sig assembler i 6-12 mån om man ändå tänkt gå vidare till C senare?
Om du har programmerarbakgrund så är det frågan om veckor, som Sodjan sade. Poängen är inte att lära sig assembler per se, utan att lära sig hur en PIC fungerar. Att programmera PIC är så maskinnära du kan komma. Problemet är att du döljer stora delar av PICens arkitektur om du programmerar i C eller BASIC. Programmerar du I assembler så ser du bättre hur PICen fungerar.

Verkar som vi har diskussion #654583 igen ;)
GustafRG
Inlägg: 6
Blev medlem: 13 juni 2009, 01:49:35

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av GustafRG »

Krajan:
Ingen orsak. Delay-funktionen får utföra för många operationer, vilket är fallet vid för lång delay. Då får man fel.

Sodjan:
Point taken. Jag själv tycker att jag har hyffsat god förståelsen för hur PIC:en är uppbyggd men får absulut problem när jag stöter på ett nytt problem. Flera gånger har jag fått ledning av kod i Assembler för hur jag kan lösa problemet, men skrivit min egen kod i C.
Jag anser dock att om man redan kan C och har en grundläggande förståelse för hur en dator är uppbyggd finns inget själv-ändamål att lära sig assembler för att programmera PIC. Vill man lösa problem med Assembler går det även utmärkt att fälla in i C-koden.
Senast redigerad av GustafRG 3 augusti 2009, 23:17:55, redigerad totalt 1 gång.
Användarvisningsbild
FCS
Inlägg: 13
Blev medlem: 3 augusti 2009, 18:17:10
Ort: Göteborg

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av FCS »

Hej hej, här kommer första inlägget för mig på forumet! :)

Har faktiskt tänkt beställa just den PIC-programmeraren. Tänkte att jag utan större beskymmer skulle förstå hur PICen fungerade då jag läst en kurs i Maskinorienterad programmering. Där lärde vi oss hur register och dylikt fungerade, programmera i både assembler och C. Men nu när jag ser koden som varit som exempel här blev jag lite förvirrad. Kände inte igen kommandon, dom va inte dom jag lärde mig. Finns det olika varianter av assembler?

Spanade runt lite på kurshemsidan och såg att det va ett chip från Motorola (68HC12) som vi hade under laborationerna. Vilket om jag förstod det lilla jag lästa om det på några trådar va ett lite mer avancerat alternativ till en PIC? (Har ingen som helst erfarenhet av PICs, vad jag vet om iaf...)

Någon som har någon kommentar till detta? Skulle vara mycket uppskattat.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av E85 »

68HC12 är en 16-bitars processor. Kan tänka mig att det är därför det skiljer men är ingen expert på assembler (som sagt). Alla assembler-instruktioner finns i databladet om du vill kika närmare på dessa. C-koden ska inte skilja så mycket förutom namn på registren.

Det kan även vara värt att kolla på Atmels 8-bit AVR-serie då de föredras framför PIC16/18 av vissa. Jag har provat PIC18 tidigare och köpte nyligen en http://www.electrokit.se/utvecklingsver ... e_41003063 sån programmerare (för AVR) och den funkar fint och är enkel att ta med till laptopen. Finns även gratis C-kompilator till Windows och Linux.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

> Där lärde vi oss hur register och dylikt fungerade, programmera i både assembler och C.

Låter som en väldigt bra grund. Du har ett stort försprång framför de flesta andra "nybörjare" här... :-)

> Men nu när jag ser koden som varit som exempel här blev jag lite förvirrad.
> Kände inte igen kommandon, dom va inte dom jag lärde mig.

Har du kört en annan processorarkitektur än den du tittar på nu, så ja, det
skilljer sannolikt en hel del.

> Finns det olika varianter av assembler?

Assembler är det programmeringspråk som den specifika processor arkitekturen kan köra.
Själva syntaxen mellan olika assemblers kan skilja ganska mycket, men den grundläggande
funktionen kan vara mer eller mindre ungefär lika (läsa/skriva till register o.s.v), det hetar
bara lite annorlunda.

> C-koden ska inte skilja så mycket förutom namn på registren.

Hm. Det finns ett problem om man tror att bara för man kan programmera i C för
*en* processor så kan man med automatik programmera alla andra processorer.
Problemet (och det är helt oberoende av vilket programmeringsspråk man använder) är
att det kan vara ganska olika *metoder* att lösa ett visst problem beroende på vad de olika
processorerna har för svaga resp starka egenheter.

> Vilket om jag förstod det lilla jag lästa om det på några trådar va ett lite mer avancerat alternativ till en PIC?

Kollade lite snabbt på 68HC12. Det är en något upphottad variant av den gamla 6800 arkitekturen.
Jag skulle inte vilja kalla den en "16 bitars processor" så där rakt av. Vissa delar kan hanteras som 16 bitar
men till största delen är den en vanlig 8 bitars processor. Alla kontrollregister och portar är t.ex 8 bitar.
PIC24 t.ex är en betydligt modernare och kraftfullare processor än 68HC12 med fulla 16 bitar hela vägen.
Användarvisningsbild
FCS
Inlägg: 13
Blev medlem: 3 augusti 2009, 18:17:10
Ort: Göteborg

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av FCS »

Men om det är snarlik syntax så hoppas jag det blir en relativt lätt inlärning. Kul med lite utmaningar så det ska nog gå av sig självt. Tyckte fakiskt mer om ASM än C, tyckte inte alls illa om C på något sätt men när man använde sig av ASM kändes det som att man hade mer kontroll över vad processorn gjorde och inte borde göra :)

Läste något om att stacken skiljer sig mellan 68HC12 och en PIC. På 68HC12 pekade man ut en startplats i minnet som fungerade på som stack, vilket var lite farligt om man hade gjort en felaktig IRQ- rutin. Men om jag fattade det hela rätt så hade PICen särskilda register som stack? Och på denna stacken kunde man inte lagra data temporärt som på 68HC12 utan bara återhopps adresser?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

> men när man använde sig av ASM kändes det som att man hade mer kontroll över vad processorn gjorde och inte borde göra

Men ASM har du 100 % kontroll. Med C så delar du och kompilatorn på kontrollen... :-)

> Men om jag fattade det hela rätt så hade PICen särskilda register som stack?

Ja, på PIC16 är de inbyggda i hårdvaran och kan inte nås från koden. SAmma sak
på PIC18 men det finns en viss kontroll från koden. Kolla databladen, det är
tydligt beskrivet där.

> Och på denna stacken kunde man inte lagra data temporärt som på 68HC12 utan bara återhopps adresser?

Korrekt. Man gör helt enkelt inte så på PIC. Databladet har detaljerna.
Sedan kan man naturligstvis implementera en helt egen "stack" i programvaran, så gör
t.ex de flesta C kompilatorer. Men det är en lite annorlunda sak...
Användarvisningsbild
FCS
Inlägg: 13
Blev medlem: 3 augusti 2009, 18:17:10
Ort: Göteborg

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av FCS »

Har inte beställt något ännu så jag har inte kollat upp vilket datablad det är jag ska läsa. Kollar mest upp lite basdata som kunde vara bra att veta innan jag började plöja databladet.

Men ja får tacka så mycket för svaren. Kommer tyvärr inte få användning av min nya kundskap fören om några veckor när jag får lite mer fritid. :|
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

När det gäller de rena arkitektur frågorna så är ju t.ex allal PIC16 *i princip* lika.
Och alla PIC18 är *i princip* lika. Så du kan börja med ett datablad för en vanlig
modell. Eller kolla här http://www.jescab.se/Datablad.html vilket var tänkt
som en introduktion till PIC datablad, innan jag tröttnade halvvägs... :-)

Annars är ju PIC16F690 ett bra tips, den ingår ju som exempel när man handlar
PICkit2 med experimentkortet. De första kapitlen där gäller i princip för alla PIC16.
Sedan finns även arkitektur kapilten i "Midrange Reference Manual" :
http://ww1.microchip.com/downloads/en/D ... 33023a.pdf
Annars är Ref Manual bra, det är lite mer "snackig" där databladen kan vara lite "torra"...
Användarvisningsbild
FCS
Inlägg: 13
Blev medlem: 3 augusti 2009, 18:17:10
Ort: Göteborg

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av FCS »

Nä men va trevligt. Då har man lite att läsa när man åker till jobbet då =) tack än en gång
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

Nu försöker jag lära mig lite mer av lektionerna som följde med min pickit2 men jag förstår inte lektion 7 för det står att lamporna "rotera" och sedan ska man kunna trycka till på strömbrytaren som sitter på kortet så kommer dom rotera i motsatt håll. Men när jag testar koden så fungerar det inte :?

Här är koden:

Kod: Markera allt

#include <p16F690.inc>
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

     cblock     0x20
Delay1              ; Assign an address to label Delay1
Delay2
Display             ; define a variable to hold the diplay
Direction
LookingFor
     endc

     
     org 0
Start:
     bsf       STATUS,RP0          ; select Register Page 1
     movlw     0xFF
     movwf     TRISA               ; Make PortA all input
     clrf      TRISC               ; Make PortC all output
     movlw     0x10                ; A2D Clock Fosc/8
     movwf     ADCON1
;     bcf       STATUS,RP0          ; back to Register Page 0

     bcf       STATUS,RP0          ; address Register Page 2
     bsf       STATUS,RP1     
     movlw     0xF7                ; we want all Port A pins Analog, except RA3
     movwf     ANSEL
     bcf       STATUS,RP0          ; address Register Page 0
     bcf       STATUS,RP1
     
     movlw     0x01
     movwf     ADCON0              ; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module
     movlw     0x08
     movwf     Display
     clrf      Direction
     clrf      LookingFor          ; Looking for a 0 on the button
MainLoop:
     movf      Display,w           ; Copy the display to the LEDs
     movwf     PORTC
     nop                           ; wait 5uS for A2D amp to settle and capacitor to charge.
     nop                           ; wait 1uS
     nop                           ; wait 1uS
     nop                           ; wait 1uS
     nop                           ; wait 1uS
     bsf       ADCON0,GO           ; start conversion
     btfss     ADCON0,GO           ; this bit will change to zero when the conversion is complete
     goto      $-1
     movf      ADRESH,w            ; Copy the display to the LEDs
     movwf     Delay2

A2DDelayLoop:
     incfsz    Delay1,f            ; Waste time.  
     goto      A2DDelayLoop        ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
     incfsz    Delay2,f            ; The outer loop takes and additional 3 instructions per lap * 256 loops
     goto      A2DDelayLoop        ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
                                   ; call it a two-tenths of a second.

     movlw     .13                 ; Delay another 10mS plus whatever was above
     movwf     Delay2
TenmSdelay:     
     decfsz    Delay1,f
     goto      TenmSdelay
     decfsz    Delay2,f
     goto      TenmSdelay

     btfsc     LookingFor,0
     goto      LookingFor1
LookingFor0:
     btfsc     PORTA,3             ; is the switch pressed (0)
     goto      Rotate
     bsf       LookingFor,0        ; yes  Next we'll be looking for a 1
     movlw     0xFF                ; load the W register incase we need it
     xorwf     Direction,f         ; yes, flip the direction bit
     goto      Rotate

LookingFor1:
     btfsc     PORTA,3             ; is the switch pressed (0)
     bcf       LookingFor,0
     
Rotate:
     bcf       STATUS,C            ; ensure the carry bit is clear
     btfss     Direction,0
     goto      RotateLeft
RotateRight:
     rrf       Display,f
     btfsc     STATUS,C            ; Did the bit rotate into the carry?
     bsf       Display,3           ; yes, put it into bit 3.

     goto      MainLoop
RotateLeft:
     rlf       Display,f
     btfsc     Display,4           ; did it rotate out of the display
     bsf       Display,0           ; yes, put it into bit 0
     goto     MainLoop
     
     end
Jag kan inte se var det är fel.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

Stega igenom det i MPLAB/SIM och sätt "watch" på rellevanta register
så brukar det visa sig vad det är som inte fungerar som tänkt.
Är det en kod tagen ur dokumentationen så borde den ju fungera...
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

Vet inte om den ska vara i den här tråden men men :roll:
Jag har har köpt en labbplatta och vill veta vart de olika pinnarna från PICkit 2 kontrollen går till. Såhär ser det ut:
De som jag har markerat rött runt är det jag undrar var de går till processorn.
Bild

Edit: Jag har en PIC16F690
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43205
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av sodjan »

Märkligt...
Är du helt säker på att det inte finns ett schema i dokumentationen ?
Men oavsett det så kan du vara övertygad om att de går till rätt pinne.
Vdd till Vdd, GND till GND, PGC till PGC, PGD till PGD o.s.v.
Det är kanske bättre att du talar om vad det är för problem du vill lösa.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Nybörjarhjälp till pickit 2 sökes

Inlägg av Crille93 »

> Det är kanske bättre att du talar om vad det är för problem du vill lösa.
"De som jag har markerat rött runt är det jag undrar var de går till processorn." :roll:
Alltså, vilka I/O går dom till?
Sedan vilka pinnar är Vdd, GND, PGC, PGD osv. Jag letade i databladet men jag hittade inget :?
Skriv svar