pic16f84a - Behöver något exempel [en till fråga]

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

pic16f84a - Behöver något exempel [en till fråga]

Inlägg av Selpix »

OK nu har jag lärt mig att använda picen för att blinka lite med lysdioder och sånt. :)

Men jag kom att tänka på, hur gör jag om jag tex vill koppla in en knapp till picen och när den sluts så ska en lysdiod tändas i 5 sek och sen slockna?

Och om jag vill göra tvärtom dvs om en anslutning till picen bryts så ska en led tändas i 5sek?
:roll:


Edit: Ny fråga längst ner
Senast redigerad av Selpix 3 juni 2004, 13:48:19, redigerad totalt 1 gång.
Användarvisningsbild
Xyzzy
Inlägg: 1260
Blev medlem: 30 januari 2004, 22:31:07
Ort: Uppsala, Sweden

Inlägg av Xyzzy »

Vilket språk använder du? (asambler, picbasic, C/C++...?
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

Inlägg av Selpix »

Aa det kan vara bra att nämna också :D

Jag använder picbasic
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Principen är sådan att du alltid har en programloop som ska loopa så ofta som möjligt. I loopen lägger du en if-sats som kollar vilket läge I/O-pinnen knappen är kopplad till står i. Via if-satsen hoppar du sedan till en rutin som utför det du önskar. När den utfört det du önskar hoppar den tillbaks till den eviga loopen...

Glasklart? :D

Kod: Markera allt

       +--[10k]------[5V]
       |
[I/O]--+--[knapp]----[GND]
Så bör du koppla in knappen. När den trycks ner ska den leda jorden till PICens önskade I/O-pinne. När den inte trycks ned ska den dras hög av ett motstånd på några kOhm (ta vad du har så länge det är kOhm :wink: ).

Edit:
Ahh, PICBasic!
kodexempel!

Kod: Markera allt

knapp var portb.0
input knapp

main_loop:

if knapp = 0 then knapp_tryckt

'Fyll ut med annat här vid behov

goto main_loop


knapp_tryckt:

'Hitta på något att göra när knappen trycks ner

goto main_loop

end
Så är det bara att fylla ut...
portb.0 kan naturligtvis bytas mot vilken pinne du vill!
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

Inlägg av Selpix »

Aha ok, jag tror jag fattar vad du menar :)

Men hur ser koden ut för att kolla vilket läge som pinnen är i ?

Är det typ:

Kod: Markera allt

check:

If portb.0 = 1 then
goto blabla..
else 
goto check
end if

EDIT: Okej jag var inte helt borta iaf :D
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

Ny fråga!

Inlägg av Selpix »

Okej här kommer jag med en ny fråga:

Är det möjligt att köra 2st labels samtidigt?

Alltså vi säger att jag vill ha en "timer" som blinkar en led i en viss takt och sen vill jag ha en annan som blinkar en annan led i en helt annan takt. De ska alltså inte bero av varandra.

Går det , eller kan man lösa på något annat sätt?


"ps, ni som använt vb så är det samma funktion som de timers man använder där som jag är ute efter" :)
Pjoms
EF Sponsor
Inlägg: 644
Blev medlem: 24 maj 2004, 12:18:40
Ort: Ö-vik

Inlägg av Pjoms »

Det är inte helt enkelt att göra flera saker samtidigt med en PIC, men det går.

Det finns timers man kan använda. Dom funderar så att dom räknar upp ett steg för varje programsteg som körs (eller varannat, var fjärde eller något av de andra fasta valmöjligheter som finns).

Dom är dock inte helt busenkla att använda, så kan man undvika dom så gör man gärna det...
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

Inlägg av Selpix »

Hm okej.

Men det måste ju finnas andra som stött på samma problem, eller de kanske har löst det på det svåra sättet då?

Hur som hellst tack för hjälpen :)
toxic
Inlägg: 85
Blev medlem: 27 februari 2004, 01:20:57

Inlägg av toxic »

Nja. Det blir inte så farligt svårt. Det är bara att använda en timer, och i program-loopen kolla hur lång tid sedan det var varje diod släcktes eller tändes(med hjälp av timern). När en viss tid har utlöpt, tänds eller släcks dioden.
Användarvisningsbild
zus
Inlägg: 198
Blev medlem: 14 december 2003, 11:34:08
Ort: Göteborg

Inlägg av zus »

Om du inte vill använda timers och interrupt (vilket du egentligen borde) kan du ju ha olika räknare som du räknar upp olika fort och tänder/släcker dioderna då räknarvariabeln slår över/blir full....blir egentligen samma sak som timers och interrupt men ineffektivare och krångligare....
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

Inlägg av Selpix »

Okej :)

Finns det några bra kodexempel på det som man kan studera lite?

Om timers/interrupts alltså
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Interrupt gör du inte gärna i PICBasic. Då måste nästan använda assembler för att det ska bli bra. Såå, bara att börja läsa asm. Det står hur timers fungerar i databladen för respektive mikrokontroller.
Användarvisningsbild
Selpix
Inlägg: 161
Blev medlem: 14 mars 2004, 15:54:17
Ort: Huddinge

Inlägg av Selpix »

Hehe ok, då är det bara att börja lära sig assembler då :D
Skriv svar