Första program PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Första program PIC

Inlägg av Lullen »

Så nu har jag gjort mitt första c program. Men jag skulle behöva någon som kollar igenom det, jag får inga fel när jag kompilerar men jag känner mig ganska osäker på detta.

Programmet är skrivet i mikroC och koden kan laddas ner här, anledningen till att det är 2filer är för att jag har inte riktiga versionen av mikroC
Tack på förhand
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Det enda jag egentligen har synpunkt på är väl formateringen av koden, men annars ser det spontant bra ut. Har inte kollat särskilt noga dock.
Underligt bara att den inte klagar då det inte finns en enda "include", men allt kanske är integrerat i kompilatorn, jag har ingen aning.

Och PWM:en lär nog generera blinkningar snarare än "PWM". 2 sek cykel är väl inte av den vanligare ordningen. :)
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Inlägg av Lullen »

läsningen av 1-wire sensorerna är kopierat från ett exempel som följer med kompilatorn och där fanns det inte heller någon include så jag antar oxo att det är integrerat. Och cykeln ska vara 2 sek så det är inge problem, är ett relä som ska styras :)

Det som jag känner mig osäkrast på är att skicka över signalen till pic nr2. men eftersom du säger att det verkar se bra ut så får jag börja göra kretskortet (första gången jag gör det från scratch :D)
Användarvisningsbild
digitaliz
Inlägg: 278
Blev medlem: 10 oktober 2003, 21:27:38
Ort: Stockholm, Sverige

Inlägg av digitaliz »

Ett temperaturregleringsprogram i en fil som heter Brännare.rar... :D

Hur ska kommunikationen mellan dina PIC:ar funka?

Kod: Markera allt

PORTC.F1 = CO;            //skriv CO på pin RC1
Bara RC1, en bit...?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> PORTC.F1 = CO; //skriv CO på pin RC1

Ganska värdelös kommentar, för övrigt, det står ju samma sak
i själva instruktionen. Skriv kommenterar som *tillför* något istället...

> Det som jag känner mig osäkrast på är att skicka över signalen till pic nr2.

Vad är det som är osäkert ?
Ovh varför är det *två* processorer ??

> så får jag börja göra kretskortet

Är inte det lite väl tidigt... ?
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Inlägg av Lullen »

kommentarerna kanske är ganska värdelösa för er, men för hjälper de mig att komma ihåg, faktiskt. och det som är osäkert är att jag känner att jag har inte så stor koll på detta. Har dock sett andra som gjort så som jag gjort så det borde vara ok.

som jag skrev i första posten så har jag inte riktiga versionen av mikroC, jag kan lägga till max en rad kod, kanske två men så tight är det iaf.

digitaliz: "Bara RC1, en bit...?" va menar du? om det är som jag tror så behöver den bara vara en bit då värdet är mellan 0-100
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> men för hjälper de mig att komma ihåg,

Konstigt, för kommentaren sa ju bara samma sak som instruktionen.
Jag tror att med en vettig kommentar så hade det varit uppenbart
vad du gör för fel (även om jag tror jag vet redan).

> Har dock sett andra som gjort så som jag gjort så...

Men tala om vad "så" är för något !
Vad är det du *tror* att du gör ?

Som jag sa tidigare. Skriv en vettig kommentar så blir det kanske
klarare var du gör en tankevurpa.
Jag har en ganska klar bild över var du tänker fel, men som sagt,
jag tänker inte gissa.

> om det är som jag tror så behöver den bara vara en bit då värdet är mellan 0-100

*En* bit kan bara ha värder "0" eller "1".
För värden upp till 100 (decimalt) behöver du minst 6 bitar...
Så RC1 kan enbart vara "0" eller "1", ingenting annat.
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Inlägg av Lullen »

oj tänkte byte istället för bit men det hjälper mig att komma ihåg vad kommandot gör, som att skriva loopa 5ggr till for(i=0,i<5,i++)

det jag vill göra med kommandot är att sätta pinen till ett värde(%) som jag räknat ut i pic1 och kunna läsa av pinvärdet på pic1 från pic2

förövrigt så respekterar jag att du inte vill sitta och gissa, har full förståelse för det så jag ursäktar och hoppas denna information hjälper.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Om du vill sätta pinnen till ett relativt värde (%) får du nog läsa Sodjans kommentar och databladet minst en gång till.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> det jag vill göra med kommandot är att sätta pinen till ett värde...

Visst, inget problem.
Och pinnen kan sättas till *två* olika värden, "1" eller "0" (hög/låg, high/low), inget annat.

Jag *gissar* att du tror att du kan skicka ut alla bitarna från
en hel byte så som du gör, men då får du nog läsa på lite till... :-)
Användarvisningsbild
Ulf
Inlägg: 399
Blev medlem: 15 februari 2006, 14:04:03

Inlägg av Ulf »

Som Sodjan riktigt påpekar så säger koden exakt vad du gör.
En bättre kommentar är att beskriva vad den biten på porten gör. Tex tänd lampan.

Ett bra sätt är att skriva kommentarerna först och sedan infoga ocheller ersätta med kod (ruskigt exemplariskt). En lärare jag hade sa att "Koden ska vara som att läsa en bok", dvs betydelsefulla och förklarande variabel- och funktions-namn samt en lättläst strutur. Och kom ihåg att den ska inte bara vara lättläst den närmaste månaden. Oftast kommer detta efter hand men man måste ändå alltid tänka på det.

Sen finns det ett gammalt arv (var det Kobol eller Fortran tro) där räknarna fick ha namnen i,j,k,... , detta har blivit defaktostandard idag. Om det sedan är bra är en annan femma... .

Och visst är det trevligt att läsa gammal kod som är uniform rätt i genom en fredags kväll framför brasan...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kobol ?? :-)
Common Business Oriented Language, alltså COBOL (med stora bokstäver !).
COBOL har inga default typer, all data måste deklareras i "DATA DIVISION."

I Fortran (Formula Translation, med stort F och resten små bokstäver) är alla
variabler som börjar på I, J, K, L, M, N eller $ är default INTEGER, alla andra
variabler är default REAL. Om man inte deklarerar dom annolrlunda, så klart.
Detta går att överrida med IMPLICIT, där man kan tala om att variabler
som börjar med angivet/angivna tecken är av en viss "typ". Bäst och tydligast
är at explicit deklarera alla variabler, så är man inte bunden till att olika
typer måste börja p en viss bokstav. Om man även gör "IMPLICIT NONE"
så får man kompileringsfel för "otypade" variabler...

Men visst är det ett arv härifrån som gör att man ofta kallar loop-räknare
för I, J o.s.v istället för t.ex A, B o.s.v.... :-)

EDIT : En fatal förväxling av gemen/versaler rättat...
Senast redigerad av sodjan 12 november 2007, 17:26:16, redigerad totalt 1 gång.
Användarvisningsbild
jojje
Gått bort
Inlägg: 6380
Blev medlem: 20 januari 2006, 01:53:33
Ort: Stockholms utkant
Kontakt:

Inlägg av jojje »

Nämen sodjan då, vad menar du med detta?

Du skriver:
Common Business Oriented Language, alltså COBOL (med stora bokstäver !).

Men i nästa rad skriver du iaf med både stora å små bokstäver, hmm...
Cobol har inga default typer...

Skäms på dig din lilla rackare. :roll: :D
Lullen
Inlägg: 140
Blev medlem: 16 oktober 2006, 17:37:32

Inlägg av Lullen »

har suttit och funderat ett och kommit fram till att det borde inte vara så svårt att hitta någon med den riktiga versionen av mikroC(kanske till och med finns här) så jag satte igång och ändrade programmet för att bara använda en pic istället. När jag ändå höll på och ändra så la jag även till en lcd som visar tempen, CO samt vilket stadie programmet är i.

här är länk
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Någon speciell anledning att lägga koden just *där* ?
Sen fanns det ingen fråga i inlägget så varför ska jag ladda ner koden ?

Slutligen, förstår du nu vad som är feltänkt med "PORTC.F1 = CO;" ?
Skriv svar