PIC Opg 3 Løsning: Forskelle mellem versioner
_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...' |
Bar (diskussion | bidrag) 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.