PIC for dummies

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Breikus
Inlägg: 54
Blev medlem: 13 juli 2008, 09:24:20
Ort: Linköping

PIC for dummies

Inlägg av Breikus »

tänkte här öppna en tråd (tips från Sodjan) för dummies (som jag) som vill lära sej o förstå PIC från första början.

jag har köpt PICKit2 från kjell där det stod att man enkelt kan lära sej PIC från början men jag har ändå fastnat =P

så det första jag undrar är då över följande programrader:

----------------------------------------------------
Start
BSF STATUS,RP0 ;select Register Page 1
BCF TRISC,0 ;make I/O Pin C0 an output
BCF STATUS,RP0 ;back to Register Page 0
--------------------------------------------------------

jag fattar att man gör pinnen C0 till en utgång men..
va har man för nytta av att välja register page 1 och varför, och sen gå till register page 0? det står ju dessutom RP0 i bägge programrader vilket förvirrar mej ännu mer.. :shock:
kan man sedan ha helt olika programfunktioner genom att välja fler sidor?
Användarvisningsbild
JockeE
Inlägg: 330
Blev medlem: 4 augusti 2004, 08:46:50

Inlägg av JockeE »

Det beror på att registret TRISC ligger i minnesbank 1. Registret TRISC styr portriktningen (in/ut) för PORTC.

Nu vet jag inte vilken PIC du använder, men om du kollar i databladet för den aktuella PIC:en så har du nog ett kapitel som heter Memory Organization, där bör det finnas en Data Memory Map i vilken du kan se var de olika registren ligger.
Kapitlet beskriver också just detta med bankning av minnet.

När du fått grepp om varför man gör denna bankväxling är ett tips att man använder assemblerdirektivet BANKSEL i stället. Men det är kanske lite överkurs just nu.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK... :-)

"Bank" är ett begrepp som PIC använder och som du bör läsa på om.
Det finns i alla datablad ett kapitel i början som handlar om just det.

I korthet så är det så att en struktion som t.ex BSF eller BCF inte har
utrymme för alla adressbitar för att adressera hela minnet. Därför ligger
2 bitar i STATUS registret och de används automatiskt. Det gör att man
måste se till att dessa två bitar (RP0 och RP1) är rätt satta !

I mycket exempelkod ser man att man gör BCF/BSF direkt mot
STATUS RP0/RP1 bitarna, men BANKSEL är snyggare. Din kod borde
set ut så här :

Kod: Markera allt

Start
   BANKSEL   TRISC       ;select Page where TRISC is localted
   BCF       TRISC, 0    ;make I/O Pin RC0 an output
BANKSEL väljer automatisk rätt bank (d.v.s värde på RP0 och RP1) så
man slipper leta upp det aktuella registret i mimmes-mappen själv.

> va har man för nytta av att välja register page 1 och varför,

Därför att det är där som TRISC ligger ! Se minnesmapen i databladet !!

> och sen gå till register page 0?

Lite onödigt just i detta fall, det beror på vad man gör sedan.
Men ofta vill man ligga i Bank0 som "default"...

> det står ju dessutom RP0 i bägge programrader vilket förvirrar mej ännu mer..

Läs på om BSF/BCF !

> kan man sedan ha helt olika programfunktioner genom att välja fler sidor?

Man väljer *EN* bank i taget. Allt eftre behov. Som sagt, se kapitlet om
banks/memory o.s.v i databladet.
Användarvisningsbild
Breikus
Inlägg: 54
Blev medlem: 13 juli 2008, 09:24:20
Ort: Linköping

Inlägg av Breikus »

oki tack! det lossnar mer o mer nu :)
jag återkommer när det kommer nåt nytt jag inte reder ut =P
swaner
Inlägg: 1
Blev medlem: 26 september 2008, 13:39:57
Ort: Halmstad

Inlägg av swaner »

Köpte också picKit2 på Kjell och Co. Tänkte bara säga att deras "tutorial" är helt värdelös om man inte tidigare har programmerat pic. Jag satt länge som ett annat dumhuvud och fattade ingenting.

Ta dig istället en titt på den här: http://www.mstracey.btinternet.co.uk/pi ... icmain.htm. Då jag följde den föll många bitar på plats på en gång.

Lycka till!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Den där är snygg och många länkar till den.
Men den kod som den använder som exempel är inget vidare.

Man om man kör med rätt INC fil och struntar i att han hårdkodar
adresser till register, så blir det lite bättre ut.

Om man sedan struntar i att han använder en stendöd och väldigt
gammal processor och stämmer av allt mot ett modernt datablad
så blir det kanske användbart.

Tyvärr är väl alla tutorials på nätet på detta vis. Skrivet av amatörer.
De som skulle kunna skriva en bra tutorial vill antagligen inte göra det gratis...
Användarvisningsbild
Breikus
Inlägg: 54
Blev medlem: 13 juli 2008, 09:24:20
Ort: Linköping

Inlägg av Breikus »

Tack Swaner!

Har tittat på sidan du länkat till förut.. får nog ta en närmare titt på den en gång till :)
Användarvisningsbild
korp
Inlägg: 1216
Blev medlem: 30 maj 2006, 02:21:18
Ort: Strömstad

Inlägg av korp »

Jag tycker denna bok, som även går att läsa online, är ganska bra. Den fokuserar sig på 16F887 som iaf är en aktuell PIC.

Har dock lite svårt att uppskatta hur den ter sig för någon som är HELT ny på området. Har hittat några små sakfel, och en hel del lustiga formuleringar i boken som kräver att man läser dem ett par gånger för att förstå. Författarens modersmål är definitivt inte engelska...

Anyway, det är nog bättre att jag skriver en recension i en egen tråd, men jag tänkte bara tipsa om boken iaf. "Appendix B: Examples" är speciellt lättöverskådligt.

http://www.mikroe.com/en/books/picmcubook/
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Mikroelektronikas "bok" är betydligt bättre. En modern processor
och ganska OK kod (så bra som det går att göra i absolute mode :-) )
Användarvisningsbild
wombat
Inlägg: 721
Blev medlem: 6 november 2006, 16:39:08
Ort: Stockholm

Inlägg av wombat »

Hoppar in i tråden lite...

När jag sätter en PIC12F683 i labbplattan
så identifierar Xwisp 1.30 via min Wisp648(1.23)
den med device code och revision bits.

Men när jag kopplar in en 10F206 i 8-pin kapsel säger Xwisp
"device word 3FFF or FFFF, can not identify this target: defect,
unsuported, or 16x84 ERROR"

Har testar med 3 olika kretsar och triduppelkollat inkopplingen.

Blir galen!

Kan alla tre vara döda? :roll:

Jag som använder antistatmatta och armband samt
har grävt ned både katt och ebonitstav i skogen.

Wispen å xwispet skall ju supporta 10f206'an?

Hilfe! :oops:

(Kvar att testa är att löda fast en SOT-23 på en 8-pin sockel.)

/Wombat
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Hoppar in i tråden lite...

Gör inte det med en fråga som inte har med tråden att göra !
Finns ju absolut ingen anledning...

Så vitt jag vet har 10F serien inget ID.
Du måste specifisera device i kommandot.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Du hittar följande rätt hyffsade "bok" på min hemsida

http://www.ebaman.com/gallery.php?actio ... ge_id=1209
Användarvisningsbild
wombat
Inlägg: 721
Blev medlem: 6 november 2006, 16:39:08
Ort: Stockholm

Inlägg av wombat »

Sorry, läste pic for dummies tråd och tänkte att inte ens lyckas få
in koden i processorn borde väl kvalificera?
Annars får väl någon moderator dela tråden och döpa till pic for
even dumbers eller så. :D

Iallafall, självklart är device specad, allt (som skall vara)är identiskt
jämfört med när jag programmerar 12f683'an som fungerar perfekt.

Använt Microchips (device-specifika)mallfiler .asm och .lnk för att göra blinka led-program.


Hittar inget i databladen eller på google om vad som skulle vara olika i
själva programmeringsskedet.
Har nu även testat en SOT-23 med samma nedslående resultat.
Å so ploppar man dit en 12F683 igen bara för att testa, inga problem.

10F206 har ID föresten, men jag tror inte att det gör någon skillnad i detta fall.

/Wombat
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Sorry, läste pic for dummies tråd

Ja, den titeln var ju inte speciellt bra... :-)
Du borde ha startat en tråd som heter t.ex "PIC10F och XWisp", eller liknande.

Men OK, du har alltså med "device" i Xwisp kommndot ?

Och du kör XWisp (och inte XWisp2 som inte stöder 10F serien) ?

> Har nu även testat en SOT-23 med samma nedslående resultat.

Ja, det är ju bara den fysiska kapseln som skiljer.

> 10F206 har ID föresten,

12F serien har "device ID", 10F saknar det. Alltså fungerar inte "autodetect"...
Skriv svar