Sida 2 av 3
Postat: 16 maj 2007, 11:42:09
av sodjan
Nja, det finns några försök till simulatorer där man även kan hänga
på kringutrustning.
I MPSIM får man alltså stega sitt program och verifiera att I/O-pinnarna
gör som det är *tänkt*. Sedan, när det ser ut att fungera som det ska,
så testkör man direkt i hårdvaran och så får man gå vidare därifrån...
> Då kan jag ju passa på att fråga om det inte är svårt?
Verkligen inte.
Gör ett par menyval i MPLAB och klicka på "Run" eller "Animate"...

Lägg sedan till "Breakpoints", "Watch", "Stopwatch" o.s.v efter tycke och smak.
Postat: 16 maj 2007, 11:59:39
av tusse
v-g>> " Man behöver inte läsa hundratals sidor med dokumentation för att lära assembler" det är möjligt men jag citerar Sodjan "En sak som många kör fast på, var beredd på att läsa stora mängder dokumentation (datablad) på engelska. "
Postat: 16 maj 2007, 12:11:15
av sodjan
> ..läsa stora mängder dokumentation...
Alltså, stora och stora...
Poängen med att jag skrev så där var igentligen att de är på *engelska"...
Det jag menar är att en del verkar ha problem med att
läsa igenom ens en *enstaka sida* i databladet (innan de
postar sina RTFM-frågor på forumet)...
En del tror även att man kan klara sig helt utan att öppna databladet,
vilket jag tror är att skjuta sig i foten.
Personligen tycker jag att man bör läsa/browsa/skumma igenom
databladet minst en gång, så att man känner sig "hemma" i det.
D.v.s att man sedan ganska snabbt kan hitta tillbaka till rellevanta
ställen i databladet.
En annan sak är att ca 1/3 till 1/4 av varje datablad består av en massa
elektriska specar, de kan man ta det lite lungt med i början.
Ytterligare en sak är att har man läst ett datablad så har man läst alla,
de är väldigt lika i upplägg/struktur. Det som skiljer är de skillnader
som finns mellan olika processorer. Men t.ex kapitlen om USART, ADC,
Timers o.s.v är *i princip* likadana mellan processorer (inom rimliga
gränser). De stora skillnaerna finns i "Memory Map" och registerstruktur t.ex.
Postat: 16 maj 2007, 13:36:52
av Earendil
BJ skrev:Wisp628 är nog bra. Jag har inte provat den. Men jag hade inte klarat mig långt utan Microchips icd-2. Den är dyrare, men med den kan man stoppa processorn och titta på olika register. Det är jättebra när man letar fel. Man kan se det mesta. Vilken bank man är i, vilka ben som är ingångar och så... Jag har ingen egen, men det kanske blir så småningom.
Tillägg: Det är lite problem med icd-2:arna. Det är inte alla processorer som går att köra i avlusningsläget om man t.ex. kör med den inbyggda klockan. Det problemet kan man gå förbi då genom att koppla in en yttre klockkrets tillfälligt.
Jag har med framgång använt PICkit2, som är Microchips egen in-circuit-programmerare. Har inte sett någon importör i Sverige, men man kan köpa den direkt av Microchip. Den fungerar riktigt bra och klarar även av 3.3-volts-PIC:arna (ett "nytt" påfund), vilket inte Wisp628 gör (inte för ett tag sedan i alla fall). Behöver man inte använda 3.3-voltarna så kan det nog kvitta vilken du väljer.
Postat: 16 maj 2007, 13:49:09
av Marta
Nu kanske jag har fått något om bakfoten, med 3.3V PIC är väl i nuvarande utförande bara garanterade för 100 (etthundra) flashningar? De är i så fall verkligen inget bra för oss amatörer.
Postat: 16 maj 2007, 13:49:13
av v-g
Är man erfaren kanske man kan se av namnen på registren i tex MPLAB vilken funktion de har. Jag kan en del av registrena utantill dock lång långt ifrån alla. Hur detta skiljer sig från basic vet jag inte men jag tror ändå inte basic kan "skala bort" sättandet av dessa SFR helt.
Dokumentationen till PIC är lättöverskådlig och börjar man från slutet finns klickbart register. Jag hittar nästan alltid direkt vad jag letar efter.
Hursomhelst kommer nog den dagen då man vill ansluta en ytterligare krets och dennas datablad kommer inte finnas på svenska. Vad gäller att läsa datablad är det bara att "gilla läget" som ledin sjunger (hans låt handlar dock inte om PIC vad jag vet). Det är helt enkelt en del av elektroniken.
Jag personligen gillar att läsa om den funktion jag ämnar skapa, oftast läser jag igenom hela kapitlet för att få en "humm" om hur det är tänkt att det skall fungera. Microchips datablad tycker jag också personligen är väldigt bra (även om exemplen inte alltid är så överskådliga). Svar på 8 av 10 frågor här på forumet fanns/finns i databladet vad gäller µc.
Dock går väldigt mycket tid bort väldigt fort när man kodar en liten rutin. Det är en stor nackdel

Postat: 16 maj 2007, 14:16:43
av JimmyAndersson
Jag har programmerat i ganska många olika språk. Mest i Basic, så det blev mitt val när jag börjde programmera PIC-kretsar. På senare tid har jag gått över till assembler.
Det går lätt och fort att göra kod i Basic (t.ex MikroBasic) eftersom man liksom kan skriva hela koden från början till slut utan att behöva fundera så mycket. Men: När man blivit lite varm i kläderna och vill göra stora program, t.ex styra några servon, en klocka och en display i samma program så upptäcker man efter en stund att det blir för rörigt. Även om MikroBasic innehåller många kommandon så verkar inte de vara gjorda för att göra snabba och välstrukturerade koder. Det här med att "inte behöva fundera så mycket" är helt plötsligt en stor nackdel.
I assembler är varje instruktion en liten byggsten, därför behövs inte särskillt många instruktioner. Detta innebär istället att man själv får lägga ner lite tid på att "bygga ihop rutiner" för att utföra saker. På köpet tvingas man dessutom tänka igenom hela koden innan man ens börjar knappa. Det kan kännas lite omständigt i början, men man upptäcker *väldigt* snabbt hur smidigt det är.
En liten jämförelse:
Låt säga att PORTA.0 är en ingång och PORTA.1 är en utgång. Vi vill kolla om den är "hög" (dvs har 5V). Isåfall ska koden göra så att PORTA.1 också är hög. Annars ska PORTA.2 bli hög.
Basic:
IF PORTA.0 = 1 THEN PORTA.1 = 1
ELSE
PORTA.2 = 1
END IF
Assembler:
BTFSC PORTA, 0
PORTA, 1
PORTA, 2
Redan på en sån här enkel sak ser man att assembler är mycket smidigare. Dessutom görs Basic-koden om till assembler innan man skapar en .hex-fil till PIC-kretsen. Den genererade assembler-filen är väldigt ofta mycket större och rörigare än om man skrivit det i assembler från början.
BTFSC betyder förresten Bit Test File, Skip If Clear. Dvs om PORTA, 0 är låg så körs inte den raden som står under. Smidigt!
För ett halvår sedan hade jag trott att jag skulle skriva såhär om assembler. Jag har programmerat Basic i 20 år och har alltid haft det som mitt favoritspråk. Jag har knappat lite asssembler tidigare, men inte riktigt fastnat för det. Men när jag testade att programmera PIC-kretsar i asssembler så upptäckte jag att det var perfekt för dessa små kretsar.
Däremot kommer jag fortsätta använda Basic på "vanliga" datorer, för det är ett väldigt kul språk.

Postat: 16 maj 2007, 14:28:28
av foppa
JimmyAndersson skrev:Jag har programmerat i ganska många olika språk. Mest i Basic, så det blev mitt val när jag börjde programmera PIC-kretsar. På senare tid har jag gått över till assembler.
Det går lätt och fort att göra kod i Basic (t.ex MikroBasic) eftersom man liksom kan skriva hela koden från början till slut utan att behöva fundera så mycket. Men: När man blivit lite varm i kläderna och vill göra stora program, t.ex styra några servon, en klocka och en display i samma program så upptäcker man efter en stund att det blir för rörigt. Även om MikroBasic innehåller många kommandon så verkar inte de vara gjorda för att göra snabba och välstrukturerade koder. Det här med att "inte behöva fundera så mycket" är helt plötsligt en stor nackdel.
I assembler är varje instruktion en liten byggsten, därför behövs inte särskillt många instruktioner. Detta innebär istället att man själv får lägga ner lite tid på att "bygga ihop rutiner" för att utföra saker. På köpet tvingas man dessutom tänka igenom hela koden innan man ens börjar knappa. Det kan kännas lite omständigt i början, men man upptäcker *väldigt* snabbt hur smidigt det är.
En liten jämförelse:
Låt säga att PORTA.0 är en ingång och PORTA.1 är en utgång. Vi vill kolla om den är "hög" (dvs har 5V). Isåfall ska koden göra så att PORTA.1 också är hög. Annars ska PORTA.2 bli hög.
Basic:
IF PORTA.0 = 1 THEN PORTA.1 = 1
ELSE
PORTA.2 = 1
END IF
Assembler:
BTFSC PORTA, 0
PORTA, 1
PORTA, 2
Redan på en sån här enkel sak ser man att assembler är mycket smidigare. Dessutom görs Basic-koden om till assembler innan man skapar en .hex-fil till PIC-kretsen. Den genererade assembler-filen är väldigt ofta mycket större och rörigare än om man skrivit det i assembler från början.
BTFSC betyder förresten Bit Test File, Skip If Clear. Dvs om PORTA, 0 är låg så körs inte den raden som står under. Smidigt!
För ett halvår sedan hade jag trott att jag skulle skriva såhär om assembler. Jag har programmerat Basic i 20 år och har alltid haft det som mitt favoritspråk. Jag har knappat lite asssembler tidigare, men inte riktigt fastnat för det. Men när jag testade att programmera PIC-kretsar i asssembler så upptäckte jag att det var perfekt för dessa små kretsar.
Däremot kommer jag fortsätta använda Basic på "vanliga" datorer, för det är ett väldigt kul språk.

Va är detta "Basic:
IF PORTA.0 = 1 THEN PORTA.1 = 1
ELSE
PORTA.2 = 1
END IF
det har jag syssla´t med i skolan för 20 år sen.
Hux flux så blev allt mygge roligare och lättare.
Finns ju en chans att jag kan fixa detta.
hu va glad jag blev.
foppa

Postat: 16 maj 2007, 14:35:35
av sodjan
OK, men ditt ASM exemepel fungerar inte riktigt...
Den sätter kanske RA1 hög (beror på RA0), men sätter *alltid* RA2 hög.
Något i stil med detta fungerar :
Kod: Markera allt
BTFSC PORTA, 0
BSF PORTA, 1 ; hoppas över om RA0 = "0" (Skip if Clear ovan)
BTFSS PORTA, 0
BSF PORTA, 2 ; hoppas över om RA0 = "1" (Skip if Set ovan)
Sedan behövs det mer om bara *en* av portarna ska vara hög, men
det fixade inte basic koden heller...
Finns ett litet problem om RA0 ändras *mellan* de två BTFSx instruktionena.
Då kan detta fungera bättre:
Kod: Markera allt
...
...
...
BTFSC PORTA, 0
GOTO set RA1_high
BCF PORTA, 1 ; om RA0 = "0"
BSF PORTA, 2
GOTO end_of_RA0_check
set_RA1_high
BSF PORTA, 1 ; om RA0 = "1"...
BCF PORTA, 2
end_of_RA0_check
...
...
...
Då sätts också den andra pinnen = "0"...
Deta hela beror helt på exakt vilken funktion man vill uppnå.
foppa, vad fasen citerade du nästan 50 rader för ???
Och låt dig inte luras av ett litet exempel som ser enkelt ut.
Läs vad Jimmy skrev för övrigt...
Postat: 16 maj 2007, 14:45:58
av foppa
sodjan skrev:OK, men ditt ASM exemepel fungerar inte riktigt...
Den sätter kanske RA1 hög (beror på RA0), men sätter *alltid* RA2 hög.
Något i stil med detta fungerar :
Kod: Markera allt
BTFSC PORTA, 0
BSF PORTA, 1 ; hoppas över om RA0 = "0" (Skip if Clear ovan)
BTFSS PORTA, 0
BSF PORTA, 2 ; hoppas över om RA0 = "1" (Skip if Set ovan)
Sedan behövs det mer om bara *en* av portarna ska vara hög, men
det fixade inte basic koden heller...
Finns ett litet problem om RA0 ändras *mellan* de två BTFSx instruktionena.
Då kan detta fungera bättre:
Kod: Markera allt
...
...
...
BTFSC PORTA, 0
GOTO set RA1_high
BCF PORTA, 1 ; om RA0 = "0"
BSF PORTA, 2
GOTO end_of_RA0_check
set_RA1_high
BSF PORTA, 1 ; om RA0 = "1"...
BCF PORTA, 2
end_of_RA0_check
...
...
...
Då sätts också den andra pinnen = "0"...
Deta hela beror helt på exakt vilken funktion man vill uppnå.
foppa, vad fasen citerade du nästan 50 rader för ???
Och låt dig inte luras av ett litet exempel som ser enkelt ut.
Läs vad Jimmy skrev för övrigt...
hmmm kan man göra det på olika sätt.
citera allså....förklara
foppa
Postat: 16 maj 2007, 14:57:05
av GrodanB
Det som efterfrågas av dig är att om du svarar på föregående inlägg så trycker du på "Skriv Svar". Som du ser att jag nu gjort.
Inte "Citera"
När man väl citerar kan välja att ta bort rader som INTE behövs om man vill poängtera något påstånde i tidigare inlägg så inte ditt eget blir 500 rader trots att du bidrar med 2 som handlar om 3 rader i det aktuella inlägget.
Så länge man inte ändrar innehållet i citatet kan man korta ner det. Men man bör låta allt som behövs för förståelsen vara kvar...
Code taggarna används som citat eftersom de tillåter indentering...
Postat: 16 maj 2007, 15:30:18
av sodjan
> citera allså....förklara...
GrodanB förklarade perfekt.
Jag trycker nästan aldrig på "Citera" knappen...
Postat: 16 maj 2007, 15:41:51
av BJ
sodjan skrev:Gör ett par menyval i MPLAB och klicka på "Run" eller "Animate"...
Pratar vi verkligen om samma sak nu?
Här är en bruksanvisning:
http://ww1.microchip.com/downloads/en/D ... 51519B.pdf
Det jag tittade på var "Chapter 18. Using Stimulus". Jag tycker att det sättet påminner ganska mycket om att göra insignals-filer till vhdl utan att använda modeller.
Svårt kanske det inte är, men det blir ju ganska mycket jobb.
Postat: 16 maj 2007, 15:48:43
av sodjan
> Pratar vi verkligen om samma sak nu?
*Jag* pratar om att komma igång med MPSIM...
Om *du* vill prata om att göra stimulus-filer till MPSIM, så fine, gör det...
Postat: 16 maj 2007, 15:52:23
av BJ
Okej... Jag missade väl att det var "Komma i gång med" då...
