Absolut nybörjar hjälp! C - picprogramering.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
watti
Inlägg: 403
Blev medlem: 13 oktober 2008, 15:42:35
Ort: Stockholm

Absolut nybörjar hjälp! C - picprogramering.

Inlägg av watti »

Hej sitter och leker runt lite med min nyinköpta PicKit2 (Med picen 16f690) med tillhörande demobräda som ser ut såhär:
http://pici.se/pictures/IRDqrpJyL.jpg

I alla fall har kommit en liten bit på väg här är min kod

Kod: Markera allt

#include   <pic.h> /* HI-TECH PICC C Kompilatorns egen header fil som länkar */
               /* vidare till rätt pic:s header/include-fil */

#ifndef _XTAL_FREQ
/* Om klockfrekvensen inte är definierad så gör det här */

#define _XTAL_FREQ 4000000
/* detta gör man för att kalibrera __delay_us() and __delay_ms() */
#endif

#define OUT0 RC0   /* Tala om för kompilatorn att du har ett namn eller symbol */
#define OUT1 RC1
#define OUT2 RC2
#define OUT3 RC3			              
#define OUT4 RC4
#define OUT5 RC5
#define OUT6 RC6
#define OUT7 RC7



main(void)
{

   ANSEL = 0;      /*    */
   ANSELH = 0;
	PORTC = 0;                    // Clear PortB port
	PORTA = 0;                    // Clear PortA port

	TRISC = 0;                    // All PortC I/O outputs
	TRISA = 1;                // All PortA I/O iutputs    
            


while(1)      /* Start  */
   {
    if(RA0 == 1){
	OUT0 = 0;
	OUT1 = 0;
	OUT2 = 0;
	OUT3 = 1;
	}
	else if(RA0 == 0.7){
	OUT0 = 0;
	OUT1 = 1;
	OUT2 = 1;
	OUT3 = 0;
	}
	else if(RA0 == 0.3){
	OUT0 = 0;
	OUT1 = 1;
	OUT2 = 0;
	OUT3 = 0;
	} 
	else {
	OUT0 = 1;
	OUT1 = 0;
	OUT2 = 0;
	OUT3 = 0;
	}

   } /*slut på while, börjar om*/
}
När jag vrider på Potentiometern så vill jag att den ska tända i ordningen så ställer jag in den på 0.7 Ska OUT1 och 2 tändas.. Men så blir inte fallet, Utan Poten går bara mellan 0 och 1 känns de som.

Jag har även försökt fått RC3 som de ser ut som är kopplad till knappen på demobordet att fungera utan lycka, någon som kan säga vad jag gör för fel hehe :)

Är de någon som har lust att förklara detta lite närmre? Och yes pluggade lite ASM förut, men för att inte tappa intresset så ville jag se något hända :) Därför jag leker någon timme med C nu.

//Mvh Simon
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av v-g »

Ska du använda A/D omvandlaren eller hur har du tänkt? Ser ingen kod för att starta upp den isf.

Detta är ju inte särskilt svårt i ASM precis och borde ju då vara lättare i C

Men värdet du får ur A/D omvandlaren är knappast 0-1 utan snarare 0-1023 i 10 BITS.

Nu kan jag inte C så jag kan ha missat något men jag tror att du ska ta och läsa på i relevanta kapitel.
Användarvisningsbild
hcb
Moderator
Inlägg: 5983
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av hcb »

Precis som v-g säger måste du använda AD-omvandlaren. Du har så vitt jag ser satt PORTA till digitala ingångar och inte till analoga. Dessutom kommer du aldrig läsa av flyttalsvärden (0.3, 0.7 o.s.v.) ur ADn, utan du får heltalsvärden.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av vfr »

Kolla även vad tryckknappen är kopplad till. Ledtråd: Läs på om RESET och configbitar.

Det fanns alldeles precis en annan tråd om det här. Sök och du skall finna!
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av BEEP »

Kod: Markera allt

TRISA = 1;                // All PortA I/O iutputs 
Nu vet jag inte vad "iutputs" är för något :) men 1 är ett heltal som binärt blir 00000001 i registret.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av vfr »

All data som ska till register med enskilda inställningsbitar, bör skrivas i binär form för tydligheten. Precis som BEEP säger, så blir 1 = 00000001 i binär form. Det är då mycket tydligare att ange det som B'00000001'. Man ser precis vad varje bit blir för någonting.
watti
Inlägg: 403
Blev medlem: 13 oktober 2008, 15:42:35
Ort: Stockholm

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av watti »

Aha! Tack så hjälte mycket! Blev en aning klokare.

Jag har faktiskt ingen direkt koll på vad jag ska läsa, Databladet till picen? Finns de någon bra Guide i C som någon kan rekomendera. Sitter och nöter ASM guiden som jag fick med på Skivan, Men vill leka med båda :)


// Mvh Simon
Användarvisningsbild
hcb
Moderator
Inlägg: 5983
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av hcb »

>Databladet till picen?

Absolut. Där står *allt* du behöver veta. Sedan tror jag att det, speciellt om du inte har någon erfarenhet av mikrokontrollers, är bra att börja med några enkla assemblerprogram. Dels för att du då kan följa/använda kodexemplen i databladet, dels för att det ger en bättre förståelse av vad som egentligen händer i processorn (ja, jag vet att det låter som en klyscha, men det stämmer faktiskt).

Själv har jag precis börjat med C-programmering av PIC, och jag känner mig rätt hjälpt av mina tidigare utflykter i assemblervärlden :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av sodjan »

> Databladet till picen?

Självklart har du redan läst igenom det ett par gånger, eller hur ?
I alla fall innan du börjar ställa frågor *här*. Det låter lite på din
fråga som att du har försökt slarva över det, men det slår tillbaka
skoningslöst senare. Du ska ha kollat igenom databladet innan
du skriver den första raden kod, inte allt i detalj kanske med de viktigaste
delarna (de första kapitlen om arkitektur, minne, oscillator o.s.v). De
olika delarna om Timers, ADC, SPI/I2C o.s.v tar man när det finns behov.
Och just här ser det ju ut som att du vill köra med ADC'n, så alltså ska
det kapitlet läsas och förstås *i minsta detalj*. Slarv med det kommer
bara att ge alla andra på forumet en massa onödigt arbete... :-)

Om det däremot är något i databladet som fortfarande är oklart *efter*
att du har faktiskt försökt så är det en helt annan sak, det är just det
som forum som detta är till för !

> Sitter och nöter ASM guiden som jag fick med på Skivan,

Jättebra. Se bara till att du stämmer av allt i koden mot databladet
också så att du vet vad koden gör.

> Men vill leka med båda...

Med tanke på hur din kod såg ut och hur lite du har förstått av hur det
fungerar, så hjälper det nog inte speciellt mycket att försöka med C istället.
Snarare rör du bara till det mer för. Se till att du greppar grunderna
innan du börjar fundera på vilket språk du ska köra.

Det finns ingen anledning att strula till med genom att blanda in C redan nu.
watti
Inlägg: 403
Blev medlem: 13 oktober 2008, 15:42:35
Ort: Stockholm

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av watti »

Yes yes :) Har gämfört C kod med min ASM-kod och då förstog jag ASM koden bättre bara. Appråpå så ser de ut som RA3 på kortet är emot MCLR. Om jag i stället vill koppla in en annan knapp till en egen utgång, säg RA0 i stället förstår att jag behöver ett pulldown motstånd och lite sådär, Men hur är de "rätta sättet" att koppla in en knapp, någon som har ett litet schema kanske ? :)

Mvh Simon
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av v-g »

Titta på min stapplande start här http://elektronikforumet.com/forum/view ... p?p=201394
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av sodjan »

Ja, Knappen som sitter på kortet är kopplad till MCLR (d.v.s "reset" på processorn).
Man kan via konfigurering (__CONFIG) ställa om denna pinne till att bli en digital
ingång och kallas då RA3. Detta får nog dock anses vara lite överkurs just nu.
Låt den befintliga knappen bara vara "reset" och koppla in en egen istället.

> säg RA0 i stället förstår att jag behöver ett pulldown motstånd och lite sådär,

Av olika orsaker (som också är lite överkurs just nu) så är det vanligare och
bättre att använda pull-up (du kommer också oftare att hitta "pull-up" på nätet
och i olika dokumentation än "pull-down") och låta knappen kortsluta till GND.

> någon som har ett litet schema kanske ?

Världens enklaste schema... :-)

Knappen mellan pinnen och GND.
Ett pull-up motstånd (säg 10 kohm) mellan samma pinne och 5V.

*Eller* koppla på intern pull-up ("WPU" i databladet) om den aktuella pinnen stöder det.
I så fall blir det bara en knapp mellan pinnen och GND...
watti
Inlägg: 403
Blev medlem: 13 oktober 2008, 15:42:35
Ort: Stockholm

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av watti »

Tack!.. En liten sak bara :) Så slipper jag löda flera gånger, har 4knappar här, vilka portar börj jag koppla in de andra 3 till RA0, RA1,RA2 RA4 ?

//MVH Simon

Edit: löste sig :)
Senast redigerad av watti 6 augusti 2009, 16:20:03, redigerad totalt 1 gång.
Användarvisningsbild
hcb
Moderator
Inlägg: 5983
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av hcb »

Varför inte? Det enda du bör kolla är att de pinnar du använder för knappar inte är sådana som du vill använd till annat. Resten löser du i mjukvaran.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Absolut nybörjar hjälp! C - picprogramering.

Inlägg av vfr »

Det är helt beroende på vad du skall ha övriga pinnar till. Man brukar först tilldela dom pinnar som är "hårdkodade", så att säga. D.v.s behöver du en UART, så blir ju UART-pinnarna upptagna. Generella I/O-pinnar för t.ex tryckknappar, LED:ar etc tar man sist eftersom dom ofta kan sitta var som helst.

Just tyckknappar passar rätt bra på PORTB eftersom den har intern pullup som man kan slå på, precis som Sodjan säger.
Skriv svar