Lite funderingar om programeing av PIC (nybörjare)

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
sMkr
Inlägg: 67
Blev medlem: 30 maj 2005, 17:11:59
Ort: Göteborg

Lite funderingar om programeing av PIC (nybörjare)

Inlägg av sMkr »

Sitter här med en PIC-16F627 som jag har labbat lite med, men nu vill jag skapa mina egna små program.
Jag har läst i data-bladet om de 35 olika instruktionerna men tycker inte att jag får tillräcklig information om vad varje instruktion gör.

Finns det någon bra bok för oss nybörjare för att lära sig lite mera om dessa trevliga små kretsar?

Har programerat med i andra språk så helt bakom är jag inte :)
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

http://www.mikroelektronika.co.yu/engli ... 0_Uvod.htm

Så när du skrivit några asm-program kommer du på att det är C du vill ha :wink:
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det är nog inget större fel på beskrivningarna i sig, de beskriver exakt vad varje instruktion gör, så det måste vara något annat mer grundläggande som du inte förstår (än).

Kan du inte vara lite mer konkret och ge ett exempel på något som är oklart, så får vi se ?

Du bör även ladda hem "Complete Mid-Range Reference Manual" :
http://ww1.microchip.com/downloads/en/D ... 33023a.pdf

Kolla speciellt sektionerna 1-9 som är grundläggande info, och sektion 29 som är en genomgång av instruktionerna. Sektion 29 liknar den förteckning med instruktioner som finns i databladen, men utförligare och med flera exemepl till varje instruktion. Istället för upp till 4 instruktioner per sida (som i databladen) har varje instruktion minst en hel sida.

De övriga sektionena i ref manualen tar upp varje "peripherial" för sig, och kan läsas vid behov.

Men, som sagt, ge ett exempel på något som ör oklart, så får vi se. Antagligen är den något generellt som är oklart, och reder vi ut det, så klarnar antagligen mycket annat också...
Användarvisningsbild
sMkr
Inlägg: 67
Blev medlem: 30 maj 2005, 17:11:59
Ort: Göteborg

Inlägg av sMkr »

Det jag behöver lära mig är väl grunderna i hur man skriver asembler och vad de olika instruktionerna gör, gärna exempel på instruktionerna så man ser hur det fungerar i "praktiken".

För mig liknar koden mera ett script som "rullar", och snappar upp information på vägen som sesan bearbetas (?).



det jag försöker få i hop just nu är ett larm, för skoj skull och för att lära mig.
larmet består av 3 input och 4 output
input 1: sätter larmet i stanby/off
input 2: sätter larmet i aktivt läge
input 3: triggar larmet (blinkar och piper)

output 1: är hög när larmet är i stanby
output 2: pulserar (ca 0.5hz) när larmet är aktiverat
output 3: pulserar (ca 2hz) när larmet är triggat
output 4: är hög när larmet är triggat

när larmet är triggat skall bara input 1 kunna ta mot input.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Exempel till varje instruktion för sig finns både i databladet och (bättre och flera) i den ref manual jag pekade på. Har du laddat ner den och kollat ?

> För mig liknar koden mera ett script som "rullar", och snappar upp information på vägen som sedan bearbetas (?).

Jaha, och vad är det som är konstigt med det ? :-)

Du sa ju att du hade programmerat förr, så detta är väll ganska självklart.
Alla språk (utom en del udda språk som Lisp, APL, och liknande) fungerar så. De tar ett steg i taget, gör något och går vidare. Med avbrott då och då för lite "hopp" och liknande. Interrupt stökar till det lite extra, men principen är fortfarande densamma.

Din beskrivning av larmet är väll OK. Nu är det bara att bryta ner det i detaljer, d.v.s steg för steg vad som skall hända. Du måste också bestämma sådant som t.ex :

- Dina tre "input", är dom aktivt höga eller låga ?
Vad "matar" dom ? behöver du pullup/pulldown ?

- Skall output 1 driva något speciellt ? En LED ?

- Skall output 2 driva något t.ex en LED ?

- Output 3 är väll någon "signal" ?
Notera att det finns "buzzers" som låter med en fast spänning pålagd.
Så man behöver inte själv generera en signal.
Inte för att det är något problem...

- Output 4, är det också en LED ?

- Vilken oscillator konfig ska du köra med ?
Har du krav på noggranna tider ?

Du behöver/ska naturligtsvis inte svara här, men det är några exemepl på frågor som du måste ta ställning till under designen.

Du skulle kunna leta reda på någon färdig ASM kod för 627 eller 628 (är det verkligen inte 627A du har förresten ? 627 är lite utgången och mindre vanlig i dag) och utgå från det.
Användarvisningsbild
sMkr
Inlägg: 67
Blev medlem: 30 maj 2005, 17:11:59
Ort: Göteborg

Inlägg av sMkr »

Tack för alla svar, nu har många bitar fallit på plats :)
Ja jag tankade ner den PDFen som du länkade till, den var mycket bra.
Jag har givetvis svar på frågorna du ställt men ansåg dom som oviktiga för stunden, drivning av relän osv. löser jag utan problem.

Nu till en fråga som jag tror att ni utan problem kan svara på :)

i min kod har jag en rad som ser ut så här
SW3 EQU H'02'
Knapp nr3 "knyts" till register 2 (eller hur? :) )

senare i programmet vill jag att knapp nr3 skall bli bort kopplad (skall inte kunna påverka programmet) för att vid ett senare tillfälle anslutas till sin ursprungliga uppgift igen.

Försökte med detta genom att skriva in detta
SW3 EQU H'05' (antar att 05 inte används)
vilket kompilatorn inte gillade :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> SW3 EQU H'02'
> Knapp nr3 "knyts" till register 2 ?

Nej !

Du skapar en symbol i assemblern kallad "SW3" med värdet h'02'.
Det enda assemblern vet är att det nu finns en symbol
som heter "SW3" och som har värdet h'02'. Inget annat.

Asemeblern har igen anning om vad *du* anser att
"SW3" eller h'02' betyder !!

> SW3 EQU H'05'...
> vilket kompilatorn inte gillade

Korrekt, du kan inte omdefiniera symboler. Ej tillåtetet.
Igen, assemblern har igen aning om att du kopplar
ihop h'02' och h'05' med addresser i minner. De har
absolut inget med varandra att göra. (Om du vill
ändra symbolers värde dynamiskt, kolla SET.)

Detta är ett mycket vanligt missförstånd, eftersom EQU
ofta används till att skapa symboler som senare används
där man skall ange en minnesadresser, men det är bara
för att symbolerna just i det fallet råkar användas så.

EQU reserverar/allokerar INTE minnesadresser !!

RES används för att allokera minne "på riktigt", men för
att använda RES behöver du köra 1 "rellocatable mode".
Se gärna : http://www.jescab.se/Rellocmode.html

Sen vet jag inte vad du mener med att "Knapp nr3 "knyts" till register 2" ?
Kan du förtydliga lite ?

Om du menar riktiga knappar som man kan trycka på (och inte
en variabel som håller en knapps senate läge eller så), så
kopplas de fysiska knapparna till lämpliga PORTx bitar, d.v.s
där de är anslutna.
Användarvisningsbild
sMkr
Inlägg: 67
Blev medlem: 30 maj 2005, 17:11:59
Ort: Göteborg

Inlägg av sMkr »

Har fått kläm på det mesta nu, har hoppat mellan flera PDFer och min larm.asm och helt plötsligt öppnade det sig en helt ny värld, och allting verkade så självklart :D

MEN, en liten sak kvarstår.
När man trycker på en knapp så stannar programmet tills man släpper på knappen igen (fysisk knapp som man trycker på med fingrarna).

kanske dumt att fråga om det går att programmera sig förbi detta problem, för det gör det säkert.
Men vilket är enklast, att bygga en extern krets som sköter detta eller programmera det?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> När man trycker på en knapp så stannar programmet...

Nja, en PIC "stannar" aldrig. Den kan fastna i en programloop på något sätt, men det beror ju helt på den som har skrivit programmet ! :-)

> Men vilket är enklast, att bygga en extern krets som sköter detta eller programmera det?

Absolut enklast måste väll vara att hitta felet i ditt program !?

Prova att köra det i MPSIM i MPLAB och simulera dina knappar, så ser du vart det "tar vägen".
Skriv svar