PIC Opg 3 Løsning: Forskelle mellem versioner

Fra HTX Arduino
Spring til navigation Spring til søgning
_htx>Bar
Oprettede siden med 'Løsning på PIC Opgave 3 - Udvidet blink Opgaven bygger videre på PIC Opgave 1 - Blink. Den går mest på at håndtere flere udgange og reagere på et input. Gen...'
 
m 1 version importeret
(Ingen forskel)

Versionen fra 15. nov. 2022, 09:09

Løsning på PIC Opgave 3 - Udvidet blink

Opgaven bygger videre på PIC Opgave 1 - Blink. Den går mest på at håndtere flere udgange og reagere på et input.

Generelt er begge løsninger lavet med den sædvanlig opstartskode til en PIC16F684, og selve funktionen realiseret i et forever loop.

Opstartskoden kan ses generelt gennemgået i

Jal-filer med løsningsforslag

Der ligger en ZIP-fil med de løsninger der er dokumenteret her.

Den grundlæggende løsning

Der sættes nogle få grundlæggende ting op

porta_direction = all_output

alias  LED1 is pin_a0
alias  LED2 is pin_a1

Da der i første omgang kun er outout, så sættes hele port a på til output, og de to lysdioder navngives.

Hele koden inde i forever-loopet skal blot sikre at de to udgange er forskellige (modtakt), og at de blinker med en fast takt. Der ser ud som følgende:

33   LED1 = LED2
34   LED2 = ! LED2
35   delay_100ms(6)

Linje 33 sætter LED1 til de niveau LED2 har og umiddelbart efter sættes LED2 til det modsatte af LED2's niveau. På denne måde sikres at de har forskelligt niveau, og at de uanset udgangsniveauet er forskellige.

Linje 35 laver et delay på 600 millisekunder, så den endelige blink-tid (on og off samlet) bliver på 1,2 sekund.

Koden ligger som .jal i denne ZIP-fil.

Den udvidede løsning

Udvidelsen går ud på at man skal kunne rette blikhastigheden til det dobbelte.

Først sættes en indgang op og den navngives kontakt ved følgende:

alias   kontakt is pin_A3
pin_A3_direction =  input

Derefter udvides den linje hvor der ventes til følgende:

35   if kontakt then
36      delay_100ms(3)
37   else
38      delay_100ms(6)
39   end if

Linje 35 tester på kontaktens niveau. Hvis det er højt (trykket på kontakten), så bliver linje 36 udført, der laver pause i 300 millisekunder. Hvis kontaktens niveau er lavt (der er ikke trykket på kontakten), så bliver linje 38 udført, der laver pause i 300 millisekunder. Resultatet er at den blinker hurtigere når der trykkes på kontakten.