PicKit 2 - läromaterial?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
KA50
Inlägg: 14
Blev medlem: 19 oktober 2011, 11:51:57

Re: PicKit 2

Inlägg av KA50 »

sodjan skrev: ......
Projektet som är "öppet" är förmodligen bara något default, för jag bara öppnar programmet, och då står det "Untitled workspace", och sen kör jag Project wizard.

Jag skapade ett nytt projekt och kopierade in koden från en lesson(allt förrutom det som var bortkommenterat med ; ).

Kompileringen fungerar när jag kör direkt från en lesson, så jag har förmodligen något syntaxfel. Jag upptäckte att jag har missat ett kolon efter "start" i koden som jag skrev ovan. Det är nog detta som ställer till det.

Om jag har förstått det hela rätt så kan jag skriva koden i C om jag använder HI-TECH kompilatorn?

Jag skall testa mig fram med C och se vart jag hamnar ;-)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

OK.
Kontentan är alltså att du måste vara mycket tydligare när du beskriver det du gör och
vad som händer. Vi har ingen kristallkula här som talar om för oss det som du utelämnar.

Är följande korrekt uppfattat :

- Att öppna ett befinligt projekt i "lessons" går helt OK inkl "build" och programmering av labb-kortet ?
- Du har problem med att skapa ett *eget* projekt från scratch ?

I så fall är det ju ett helt annat och klarare läge.
Har du kollat min guide till att skapa ett nytt projekt ?

> Jag skapade ett nytt projekt och kopierade in koden från en lesson

Koden som du visat var felformatterad. Hur har du "kopierat"? Nu så fick du aldrig några
fel eftersom du aldrig körde någon Build på det och assembleringen alltså aldrig gjordes.

> Jag skall testa mig fram med C och se vart jag hamnar

Det är bara en skillnad i "språk" på koden. Du kommer inte att komma mycket längre
om du inte förstår hur verktygen fungerar.

Innan du gör något alls annat så borde du se till att du till fullo förstår i alla fall 3-4 st
av de exempel som ingår i "lessons". D.v.s *hela* koden och exakt hur programmen
fungerar. De är bara på några tiotal rader.

> Jodå vill du programmera i C så kan du redan hälften

Det är en kraftig och felaktig förenkling. Att få kod på en mikrokontroller att fungera
har mer med att förstå hur en mikrocontroller fungerar än att kunna det ena eller
det andra språket. Att försöka med C *enbart* för att man inte får enkla testprogram
att fungera är att lura sig själv.

> Jag upptäckte att jag har missat ett kolon efter "start" i koden som jag skrev ovan. Det är nog detta som ställer till det.

Nej, det är det inte, kolon behövs inte efter "labels". Det fungerar dock även med kolon om
tycker att det ser bättre ut så. Men som koden ser för övrigt ut så kan den aldrig fungera.

Här är en fungerande variant av samma kod.

Kod: Markera allt

#include <p16F690.inc>
  __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF)
    org 0
Start
    BSF STATUS,RP0
    BCF TRISC,0
    BCF STATUS,RP0
    BSF PORTC,0
    GOTO $
    end
Sen så borde det skrivas ("snyggare" och använder banksel):

Kod: Markera allt


#include <p16F690.inc>

  __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF)

    org         0

Start
    banksel     trisc
    bcf         trisc,0
    banksel     portc
    bsf         portc,0

loop
    goto        loop

    end
Personligen föredrar jag att köra med "Disable case sensitivity" i Build Options för projektet.
KA50
Inlägg: 14
Blev medlem: 19 oktober 2011, 11:51:57

Re: PicKit 2 - läromaterial?

Inlägg av KA50 »

Jag var ganska förvirrad när jag skapade tråden, så frågorna var kanske lite flummiga.

Jag har iallafall fått det att fungera nu. Jag bytte språk från assembler till C, och det underlättade förståelsen en del.
Jag har dock ett problem kvar. Jag kan inte få min input från en strömbrytare att fungera. Jag har kopplat in den såhär:
Bild

Och här är min kod:

Kod: Markera allt

#define Main_Loop for(;;)
#define BUTTON RA1
#define LED1 PORTC.B0
#define LED2 PORTC.B1
#define LED3 PORTC.B2
#define LED4 PORTC.B3
void main() {
     const int del = 10;
    ANSEL = ANSELH = 0;
    PORTC = 0;
    TRISC = 0;
    TRISA = 1;
    Main_Loop{
    if(BUTTON){
    
    delay_ms(del);
    LED3 = 0;
    delay_ms(del);
    LED1 = 1;
    delay_ms(del);
    LED4 = 0;
    delay_ms(del);
    LED2 = 1;
    delay_ms(del);
    LED1 = 0;
    delay_ms(del);
    LED3 = 1;
    delay_ms(del);
    LED2 = 0;
    delay_ms(del);
    LED4 = 1;


}
      }
      }
Jag har inte "debounceat" knappen.
Jag kan inte komma på vad som är fel. Några idéer? Skall jag definiera BUTTON till något annat?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

> #define BUTTON RA1
> #define LED1 PORTC.B0

Fungerar båda varanterna så som du vill ?

> PORTC = 0;
> TRISC = 0;
> TRISA = 1;

Det är tydligare att sätta dessa register binärt.

Ser den genererade assembler koden vettig ut ?
Det är ett bra sätt att felsöka så här pass små program.
KA50
Inlägg: 14
Blev medlem: 19 oktober 2011, 11:51:57

Re: PicKit 2 - läromaterial?

Inlägg av KA50 »

Jag hoppade över till MicroC PRO, jag tyckte att denna IDE var bättre att jobba med, och den översätter direkt till hex-kod vad jag har förstått.

Mina LEDs fungerar.
#define LED1 PORTC.B0 är alltså okej.

När villkoret är

Kod: Markera allt

if(BUTTON){ }
så blinkar lamporna, och när jag skriver

Kod: Markera allt

if(!BUTTON){ }
så blinkar de inte, även om jag trycker på knappen.

Jag misstänker att felet ligger där jag definierar BUTTON:
#define BUTTON RA1

Kan man göra på något annat sätt?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

> Kan man göra på något annat sätt?

Varför *inte* på samma sätt som med LEDx ??
KA50
Inlägg: 14
Blev medlem: 19 oktober 2011, 11:51:57

Re: PicKit 2 - läromaterial?

Inlägg av KA50 »

Tack, nu fungerar det.

Det verkar som om jag inte kan använda pin A1, för när jag skrev:
#define BUTTON PORTA.B1
Och satte strömbrytaren i A1, så fungerade det inte, men när jag skrev:
#define BUTTON PORTA.B2
Och satte strömbrytaren i A2, så fungerade det.

A1 fungerar fortfarande inte när jag bytar tillbaks.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

Varför inte skriva "#define BUTTON PORTA.A1" ??

Nu så är väl antagligen A1 = B1, men det ser ju jäkligt
förvillande ut...

RA1 är även ICSPCLK, jag vet inte om det stör...
KA50
Inlägg: 14
Blev medlem: 19 oktober 2011, 11:51:57

Re: PicKit 2 - läromaterial?

Inlägg av KA50 »

Jag testade att skriva
#define BUTTON PORTA.A2
Men då gick det inte att kompilera programmet. Kompilatorn visste inte vad .A2 var för någonting, men .B2 gick bra.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

Jaha, ja OK då... :-)
Hur som helst, dokumentationen borde ha svaret på det.

Kanske att B1 betyder "Bit 1" inte "pinne RB1". :-)
Niklas-k
Inlägg: 354
Blev medlem: 10 mars 2004, 15:59:21
Ort: Katrineholm

Re: PicKit 2 - läromaterial?

Inlägg av Niklas-k »

Har du provat if(BUTTON=0){ }.

Betyder inte "if(!BUTTON){ }" om BUTTON är just nu 1'a så skall den hoppa in när den blir 0'a. Men när du trycker på button så den blir 0'a förväntas en 1'a. Då kommer villkoret aldrig kunna bli uppfylld.
sneaky
Inlägg: 1621
Blev medlem: 22 juni 2009, 18:38:42

Re: PicKit 2 - läromaterial?

Inlägg av sneaky »

TRISA = 1; omskrivet blir det TRISA = 0b00000001; vilket betyder att RA0 blir input. Eller är jag helt ute och cyklar igen?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

Varför inte skriva från början så att man slipper gissa ?
sneaky
Inlägg: 1621
Blev medlem: 22 juni 2009, 18:38:42

Re: PicKit 2 - läromaterial?

Inlägg av sneaky »

Jag skriver binärt själv normalt sett. Jag reagerade på koden som TS hade skrivit där det verkar som om han tror att "TRISA = 1" leder till att RA1 blir satt som input (eftersom det är den han testar). Jag ville bara peka på att det var en tankevurpa.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PicKit 2 - läromaterial?

Inlägg av sodjan »

Korrekt, det är lätt att glömma bort pinne "noll"... :-)
Skriv svar