P12F629 + mikroPascal

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
unzuf
Inlägg: 166
Blev medlem: 1 februari 2005, 18:07:08

P12F629 + mikroPascal

Inlägg av unzuf »

Hej!

Är oerhört intresserad av elektronik och
programmering av PICs. Problemet är att
jag inte riktigt vet hur.. blir förvirrad av allt
man läser.. :?

Låt oss säga att jag har två knappar och
en LED som jag kopplar till processorn,
och att LED:en ska tända sig när båda
knapparna är nedtryckta. Hur gör jag det?

Hur vet jag vart jag ska koppla LED:en/knapparna o.s.v
på processorns pins, och därefter skicka rätt signal
till rätt pin (där LED:en sitter)?

Ett exempel i mikroPascal-kod skulle sitta
mycket fint, men är tacksam för alla svar.

Det följde med ett exempel till mikroPascal som
visar hur man får en LED att blinka (detta är till
P12F675):

Kod: Markera allt

program led_blinking;

begin
  TRISIO := 0;          // configure pins of gpio as output
  repeat               // beginning of a repeat loop
    begin
      GPIO := $FF;    // turn ON diodes on gpio
      delay_ms(1000);  // wait for 1 second
      GPIO := 0;      // turn OFF diodes on gpio
      delay_ms(1000);  // wait for 1 second
    end;
  until 0 = 1;         // endless loop (as this condition is never satisfied)
end.
Det jag inte riktigt fattar är det där med TRISIO och GPIO..

Kod: Markera allt

TRISIO := 0;          // configure pins of gpio as output
"Configure pins of GPIO as output"?? Vadå? Blir alla
pins output-pins då eller? Hur gör jag för att
få bara en specifik pin till output?

Ursäkta om denna frågan är alltför dum, men jag
vet inte vart jag annars ska vända mig.. :cry:

Tack!
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

TRISIO och GPIO är register i processorn som gör olika saker.

GPIO är själva utporten som används, och TRISIO används för att ställa in om porten i fråga ska fungera som ingång eller utgång.

Registren är olika för olika processorer, så man måste kolla i databladet hur de olika registren fungerar.
Användarvisningsbild
unzuf
Inlägg: 166
Blev medlem: 1 februari 2005, 18:07:08

Inlägg av unzuf »

Aha okej.. men som t.ex i mikroPascal, så verkar
det ju inte gå att välja vilken utgång man ska
gå ut på? Konstigt... nån som vet?
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

GPIO är ett register, där varje bit motsvarar en pinne. (jag antar att du vet vad bit/byte).

Om du skriver till GPIO (t.ex. GPIO := $FF) så ändrar du vad som finns på de pinnar som är utgångar. I det här fallet bli alla pinnar '1'.

Om du läser från GPIO (en_variabel := GPIO) så läser du av vad som ligger på alla pinnarna.

TRISIO är ett register där varje bit bestämmer om motsvarande pinne ska vara ingång eller utgång. T.ex. om du gör TRISIO := 1 så blir GP0 en ingång och alla andra pinnar utgångar.
Användarvisningsbild
unzuf
Inlägg: 166
Blev medlem: 1 februari 2005, 18:07:08

Inlägg av unzuf »

okej.. tackar!

snackade med en polare och han sa
"kan det inte va typ såhär!?":

Kod: Markera allt

program MyProject;

var
   secs         : byte;
   
label start;
label inp_chk;
label timer_loop;
label secs_reached;
label stop_timer;
     
begin
     start:
     secs := 0;
     
     inp_chk:
     If TestBit(GPIO,0) = 1 then // kolla om start-knapp är nedtryckt
     begin // ja, starta timern
          timer_loop:
          If TestBit(GPIO,1) = 1 then // kolla om stopp-knapp är nedtryckt
          goto stop_timer; // ja, hoppa till stop_timer
          
          Inc(secs);
          
          If (secs = 10) then // kolla om det gått 10 sekunder
          goto secs_reached; // ja, hoppa till secs_reached
          
          goto timer_loop; // loopa timer
     end else goto inp_chk;
     
     secs_reached: // 10 sekunder har gått
     SetBit(GPIO,2); // tänd LED
     Delay_ms(5000);
     ClearBit(GPIO,2); // släck LED
     goto start;
     
     stop_timer: // timern stoppad
     goto start;
end.
eftersom jag inte kan nåt så frågar jag nu..: kan man göra såhär? :P[/code]


Edit: Och detta skulle va till en PIC 12F629 sa han..
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Jag har aldrig använt mikropascal (inte pascal alls på tio år), men om den koden är korrekt och gör vad den ser ut att göra så funkar det nog säkert.

Fast du behöver också ställa in vilka pinnar som är in och utgångar.

Typ

ClearBit(TRISIO,2); // gör GP2 till utgång
SetBit(TRISIO,0); // gör GP0 till ingång
Användarvisningsbild
unzuf
Inlägg: 166
Blev medlem: 1 februari 2005, 18:07:08

Inlägg av unzuf »

Okej.. tack så mycket!

Någon som vet om koden jag skickade
funkar?? Tacksam för svar :)
Användarvisningsbild
lgrfbs
Inlägg: 7311
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Inlägg av lgrfbs »

Varför inte köra debugen i mikropascal och inpektera de variabler som ska hålla data så att rätt data är i variblerna? :wink:
Skriv svar